From 373a3bdd0654613aa0ec1fd5b6b3676bb52eacbb Mon Sep 17 00:00:00 2001 From: rainy liu Date: Thu, 23 May 2024 23:36:52 +0800 Subject: [PATCH 01/10] add svm,traindata from ml, not finished --- CMakeLists.txt | 2 +- conanfile.py | 2 +- ffigen.yaml | 6 + lib/src/ml/svm.dart | 77 + lib/src/ml/train_data.dart | 71 + lib/src/opencv.g.dart | 3614 ++++++++++++++++++++++++++---------- src/ml/ml.cpp | 1 + src/ml/ml.h | 29 + src/ml/svm.cpp | 49 + src/ml/svm.h | 98 + src/ml/train_data.cpp | 275 +++ src/ml/train_data.h | 85 + 12 files changed, 3369 insertions(+), 940 deletions(-) create mode 100644 lib/src/ml/svm.dart create mode 100644 lib/src/ml/train_data.dart create mode 100644 src/ml/ml.cpp create mode 100644 src/ml/ml.h create mode 100644 src/ml/svm.cpp create mode 100644 src/ml/svm.h create mode 100644 src/ml/train_data.cpp create mode 100644 src/ml/train_data.h diff --git a/CMakeLists.txt b/CMakeLists.txt index af4f17c1..95d26f81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(OpenCV_LIBS opencv_aruco opencv_core opencv_calib3d opencv_dnn opencv_highgui opencv_features2d opencv_gapi opencv_photo opencv_imgproc opencv_objdetect opencv_video opencv_videoio opencv_stitching - opencv_img_hash opencv_wechat_qrcode + opencv_img_hash opencv_wechat_qrcode opencv_ml ) if(ANDROID) diff --git a/conanfile.py b/conanfile.py index 02eacb2d..bc22d7b1 100644 --- a/conanfile.py +++ b/conanfile.py @@ -7,7 +7,7 @@ from pathlib import Path import yaml -OPENCV_VERSION = "4.9.0+2" +OPENCV_VERSION = "4.9.0+3" OPENCV_FILES_URL = ( f"https://github.com/rainyl/opencv.full/releases/download/{OPENCV_VERSION}" ) diff --git a/ffigen.yaml b/ffigen.yaml index 565fa215..fd505338 100644 --- a/ffigen.yaml +++ b/ffigen.yaml @@ -29,6 +29,9 @@ headers: - src/highgui/highgui.h - src/imgcodecs/imgcodecs.h - src/imgproc/imgproc.h + - src/ml/ml.h + - src/ml/train_data.h + - src/ml/svm.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h @@ -50,6 +53,9 @@ headers: - src/highgui/highgui.h - src/imgcodecs/imgcodecs.h - src/imgproc/imgproc.h + - src/ml/ml.h + - src/ml/train_data.h + - src/ml/svm.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h diff --git a/lib/src/ml/svm.dart b/lib/src/ml/svm.dart new file mode 100644 index 00000000..4bfed03d --- /dev/null +++ b/lib/src/ml/svm.dart @@ -0,0 +1,77 @@ +// ignore_for_file: constant_identifier_names + +library cv; + +import 'dart:ffi' as ffi; + +import 'package:ffi/ffi.dart'; + +import '../core/base.dart'; +import '../core/mat.dart'; +import '../core/vec.dart'; +import '../opencv.g.dart' as cvg; + +/// Support Vector Machines. +/// https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html#ab4b93a4c42bbe213ffd9fb3832c6c44f +class SVM extends CvStruct { + SVM._(cvg.PtrSVMPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory SVM() { + throw UnimplementedError(); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.SVM_Close); + + cvg.SVM get svm { + final s = calloc(); + cvRun(() => CFFI.SVM_Get(ref, s)); + return s.ref; + } + + @override + List get props => [ptr.address]; + + @override + cvg.PtrSVM get ref => ptr.ref; + + static const int KERNEL_CUSTOM = -1; + static const int KERNEL_LINEAR = 0; + static const int KERNEL_POLY = 1; + static const int KERNEL_RBF = 2; + static const int KERNEL_SIGMOID = 3; + static const int KERNEL_CHI2 = 4; + static const int KERNEL_INTER = 5; + + static const int PARAM_C = 0; + static const int PARAM_GAMMA = 1; + static const int PARAM_P = 2; + static const int PARAM_NU = 3; + static const int PARAM_COEF = 4; + static const int PARAM_DEGREE = 5; + + // SVM type + /// C-Support Vector Classification. n-class classification (n \f$\geq\f$ 2), allows + /// imperfect separation of classes with penalty multiplier C for outliers. + static const int C_SVC = 100; + + /// \f$\nu\f$-Support Vector Classification. n-class classification with possible + /// imperfect separation. Parameter \f$\nu\f$ (in the range 0..1, the larger the value, the smoother + /// the decision boundary) is used instead of C. + static const int NU_SVC = 101; + + /// Distribution Estimation (One-class %SVM). All the training data are from + /// the same class, %SVM builds a boundary that separates the class from the rest of the feature + /// space. + static const int ONE_CLASS = 102; + + /// \f$\epsilon\f$-Support Vector Regression. The distance between feature vectors + /// from the training set and the fitting hyper-plane must be less than p. For outliers the + /// penalty multiplier C is used. + static const int EPS_SVR = 103; + + //// \f$\nu\f$-Support Vector Regression. \f$\nu\f$ is used instead of p. + /// See @cite LibSVM for details. + static const int NU_SVR = 104; +} diff --git a/lib/src/ml/train_data.dart b/lib/src/ml/train_data.dart new file mode 100644 index 00000000..6dd91e0c --- /dev/null +++ b/lib/src/ml/train_data.dart @@ -0,0 +1,71 @@ +// ignore_for_file: constant_identifier_names + +library cv; + +import 'dart:ffi' as ffi; + +import 'package:ffi/ffi.dart'; + +import '../core/base.dart'; +import '../core/mat.dart'; +import '../core/vec.dart'; +import '../opencv.g.dart' as cvg; + +class TrainData extends CvStruct { + TrainData._(cvg.PtrTrainDataPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory TrainData( + InputArray samples, + int layout, + InputArray responses, { + InputArray? varIdx, + InputArray? sampleIdx, + InputArray? sampleWeights, + InputArray? varType, + }) { + final p = calloc(); + varIdx ??= Mat.empty(); + sampleIdx ??= Mat.empty(); + sampleWeights ??= Mat.empty(); + varType ??= Mat.empty(); + cvRun(() => CFFI.TrainData_Create(samples.ref, layout, responses.ref, varIdx!.ref, + sampleIdx!.ref, sampleWeights!.ref, varType!.ref, p)); + return TrainData._(p); + } + + factory TrainData.fromCsv( + String filename, + int headerLineCount, { + int responseStartIdx = -1, + int responseEndIdx = -1, + String varTypeSpec = "", + String delimiter = ',', + String missch = '?', + }) { + throw UnimplementedError(); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.TrainData_Close); + + cvg.TrainData get traindata { + final s = calloc(); + cvRun(() => CFFI.TrainData_Get(ptr, s)); + return s.ref; + } + + int getCatCount(int vi) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetCatCount(traindata, vi, p)); + return p.value; + }); + } + + @override + List get props => [ptr.address]; + + @override + cvg.PtrTrainData get ref => ptr.ref; +} diff --git a/lib/src/opencv.g.dart b/lib/src/opencv.g.dart index 994b1c1e..6985fec4 100644 --- a/lib/src/opencv.g.dart +++ b/lib/src/opencv.g.dart @@ -11824,6 +11824,106 @@ class CvNative { late final _Ones = _OnesPtr.asFunction)>(); + void ParamGrid_Close( + ffi.Pointer self, + ) { + return _ParamGrid_Close( + self, + ); + } + + late final _ParamGrid_ClosePtr = + _lookup)>>( + 'ParamGrid_Close'); + late final _ParamGrid_Close = _ParamGrid_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus ParamGrid_Empty( + ffi.Pointer rval, + ) { + return _ParamGrid_Empty( + rval, + ); + } + + late final _ParamGrid_EmptyPtr = + _lookup)>>( + 'ParamGrid_Empty'); + late final _ParamGrid_Empty = _ParamGrid_EmptyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus ParamGrid_GetLogStep( + ParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_GetLogStep( + self, + rval, + ); + } + + late final _ParamGrid_GetLogStepPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ParamGrid, ffi.Pointer)>>('ParamGrid_GetLogStep'); + late final _ParamGrid_GetLogStep = _ParamGrid_GetLogStepPtr.asFunction< + CvStatus Function(ParamGrid, ffi.Pointer)>(); + + CvStatus ParamGrid_GetMaxVal( + ParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_GetMaxVal( + self, + rval, + ); + } + + late final _ParamGrid_GetMaxValPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ParamGrid, ffi.Pointer)>>('ParamGrid_GetMaxVal'); + late final _ParamGrid_GetMaxVal = _ParamGrid_GetMaxValPtr.asFunction< + CvStatus Function(ParamGrid, ffi.Pointer)>(); + + CvStatus ParamGrid_New( + double minVal, + double maxVal, + double logstep, + ffi.Pointer rval, + ) { + return _ParamGrid_New( + minVal, + maxVal, + logstep, + rval, + ); + } + + late final _ParamGrid_NewPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Double, ffi.Double, ffi.Double, + ffi.Pointer)>>('ParamGrid_New'); + late final _ParamGrid_New = _ParamGrid_NewPtr.asFunction< + CvStatus Function(double, double, double, ffi.Pointer)>(); + + CvStatus ParamGrid_getMinVal( + ParamGrid self, + ffi.Pointer rval, + ) { + return _ParamGrid_getMinVal( + self, + rval, + ); + } + + late final _ParamGrid_getMinValPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ParamGrid, ffi.Pointer)>>('ParamGrid_getMinVal'); + late final _ParamGrid_getMinVal = _ParamGrid_getMinValPtr.asFunction< + CvStatus Function(ParamGrid, ffi.Pointer)>(); + CvStatus PencilSketch( Mat src, Mat dst1, @@ -12682,597 +12782,1395 @@ class CvNative { late final _SVD_Compute = _SVD_ComputePtr.asFunction(); - CvStatus Scharr( - Mat src, - Mat dst, - int dDepth, - int dx, - int dy, - double scale, - double delta, - int borderType, + CvStatus SVM_CalcError( + SVM self, + PtrTrainData data, + bool test, + Mat resp, + ffi.Pointer rval, ) { - return _Scharr( - src, - dst, - dDepth, - dx, - dy, - scale, - delta, - borderType, + return _SVM_CalcError( + self, + data, + test, + resp, + rval, ); } - late final _ScharrPtr = _lookup< + late final _SVM_CalcErrorPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double, - ffi.Double, ffi.Int)>>('Scharr'); - late final _Scharr = _ScharrPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, double, double, int)>(); + CvStatus Function(SVM, PtrTrainData, ffi.Bool, Mat, + ffi.Pointer)>>('SVM_CalcError'); + late final _SVM_CalcError = _SVM_CalcErrorPtr.asFunction< + CvStatus Function( + SVM, PtrTrainData, bool, Mat, ffi.Pointer)>(); - CvStatus SeamlessClone( - Mat src, - Mat dst, - Mat mask, - Point p, - Mat blend, - int flags, + CvStatus SVM_Clear( + SVM self, ) { - return _SeamlessClone( - src, - dst, - mask, - p, - blend, - flags, + return _SVM_Clear( + self, ); } - late final _SeamlessClonePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, Point, Mat, ffi.Int)>>('SeamlessClone'); - late final _SeamlessClone = _SeamlessClonePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, Mat, int)>(); + late final _SVM_ClearPtr = + _lookup>('SVM_Clear'); + late final _SVM_Clear = _SVM_ClearPtr.asFunction(); - CvStatus SepFilter2D( - Mat src, - Mat dst, - int ddepth, - Mat kernelX, - Mat kernelY, - Point anchor, - double delta, - int borderType, + void SVM_Close( + ffi.Pointer self, ) { - return _SepFilter2D( - src, - dst, - ddepth, - kernelX, - kernelY, - anchor, - delta, - borderType, + return _SVM_Close( + self, ); } - late final _SepFilter2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, Mat, Mat, Point, ffi.Double, - ffi.Int)>>('SepFilter2D'); - late final _SepFilter2D = _SepFilter2DPtr.asFunction< - CvStatus Function(Mat, Mat, int, Mat, Mat, Point, double, int)>(); + late final _SVM_ClosePtr = + _lookup)>>( + 'SVM_Close'); + late final _SVM_Close = + _SVM_ClosePtr.asFunction)>(); - CvStatus SetNumThreads( - int n, + CvStatus SVM_Create( + ffi.Pointer rval, ) { - return _SetNumThreads( - n, + return _SVM_Create( + rval, ); } - late final _SetNumThreadsPtr = - _lookup>('SetNumThreads'); - late final _SetNumThreads = - _SetNumThreadsPtr.asFunction(); + late final _SVM_CreatePtr = + _lookup)>>( + 'SVM_Create'); + late final _SVM_Create = + _SVM_CreatePtr.asFunction)>(); - CvStatus SetRNGSeed( - int seed, + CvStatus SVM_Empty( + SVM self, + ffi.Pointer rval, ) { - return _SetRNGSeed( - seed, + return _SVM_Empty( + self, + rval, ); } - late final _SetRNGSeedPtr = - _lookup>('SetRNGSeed'); - late final _SetRNGSeed = _SetRNGSeedPtr.asFunction(); + late final _SVM_EmptyPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_Empty'); + late final _SVM_Empty = + _SVM_EmptyPtr.asFunction)>(); - CvStatus SimpleBlobDetectorParams_Create( - ffi.Pointer rval, + CvStatus SVM_Get( + PtrSVM self, + ffi.Pointer rval, ) { - return _SimpleBlobDetectorParams_Create( + return _SVM_Get( + self, rval, ); } - late final _SimpleBlobDetectorParams_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'SimpleBlobDetectorParams_Create'); - late final _SimpleBlobDetectorParams_Create = - _SimpleBlobDetectorParams_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _SVM_GetPtr = + _lookup)>>( + 'SVM_Get'); + late final _SVM_Get = + _SVM_GetPtr.asFunction)>(); - void SimpleBlobDetector_Close( - ffi.Pointer b, + CvStatus SVM_GetC( + SVM self, + ffi.Pointer rval, ) { - return _SimpleBlobDetector_Close( - b, + return _SVM_GetC( + self, + rval, ); } - late final _SimpleBlobDetector_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'SimpleBlobDetector_Close'); - late final _SimpleBlobDetector_Close = _SimpleBlobDetector_ClosePtr - .asFunction)>(); + late final _SVM_GetCPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetC'); + late final _SVM_GetC = _SVM_GetCPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus SimpleBlobDetector_Create( - ffi.Pointer rval, + CvStatus SVM_GetClassWeights( + SVM self, + ffi.Pointer rval, ) { - return _SimpleBlobDetector_Create( + return _SVM_GetClassWeights( + self, rval, ); } - late final _SimpleBlobDetector_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'SimpleBlobDetector_Create'); - late final _SimpleBlobDetector_Create = _SimpleBlobDetector_CreatePtr - .asFunction)>(); + late final _SVM_GetClassWeightsPtr = + _lookup)>>( + 'SVM_GetClassWeights'); + late final _SVM_GetClassWeights = _SVM_GetClassWeightsPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus SimpleBlobDetector_Create_WithParams( - SimpleBlobDetectorParams params, - ffi.Pointer rval, + CvStatus SVM_GetCoef0( + SVM self, + ffi.Pointer rval, ) { - return _SimpleBlobDetector_Create_WithParams( - params, + return _SVM_GetCoef0( + self, rval, ); } - late final _SimpleBlobDetector_Create_WithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - SimpleBlobDetectorParams, ffi.Pointer)>>( - 'SimpleBlobDetector_Create_WithParams'); - late final _SimpleBlobDetector_Create_WithParams = - _SimpleBlobDetector_Create_WithParamsPtr.asFunction< - CvStatus Function( - SimpleBlobDetectorParams, ffi.Pointer)>(); + late final _SVM_GetCoef0Ptr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetCoef0'); + late final _SVM_GetCoef0 = _SVM_GetCoef0Ptr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus SimpleBlobDetector_Detect( - SimpleBlobDetector b, - Mat src, - ffi.Pointer rval, + CvStatus SVM_GetDecisionFunction( + SVM self, + int i, + Mat alpha, + Mat svidx, + ffi.Pointer rval, ) { - return _SimpleBlobDetector_Detect( - b, - src, + return _SVM_GetDecisionFunction( + self, + i, + alpha, + svidx, rval, ); } - late final _SimpleBlobDetector_DetectPtr = _lookup< + late final _SVM_GetDecisionFunctionPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SimpleBlobDetector, Mat, - ffi.Pointer)>>('SimpleBlobDetector_Detect'); - late final _SimpleBlobDetector_Detect = - _SimpleBlobDetector_DetectPtr.asFunction< - CvStatus Function( - SimpleBlobDetector, Mat, ffi.Pointer)>(); + CvStatus Function(SVM, ffi.Int, Mat, Mat, + ffi.Pointer)>>('SVM_GetDecisionFunction'); + late final _SVM_GetDecisionFunction = _SVM_GetDecisionFunctionPtr.asFunction< + CvStatus Function(SVM, int, Mat, Mat, ffi.Pointer)>(); - CvStatus Sobel( - Mat src, - Mat dst, - int ddepth, - int dx, - int dy, - int ksize, - double scale, - double delta, - int borderType, + CvStatus SVM_GetDefaultGrid( + SVM self, + ffi.Pointer rval, ) { - return _Sobel( - src, - dst, - ddepth, - dx, - dy, - ksize, - scale, - delta, - borderType, + return _SVM_GetDefaultGrid( + self, + rval, ); } - late final _SobelPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Double, ffi.Double, ffi.Int)>>('Sobel'); - late final _Sobel = _SobelPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, int, double, double, int)>(); + late final _SVM_GetDefaultGridPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetDefaultGrid'); + late final _SVM_GetDefaultGrid = _SVM_GetDefaultGridPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus SpatialGradient( - Mat src, - Mat dx, - Mat dy, - int ksize, - int borderType, + CvStatus SVM_GetDefaultGridPtr( + SVM self, + ffi.Pointer rval, ) { - return _SpatialGradient( - src, - dx, - dy, - ksize, - borderType, + return _SVM_GetDefaultGridPtr1( + self, + rval, ); } - late final _SpatialGradientPtr = _lookup< + late final _SVM_GetDefaultGridPtrPtr = _lookup< ffi - .NativeFunction>( - 'SpatialGradient'); - late final _SpatialGradient = _SpatialGradientPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, int)>(); - - CvStatus SqBoxFilter( - Mat src, - Mat dst, - int ddepth, - Size ps, - ) { - return _SqBoxFilter( - src, - dst, - ddepth, - ps, - ); - } - - late final _SqBoxFilterPtr = - _lookup>( - 'SqBoxFilter'); - late final _SqBoxFilter = - _SqBoxFilterPtr.asFunction(); + .NativeFunction)>>( + 'SVM_GetDefaultGridPtr'); + late final _SVM_GetDefaultGridPtr1 = _SVM_GetDefaultGridPtrPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - void Stitcher_Close( - ffi.Pointer stitcher, + CvStatus SVM_GetDefaultName( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_Close( - stitcher, + return _SVM_GetDefaultName( + self, + rval, ); } - late final _Stitcher_ClosePtr = - _lookup)>>( - 'Stitcher_Close'); - late final _Stitcher_Close = - _Stitcher_ClosePtr.asFunction)>(); + late final _SVM_GetDefaultNamePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetDefaultName'); + late final _SVM_GetDefaultName = _SVM_GetDefaultNamePtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_Component( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_GetDegree( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_Component( + return _SVM_GetDegree( self, rval, ); } - late final _Stitcher_ComponentPtr = _lookup< - ffi.NativeFunction)>>( - 'Stitcher_Component'); - late final _Stitcher_Component = _Stitcher_ComponentPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _SVM_GetDegreePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetDegree'); + late final _SVM_GetDegree = _SVM_GetDegreePtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_ComposePanorama( - Stitcher self, - Mat rpano, - ffi.Pointer rval, + CvStatus SVM_GetGamma( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_ComposePanorama( + return _SVM_GetGamma( self, - rpano, rval, ); } - late final _Stitcher_ComposePanoramaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, Mat, - ffi.Pointer)>>('Stitcher_ComposePanorama'); - late final _Stitcher_ComposePanorama = _Stitcher_ComposePanoramaPtr - .asFunction)>(); + late final _SVM_GetGammaPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetGamma'); + late final _SVM_GetGamma = _SVM_GetGammaPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_ComposePanorama_1( - Stitcher self, - VecMat mats, - Mat rpano, + CvStatus SVM_GetKernelType( + SVM self, ffi.Pointer rval, ) { - return _Stitcher_ComposePanorama_1( + return _SVM_GetKernelType( self, - mats, - rpano, rval, ); } - late final _Stitcher_ComposePanorama_1Ptr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, Mat, - ffi.Pointer)>>('Stitcher_ComposePanorama_1'); - late final _Stitcher_ComposePanorama_1 = - _Stitcher_ComposePanorama_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + late final _SVM_GetKernelTypePtr = + _lookup)>>( + 'SVM_GetKernelType'); + late final _SVM_GetKernelType = _SVM_GetKernelTypePtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_Create( - int mode, - ffi.Pointer rval, + CvStatus SVM_GetNu( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_Create( - mode, + return _SVM_GetNu( + self, rval, ); } - late final _Stitcher_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Pointer)>>('Stitcher_Create'); - late final _Stitcher_Create = _Stitcher_CreatePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + late final _SVM_GetNuPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetNu'); + late final _SVM_GetNu = _SVM_GetNuPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_EstimateTransform( - Stitcher self, - VecMat mats, - VecMat masks, - ffi.Pointer rval, + CvStatus SVM_GetP( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_EstimateTransform( + return _SVM_GetP( self, - mats, - masks, rval, ); } - late final _Stitcher_EstimateTransformPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, - ffi.Pointer)>>('Stitcher_EstimateTransform'); - late final _Stitcher_EstimateTransform = - _Stitcher_EstimateTransformPtr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, ffi.Pointer)>(); + late final _SVM_GetPPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetP'); + late final _SVM_GetP = _SVM_GetPPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_Get( - PtrStitcher self, - ffi.Pointer rval, + CvStatus SVM_GetSupportVectors( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_Get( + return _SVM_GetSupportVectors( self, rval, ); } - late final _Stitcher_GetPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - PtrStitcher, ffi.Pointer)>>('Stitcher_Get'); - late final _Stitcher_Get = _Stitcher_GetPtr.asFunction< - CvStatus Function(PtrStitcher, ffi.Pointer)>(); + late final _SVM_GetSupportVectorsPtr = + _lookup)>>( + 'SVM_GetSupportVectors'); + late final _SVM_GetSupportVectors = _SVM_GetSupportVectorsPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetCompositingResol( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_GetTermCriteria( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_GetCompositingResol( + return _SVM_GetTermCriteria( self, rval, ); } - late final _Stitcher_GetCompositingResolPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetCompositingResol'); - late final _Stitcher_GetCompositingResol = _Stitcher_GetCompositingResolPtr - .asFunction)>(); + late final _SVM_GetTermCriteriaPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVM_GetTermCriteria'); + late final _SVM_GetTermCriteria = _SVM_GetTermCriteriaPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetInterpolationFlags( - Stitcher self, + CvStatus SVM_GetType( + SVM self, ffi.Pointer rval, ) { - return _Stitcher_GetInterpolationFlags( + return _SVM_GetType( self, rval, ); } - late final _Stitcher_GetInterpolationFlagsPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetInterpolationFlags'); - late final _Stitcher_GetInterpolationFlags = - _Stitcher_GetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _SVM_GetTypePtr = + _lookup)>>( + 'SVM_GetType'); + late final _SVM_GetType = _SVM_GetTypePtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetPanoConfidenceThresh( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_GetUncompressedSupportVectors( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_GetPanoConfidenceThresh( + return _SVM_GetUncompressedSupportVectors( self, rval, ); } - late final _Stitcher_GetPanoConfidenceThreshPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetPanoConfidenceThresh'); - late final _Stitcher_GetPanoConfidenceThresh = - _Stitcher_GetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _SVM_GetUncompressedSupportVectorsPtr = + _lookup)>>( + 'SVM_GetUncompressedSupportVectors'); + late final _SVM_GetUncompressedSupportVectors = + _SVM_GetUncompressedSupportVectorsPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetRegistrationResol( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_GetVarCount( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_GetRegistrationResol( + return _SVM_GetVarCount( self, rval, ); } - late final _Stitcher_GetRegistrationResolPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetRegistrationResol'); - late final _Stitcher_GetRegistrationResol = _Stitcher_GetRegistrationResolPtr - .asFunction)>(); + late final _SVM_GetVarCountPtr = + _lookup)>>( + 'SVM_GetVarCount'); + late final _SVM_GetVarCount = _SVM_GetVarCountPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetSeamEstimationResol( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_IsClassifier( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_GetSeamEstimationResol( + return _SVM_IsClassifier( self, rval, ); } - late final _Stitcher_GetSeamEstimationResolPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Stitcher, - ffi.Pointer)>>('Stitcher_GetSeamEstimationResol'); - late final _Stitcher_GetSeamEstimationResol = - _Stitcher_GetSeamEstimationResolPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + late final _SVM_IsClassifierPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_IsClassifier'); + late final _SVM_IsClassifier = _SVM_IsClassifierPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetWaveCorrectKind( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_IsTrained( + SVM self, + ffi.Pointer rval, ) { - return _Stitcher_GetWaveCorrectKind( + return _SVM_IsTrained( self, rval, ); } - late final _Stitcher_GetWaveCorrectKindPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrectKind'); - late final _Stitcher_GetWaveCorrectKind = _Stitcher_GetWaveCorrectKindPtr - .asFunction)>(); + late final _SVM_IsTrainedPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_IsTrained'); + late final _SVM_IsTrained = _SVM_IsTrainedPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer)>(); - CvStatus Stitcher_GetWaveCorrection( - Stitcher self, - ffi.Pointer rval, + CvStatus SVM_Load( + SVM self, + ffi.Pointer filepath, ) { - return _Stitcher_GetWaveCorrection( + return _SVM_Load( self, - rval, + filepath, ); } - late final _Stitcher_GetWaveCorrectionPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrection'); - late final _Stitcher_GetWaveCorrection = _Stitcher_GetWaveCorrectionPtr - .asFunction)>(); + late final _SVM_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_Load'); + late final _SVM_Load = + _SVM_LoadPtr.asFunction)>(); - CvStatus Stitcher_SetCompositingResol( - Stitcher self, - double inval, + CvStatus SVM_LoadFromString( + SVM self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Stitcher_SetCompositingResol( + return _SVM_LoadFromString( self, - inval, + strModel, + objname, ); } - late final _Stitcher_SetCompositingResolPtr = - _lookup>( - 'Stitcher_SetCompositingResol'); - late final _Stitcher_SetCompositingResol = _Stitcher_SetCompositingResolPtr - .asFunction(); + late final _SVM_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SVM, ffi.Pointer, + ffi.Pointer)>>('SVM_LoadFromString'); + late final _SVM_LoadFromString = _SVM_LoadFromStringPtr.asFunction< + CvStatus Function(SVM, ffi.Pointer, ffi.Pointer)>(); - CvStatus Stitcher_SetInterpolationFlags( - Stitcher self, - int inval, + CvStatus SVM_Predict( + SVM self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _Stitcher_SetInterpolationFlags( + return _SVM_Predict( self, - inval, + samples, + results, + flags, + rval, ); } - late final _Stitcher_SetInterpolationFlagsPtr = - _lookup>( - 'Stitcher_SetInterpolationFlags'); - late final _Stitcher_SetInterpolationFlags = - _Stitcher_SetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, int)>(); + late final _SVM_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVM, Mat, Mat, ffi.Int, ffi.Pointer)>>('SVM_Predict'); + late final _SVM_Predict = _SVM_PredictPtr.asFunction< + CvStatus Function(SVM, Mat, Mat, int, ffi.Pointer)>(); - CvStatus Stitcher_SetPanoConfidenceThresh( - Stitcher self, - double inval, + CvStatus SVM_Save( + SVM self, + ffi.Pointer filename, ) { - return _Stitcher_SetPanoConfidenceThresh( + return _SVM_Save( self, - inval, + filename, ); } - late final _Stitcher_SetPanoConfidenceThreshPtr = - _lookup>( - 'Stitcher_SetPanoConfidenceThresh'); - late final _Stitcher_SetPanoConfidenceThresh = - _Stitcher_SetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, double)>(); + late final _SVM_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_Save'); + late final _SVM_Save = + _SVM_SavePtr.asFunction)>(); - CvStatus Stitcher_SetRegistrationResol( - Stitcher self, - double inval, + CvStatus SVM_SetC( + SVM self, + double val, ) { - return _Stitcher_SetRegistrationResol( + return _SVM_SetC( self, - inval, + val, ); } - late final _Stitcher_SetRegistrationResolPtr = - _lookup>( - 'Stitcher_SetRegistrationResol'); - late final _Stitcher_SetRegistrationResol = _Stitcher_SetRegistrationResolPtr - .asFunction(); + late final _SVM_SetCPtr = + _lookup>( + 'SVM_SetC'); + late final _SVM_SetC = + _SVM_SetCPtr.asFunction(); - CvStatus Stitcher_SetSeamEstimationResol( - Stitcher self, - double inval, + CvStatus SVM_SetClassWeights( + SVM self, + Mat val, ) { - return _Stitcher_SetSeamEstimationResol( + return _SVM_SetClassWeights( self, - inval, + val, + ); + } + + late final _SVM_SetClassWeightsPtr = + _lookup>( + 'SVM_SetClassWeights'); + late final _SVM_SetClassWeights = + _SVM_SetClassWeightsPtr.asFunction(); + + CvStatus SVM_SetCoef0( + SVM self, + double val, + ) { + return _SVM_SetCoef0( + self, + val, + ); + } + + late final _SVM_SetCoef0Ptr = + _lookup>( + 'SVM_SetCoef0'); + late final _SVM_SetCoef0 = + _SVM_SetCoef0Ptr.asFunction(); + + CvStatus SVM_SetDegree( + SVM self, + double val, + ) { + return _SVM_SetDegree( + self, + val, + ); + } + + late final _SVM_SetDegreePtr = + _lookup>( + 'SVM_SetDegree'); + late final _SVM_SetDegree = + _SVM_SetDegreePtr.asFunction(); + + CvStatus SVM_SetGamma( + SVM self, + double val, + ) { + return _SVM_SetGamma( + self, + val, + ); + } + + late final _SVM_SetGammaPtr = + _lookup>( + 'SVM_SetGamma'); + late final _SVM_SetGamma = + _SVM_SetGammaPtr.asFunction(); + + CvStatus SVM_SetKernel( + SVM self, + int kernelType, + ) { + return _SVM_SetKernel( + self, + kernelType, + ); + } + + late final _SVM_SetKernelPtr = + _lookup>( + 'SVM_SetKernel'); + late final _SVM_SetKernel = + _SVM_SetKernelPtr.asFunction(); + + CvStatus SVM_SetNu( + SVM self, + double val, + ) { + return _SVM_SetNu( + self, + val, + ); + } + + late final _SVM_SetNuPtr = + _lookup>( + 'SVM_SetNu'); + late final _SVM_SetNu = + _SVM_SetNuPtr.asFunction(); + + CvStatus SVM_SetP( + SVM self, + double val, + ) { + return _SVM_SetP( + self, + val, + ); + } + + late final _SVM_SetPPtr = + _lookup>( + 'SVM_SetP'); + late final _SVM_SetP = + _SVM_SetPPtr.asFunction(); + + CvStatus SVM_SetTermCriteria( + SVM self, + TermCriteria val, + ) { + return _SVM_SetTermCriteria( + self, + val, + ); + } + + late final _SVM_SetTermCriteriaPtr = + _lookup>( + 'SVM_SetTermCriteria'); + late final _SVM_SetTermCriteria = _SVM_SetTermCriteriaPtr.asFunction< + CvStatus Function(SVM, TermCriteria)>(); + + CvStatus SVM_SetType( + SVM self, + int val, + ) { + return _SVM_SetType( + self, + val, + ); + } + + late final _SVM_SetTypePtr = + _lookup>( + 'SVM_SetType'); + late final _SVM_SetType = + _SVM_SetTypePtr.asFunction(); + + CvStatus SVM_Train( + SVM self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _SVM_Train( + self, + trainData, + flags, + rval, + ); + } + + late final _SVM_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVM, PtrTrainData, ffi.Int, ffi.Pointer)>>('SVM_Train'); + late final _SVM_Train = _SVM_TrainPtr.asFunction< + CvStatus Function(SVM, PtrTrainData, int, ffi.Pointer)>(); + + CvStatus SVM_TrainAuto( + SVM self, + PtrTrainData data, + int kFold, + ParamGrid Cgrid, + ParamGrid gammaGrid, + ParamGrid pGrid, + ParamGrid nuGrid, + ParamGrid coeffGrid, + ParamGrid degreeGrid, + bool balanced, + ffi.Pointer rval, + ) { + return _SVM_TrainAuto( + self, + data, + kFold, + Cgrid, + gammaGrid, + pGrid, + nuGrid, + coeffGrid, + degreeGrid, + balanced, + rval, + ); + } + + late final _SVM_TrainAutoPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVM, + PtrTrainData, + ffi.Int, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ffi.Bool, + ffi.Pointer)>>('SVM_TrainAuto'); + late final _SVM_TrainAuto = _SVM_TrainAutoPtr.asFunction< + CvStatus Function(SVM, PtrTrainData, int, ParamGrid, ParamGrid, ParamGrid, + ParamGrid, ParamGrid, ParamGrid, bool, ffi.Pointer)>(); + + CvStatus SVM_TrainAuto_1( + SVM self, + Mat samples, + int layout, + Mat responses, + int kFold, + PtrParamGrid Cgrid, + ParamGrid gammaGrid, + ParamGrid pGrid, + ParamGrid nuGrid, + ParamGrid coeffGrid, + ParamGrid degreeGrid, + bool balanced, + ffi.Pointer rval, + ) { + return _SVM_TrainAuto_1( + self, + samples, + layout, + responses, + kFold, + Cgrid, + gammaGrid, + pGrid, + nuGrid, + coeffGrid, + degreeGrid, + balanced, + rval, + ); + } + + late final _SVM_TrainAuto_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVM, + Mat, + ffi.Int, + Mat, + ffi.Int, + PtrParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ffi.Bool, + ffi.Pointer)>>('SVM_TrainAuto_1'); + late final _SVM_TrainAuto_1 = _SVM_TrainAuto_1Ptr.asFunction< + CvStatus Function( + SVM, + Mat, + int, + Mat, + int, + PtrParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + ParamGrid, + bool, + ffi.Pointer)>(); + + CvStatus SVM_Train_1( + SVM self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, + ) { + return _SVM_Train_1( + self, + samples, + layout, + responses, + rval, + ); + } + + late final _SVM_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVM, Mat, ffi.Int, Mat, ffi.Pointer)>>('SVM_Train_1'); + late final _SVM_Train_1 = _SVM_Train_1Ptr.asFunction< + CvStatus Function(SVM, Mat, int, Mat, ffi.Pointer)>(); + + CvStatus Scharr( + Mat src, + Mat dst, + int dDepth, + int dx, + int dy, + double scale, + double delta, + int borderType, + ) { + return _Scharr( + src, + dst, + dDepth, + dx, + dy, + scale, + delta, + borderType, + ); + } + + late final _ScharrPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Double, + ffi.Double, ffi.Int)>>('Scharr'); + late final _Scharr = _ScharrPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, double, double, int)>(); + + CvStatus SeamlessClone( + Mat src, + Mat dst, + Mat mask, + Point p, + Mat blend, + int flags, + ) { + return _SeamlessClone( + src, + dst, + mask, + p, + blend, + flags, + ); + } + + late final _SeamlessClonePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, Point, Mat, ffi.Int)>>('SeamlessClone'); + late final _SeamlessClone = _SeamlessClonePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, Mat, int)>(); + + CvStatus SepFilter2D( + Mat src, + Mat dst, + int ddepth, + Mat kernelX, + Mat kernelY, + Point anchor, + double delta, + int borderType, + ) { + return _SepFilter2D( + src, + dst, + ddepth, + kernelX, + kernelY, + anchor, + delta, + borderType, + ); + } + + late final _SepFilter2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, Mat, Mat, Point, ffi.Double, + ffi.Int)>>('SepFilter2D'); + late final _SepFilter2D = _SepFilter2DPtr.asFunction< + CvStatus Function(Mat, Mat, int, Mat, Mat, Point, double, int)>(); + + CvStatus SetNumThreads( + int n, + ) { + return _SetNumThreads( + n, + ); + } + + late final _SetNumThreadsPtr = + _lookup>('SetNumThreads'); + late final _SetNumThreads = + _SetNumThreadsPtr.asFunction(); + + CvStatus SetRNGSeed( + int seed, + ) { + return _SetRNGSeed( + seed, + ); + } + + late final _SetRNGSeedPtr = + _lookup>('SetRNGSeed'); + late final _SetRNGSeed = _SetRNGSeedPtr.asFunction(); + + CvStatus SimpleBlobDetectorParams_Create( + ffi.Pointer rval, + ) { + return _SimpleBlobDetectorParams_Create( + rval, + ); + } + + late final _SimpleBlobDetectorParams_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'SimpleBlobDetectorParams_Create'); + late final _SimpleBlobDetectorParams_Create = + _SimpleBlobDetectorParams_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + void SimpleBlobDetector_Close( + ffi.Pointer b, + ) { + return _SimpleBlobDetector_Close( + b, + ); + } + + late final _SimpleBlobDetector_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'SimpleBlobDetector_Close'); + late final _SimpleBlobDetector_Close = _SimpleBlobDetector_ClosePtr + .asFunction)>(); + + CvStatus SimpleBlobDetector_Create( + ffi.Pointer rval, + ) { + return _SimpleBlobDetector_Create( + rval, + ); + } + + late final _SimpleBlobDetector_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'SimpleBlobDetector_Create'); + late final _SimpleBlobDetector_Create = _SimpleBlobDetector_CreatePtr + .asFunction)>(); + + CvStatus SimpleBlobDetector_Create_WithParams( + SimpleBlobDetectorParams params, + ffi.Pointer rval, + ) { + return _SimpleBlobDetector_Create_WithParams( + params, + rval, + ); + } + + late final _SimpleBlobDetector_Create_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SimpleBlobDetectorParams, ffi.Pointer)>>( + 'SimpleBlobDetector_Create_WithParams'); + late final _SimpleBlobDetector_Create_WithParams = + _SimpleBlobDetector_Create_WithParamsPtr.asFunction< + CvStatus Function( + SimpleBlobDetectorParams, ffi.Pointer)>(); + + CvStatus SimpleBlobDetector_Detect( + SimpleBlobDetector b, + Mat src, + ffi.Pointer rval, + ) { + return _SimpleBlobDetector_Detect( + b, + src, + rval, + ); + } + + late final _SimpleBlobDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SimpleBlobDetector, Mat, + ffi.Pointer)>>('SimpleBlobDetector_Detect'); + late final _SimpleBlobDetector_Detect = + _SimpleBlobDetector_DetectPtr.asFunction< + CvStatus Function( + SimpleBlobDetector, Mat, ffi.Pointer)>(); + + CvStatus Sobel( + Mat src, + Mat dst, + int ddepth, + int dx, + int dy, + int ksize, + double scale, + double delta, + int borderType, + ) { + return _Sobel( + src, + dst, + ddepth, + dx, + dy, + ksize, + scale, + delta, + borderType, + ); + } + + late final _SobelPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Double, ffi.Double, ffi.Int)>>('Sobel'); + late final _Sobel = _SobelPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, int, double, double, int)>(); + + CvStatus SpatialGradient( + Mat src, + Mat dx, + Mat dy, + int ksize, + int borderType, + ) { + return _SpatialGradient( + src, + dx, + dy, + ksize, + borderType, + ); + } + + late final _SpatialGradientPtr = _lookup< + ffi + .NativeFunction>( + 'SpatialGradient'); + late final _SpatialGradient = _SpatialGradientPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, int)>(); + + CvStatus SqBoxFilter( + Mat src, + Mat dst, + int ddepth, + Size ps, + ) { + return _SqBoxFilter( + src, + dst, + ddepth, + ps, + ); + } + + late final _SqBoxFilterPtr = + _lookup>( + 'SqBoxFilter'); + late final _SqBoxFilter = + _SqBoxFilterPtr.asFunction(); + + void Stitcher_Close( + ffi.Pointer stitcher, + ) { + return _Stitcher_Close( + stitcher, + ); + } + + late final _Stitcher_ClosePtr = + _lookup)>>( + 'Stitcher_Close'); + late final _Stitcher_Close = + _Stitcher_ClosePtr.asFunction)>(); + + CvStatus Stitcher_Component( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_Component( + self, + rval, + ); + } + + late final _Stitcher_ComponentPtr = _lookup< + ffi.NativeFunction)>>( + 'Stitcher_Component'); + late final _Stitcher_Component = _Stitcher_ComponentPtr.asFunction< + CvStatus Function(Stitcher, ffi.Pointer)>(); + + CvStatus Stitcher_ComposePanorama( + Stitcher self, + Mat rpano, + ffi.Pointer rval, + ) { + return _Stitcher_ComposePanorama( + self, + rpano, + rval, + ); + } + + late final _Stitcher_ComposePanoramaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, Mat, + ffi.Pointer)>>('Stitcher_ComposePanorama'); + late final _Stitcher_ComposePanorama = _Stitcher_ComposePanoramaPtr + .asFunction)>(); + + CvStatus Stitcher_ComposePanorama_1( + Stitcher self, + VecMat mats, + Mat rpano, + ffi.Pointer rval, + ) { + return _Stitcher_ComposePanorama_1( + self, + mats, + rpano, + rval, + ); + } + + late final _Stitcher_ComposePanorama_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, VecMat, Mat, + ffi.Pointer)>>('Stitcher_ComposePanorama_1'); + late final _Stitcher_ComposePanorama_1 = + _Stitcher_ComposePanorama_1Ptr.asFunction< + CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + + CvStatus Stitcher_Create( + int mode, + ffi.Pointer rval, + ) { + return _Stitcher_Create( + mode, + rval, + ); + } + + late final _Stitcher_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Pointer)>>('Stitcher_Create'); + late final _Stitcher_Create = _Stitcher_CreatePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); + + CvStatus Stitcher_EstimateTransform( + Stitcher self, + VecMat mats, + VecMat masks, + ffi.Pointer rval, + ) { + return _Stitcher_EstimateTransform( + self, + mats, + masks, + rval, + ); + } + + late final _Stitcher_EstimateTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, VecMat, VecMat, + ffi.Pointer)>>('Stitcher_EstimateTransform'); + late final _Stitcher_EstimateTransform = + _Stitcher_EstimateTransformPtr.asFunction< + CvStatus Function(Stitcher, VecMat, VecMat, ffi.Pointer)>(); + + CvStatus Stitcher_Get( + PtrStitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_Get( + self, + rval, + ); + } + + late final _Stitcher_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + PtrStitcher, ffi.Pointer)>>('Stitcher_Get'); + late final _Stitcher_Get = _Stitcher_GetPtr.asFunction< + CvStatus Function(PtrStitcher, ffi.Pointer)>(); + + CvStatus Stitcher_GetCompositingResol( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetCompositingResol( + self, + rval, + ); + } + + late final _Stitcher_GetCompositingResolPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, + ffi.Pointer)>>('Stitcher_GetCompositingResol'); + late final _Stitcher_GetCompositingResol = _Stitcher_GetCompositingResolPtr + .asFunction)>(); + + CvStatus Stitcher_GetInterpolationFlags( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetInterpolationFlags( + self, + rval, + ); + } + + late final _Stitcher_GetInterpolationFlagsPtr = _lookup< + ffi + .NativeFunction)>>( + 'Stitcher_GetInterpolationFlags'); + late final _Stitcher_GetInterpolationFlags = + _Stitcher_GetInterpolationFlagsPtr.asFunction< + CvStatus Function(Stitcher, ffi.Pointer)>(); + + CvStatus Stitcher_GetPanoConfidenceThresh( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetPanoConfidenceThresh( + self, + rval, + ); + } + + late final _Stitcher_GetPanoConfidenceThreshPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, + ffi.Pointer)>>('Stitcher_GetPanoConfidenceThresh'); + late final _Stitcher_GetPanoConfidenceThresh = + _Stitcher_GetPanoConfidenceThreshPtr.asFunction< + CvStatus Function(Stitcher, ffi.Pointer)>(); + + CvStatus Stitcher_GetRegistrationResol( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetRegistrationResol( + self, + rval, + ); + } + + late final _Stitcher_GetRegistrationResolPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, + ffi.Pointer)>>('Stitcher_GetRegistrationResol'); + late final _Stitcher_GetRegistrationResol = _Stitcher_GetRegistrationResolPtr + .asFunction)>(); + + CvStatus Stitcher_GetSeamEstimationResol( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetSeamEstimationResol( + self, + rval, + ); + } + + late final _Stitcher_GetSeamEstimationResolPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, + ffi.Pointer)>>('Stitcher_GetSeamEstimationResol'); + late final _Stitcher_GetSeamEstimationResol = + _Stitcher_GetSeamEstimationResolPtr.asFunction< + CvStatus Function(Stitcher, ffi.Pointer)>(); + + CvStatus Stitcher_GetWaveCorrectKind( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetWaveCorrectKind( + self, + rval, + ); + } + + late final _Stitcher_GetWaveCorrectKindPtr = _lookup< + ffi + .NativeFunction)>>( + 'Stitcher_GetWaveCorrectKind'); + late final _Stitcher_GetWaveCorrectKind = _Stitcher_GetWaveCorrectKindPtr + .asFunction)>(); + + CvStatus Stitcher_GetWaveCorrection( + Stitcher self, + ffi.Pointer rval, + ) { + return _Stitcher_GetWaveCorrection( + self, + rval, + ); + } + + late final _Stitcher_GetWaveCorrectionPtr = _lookup< + ffi + .NativeFunction)>>( + 'Stitcher_GetWaveCorrection'); + late final _Stitcher_GetWaveCorrection = _Stitcher_GetWaveCorrectionPtr + .asFunction)>(); + + CvStatus Stitcher_SetCompositingResol( + Stitcher self, + double inval, + ) { + return _Stitcher_SetCompositingResol( + self, + inval, + ); + } + + late final _Stitcher_SetCompositingResolPtr = + _lookup>( + 'Stitcher_SetCompositingResol'); + late final _Stitcher_SetCompositingResol = _Stitcher_SetCompositingResolPtr + .asFunction(); + + CvStatus Stitcher_SetInterpolationFlags( + Stitcher self, + int inval, + ) { + return _Stitcher_SetInterpolationFlags( + self, + inval, + ); + } + + late final _Stitcher_SetInterpolationFlagsPtr = + _lookup>( + 'Stitcher_SetInterpolationFlags'); + late final _Stitcher_SetInterpolationFlags = + _Stitcher_SetInterpolationFlagsPtr.asFunction< + CvStatus Function(Stitcher, int)>(); + + CvStatus Stitcher_SetPanoConfidenceThresh( + Stitcher self, + double inval, + ) { + return _Stitcher_SetPanoConfidenceThresh( + self, + inval, + ); + } + + late final _Stitcher_SetPanoConfidenceThreshPtr = + _lookup>( + 'Stitcher_SetPanoConfidenceThresh'); + late final _Stitcher_SetPanoConfidenceThresh = + _Stitcher_SetPanoConfidenceThreshPtr.asFunction< + CvStatus Function(Stitcher, double)>(); + + CvStatus Stitcher_SetRegistrationResol( + Stitcher self, + double inval, + ) { + return _Stitcher_SetRegistrationResol( + self, + inval, + ); + } + + late final _Stitcher_SetRegistrationResolPtr = + _lookup>( + 'Stitcher_SetRegistrationResol'); + late final _Stitcher_SetRegistrationResol = _Stitcher_SetRegistrationResolPtr + .asFunction(); + + CvStatus Stitcher_SetSeamEstimationResol( + Stitcher self, + double inval, + ) { + return _Stitcher_SetSeamEstimationResol( + self, + inval, ); } @@ -13283,806 +14181,1571 @@ class CvNative { _Stitcher_SetSeamEstimationResolPtr.asFunction< CvStatus Function(Stitcher, double)>(); - CvStatus Stitcher_SetWaveCorrectKind( - Stitcher self, - int inval, + CvStatus Stitcher_SetWaveCorrectKind( + Stitcher self, + int inval, + ) { + return _Stitcher_SetWaveCorrectKind( + self, + inval, + ); + } + + late final _Stitcher_SetWaveCorrectKindPtr = + _lookup>( + 'Stitcher_SetWaveCorrectKind'); + late final _Stitcher_SetWaveCorrectKind = _Stitcher_SetWaveCorrectKindPtr + .asFunction(); + + CvStatus Stitcher_SetWaveCorrection( + Stitcher self, + bool inval, + ) { + return _Stitcher_SetWaveCorrection( + self, + inval, + ); + } + + late final _Stitcher_SetWaveCorrectionPtr = + _lookup>( + 'Stitcher_SetWaveCorrection'); + late final _Stitcher_SetWaveCorrection = _Stitcher_SetWaveCorrectionPtr + .asFunction(); + + CvStatus Stitcher_Stitch( + Stitcher self, + VecMat mats, + Mat rpano, + ffi.Pointer rval, + ) { + return _Stitcher_Stitch( + self, + mats, + rpano, + rval, + ); + } + + late final _Stitcher_StitchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Stitcher, VecMat, Mat, ffi.Pointer)>>('Stitcher_Stitch'); + late final _Stitcher_Stitch = _Stitcher_StitchPtr.asFunction< + CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + + CvStatus Stitcher_Stitch_1( + Stitcher self, + VecMat mats, + VecMat masks, + Mat rpano, + ffi.Pointer rval, + ) { + return _Stitcher_Stitch_1( + self, + mats, + masks, + rpano, + rval, + ); + } + + late final _Stitcher_Stitch_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Stitcher, VecMat, VecMat, Mat, + ffi.Pointer)>>('Stitcher_Stitch_1'); + late final _Stitcher_Stitch_1 = _Stitcher_Stitch_1Ptr.asFunction< + CvStatus Function(Stitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); + + CvStatus Stylization( + Mat src, + Mat dst, + double sigma_s, + double sigma_r, + ) { + return _Stylization( + src, + dst, + sigma_s, + sigma_r, + ); + } + + late final _StylizationPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('Stylization'); + late final _Stylization = + _StylizationPtr.asFunction(); + + void Subdiv2D_Close( + ffi.Pointer self, + ) { + return _Subdiv2D_Close( + self, + ); + } + + late final _Subdiv2D_ClosePtr = + _lookup)>>( + 'Subdiv2D_Close'); + late final _Subdiv2D_Close = + _Subdiv2D_ClosePtr.asFunction)>(); + + CvStatus Subdiv2D_EdgeDst( + Subdiv2D self, + int edge, + ffi.Pointer dstpt, + ffi.Pointer rval, + ) { + return _Subdiv2D_EdgeDst( + self, + edge, + dstpt, + rval, + ); + } + + late final _Subdiv2D_EdgeDstPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_EdgeDst'); + late final _Subdiv2D_EdgeDst = _Subdiv2D_EdgeDstPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Subdiv2D_EdgeOrg( + Subdiv2D self, + int edge, + ffi.Pointer orgpt, + ffi.Pointer rval, + ) { + return _Subdiv2D_EdgeOrg( + self, + edge, + orgpt, + rval, + ); + } + + late final _Subdiv2D_EdgeOrgPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_EdgeOrg'); + late final _Subdiv2D_EdgeOrg = _Subdiv2D_EdgeOrgPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Subdiv2D_FindNearest( + Subdiv2D self, + Point2f pt, + ffi.Pointer nearestPt, + ffi.Pointer rval, + ) { + return _Subdiv2D_FindNearest( + self, + pt, + nearestPt, + rval, + ); + } + + late final _Subdiv2D_FindNearestPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_FindNearest'); + late final _Subdiv2D_FindNearest = _Subdiv2D_FindNearestPtr.asFunction< + CvStatus Function( + Subdiv2D, Point2f, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Subdiv2D_GetEdge( + Subdiv2D self, + int edge, + int nextEdgeType, + ffi.Pointer rval, + ) { + return _Subdiv2D_GetEdge( + self, + edge, + nextEdgeType, + rval, + ); + } + + late final _Subdiv2D_GetEdgePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, + ffi.Pointer)>>('Subdiv2D_GetEdge'); + late final _Subdiv2D_GetEdge = _Subdiv2D_GetEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); + + CvStatus Subdiv2D_GetEdgeList( + Subdiv2D self, + ffi.Pointer> rval, + ffi.Pointer size, + ) { + return _Subdiv2D_GetEdgeList( + self, + rval, + size, + ); + } + + late final _Subdiv2D_GetEdgeListPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>>('Subdiv2D_GetEdgeList'); + late final _Subdiv2D_GetEdgeList = _Subdiv2D_GetEdgeListPtr.asFunction< + CvStatus Function( + Subdiv2D, ffi.Pointer>, ffi.Pointer)>(); + + CvStatus Subdiv2D_GetLeadingEdgeList( + Subdiv2D self, + ffi.Pointer leadingEdgeList, + ) { + return _Subdiv2D_GetLeadingEdgeList( + self, + leadingEdgeList, + ); + } + + late final _Subdiv2D_GetLeadingEdgeListPtr = _lookup< + ffi.NativeFunction)>>( + 'Subdiv2D_GetLeadingEdgeList'); + late final _Subdiv2D_GetLeadingEdgeList = _Subdiv2D_GetLeadingEdgeListPtr + .asFunction)>(); + + CvStatus Subdiv2D_GetTriangleList( + Subdiv2D self, + ffi.Pointer> rval, + ffi.Pointer size, + ) { + return _Subdiv2D_GetTriangleList( + self, + rval, + size, + ); + } + + late final _Subdiv2D_GetTriangleListPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>>('Subdiv2D_GetTriangleList'); + late final _Subdiv2D_GetTriangleList = + _Subdiv2D_GetTriangleListPtr.asFunction< + CvStatus Function(Subdiv2D, ffi.Pointer>, + ffi.Pointer)>(); + + CvStatus Subdiv2D_GetVertex( + Subdiv2D self, + int vertex, + ffi.Pointer firstEdge, + ffi.Pointer rval, + ) { + return _Subdiv2D_GetVertex( + self, + vertex, + firstEdge, + rval, + ); + } + + late final _Subdiv2D_GetVertexPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_GetVertex'); + late final _Subdiv2D_GetVertex = _Subdiv2D_GetVertexPtr.asFunction< + CvStatus Function( + Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Subdiv2D_GetVoronoiFacetList( + Subdiv2D self, + VecInt idx, + ffi.Pointer facetList, + ffi.Pointer facetCenters, + ) { + return _Subdiv2D_GetVoronoiFacetList( + self, + idx, + facetList, + facetCenters, + ); + } + + late final _Subdiv2D_GetVoronoiFacetListPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, + ffi.Pointer)>>('Subdiv2D_GetVoronoiFacetList'); + late final _Subdiv2D_GetVoronoiFacetList = + _Subdiv2D_GetVoronoiFacetListPtr.asFunction< + CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, + ffi.Pointer)>(); + + CvStatus Subdiv2D_InitDelaunay( + Subdiv2D self, + Rect rect, + ) { + return _Subdiv2D_InitDelaunay( + self, + rect, + ); + } + + late final _Subdiv2D_InitDelaunayPtr = + _lookup>( + 'Subdiv2D_InitDelaunay'); + late final _Subdiv2D_InitDelaunay = + _Subdiv2D_InitDelaunayPtr.asFunction(); + + CvStatus Subdiv2D_Insert( + Subdiv2D self, + Point2f pt, + ffi.Pointer rval, + ) { + return _Subdiv2D_Insert( + self, + pt, + rval, + ); + } + + late final _Subdiv2D_InsertPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Subdiv2D, Point2f, ffi.Pointer)>>('Subdiv2D_Insert'); + late final _Subdiv2D_Insert = _Subdiv2D_InsertPtr.asFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer)>(); + + CvStatus Subdiv2D_InsertVec( + Subdiv2D self, + VecPoint2f ptvec, + ) { + return _Subdiv2D_InsertVec( + self, + ptvec, + ); + } + + late final _Subdiv2D_InsertVecPtr = + _lookup>( + 'Subdiv2D_InsertVec'); + late final _Subdiv2D_InsertVec = _Subdiv2D_InsertVecPtr.asFunction< + CvStatus Function(Subdiv2D, VecPoint2f)>(); + + CvStatus Subdiv2D_Locate( + Subdiv2D self, + Point2f pt, + ffi.Pointer edge, + ffi.Pointer vertex, + ffi.Pointer rval, + ) { + return _Subdiv2D_Locate( + self, + pt, + edge, + vertex, + rval, + ); + } + + late final _Subdiv2D_LocatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('Subdiv2D_Locate'); + late final _Subdiv2D_Locate = _Subdiv2D_LocatePtr.asFunction< + CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + CvStatus Subdiv2D_NewEmpty( + ffi.Pointer rval, + ) { + return _Subdiv2D_NewEmpty( + rval, + ); + } + + late final _Subdiv2D_NewEmptyPtr = + _lookup)>>( + 'Subdiv2D_NewEmpty'); + late final _Subdiv2D_NewEmpty = _Subdiv2D_NewEmptyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus Subdiv2D_NewWithRect( + Rect rect, + ffi.Pointer rval, + ) { + return _Subdiv2D_NewWithRect( + rect, + rval, + ); + } + + late final _Subdiv2D_NewWithRectPtr = _lookup< + ffi.NativeFunction)>>( + 'Subdiv2D_NewWithRect'); + late final _Subdiv2D_NewWithRect = _Subdiv2D_NewWithRectPtr.asFunction< + CvStatus Function(Rect, ffi.Pointer)>(); + + CvStatus Subdiv2D_NextEdge( + Subdiv2D self, + int edge, + ffi.Pointer rval, + ) { + return _Subdiv2D_NextEdge( + self, + edge, + rval, + ); + } + + late final _Subdiv2D_NextEdgePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_NextEdge'); + late final _Subdiv2D_NextEdge = _Subdiv2D_NextEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); + + CvStatus Subdiv2D_RotateEdge( + Subdiv2D self, + int edge, + int rotate, + ffi.Pointer rval, + ) { + return _Subdiv2D_RotateEdge( + self, + edge, + rotate, + rval, + ); + } + + late final _Subdiv2D_RotateEdgePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, + ffi.Pointer)>>('Subdiv2D_RotateEdge'); + late final _Subdiv2D_RotateEdge = _Subdiv2D_RotateEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); + + CvStatus Subdiv2D_SymEdge( + Subdiv2D self, + int edge, + ffi.Pointer rval, + ) { + return _Subdiv2D_SymEdge( + self, + edge, + rval, + ); + } + + late final _Subdiv2D_SymEdgePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_SymEdge'); + late final _Subdiv2D_SymEdge = _Subdiv2D_SymEdgePtr.asFunction< + CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); + + void TermCriteria_Close( + ffi.Pointer tc, + ) { + return _TermCriteria_Close( + tc, + ); + } + + late final _TermCriteria_ClosePtr = + _lookup)>>( + 'TermCriteria_Close'); + late final _TermCriteria_Close = _TermCriteria_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus TermCriteria_Epsilon( + TermCriteria tc, + ffi.Pointer rval, + ) { + return _TermCriteria_Epsilon( + tc, + rval, + ); + } + + late final _TermCriteria_EpsilonPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + TermCriteria, ffi.Pointer)>>('TermCriteria_Epsilon'); + late final _TermCriteria_Epsilon = _TermCriteria_EpsilonPtr.asFunction< + CvStatus Function(TermCriteria, ffi.Pointer)>(); + + CvStatus TermCriteria_MaxCount( + TermCriteria tc, + ffi.Pointer rval, + ) { + return _TermCriteria_MaxCount( + tc, + rval, + ); + } + + late final _TermCriteria_MaxCountPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + TermCriteria, ffi.Pointer)>>('TermCriteria_MaxCount'); + late final _TermCriteria_MaxCount = _TermCriteria_MaxCountPtr.asFunction< + CvStatus Function(TermCriteria, ffi.Pointer)>(); + + CvStatus TermCriteria_New( + int typ, + int maxCount, + double epsilon, + ffi.Pointer rval, + ) { + return _TermCriteria_New( + typ, + maxCount, + epsilon, + rval, + ); + } + + late final _TermCriteria_NewPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Int, ffi.Double, + ffi.Pointer)>>('TermCriteria_New'); + late final _TermCriteria_New = _TermCriteria_NewPtr.asFunction< + CvStatus Function(int, int, double, ffi.Pointer)>(); + + CvStatus TermCriteria_Type( + TermCriteria tc, + ffi.Pointer rval, + ) { + return _TermCriteria_Type( + tc, + rval, + ); + } + + late final _TermCriteria_TypePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + TermCriteria, ffi.Pointer)>>('TermCriteria_Type'); + late final _TermCriteria_Type = _TermCriteria_TypePtr.asFunction< + CvStatus Function(TermCriteria, ffi.Pointer)>(); + + CvStatus TextureFlattening( + Mat src, + Mat mask, + Mat dst, + double low_threshold, + double high_threshold, + int kernel_size, + ) { + return _TextureFlattening( + src, + mask, + dst, + low_threshold, + high_threshold, + kernel_size, + ); + } + + late final _TextureFlatteningPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, ffi.Float, ffi.Float, + ffi.Int)>>('TextureFlattening'); + late final _TextureFlattening = _TextureFlatteningPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double, int)>(); + + CvStatus TheRNG( + ffi.Pointer rval, + ) { + return _TheRNG( + rval, + ); + } + + late final _TheRNGPtr = + _lookup)>>( + 'TheRNG'); + late final _TheRNG = + _TheRNGPtr.asFunction)>(); + + CvStatus Threshold( + Mat src, + Mat dst, + double thresh, + double maxvalue, + int typ, + ffi.Pointer rval, + ) { + return _Threshold( + src, + dst, + thresh, + maxvalue, + typ, + rval, + ); + } + + late final _ThresholdPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Pointer)>>('Threshold'); + late final _Threshold = _ThresholdPtr.asFunction< + CvStatus Function( + Mat, Mat, double, double, int, ffi.Pointer)>(); + + CvStatus Trackbar_Create( + ffi.Pointer winname, + ffi.Pointer trackname, + int max, + ) { + return _Trackbar_Create( + winname, + trackname, + max, + ); + } + + late final _Trackbar_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_Create'); + late final _Trackbar_Create = _Trackbar_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + + CvStatus Trackbar_CreateWithValue( + ffi.Pointer winname, + ffi.Pointer trackname, + ffi.Pointer value, + int max, + ) { + return _Trackbar_CreateWithValue( + winname, + trackname, + value, + max, + ); + } + + late final _Trackbar_CreateWithValuePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int)>>('Trackbar_CreateWithValue'); + late final _Trackbar_CreateWithValue = + _Trackbar_CreateWithValuePtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + CvStatus Trackbar_GetPos( + ffi.Pointer winname, + ffi.Pointer trackname, + ffi.Pointer rval, + ) { + return _Trackbar_GetPos( + winname, + trackname, + rval, + ); + } + + late final _Trackbar_GetPosPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('Trackbar_GetPos'); + late final _Trackbar_GetPos = _Trackbar_GetPosPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + CvStatus Trackbar_SetMax( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, + ) { + return _Trackbar_SetMax( + winname, + trackname, + pos, + ); + } + + late final _Trackbar_SetMaxPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetMax'); + late final _Trackbar_SetMax = _Trackbar_SetMaxPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + + CvStatus Trackbar_SetMin( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, + ) { + return _Trackbar_SetMin( + winname, + trackname, + pos, + ); + } + + late final _Trackbar_SetMinPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetMin'); + late final _Trackbar_SetMin = _Trackbar_SetMinPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + + CvStatus Trackbar_SetPos( + ffi.Pointer winname, + ffi.Pointer trackname, + int pos, ) { - return _Stitcher_SetWaveCorrectKind( + return _Trackbar_SetPos( + winname, + trackname, + pos, + ); + } + + late final _Trackbar_SetPosPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('Trackbar_SetPos'); + late final _Trackbar_SetPos = _Trackbar_SetPosPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + + void TrackerMIL_Close( + ffi.Pointer self, + ) { + return _TrackerMIL_Close( self, - inval, ); } - late final _Stitcher_SetWaveCorrectKindPtr = - _lookup>( - 'Stitcher_SetWaveCorrectKind'); - late final _Stitcher_SetWaveCorrectKind = _Stitcher_SetWaveCorrectKindPtr - .asFunction(); + late final _TrackerMIL_ClosePtr = + _lookup)>>( + 'TrackerMIL_Close'); + late final _TrackerMIL_Close = + _TrackerMIL_ClosePtr.asFunction)>(); - CvStatus Stitcher_SetWaveCorrection( - Stitcher self, - bool inval, + CvStatus TrackerMIL_Create( + ffi.Pointer rval, ) { - return _Stitcher_SetWaveCorrection( + return _TrackerMIL_Create( + rval, + ); + } + + late final _TrackerMIL_CreatePtr = + _lookup)>>( + 'TrackerMIL_Create'); + late final _TrackerMIL_Create = _TrackerMIL_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus TrackerMIL_Init( + TrackerMIL self, + Mat image, + Rect bbox, + ) { + return _TrackerMIL_Init( self, - inval, + image, + bbox, ); } - late final _Stitcher_SetWaveCorrectionPtr = - _lookup>( - 'Stitcher_SetWaveCorrection'); - late final _Stitcher_SetWaveCorrection = _Stitcher_SetWaveCorrectionPtr - .asFunction(); + late final _TrackerMIL_InitPtr = + _lookup>( + 'TrackerMIL_Init'); + late final _TrackerMIL_Init = _TrackerMIL_InitPtr.asFunction< + CvStatus Function(TrackerMIL, Mat, Rect)>(); - CvStatus Stitcher_Stitch( - Stitcher self, - VecMat mats, - Mat rpano, - ffi.Pointer rval, + CvStatus TrackerMIL_Update( + TrackerMIL self, + Mat image, + ffi.Pointer boundingBox, + ffi.Pointer rval, ) { - return _Stitcher_Stitch( + return _TrackerMIL_Update( self, - mats, - rpano, + image, + boundingBox, rval, ); } - late final _Stitcher_StitchPtr = _lookup< + late final _TrackerMIL_UpdatePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Stitcher, VecMat, Mat, ffi.Pointer)>>('Stitcher_Stitch'); - late final _Stitcher_Stitch = _Stitcher_StitchPtr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function(TrackerMIL, Mat, ffi.Pointer, + ffi.Pointer)>>('TrackerMIL_Update'); + late final _TrackerMIL_Update = _TrackerMIL_UpdatePtr.asFunction< + CvStatus Function( + TrackerMIL, Mat, ffi.Pointer, ffi.Pointer)>(); - CvStatus Stitcher_Stitch_1( - Stitcher self, - VecMat mats, - VecMat masks, - Mat rpano, - ffi.Pointer rval, + void TrainData_Close( + ffi.Pointer self, ) { - return _Stitcher_Stitch_1( + return _TrainData_Close( self, - mats, - masks, - rpano, + ); + } + + late final _TrainData_ClosePtr = + _lookup)>>( + 'TrainData_Close'); + late final _TrainData_Close = _TrainData_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus TrainData_Create( + Mat samples, + int layout, + Mat responses, + Mat varIdx, + Mat sampleIdx, + Mat sampleWeights, + Mat varType, + ffi.Pointer rval, + ) { + return _TrainData_Create( + samples, + layout, + responses, + varIdx, + sampleIdx, + sampleWeights, + varType, rval, ); } - late final _Stitcher_Stitch_1Ptr = _lookup< + late final _TrainData_CreatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, - ffi.Pointer)>>('Stitcher_Stitch_1'); - late final _Stitcher_Stitch_1 = _Stitcher_Stitch_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function(Mat, ffi.Int, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('TrainData_Create'); + late final _TrainData_Create = _TrainData_CreatePtr.asFunction< + CvStatus Function( + Mat, int, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus Stylization( - Mat src, - Mat dst, - double sigma_s, - double sigma_r, + CvStatus TrainData_Get( + ffi.Pointer self, + ffi.Pointer rval, ) { - return _Stylization( - src, - dst, - sigma_s, - sigma_r, + return _TrainData_Get( + self, + rval, ); } - late final _StylizationPtr = _lookup< + late final _TrainData_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('Stylization'); - late final _Stylization = - _StylizationPtr.asFunction(); + CvStatus Function(ffi.Pointer, + ffi.Pointer)>>('TrainData_Get'); + late final _TrainData_Get = _TrainData_GetPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); - void Subdiv2D_Close( - ffi.Pointer self, + CvStatus TrainData_GetCatCount( + TrainData self, + int vi, + ffi.Pointer rval, ) { - return _Subdiv2D_Close( + return _TrainData_GetCatCount( self, + vi, + rval, ); } - late final _Subdiv2D_ClosePtr = - _lookup)>>( - 'Subdiv2D_Close'); - late final _Subdiv2D_Close = - _Subdiv2D_ClosePtr.asFunction)>(); + late final _TrainData_GetCatCountPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(TrainData, ffi.Int, + ffi.Pointer)>>('TrainData_GetCatCount'); + late final _TrainData_GetCatCount = _TrainData_GetCatCountPtr.asFunction< + CvStatus Function(TrainData, int, ffi.Pointer)>(); - CvStatus Subdiv2D_EdgeDst( - Subdiv2D self, - int edge, - ffi.Pointer dstpt, - ffi.Pointer rval, + CvStatus TrainData_GetCatMap( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_EdgeDst( + return _TrainData_GetCatMap( self, - edge, - dstpt, rval, ); } - late final _Subdiv2D_EdgeDstPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_EdgeDst'); - late final _Subdiv2D_EdgeDst = _Subdiv2D_EdgeDstPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetCatMapPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetCatMap'); + late final _TrainData_GetCatMap = _TrainData_GetCatMapPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_EdgeOrg( - Subdiv2D self, - int edge, - ffi.Pointer orgpt, - ffi.Pointer rval, + CvStatus TrainData_GetCatOfs( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_EdgeOrg( + return _TrainData_GetCatOfs( self, - edge, - orgpt, rval, ); } - late final _Subdiv2D_EdgeOrgPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_EdgeOrg'); - late final _Subdiv2D_EdgeOrg = _Subdiv2D_EdgeOrgPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetCatOfsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetCatOfs'); + late final _TrainData_GetCatOfs = _TrainData_GetCatOfsPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_FindNearest( - Subdiv2D self, - Point2f pt, - ffi.Pointer nearestPt, - ffi.Pointer rval, + CvStatus TrainData_GetClassLabels( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_FindNearest( + return _TrainData_GetClassLabels( self, - pt, - nearestPt, rval, ); } - late final _Subdiv2D_FindNearestPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_FindNearest'); - late final _Subdiv2D_FindNearest = _Subdiv2D_FindNearestPtr.asFunction< - CvStatus Function( - Subdiv2D, Point2f, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetClassLabelsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetClassLabels'); + late final _TrainData_GetClassLabels = _TrainData_GetClassLabelsPtr + .asFunction)>(); - CvStatus Subdiv2D_GetEdge( - Subdiv2D self, - int edge, - int nextEdgeType, - ffi.Pointer rval, + CvStatus TrainData_GetDefaultSubstValues( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetEdge( + return _TrainData_GetDefaultSubstValues( self, - edge, - nextEdgeType, rval, ); } - late final _Subdiv2D_GetEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, - ffi.Pointer)>>('Subdiv2D_GetEdge'); - late final _Subdiv2D_GetEdge = _Subdiv2D_GetEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); + late final _TrainData_GetDefaultSubstValuesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetDefaultSubstValues'); + late final _TrainData_GetDefaultSubstValues = + _TrainData_GetDefaultSubstValuesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetEdgeList( - Subdiv2D self, - ffi.Pointer> rval, - ffi.Pointer size, + CvStatus TrainData_GetLayout( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetEdgeList( + return _TrainData_GetLayout( self, rval, - size, ); } - late final _Subdiv2D_GetEdgeListPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>>('Subdiv2D_GetEdgeList'); - late final _Subdiv2D_GetEdgeList = _Subdiv2D_GetEdgeListPtr.asFunction< - CvStatus Function( - Subdiv2D, ffi.Pointer>, ffi.Pointer)>(); + late final _TrainData_GetLayoutPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetLayout'); + late final _TrainData_GetLayout = _TrainData_GetLayoutPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetLeadingEdgeList( - Subdiv2D self, - ffi.Pointer leadingEdgeList, + CvStatus TrainData_GetMissing( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetLeadingEdgeList( + return _TrainData_GetMissing( self, - leadingEdgeList, + rval, ); } - late final _Subdiv2D_GetLeadingEdgeListPtr = _lookup< - ffi.NativeFunction)>>( - 'Subdiv2D_GetLeadingEdgeList'); - late final _Subdiv2D_GetLeadingEdgeList = _Subdiv2D_GetLeadingEdgeListPtr - .asFunction)>(); + late final _TrainData_GetMissingPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetMissing'); + late final _TrainData_GetMissing = _TrainData_GetMissingPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetTriangleList( - Subdiv2D self, - ffi.Pointer> rval, - ffi.Pointer size, + CvStatus TrainData_GetNAllVars( + TrainData self, + ffi.Pointer rval, + ) { + return _TrainData_GetNAllVars( + self, + rval, + ); + } + + late final _TrainData_GetNAllVarsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNAllVars'); + late final _TrainData_GetNAllVars = _TrainData_GetNAllVarsPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); + + CvStatus TrainData_GetNSamples( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetTriangleList( + return _TrainData_GetNSamples( self, rval, - size, ); } - late final _Subdiv2D_GetTriangleListPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>>('Subdiv2D_GetTriangleList'); - late final _Subdiv2D_GetTriangleList = - _Subdiv2D_GetTriangleListPtr.asFunction< - CvStatus Function(Subdiv2D, ffi.Pointer>, - ffi.Pointer)>(); + late final _TrainData_GetNSamplesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNSamples'); + late final _TrainData_GetNSamples = _TrainData_GetNSamplesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_GetVertex( - Subdiv2D self, - int vertex, - ffi.Pointer firstEdge, - ffi.Pointer rval, + CvStatus TrainData_GetNTestSamples( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetVertex( + return _TrainData_GetNTestSamples( self, - vertex, - firstEdge, rval, ); } - late final _Subdiv2D_GetVertexPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_GetVertex'); - late final _Subdiv2D_GetVertex = _Subdiv2D_GetVertexPtr.asFunction< - CvStatus Function( - Subdiv2D, int, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetNTestSamplesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNTestSamples'); + late final _TrainData_GetNTestSamples = _TrainData_GetNTestSamplesPtr + .asFunction)>(); - CvStatus Subdiv2D_GetVoronoiFacetList( - Subdiv2D self, - VecInt idx, - ffi.Pointer facetList, - ffi.Pointer facetCenters, + CvStatus TrainData_GetNTrainSamples( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_GetVoronoiFacetList( + return _TrainData_GetNTrainSamples( self, - idx, - facetList, - facetCenters, + rval, ); } - late final _Subdiv2D_GetVoronoiFacetListPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, - ffi.Pointer)>>('Subdiv2D_GetVoronoiFacetList'); - late final _Subdiv2D_GetVoronoiFacetList = - _Subdiv2D_GetVoronoiFacetListPtr.asFunction< - CvStatus Function(Subdiv2D, VecInt, ffi.Pointer, - ffi.Pointer)>(); + late final _TrainData_GetNTrainSamplesPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNTrainSamples'); + late final _TrainData_GetNTrainSamples = _TrainData_GetNTrainSamplesPtr + .asFunction)>(); - CvStatus Subdiv2D_InitDelaunay( - Subdiv2D self, - Rect rect, + CvStatus TrainData_GetNVars( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_InitDelaunay( + return _TrainData_GetNVars( self, - rect, + rval, ); } - late final _Subdiv2D_InitDelaunayPtr = - _lookup>( - 'Subdiv2D_InitDelaunay'); - late final _Subdiv2D_InitDelaunay = - _Subdiv2D_InitDelaunayPtr.asFunction(); + late final _TrainData_GetNVarsPtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetNVars'); + late final _TrainData_GetNVars = _TrainData_GetNVarsPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_Insert( - Subdiv2D self, - Point2f pt, - ffi.Pointer rval, + CvStatus TrainData_GetNames( + TrainData self, + ffi.Pointer names, ) { - return _Subdiv2D_Insert( + return _TrainData_GetNames( self, - pt, - rval, + names, ); } - late final _Subdiv2D_InsertPtr = _lookup< + late final _TrainData_GetNamesPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Subdiv2D, Point2f, ffi.Pointer)>>('Subdiv2D_Insert'); - late final _Subdiv2D_Insert = _Subdiv2D_InsertPtr.asFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer)>(); + TrainData, ffi.Pointer)>>('TrainData_GetNames'); + late final _TrainData_GetNames = _TrainData_GetNamesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_InsertVec( - Subdiv2D self, - VecPoint2f ptvec, + CvStatus TrainData_GetNormCatResponses( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_InsertVec( + return _TrainData_GetNormCatResponses( self, - ptvec, + rval, ); } - late final _Subdiv2D_InsertVecPtr = - _lookup>( - 'Subdiv2D_InsertVec'); - late final _Subdiv2D_InsertVec = _Subdiv2D_InsertVecPtr.asFunction< - CvStatus Function(Subdiv2D, VecPoint2f)>(); + late final _TrainData_GetNormCatResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetNormCatResponses'); + late final _TrainData_GetNormCatResponses = _TrainData_GetNormCatResponsesPtr + .asFunction)>(); - CvStatus Subdiv2D_Locate( - Subdiv2D self, - Point2f pt, - ffi.Pointer edge, - ffi.Pointer vertex, + CvStatus TrainData_GetResponseType( + TrainData self, ffi.Pointer rval, ) { - return _Subdiv2D_Locate( + return _TrainData_GetResponseType( self, - pt, - edge, - vertex, rval, ); } - late final _Subdiv2D_LocatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>>('Subdiv2D_Locate'); - late final _Subdiv2D_Locate = _Subdiv2D_LocatePtr.asFunction< - CvStatus Function(Subdiv2D, Point2f, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_GetResponseTypePtr = _lookup< + ffi + .NativeFunction)>>( + 'TrainData_GetResponseType'); + late final _TrainData_GetResponseType = _TrainData_GetResponseTypePtr + .asFunction)>(); - CvStatus Subdiv2D_NewEmpty( - ffi.Pointer rval, + CvStatus TrainData_GetResponses( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_NewEmpty( + return _TrainData_GetResponses( + self, rval, ); } - late final _Subdiv2D_NewEmptyPtr = - _lookup)>>( - 'Subdiv2D_NewEmpty'); - late final _Subdiv2D_NewEmpty = _Subdiv2D_NewEmptyPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _TrainData_GetResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetResponses'); + late final _TrainData_GetResponses = _TrainData_GetResponsesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_NewWithRect( - Rect rect, - ffi.Pointer rval, + CvStatus TrainData_GetSample( + TrainData self, + Mat varIdx, + int sidx, + ffi.Pointer buf, ) { - return _Subdiv2D_NewWithRect( - rect, - rval, + return _TrainData_GetSample( + self, + varIdx, + sidx, + buf, ); } - late final _Subdiv2D_NewWithRectPtr = _lookup< - ffi.NativeFunction)>>( - 'Subdiv2D_NewWithRect'); - late final _Subdiv2D_NewWithRect = _Subdiv2D_NewWithRectPtr.asFunction< - CvStatus Function(Rect, ffi.Pointer)>(); + late final _TrainData_GetSamplePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(TrainData, Mat, ffi.Int, + ffi.Pointer)>>('TrainData_GetSample'); + late final _TrainData_GetSample = _TrainData_GetSamplePtr.asFunction< + CvStatus Function(TrainData, Mat, int, ffi.Pointer)>(); - CvStatus Subdiv2D_NextEdge( - Subdiv2D self, - int edge, - ffi.Pointer rval, + CvStatus TrainData_GetSampleWeights( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_NextEdge( + return _TrainData_GetSampleWeights( self, - edge, rval, ); } - late final _Subdiv2D_NextEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_NextEdge'); - late final _Subdiv2D_NextEdge = _Subdiv2D_NextEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); + late final _TrainData_GetSampleWeightsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetSampleWeights'); + late final _TrainData_GetSampleWeights = _TrainData_GetSampleWeightsPtr + .asFunction)>(); - CvStatus Subdiv2D_RotateEdge( - Subdiv2D self, - int edge, - int rotate, - ffi.Pointer rval, + CvStatus TrainData_GetSamples( + TrainData self, + ffi.Pointer rval, ) { - return _Subdiv2D_RotateEdge( + return _TrainData_GetSamples( self, - edge, - rotate, rval, ); } - late final _Subdiv2D_RotateEdgePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Subdiv2D, ffi.Int, ffi.Int, - ffi.Pointer)>>('Subdiv2D_RotateEdge'); - late final _Subdiv2D_RotateEdge = _Subdiv2D_RotateEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, int, ffi.Pointer)>(); + late final _TrainData_GetSamplesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetSamples'); + late final _TrainData_GetSamples = _TrainData_GetSamplesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Subdiv2D_SymEdge( - Subdiv2D self, - int edge, - ffi.Pointer rval, + CvStatus TrainData_GetSubMatrix( + Mat matrix, + Mat idx, + int layout, + ffi.Pointer rval, ) { - return _Subdiv2D_SymEdge( - self, - edge, + return _TrainData_GetSubMatrix( + matrix, + idx, + layout, rval, ); } - late final _Subdiv2D_SymEdgePtr = _lookup< + late final _TrainData_GetSubMatrixPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Subdiv2D, ffi.Int, ffi.Pointer)>>('Subdiv2D_SymEdge'); - late final _Subdiv2D_SymEdge = _Subdiv2D_SymEdgePtr.asFunction< - CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); + Mat, Mat, ffi.Int, ffi.Pointer)>>('TrainData_GetSubMatrix'); + late final _TrainData_GetSubMatrix = _TrainData_GetSubMatrixPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); - void TermCriteria_Close( - ffi.Pointer tc, + CvStatus TrainData_GetSubVector( + Mat vec, + Mat idx, + ffi.Pointer rval, ) { - return _TermCriteria_Close( - tc, + return _TrainData_GetSubVector( + vec, + idx, + rval, ); } - late final _TermCriteria_ClosePtr = - _lookup)>>( - 'TermCriteria_Close'); - late final _TermCriteria_Close = _TermCriteria_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _TrainData_GetSubVectorPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetSubVector'); + late final _TrainData_GetSubVector = _TrainData_GetSubVectorPtr.asFunction< + CvStatus Function(Mat, Mat, ffi.Pointer)>(); - CvStatus TermCriteria_Epsilon( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTestNormCatResponses( + TrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_Epsilon( - tc, + return _TrainData_GetTestNormCatResponses( + self, rval, ); } - late final _TermCriteria_EpsilonPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Epsilon'); - late final _TermCriteria_Epsilon = _TermCriteria_EpsilonPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); + late final _TrainData_GetTestNormCatResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTestNormCatResponses'); + late final _TrainData_GetTestNormCatResponses = + _TrainData_GetTestNormCatResponsesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus TermCriteria_MaxCount( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTestResponses( + TrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_MaxCount( - tc, + return _TrainData_GetTestResponses( + self, rval, ); } - late final _TermCriteria_MaxCountPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_MaxCount'); - late final _TermCriteria_MaxCount = _TermCriteria_MaxCountPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); + late final _TrainData_GetTestResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTestResponses'); + late final _TrainData_GetTestResponses = _TrainData_GetTestResponsesPtr + .asFunction)>(); - CvStatus TermCriteria_New( - int typ, - int maxCount, - double epsilon, - ffi.Pointer rval, + CvStatus TrainData_GetTestSampleIdx( + TrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_New( - typ, - maxCount, - epsilon, + return _TrainData_GetTestSampleIdx( + self, rval, ); } - late final _TermCriteria_NewPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Double, - ffi.Pointer)>>('TermCriteria_New'); - late final _TermCriteria_New = _TermCriteria_NewPtr.asFunction< - CvStatus Function(int, int, double, ffi.Pointer)>(); + late final _TrainData_GetTestSampleIdxPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTestSampleIdx'); + late final _TrainData_GetTestSampleIdx = _TrainData_GetTestSampleIdxPtr + .asFunction)>(); - CvStatus TermCriteria_Type( - TermCriteria tc, - ffi.Pointer rval, + CvStatus TrainData_GetTestSampleWeights( + TrainData self, + ffi.Pointer rval, ) { - return _TermCriteria_Type( - tc, + return _TrainData_GetTestSampleWeights( + self, rval, ); } - late final _TermCriteria_TypePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Type'); - late final _TermCriteria_Type = _TermCriteria_TypePtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); + late final _TrainData_GetTestSampleWeightsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTestSampleWeights'); + late final _TrainData_GetTestSampleWeights = + _TrainData_GetTestSampleWeightsPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus TextureFlattening( - Mat src, - Mat mask, - Mat dst, - double low_threshold, - double high_threshold, - int kernel_size, + CvStatus TrainData_GetTestSamples( + TrainData self, + ffi.Pointer rval, ) { - return _TextureFlattening( - src, - mask, - dst, - low_threshold, - high_threshold, - kernel_size, + return _TrainData_GetTestSamples( + self, + rval, ); } - late final _TextureFlatteningPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Float, ffi.Float, - ffi.Int)>>('TextureFlattening'); - late final _TextureFlattening = _TextureFlatteningPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double, int)>(); + late final _TrainData_GetTestSamplesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTestSamples'); + late final _TrainData_GetTestSamples = _TrainData_GetTestSamplesPtr + .asFunction)>(); - CvStatus TheRNG( - ffi.Pointer rval, + CvStatus TrainData_GetTrainNormCatResponses( + TrainData self, + ffi.Pointer rval, ) { - return _TheRNG( + return _TrainData_GetTrainNormCatResponses( + self, rval, ); } - late final _TheRNGPtr = - _lookup)>>( - 'TheRNG'); - late final _TheRNG = - _TheRNGPtr.asFunction)>(); + late final _TrainData_GetTrainNormCatResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTrainNormCatResponses'); + late final _TrainData_GetTrainNormCatResponses = + _TrainData_GetTrainNormCatResponsesPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Threshold( - Mat src, - Mat dst, - double thresh, - double maxvalue, - int typ, - ffi.Pointer rval, + CvStatus TrainData_GetTrainResponses( + TrainData self, + ffi.Pointer rval, ) { - return _Threshold( - src, - dst, - thresh, - maxvalue, - typ, + return _TrainData_GetTrainResponses( + self, rval, ); } - late final _ThresholdPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Pointer)>>('Threshold'); - late final _Threshold = _ThresholdPtr.asFunction< - CvStatus Function( - Mat, Mat, double, double, int, ffi.Pointer)>(); + late final _TrainData_GetTrainResponsesPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTrainResponses'); + late final _TrainData_GetTrainResponses = _TrainData_GetTrainResponsesPtr + .asFunction)>(); - CvStatus Trackbar_Create( - ffi.Pointer winname, - ffi.Pointer trackname, - int max, + CvStatus TrainData_GetTrainSampleIdx( + TrainData self, + ffi.Pointer rval, ) { - return _Trackbar_Create( - winname, - trackname, - max, + return _TrainData_GetTrainSampleIdx( + self, + rval, ); } - late final _Trackbar_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_Create'); - late final _Trackbar_Create = _Trackbar_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _TrainData_GetTrainSampleIdxPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTrainSampleIdx'); + late final _TrainData_GetTrainSampleIdx = _TrainData_GetTrainSampleIdxPtr + .asFunction)>(); - CvStatus Trackbar_CreateWithValue( - ffi.Pointer winname, - ffi.Pointer trackname, - ffi.Pointer value, - int max, + CvStatus TrainData_GetTrainSampleWeights( + TrainData self, + ffi.Pointer rval, ) { - return _Trackbar_CreateWithValue( - winname, - trackname, - value, - max, + return _TrainData_GetTrainSampleWeights( + self, + rval, ); } - late final _Trackbar_CreateWithValuePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Int)>>('Trackbar_CreateWithValue'); - late final _Trackbar_CreateWithValue = - _Trackbar_CreateWithValuePtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, int)>(); + late final _TrainData_GetTrainSampleWeightsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetTrainSampleWeights'); + late final _TrainData_GetTrainSampleWeights = + _TrainData_GetTrainSampleWeightsPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Trackbar_GetPos( - ffi.Pointer winname, - ffi.Pointer trackname, - ffi.Pointer rval, + CvStatus TrainData_GetTrainSamples( + TrainData self, + int layout, + bool compressSamples, + bool compressVars, + ffi.Pointer rval, ) { - return _Trackbar_GetPos( - winname, - trackname, + return _TrainData_GetTrainSamples( + self, + layout, + compressSamples, + compressVars, rval, ); } - late final _Trackbar_GetPosPtr = _lookup< + late final _TrainData_GetTrainSamplesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>('Trackbar_GetPos'); - late final _Trackbar_GetPos = _Trackbar_GetPosPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); + CvStatus Function(TrainData, ffi.Int, ffi.Bool, ffi.Bool, + ffi.Pointer)>>('TrainData_GetTrainSamples'); + late final _TrainData_GetTrainSamples = + _TrainData_GetTrainSamplesPtr.asFunction< + CvStatus Function(TrainData, int, bool, bool, ffi.Pointer)>(); - CvStatus Trackbar_SetMax( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, + CvStatus TrainData_GetValues( + TrainData self, + int vi, + Mat sidx, + ffi.Pointer values, ) { - return _Trackbar_SetMax( - winname, - trackname, - pos, + return _TrainData_GetValues( + self, + vi, + sidx, + values, ); } - late final _Trackbar_SetMaxPtr = _lookup< + late final _TrainData_GetValuesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetMax'); - late final _Trackbar_SetMax = _Trackbar_SetMaxPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + CvStatus Function(TrainData, ffi.Int, Mat, + ffi.Pointer)>>('TrainData_GetValues'); + late final _TrainData_GetValues = _TrainData_GetValuesPtr.asFunction< + CvStatus Function(TrainData, int, Mat, ffi.Pointer)>(); - CvStatus Trackbar_SetMin( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, + CvStatus TrainData_GetVarIdx( + TrainData self, + ffi.Pointer rval, ) { - return _Trackbar_SetMin( - winname, - trackname, - pos, + return _TrainData_GetVarIdx( + self, + rval, ); } - late final _Trackbar_SetMinPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetMin'); - late final _Trackbar_SetMin = _Trackbar_SetMinPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _TrainData_GetVarIdxPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetVarIdx'); + late final _TrainData_GetVarIdx = _TrainData_GetVarIdxPtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus Trackbar_SetPos( - ffi.Pointer winname, - ffi.Pointer trackname, - int pos, + CvStatus TrainData_GetVarSymbolFlags( + TrainData self, + ffi.Pointer rval, ) { - return _Trackbar_SetPos( - winname, - trackname, - pos, + return _TrainData_GetVarSymbolFlags( + self, + rval, ); } - late final _Trackbar_SetPosPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, - ffi.Int)>>('Trackbar_SetPos'); - late final _Trackbar_SetPos = _Trackbar_SetPosPtr.asFunction< - CvStatus Function(ffi.Pointer, ffi.Pointer, int)>(); + late final _TrainData_GetVarSymbolFlagsPtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetVarSymbolFlags'); + late final _TrainData_GetVarSymbolFlags = _TrainData_GetVarSymbolFlagsPtr + .asFunction)>(); - void TrackerMIL_Close( - ffi.Pointer self, + CvStatus TrainData_GetVarType( + TrainData self, + ffi.Pointer rval, ) { - return _TrackerMIL_Close( + return _TrainData_GetVarType( self, + rval, ); } - late final _TrackerMIL_ClosePtr = - _lookup)>>( - 'TrackerMIL_Close'); - late final _TrackerMIL_Close = - _TrackerMIL_ClosePtr.asFunction)>(); + late final _TrainData_GetVarTypePtr = _lookup< + ffi.NativeFunction)>>( + 'TrainData_GetVarType'); + late final _TrainData_GetVarType = _TrainData_GetVarTypePtr.asFunction< + CvStatus Function(TrainData, ffi.Pointer)>(); - CvStatus TrackerMIL_Create( - ffi.Pointer rval, + CvStatus TrainData_LoadFromCSV( + ffi.Pointer filename, + int headerLineCount, + int responseStartIdx, + int responseEndIdx, + ffi.Pointer varTypeSpec, + int delimiter, + int missch, + ffi.Pointer rval, + ) { + return _TrainData_LoadFromCSV( + filename, + headerLineCount, + responseStartIdx, + responseEndIdx, + varTypeSpec, + delimiter, + missch, + rval, + ); + } + + late final _TrainData_LoadFromCSVPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Pointer, + ffi.Char, + ffi.Char, + ffi.Pointer)>>('TrainData_LoadFromCSV'); + late final _TrainData_LoadFromCSV = _TrainData_LoadFromCSVPtr.asFunction< + CvStatus Function(ffi.Pointer, int, int, int, + ffi.Pointer, int, int, ffi.Pointer)>(); + + CvStatus TrainData_MissingValue( + ffi.Pointer rval, ) { - return _TrackerMIL_Create( + return _TrainData_MissingValue( rval, ); } - late final _TrackerMIL_CreatePtr = - _lookup)>>( - 'TrackerMIL_Create'); - late final _TrackerMIL_Create = _TrackerMIL_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _TrainData_MissingValuePtr = + _lookup)>>( + 'TrainData_MissingValue'); + late final _TrainData_MissingValue = _TrainData_MissingValuePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus TrackerMIL_Init( - TrackerMIL self, - Mat image, - Rect bbox, + CvStatus TrainData_SetTrainTestSplit( + TrainData self, + int count, + bool shuffle, ) { - return _TrackerMIL_Init( + return _TrainData_SetTrainTestSplit( self, - image, - bbox, + count, + shuffle, ); } - late final _TrackerMIL_InitPtr = - _lookup>( - 'TrackerMIL_Init'); - late final _TrackerMIL_Init = _TrackerMIL_InitPtr.asFunction< - CvStatus Function(TrackerMIL, Mat, Rect)>(); + late final _TrainData_SetTrainTestSplitPtr = _lookup< + ffi.NativeFunction>( + 'TrainData_SetTrainTestSplit'); + late final _TrainData_SetTrainTestSplit = _TrainData_SetTrainTestSplitPtr + .asFunction(); - CvStatus TrackerMIL_Update( - TrackerMIL self, - Mat image, - ffi.Pointer boundingBox, - ffi.Pointer rval, + CvStatus TrainData_SetTrainTestSplitRatio( + TrainData self, + double ratio, + bool shuffle, ) { - return _TrackerMIL_Update( + return _TrainData_SetTrainTestSplitRatio( self, - image, - boundingBox, - rval, + ratio, + shuffle, ); } - late final _TrackerMIL_UpdatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(TrackerMIL, Mat, ffi.Pointer, - ffi.Pointer)>>('TrackerMIL_Update'); - late final _TrackerMIL_Update = _TrackerMIL_UpdatePtr.asFunction< - CvStatus Function( - TrackerMIL, Mat, ffi.Pointer, ffi.Pointer)>(); + late final _TrainData_SetTrainTestSplitRatioPtr = _lookup< + ffi + .NativeFunction>( + 'TrainData_SetTrainTestSplitRatio'); + late final _TrainData_SetTrainTestSplitRatio = + _TrainData_SetTrainTestSplitRatioPtr.asFunction< + CvStatus Function(TrainData, double, bool)>(); + + CvStatus TrainData_ShuffleTrainTest( + TrainData self, + ) { + return _TrainData_ShuffleTrainTest( + self, + ); + } + + late final _TrainData_ShuffleTrainTestPtr = + _lookup>( + 'TrainData_ShuffleTrainTest'); + late final _TrainData_ShuffleTrainTest = + _TrainData_ShuffleTrainTestPtr.asFunction(); CvStatus Undistort( Mat src, @@ -17414,6 +19077,8 @@ class _SymbolAddresses { get Net_Close => _library._Net_ClosePtr; ffi.Pointer)>> get ORB_Close => _library._ORB_ClosePtr; + ffi.Pointer)>> + get ParamGrid_Close => _library._ParamGrid_ClosePtr; ffi.Pointer< ffi.NativeFunction)>> get QRCodeDetector_Close => _library._QRCodeDetector_ClosePtr; @@ -17421,6 +19086,8 @@ class _SymbolAddresses { get Rng_Close => _library._Rng_ClosePtr; ffi.Pointer)>> get SIFT_Close => _library._SIFT_ClosePtr; + ffi.Pointer)>> + get SVM_Close => _library._SVM_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -17433,6 +19100,8 @@ class _SymbolAddresses { get TermCriteria_Close => _library._TermCriteria_ClosePtr; ffi.Pointer)>> get TrackerMIL_Close => _library._TrackerMIL_ClosePtr; + ffi.Pointer)>> + get TrainData_Close => _library._TrainData_ClosePtr; ffi.Pointer)>> get VecChar_Close => _library._VecChar_ClosePtr; ffi.Pointer)>> @@ -17962,6 +19631,20 @@ final class NO_USE_ORBPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_ParamGridPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrSVMPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17969,6 +19652,13 @@ final class NO_USE_PtrStitcherPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrTrainDataPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -17990,6 +19680,13 @@ final class NO_USE_SIFTPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_SVMPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -18039,6 +19736,13 @@ final class NO_USE_TrackerPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_TrainDataPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -18191,6 +19895,12 @@ final class ORB extends ffi.Struct { typedef ORBPtr = ffi.Pointer; +final class ParamGrid extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef ParamGridPtr = ffi.Pointer; + final class Point extends ffi.Struct { @ffi.Int() external int x; @@ -18218,12 +19928,28 @@ final class Point3f extends ffi.Struct { external double z; } +final class PtrParamGrid extends ffi.Struct { + external ffi.Pointer> ptr; +} + +final class PtrSVM extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrSVMPtr = ffi.Pointer; + final class PtrStitcher extends ffi.Struct { external ffi.Pointer> ptr; } typedef PtrStitcherPtr = ffi.Pointer; +final class PtrTrainData extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrTrainDataPtr = ffi.Pointer; + final class QRCodeDetector extends ffi.Struct { external ffi.Pointer ptr; } @@ -18291,6 +20017,12 @@ const int STITCHING_PANORAMA = 0; const int STITCHING_SCANS = 1; +final class SVM extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef SVMPtr = ffi.Pointer; + final class Scalar extends ffi.Struct { @ffi.Double() external double val1; @@ -18421,6 +20153,12 @@ final class TrackerMIL extends ffi.Struct { typedef TrackerMILPtr = ffi.Pointer; typedef TrackerPtr = ffi.Pointer; +final class TrainData extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef TrainDataPtr = ffi.Pointer; + final class Vec2b extends ffi.Struct { @uchar() external int val1; diff --git a/src/ml/ml.cpp b/src/ml/ml.cpp new file mode 100644 index 00000000..a9451725 --- /dev/null +++ b/src/ml/ml.cpp @@ -0,0 +1 @@ +#include "ml.h" diff --git a/src/ml/ml.h b/src/ml/ml.h new file mode 100644 index 00000000..fd91ea81 --- /dev/null +++ b/src/ml/ml.h @@ -0,0 +1,29 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_H +#define CVD_ML_H + +#include "core/core.h" +#include "core/exception.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus + +#else + +#endif + +// Wrappers + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/svm.cpp b/src/ml/svm.cpp new file mode 100644 index 00000000..472b47f2 --- /dev/null +++ b/src/ml/svm.cpp @@ -0,0 +1,49 @@ +#include "svm.h" + +// ParamGrid +CvStatus ParamGrid_Empty(ParamGrid *rval) +{ + BEGIN_WRAP + *rval = {new cv::ml::ParamGrid()}; + END_WRAP +} +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, ParamGrid *rval) +{ + BEGIN_WRAP + *rval = {new cv::ml::ParamGrid(minVal, maxVal, logstep)}; + END_WRAP +} +CvStatus ParamGrid_getMinVal(ParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->minVal; + END_WRAP +} +CvStatus ParamGrid_GetMaxVal(ParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->maxVal; + END_WRAP +} +CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->logStep; + END_WRAP +} +void ParamGrid_Close(PtrParamGrid *self){CVD_FREE(self)} + +CvStatus SVM_Create(PtrSVM *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} +void SVM_Close(PtrSVM *self){CVD_FREE(self)} + +CvStatus SVM_Get(PtrSVM self, SVM *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} diff --git a/src/ml/svm.h b/src/ml/svm.h new file mode 100644 index 00000000..711c86f2 --- /dev/null +++ b/src/ml/svm.h @@ -0,0 +1,98 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_SVM_H +#define CVD_ML_SVM_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +// https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html +CVD_TYPEDEF(cv::Ptr, PtrSVM) +CVD_TYPEDEF(cv::ml::SVM, SVM) +CVD_TYPEDEF(cv::Ptr, PtrParamGrid) +CVD_TYPEDEF(cv::ml::ParamGrid, ParamGrid) +#else +CVD_TYPEDEF(void *, PtrSVM) +CVD_TYPEDEF(void, SVM) +CVD_TYPEDEF(void *, PtrParamGrid) +CVD_TYPEDEF(void, ParamGrid) +#endif + +CVD_TYPEDEF_PTR(PtrSVM) +CVD_TYPEDEF_PTR(SVM) +CVD_TYPEDEF_PTR(ParamGrid) + +// ParamGrid +CvStatus ParamGrid_Empty(ParamGrid *rval); +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, ParamGrid *rval); +CvStatus ParamGrid_getMinVal(ParamGrid self, double *rval); +CvStatus ParamGrid_GetMaxVal(ParamGrid self, double *rval); +CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval); +void ParamGrid_Close(PtrParamGrid *self); + +// SVM +CvStatus SVM_Create(PtrSVM *rval); +void SVM_Close(PtrSVM *self); +CvStatus SVM_Get(PtrSVM self, SVM *rval); + +CvStatus SVM_GetC(SVM self, double *rval); +CvStatus SVM_GetClassWeights(SVM self, Mat *rval); +CvStatus SVM_GetCoef0(SVM self, double *rval); +CvStatus SVM_GetDecisionFunction(SVM self, int i, Mat alpha, Mat svidx, double *rval); +CvStatus SVM_GetDegree(SVM self, double *rval); +CvStatus SVM_GetGamma(SVM self, double *rval); +CvStatus SVM_GetKernelType(SVM self, int *rval); +CvStatus SVM_GetNu(SVM self, double *rval); +CvStatus SVM_GetP(SVM self, double *rval); +CvStatus SVM_GetSupportVectors(SVM self, Mat *rval); +CvStatus SVM_GetTermCriteria(SVM self, TermCriteria *rval); +CvStatus SVM_GetType(SVM self, int *rval); +CvStatus SVM_GetUncompressedSupportVectors(SVM self, Mat *rval); +CvStatus SVM_SetC(SVM self, double val); +CvStatus SVM_SetClassWeights(SVM self, Mat val); +CvStatus SVM_SetCoef0(SVM self, double val); +// CvStatus SVM_SetCustomKernel(SVM self, ); TODO +CvStatus SVM_SetDegree(SVM self, double val); +CvStatus SVM_SetGamma(SVM self, double val); +CvStatus SVM_SetKernel(SVM self, int kernelType); +CvStatus SVM_SetNu(SVM self, double val); +CvStatus SVM_SetP(SVM self, double val); +CvStatus SVM_SetTermCriteria(SVM self, TermCriteria val); +CvStatus SVM_SetType(SVM self, int val); +CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, ParamGrid gammaGrid, + ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, + bool balanced, bool *rval); +CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, + ParamGrid gammaGrid, ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, + ParamGrid degreeGrid, bool balanced, bool *rval); +CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval); +CvStatus SVM_Empty(SVM self, bool *rval); +CvStatus SVM_GetVarCount(SVM self, int *rval); +CvStatus SVM_IsClassifier(SVM self, bool *rval); +CvStatus SVM_IsTrained(SVM self, bool *rval); +CvStatus SVM_Predict(SVM self, Mat samples, Mat results, int flags, float *rval); +CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval); +CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus SVM_Clear(SVM self); +CvStatus SVM_GetDefaultName(SVM self, char *rval); +CvStatus SVM_GetDefaultGrid(SVM self, ParamGrid *rval); +CvStatus SVM_GetDefaultGridPtr(SVM self, PtrParamGrid *rval); +CvStatus SVM_Save(SVM self, char *filename); +CvStatus SVM_Load(SVM self, char *filepath); +CvStatus SVM_LoadFromString(SVM self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/train_data.cpp b/src/ml/train_data.cpp new file mode 100644 index 00000000..4acdde2b --- /dev/null +++ b/src/ml/train_data.cpp @@ -0,0 +1,275 @@ +#include "train_data.h" +#include + +CvStatus TrainData_Create(Mat samples, int layout, Mat responses, Mat varIdx, Mat sampleIdx, + Mat sampleWeights, Mat varType, PtrTrainData *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::create(*samples.ptr, layout, *responses.ptr, *varIdx.ptr, *sampleIdx.ptr, + *sampleWeights.ptr, *varType.ptr); + *rval = {new cv::Ptr(p)}; + END_WRAP +} +CvStatus TrainData_LoadFromCSV(char *filename, int headerLineCount, int responseStartIdx, int responseEndIdx, + char *varTypeSpec, char delimiter, char missch, PtrTrainData *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::loadFromCSV(filename, headerLineCount, responseStartIdx, responseEndIdx, + varTypeSpec, delimiter, missch); + *rval = {new cv::Ptr(p)}; + END_WRAP +} +void TrainData_Close(PtrTrainData *self){CVD_FREE(self)} + +CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval) +{ + BEGIN_WRAP + *rval = {self->ptr->get()}; + END_WRAP +} + +CvStatus TrainData_GetSubMatrix(const Mat &matrix, const Mat &idx, int layout, Mat *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::getSubMatrix(*matrix.ptr, *idx.ptr, layout); + *rval = {new cv::Mat(p)}; + END_WRAP +} +CvStatus TrainData_GetSubVector(const Mat &vec, const Mat &idx, Mat *rval) +{ + BEGIN_WRAP + auto p = cv::ml::TrainData::getSubVector(*vec.ptr, *idx.ptr); + *rval = {new cv::Mat(p)}; + END_WRAP +} +CvStatus TrainData_MissingValue(float *rval) +{ + BEGIN_WRAP + *rval = cv::ml::TrainData::missingValue(); + END_WRAP +} + +CvStatus TrainData_GetCatCount(TrainData self, int vi, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCatCount(vi); + END_WRAP +} +CvStatus TrainData_GetCatMap(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getCatMap())}; + END_WRAP +} +CvStatus TrainData_GetCatOfs(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getCatOfs())}; + END_WRAP +} +CvStatus TrainData_GetClassLabels(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getCatOfs())}; + END_WRAP +} +CvStatus TrainData_GetDefaultSubstValues(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getDefaultSubstValues())}; + END_WRAP +} +CvStatus TrainData_GetLayout(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getLayout(); + END_WRAP +} +CvStatus TrainData_GetMissing(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getMissing())}; + END_WRAP +} +CvStatus TrainData_GetNAllVars(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNAllVars(); + END_WRAP +} +CvStatus TrainData_GetNames(TrainData self, VecVecChar *names) +{ + BEGIN_WRAP + auto vec = new std::vector>(); + std::vector cstrs; + self.ptr->getNames(cstrs); + for (size_t i = 0; i < cstrs.size(); i++) { + std::vector cstr(cstrs[i].begin(), cstrs[i].end()); + vec->push_back(cstr); + } + *names = {vec}; + END_WRAP +} +CvStatus TrainData_GetNormCatResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetNSamples(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNSamples(); + END_WRAP +} +CvStatus TrainData_GetNTestSamples(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNTestSamples(); + END_WRAP +} +CvStatus TrainData_GetNTrainSamples(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNTrainSamples(); + END_WRAP +} +CvStatus TrainData_GetNVars(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNVars(); + END_WRAP +} +CvStatus TrainData_GetResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getResponses())}; + END_WRAP +} +CvStatus TrainData_GetResponseType(TrainData self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getResponseType(); + END_WRAP +} +CvStatus TrainData_GetSample(TrainData self, Mat varIdx, int sidx, float *buf) +{ + BEGIN_WRAP + self.ptr->getSample(*varIdx.ptr, sidx, buf); + END_WRAP +} +CvStatus TrainData_GetSamples(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getSamples())}; + END_WRAP +} +CvStatus TrainData_GetSampleWeights(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetTestNormCatResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTestNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetTestResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTestResponses())}; + END_WRAP +} +CvStatus TrainData_GetTestSampleIdx(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTestSampleIdx())}; + END_WRAP +} +CvStatus TrainData_GetTestSamples(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTestSamples())}; + END_WRAP +} +CvStatus TrainData_GetTestSampleWeights(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTestSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetTrainNormCatResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTrainNormCatResponses())}; + END_WRAP +} +CvStatus TrainData_GetTrainResponses(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTrainResponses())}; + END_WRAP +} +CvStatus TrainData_GetTrainSampleIdx(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTrainSampleIdx())}; + END_WRAP +} +CvStatus TrainData_GetTrainSamples(TrainData self, int layout, bool compressSamples, bool compressVars, + Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTrainSamples(layout, compressSamples, compressVars))}; + END_WRAP +} +CvStatus TrainData_GetTrainSampleWeights(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getTrainSampleWeights())}; + END_WRAP +} +CvStatus TrainData_GetValues(TrainData self, int vi, Mat sidx, float *values) +{ + BEGIN_WRAP + self.ptr->getValues(vi, *sidx.ptr, values); + END_WRAP +} +CvStatus TrainData_GetVarIdx(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getVarIdx())}; + END_WRAP +} +CvStatus TrainData_GetVarSymbolFlags(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getVarSymbolFlags())}; + END_WRAP +} +CvStatus TrainData_GetVarType(TrainData self, Mat *rval) +{ + BEGIN_WRAP + *rval = {new cv::Mat(self.ptr->getVarType())}; + END_WRAP +} +CvStatus TrainData_SetTrainTestSplit(TrainData self, int count, bool shuffle) +{ + BEGIN_WRAP + self.ptr->setTrainTestSplit(count, shuffle); + END_WRAP +} +CvStatus TrainData_SetTrainTestSplitRatio(TrainData self, double ratio, bool shuffle) +{ + BEGIN_WRAP + self.ptr->setTrainTestSplitRatio(ratio, shuffle); + END_WRAP +} +CvStatus TrainData_ShuffleTrainTest(TrainData self) +{ + BEGIN_WRAP + self.ptr->shuffleTrainTest(); + END_WRAP +} diff --git a/src/ml/train_data.h b/src/ml/train_data.h new file mode 100644 index 00000000..885654f3 --- /dev/null +++ b/src/ml/train_data.h @@ -0,0 +1,85 @@ +/* + Created by Rainyl. + Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. +*/ + +#ifndef CVD_ML_TRAINDATA_H +#define CVD_ML_TRAINDATA_H + +#include "core/core.h" +#include "core/exception.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html +CVD_TYPEDEF(cv::Ptr, PtrTrainData) +CVD_TYPEDEF(cv::ml::TrainData, TrainData) +#else +CVD_TYPEDEF(void *, PtrTrainData) +CVD_TYPEDEF(void, TrainData) +#endif + +CVD_TYPEDEF_PTR(PtrTrainData) +CVD_TYPEDEF_PTR(TrainData) + +// TrainData +CvStatus TrainData_Create(Mat samples, int layout, Mat responses, Mat varIdx, Mat sampleIdx, + Mat sampleWeights, Mat varType, PtrTrainData *rval); +CvStatus TrainData_LoadFromCSV(char *filename, int headerLineCount, int responseStartIdx, int responseEndIdx, + char *varTypeSpec, char delimiter, char missch, PtrTrainData *rval); +void TrainData_Close(PtrTrainData *self); +CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval); +// static functions +// input matrix (supported types: CV_32S, CV_32F, CV_64F) +CvStatus TrainData_GetSubMatrix(const Mat matrix, const Mat idx, int layout, Mat *rval); +CvStatus TrainData_GetSubVector(const Mat vec, const Mat idx, Mat *rval); +CvStatus TrainData_MissingValue(float *rval); + +// member functions +CvStatus TrainData_GetCatCount(TrainData self, int vi, int *rval); +CvStatus TrainData_GetCatMap(TrainData self, Mat *rval); +CvStatus TrainData_GetCatOfs(TrainData self, Mat *rval); +CvStatus TrainData_GetClassLabels(TrainData self, Mat *rval); +CvStatus TrainData_GetDefaultSubstValues(TrainData self, Mat *rval); +CvStatus TrainData_GetLayout(TrainData self, int *rval); +CvStatus TrainData_GetMissing(TrainData self, Mat *rval); +CvStatus TrainData_GetNAllVars(TrainData self, int *rval); +CvStatus TrainData_GetNames(TrainData self, VecVecChar *names); +CvStatus TrainData_GetNormCatResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetNSamples(TrainData self, int *rval); +CvStatus TrainData_GetNTestSamples(TrainData self, int *rval); +CvStatus TrainData_GetNTrainSamples(TrainData self, int *rval); +CvStatus TrainData_GetNVars(TrainData self, int *rval); +CvStatus TrainData_GetResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetResponseType(TrainData self, int *rval); +CvStatus TrainData_GetSample(TrainData self, Mat varIdx, int sidx, float *buf); +CvStatus TrainData_GetSamples(TrainData self, Mat *rval); +CvStatus TrainData_GetSampleWeights(TrainData self, Mat *rval); +CvStatus TrainData_GetTestNormCatResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetTestResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleIdx(TrainData self, Mat *rval); +CvStatus TrainData_GetTestSamples(TrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleWeights(TrainData self, Mat *rval); +CvStatus TrainData_GetTrainNormCatResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetTrainResponses(TrainData self, Mat *rval); +CvStatus TrainData_GetTrainSampleIdx(TrainData self, Mat *rval); +CvStatus TrainData_GetTrainSamples(TrainData self, int layout, bool compressSamples, bool compressVars, + Mat *rval); +CvStatus TrainData_GetTrainSampleWeights(TrainData self, Mat *rval); +CvStatus TrainData_GetValues(TrainData self, int vi, Mat sidx, float *values); +CvStatus TrainData_GetVarIdx(TrainData self, Mat *rval); +CvStatus TrainData_GetVarSymbolFlags(TrainData self, Mat *rval); +CvStatus TrainData_GetVarType(TrainData self, Mat *rval); +CvStatus TrainData_SetTrainTestSplit(TrainData self, int count, bool shuffle); +CvStatus TrainData_SetTrainTestSplitRatio(TrainData self, double ratio, bool shuffle); +CvStatus TrainData_ShuffleTrainTest(TrainData self); + +#ifdef __cplusplus +} +#endif + +#endif From ba41e45772a76b3dc6470703dd13995b26efa845 Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sat, 25 May 2024 14:17:35 +0300 Subject: [PATCH 02/10] implementing the rest of ml classes --- src/ml/DTrees.cpp | 201 +++++++++++++++++++ src/ml/DTrees.h | 64 ++++++ src/ml/ann_mlp.cpp | 278 ++++++++++++++++++++++++++ src/ml/ann_mlp.h | 75 +++++++ src/ml/boost.cpp | 117 +++++++++++ src/ml/boost.h | 52 +++++ src/ml/em.cpp | 131 ++++++++++++ src/ml/em.h | 54 +++++ src/ml/knearest.cpp | 131 ++++++++++++ src/ml/knearest.h | 54 +++++ src/ml/logistic_regression.cpp | 166 ++++++++++++++++ src/ml/logistic_regression.h | 59 ++++++ src/ml/normal_bayes_classifier.cpp | 75 +++++++ src/ml/normal_bayes_classifier.h | 46 +++++ src/ml/rtrees.cpp | 131 ++++++++++++ src/ml/rtrees.h | 54 +++++ src/ml/svm.cpp | 307 ++++++++++++++++++++++++++++- src/ml/svmsgd.cpp | 173 ++++++++++++++++ src/ml/svmsgd.h | 60 ++++++ 19 files changed, 2226 insertions(+), 2 deletions(-) create mode 100644 src/ml/DTrees.cpp create mode 100644 src/ml/DTrees.h create mode 100644 src/ml/ann_mlp.cpp create mode 100644 src/ml/ann_mlp.h create mode 100644 src/ml/boost.cpp create mode 100644 src/ml/boost.h create mode 100644 src/ml/em.cpp create mode 100644 src/ml/em.h create mode 100644 src/ml/knearest.cpp create mode 100644 src/ml/knearest.h create mode 100644 src/ml/logistic_regression.cpp create mode 100644 src/ml/logistic_regression.h create mode 100644 src/ml/normal_bayes_classifier.cpp create mode 100644 src/ml/normal_bayes_classifier.h create mode 100644 src/ml/rtrees.cpp create mode 100644 src/ml/rtrees.h create mode 100644 src/ml/svmsgd.cpp create mode 100644 src/ml/svmsgd.h diff --git a/src/ml/DTrees.cpp b/src/ml/DTrees.cpp new file mode 100644 index 00000000..2f333582 --- /dev/null +++ b/src/ml/DTrees.cpp @@ -0,0 +1,201 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "dtrees.h" + +// DTrees +CvStatus DTrees_Create(PtrDTrees *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void DTrees_Close(PtrDTrees *self) +{ + CVD_FREE(self) +} + +CvStatus DTrees_Get(PtrDTrees self, DTrees *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus DTrees_GetMaxCategories(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMaxCategories(); + END_WRAP +} + +CvStatus DTrees_SetMaxCategories(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMaxCategories(val); + END_WRAP +} + +CvStatus DTrees_GetMaxDepth(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMaxDepth(); + END_WRAP +} + +CvStatus DTrees_SetMaxDepth(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMaxDepth(val); + END_WRAP +} + +CvStatus DTrees_GetMinSampleCount(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMinSampleCount(); + END_WRAP +} + +CvStatus DTrees_SetMinSampleCount(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setMinSampleCount(val); + END_WRAP +} + +CvStatus DTrees_GetCVFolds(DTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCVFolds(); + END_WRAP +} + +CvStatus DTrees_SetCVFolds(DTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setCVFolds(val); + END_WRAP +} + +CvStatus DTrees_GetUseSurrogates(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getUseSurrogates(); + END_WRAP +} + +CvStatus DTrees_SetUseSurrogates(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setUseSurrogates(val); + END_WRAP +} + +CvStatus DTrees_GetUse1SERule(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getUse1SERule(); + END_WRAP +} + +CvStatus DTrees_SetUse1SERule(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setUse1SERule(val); + END_WRAP +} + +CvStatus DTrees_GetTruncatePrunedTree(DTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTruncatePrunedTree(); + END_WRAP +} + +CvStatus DTrees_SetTruncatePrunedTree(DTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setTruncatePrunedTree(val); + END_WRAP +} + +CvStatus DTrees_GetRegressionAccuracy(DTrees self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRegressionAccuracy(); + END_WRAP +} + +CvStatus DTrees_SetRegressionAccuracy(DTrees self, float val) +{ + BEGIN_WRAP + self.ptr->setRegressionAccuracy(val); + END_WRAP +} + +CvStatus DTrees_GetPriors(DTrees self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getPriors()}; + END_WRAP +} + +CvStatus DTrees_SetPriors(DTrees self, Mat val) +{ + BEGIN_WRAP + self.ptr->setPriors(val.ptr); + END_WRAP +} + +CvStatus DTrees_Predict(DTrees self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus DTrees_Train(DTrees self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus DTrees_Train_1(DTrees self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus DTrees_Clear(DTrees self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus DTrees_Save(DTrees self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus DTrees_Load(DTrees self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::DTrees::load(filepath); + END_WRAP +} + +CvStatus DTrees_LoadFromString(DTrees self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/DTrees.h b/src/ml/DTrees.h new file mode 100644 index 00000000..85b4b8d6 --- /dev/null +++ b/src/ml/DTrees.h @@ -0,0 +1,64 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_DTREES_H +#define CVD_ML_DTREES_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrDTrees) +CVD_TYPEDEF(cv::ml::DTrees, DTrees) +#else +CVD_TYPEDEF(void *, PtrDTrees) +CVD_TYPEDEF(void, DTrees) +#endif + +CVD_TYPEDEF_PTR(PtrDTrees) +CVD_TYPEDEF_PTR(DTrees) + +// DTrees +CvStatus DTrees_Create(PtrDTrees *rval); +void DTrees_Close(PtrDTrees *self); +CvStatus DTrees_Get(PtrDTrees self, DTrees *rval); + +CvStatus DTrees_GetMaxCategories(DTrees self, int *rval); +CvStatus DTrees_SetMaxCategories(DTrees self, int val); +CvStatus DTrees_GetMaxDepth(DTrees self, int *rval); +CvStatus DTrees_SetMaxDepth(DTrees self, int val); +CvStatus DTrees_GetMinSampleCount(DTrees self, int *rval); +CvStatus DTrees_SetMinSampleCount(DTrees self, int val); +CvStatus DTrees_GetCVFolds(DTrees self, int *rval); +CvStatus DTrees_SetCVFolds(DTrees self, int val); +CvStatus DTrees_GetUseSurrogates(DTrees self, bool *rval); +CvStatus DTrees_SetUseSurrogates(DTrees self, bool val); +CvStatus DTrees_GetUse1SERule(DTrees self, bool *rval); +CvStatus DTrees_SetUse1SERule(DTrees self, bool val); +CvStatus DTrees_GetTruncatePrunedTree(DTrees self, bool *rval); +CvStatus DTrees_SetTruncatePrunedTree(DTrees self, bool val); +CvStatus DTrees_GetRegressionAccuracy(DTrees self, float *rval); +CvStatus DTrees_SetRegressionAccuracy(DTrees self, float val); +CvStatus DTrees_GetPriors(DTrees self, Mat *rval); +CvStatus DTrees_SetPriors(DTrees self, Mat val); +CvStatus DTrees_Predict(DTrees self, Mat samples, Mat results, int flags, float *rval); +CvStatus DTrees_Train(DTrees self, PtrTrainData trainData, int flags, bool *rval); +CvStatus DTrees_Train_1(DTrees self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus DTrees_Clear(DTrees self); +CvStatus DTrees_Save(DTrees self, char *filename); +CvStatus DTrees_Load(DTrees self, char *filepath); +CvStatus DTrees_LoadFromString(DTrees self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/ann_mlp.cpp b/src/ml/ann_mlp.cpp new file mode 100644 index 00000000..c30a489c --- /dev/null +++ b/src/ml/ann_mlp.cpp @@ -0,0 +1,278 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "ann_mlp.h" + +// ANN_MLP +CvStatus ANN_MLP_Create(PtrANN_MLP *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void ANN_MLP_Close(PtrANN_MLP *self) +{ + CVD_FREE(self) +} + +CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus ANN_MLP_SetTrainMethod(ANN_MLP self, int method, double param1, double param2) +{ + BEGIN_WRAP + self.ptr->setTrainMethod(method, param1, param2); + END_WRAP +} + +CvStatus ANN_MLP_GetTrainMethod(ANN_MLP self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTrainMethod(); + END_WRAP +} + +CvStatus ANN_MLP_SetActivationFunction(ANN_MLP self, int type, double param1, double param2) +{ + BEGIN_WRAP + self.ptr->setActivationFunction(type, param1, param2); + END_WRAP +} + +CvStatus ANN_MLP_SetLayerSizes(ANN_MLP self, Mat _layer_sizes) +{ + BEGIN_WRAP + self.ptr->setLayerSizes(_layer_sizes.ptr); + END_WRAP +} + +CvStatus ANN_MLP_GetLayerSizes(ANN_MLP self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getLayerSizes()}; + END_WRAP +} + +CvStatus ANN_MLP_SetTermCriteria(ANN_MLP self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus ANN_MLP_GetTermCriteria(ANN_MLP self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus ANN_MLP_SetBackpropWeightScale(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setBackpropWeightScale(val); + END_WRAP +} + +CvStatus ANN_MLP_GetBackpropWeightScale(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getBackpropWeightScale(); + END_WRAP +} + +CvStatus ANN_MLP_SetBackpropMomentumScale(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setBackpropMomentumScale(val); + END_WRAP +} + +CvStatus ANN_MLP_GetBackpropMomentumScale(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getBackpropMomentumScale(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDW0(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setRpropDW0(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDW0(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRpropDW0(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWPlus(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setRpropDWPlus(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWPlus(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRpropDWPlus(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMinus(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setRpropDWMinus(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMinus(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRpropDWMinus(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMin(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setRpropDWMin(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMin(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRpropDWMin(); + END_WRAP +} + +CvStatus ANN_MLP_SetRpropDWMax(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setRpropDWMax(val); + END_WRAP +} + +CvStatus ANN_MLP_GetRpropDWMax(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRpropDWMax(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealInitialT(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setAnnealInitialT(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealInitialT(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAnnealInitialT(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealFinalT(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setAnnealFinalT(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealFinalT(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAnnealFinalT(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealCoolingRatio(ANN_MLP self, double val) +{ + BEGIN_WRAP + self.ptr->setAnnealCoolingRatio(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealCoolingRatio(ANN_MLP self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAnnealCoolingRatio(); + END_WRAP +} + +CvStatus ANN_MLP_SetAnnealItePerStep(ANN_MLP self, int val) +{ + BEGIN_WRAP + self.ptr->setAnnealItePerStep(val); + END_WRAP +} + +CvStatus ANN_MLP_GetAnnealItePerStep(ANN_MLP self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAnnealItePerStep(); + END_WRAP +} + +CvStatus ANN_MLP_Predict(ANN_MLP self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus ANN_MLP_Train(ANN_MLP self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus ANN_MLP_Train_1(ANN_MLP self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus ANN_MLP_Clear(ANN_MLP self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus ANN_MLP_Save(ANN_MLP self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus ANN_MLP_Load(ANN_MLP self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::ANN_MLP::load(filepath); + END_WRAP +} + +CvStatus ANN_MLP_LoadFromString(ANN_MLP self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/ann_mlp.h b/src/ml/ann_mlp.h new file mode 100644 index 00000000..cee7ee3d --- /dev/null +++ b/src/ml/ann_mlp.h @@ -0,0 +1,75 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_ANN_MLP_H +#define CVD_ML_ANN_MLP_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrANN_MLP) +CVD_TYPEDEF(cv::ml::ANN_MLP, ANN_MLP) +#else +CVD_TYPEDEF(void *, PtrANN_MLP) +CVD_TYPEDEF(void, ANN_MLP) +#endif + +CVD_TYPEDEF_PTR(PtrANN_MLP) +CVD_TYPEDEF_PTR(ANN_MLP) + +// ANN_MLP +CvStatus ANN_MLP_Create(PtrANN_MLP *rval); +void ANN_MLP_Close(PtrANN_MLP *self); +CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval); + +CvStatus ANN_MLP_SetTrainMethod(ANN_MLP self, int method, double param1, double param2); +CvStatus ANN_MLP_GetTrainMethod(ANN_MLP self, int *rval); +CvStatus ANN_MLP_SetActivationFunction(ANN_MLP self, int type, double param1, double param2); +CvStatus ANN_MLP_SetLayerSizes(ANN_MLP self, Mat _layer_sizes); +CvStatus ANN_MLP_GetLayerSizes(ANN_MLP self, Mat *rval); +CvStatus ANN_MLP_SetTermCriteria(ANN_MLP self, TermCriteria val); +CvStatus ANN_MLP_GetTermCriteria(ANN_MLP self, TermCriteria *rval); +CvStatus ANN_MLP_SetBackpropWeightScale(ANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropWeightScale(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetBackpropMomentumScale(ANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropMomentumScale(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDW0(ANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDW0(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWPlus(ANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWPlus(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMinus(ANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMinus(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMin(ANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMin(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMax(ANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMax(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealInitialT(ANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealInitialT(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealFinalT(ANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealFinalT(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealCoolingRatio(ANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealCoolingRatio(ANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealItePerStep(ANN_MLP self, int val); +CvStatus ANN_MLP_GetAnnealItePerStep(ANN_MLP self, int *rval); +CvStatus ANN_MLP_Predict(ANN_MLP self, Mat samples, Mat results, int flags, float *rval); +CvStatus ANN_MLP_Train(ANN_MLP self, PtrTrainData trainData, int flags, bool *rval); +CvStatus ANN_MLP_Train_1(ANN_MLP self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus ANN_MLP_Clear(ANN_MLP self); +CvStatus ANN_MLP_Save(ANN_MLP self, char *filename); +CvStatus ANN_MLP_Load(ANN_MLP self, char *filepath); +CvStatus ANN_MLP_LoadFromString(ANN_MLP self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/boost.cpp b/src/ml/boost.cpp new file mode 100644 index 00000000..88c7eb11 --- /dev/null +++ b/src/ml/boost.cpp @@ -0,0 +1,117 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "boost.h" + +// Boost +CvStatus Boost_Create(PtrBoost *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void Boost_Close(PtrBoost *self) +{ + CVD_FREE(self) +} + +CvStatus Boost_Get(PtrBoost self, Boost *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus Boost_GetBoostType(Boost self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getBoostType(); + END_WRAP +} + +CvStatus Boost_SetBoostType(Boost self, int val) +{ + BEGIN_WRAP + self.ptr->setBoostType(val); + END_WRAP +} + +CvStatus Boost_GetWeakCount(Boost self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getWeakCount(); + END_WRAP +} + +CvStatus Boost_SetWeakCount(Boost self, int val) +{ + BEGIN_WRAP + self.ptr->setWeakCount(val); + END_WRAP +} + +CvStatus Boost_GetWeightTrimRate(Boost self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getWeightTrimRate(); + END_WRAP +} + +CvStatus Boost_SetWeightTrimRate(Boost self, double val) +{ + BEGIN_WRAP + self.ptr->setWeightTrimRate(val); + END_WRAP +} + +CvStatus Boost_Predict(Boost self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus Boost_Train(Boost self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus Boost_Train_1(Boost self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus Boost_Clear(Boost self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus Boost_Save(Boost self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus Boost_Load(Boost self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::Boost::load(filepath); + END_WRAP +} + +CvStatus Boost_LoadFromString(Boost self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/boost.h b/src/ml/boost.h new file mode 100644 index 00000000..458d1542 --- /dev/null +++ b/src/ml/boost.h @@ -0,0 +1,52 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_BOOST_H +#define CVD_ML_BOOST_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrBoost) +CVD_TYPEDEF(cv::ml::Boost, Boost) +#else +CVD_TYPEDEF(void *, PtrBoost) +CVD_TYPEDEF(void, Boost) +#endif + +CVD_TYPEDEF_PTR(PtrBoost) +CVD_TYPEDEF_PTR(Boost) + +// Boost +CvStatus Boost_Create(PtrBoost *rval); +void Boost_Close(PtrBoost *self); +CvStatus Boost_Get(PtrBoost self, Boost *rval); + +CvStatus Boost_GetBoostType(Boost self, int *rval); +CvStatus Boost_SetBoostType(Boost self, int val); +CvStatus Boost_GetWeakCount(Boost self, int *rval); +CvStatus Boost_SetWeakCount(Boost self, int val); +CvStatus Boost_GetWeightTrimRate(Boost self, double *rval); +CvStatus Boost_SetWeightTrimRate(Boost self, double val); +CvStatus Boost_Predict(Boost self, Mat samples, Mat results, int flags, float *rval); +CvStatus Boost_Train(Boost self, PtrTrainData trainData, int flags, bool *rval); +CvStatus Boost_Train_1(Boost self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus Boost_Clear(Boost self); +CvStatus Boost_Save(Boost self, char *filename); +CvStatus Boost_Load(Boost self, char *filepath); +CvStatus Boost_LoadFromString(Boost self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/em.cpp b/src/ml/em.cpp new file mode 100644 index 00000000..cd63d124 --- /dev/null +++ b/src/ml/em.cpp @@ -0,0 +1,131 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "em.h" + +// EM +CvStatus EM_Create(PtrEM *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void EM_Close(PtrEM *self) +{ + CVD_FREE(self) +} + +CvStatus EM_Get(PtrEM self, EM *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus EM_GetClustersNumber(EM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getClustersNumber(); + END_WRAP +} + +CvStatus EM_SetClustersNumber(EM self, int val) +{ + BEGIN_WRAP + self.ptr->setClustersNumber(val); + END_WRAP +} + +CvStatus EM_GetCovarianceMatrixType(EM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCovarianceMatrixType(); + END_WRAP +} + +CvStatus EM_SetCovarianceMatrixType(EM self, int val) +{ + BEGIN_WRAP + self.ptr->setCovarianceMatrixType(val); + END_WRAP +} + +CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus EM_SetTermCriteria(EM self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus EM_Predict(EM self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus EM_Predict2(EM self, Mat sample, Mat probs, Vec2d *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict2(sample.ptr, probs.ptr); + END_WRAP +} + +CvStatus EM_TrainEM(EM self, Mat samples, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainEM(samples.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + END_WRAP +} + +CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainE(samples.ptr, means0.ptr, covs0.ptr, weights0.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + END_WRAP +} + +CvStatus EM_TrainM(EM self, Mat samples, Mat probs0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainM(samples.ptr, probs0.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + END_WRAP +} + +CvStatus EM_Clear(EM self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus EM_Save(EM self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus EM_Load(EM self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::EM::load(filepath); + END_WRAP +} + +CvStatus EM_LoadFromString(EM self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/em.h b/src/ml/em.h new file mode 100644 index 00000000..8a19bf04 --- /dev/null +++ b/src/ml/em.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_EM_H +#define CVD_ML_EM_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrEM) +CVD_TYPEDEF(cv::ml::EM, EM) +#else +CVD_TYPEDEF(void *, PtrEM) +CVD_TYPEDEF(void, EM) +#endif + +CVD_TYPEDEF_PTR(PtrEM) +CVD_TYPEDEF_PTR(EM) + +// EM +CvStatus EM_Create(PtrEM *rval); +void EM_Close(PtrEM *self); +CvStatus EM_Get(PtrEM self, EM *rval); + +CvStatus EM_GetClustersNumber(EM self, int *rval); +CvStatus EM_SetClustersNumber(EM self, int val); +CvStatus EM_GetCovarianceMatrixType(EM self, int *rval); +CvStatus EM_SetCovarianceMatrixType(EM self, int val); +CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval); +CvStatus EM_SetTermCriteria(EM self, TermCriteria val); +CvStatus EM_Predict(EM self, Mat samples, Mat results, int flags, float *rval); +CvStatus EM_Predict2(EM self, Mat sample, Mat probs, Vec2d *rval); +CvStatus EM_TrainEM(EM self, Mat samples, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_TrainM(EM self, Mat samples, Mat probs0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval); +CvStatus EM_Clear(EM self); +CvStatus EM_Save(EM self, char *filename); +CvStatus EM_Load(EM self, char *filepath); +CvStatus EM_LoadFromString(EM self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/knearest.cpp b/src/ml/knearest.cpp new file mode 100644 index 00000000..c53a8450 --- /dev/null +++ b/src/ml/knearest.cpp @@ -0,0 +1,131 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "knearest.h" + +// KNearest +CvStatus KNearest_Create(PtrKNearest *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void KNearest_Close(PtrKNearest *self) +{ + CVD_FREE(self) +} + +CvStatus KNearest_Get(PtrKNearest self, KNearest *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus KNearest_GetDefaultK(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getDefaultK(); + END_WRAP +} + +CvStatus KNearest_SetDefaultK(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setDefaultK(val); + END_WRAP +} + +CvStatus KNearest_GetIsClassifier(KNearest self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getIsClassifier(); + END_WRAP +} + +CvStatus KNearest_SetIsClassifier(KNearest self, bool val) +{ + BEGIN_WRAP + self.ptr->setIsClassifier(val); + END_WRAP +} + +CvStatus KNearest_GetEmax(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getEmax(); + END_WRAP +} + +CvStatus KNearest_SetEmax(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setEmax(val); + END_WRAP +} + +CvStatus KNearest_GetAlgorithmType(KNearest self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getAlgorithmType(); + END_WRAP +} + +CvStatus KNearest_SetAlgorithmType(KNearest self, int val) +{ + BEGIN_WRAP + self.ptr->setAlgorithmType(val); + END_WRAP +} + +CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->findNearest(samples.ptr, k, results.ptr, neighborResponses.ptr, dist.ptr); + END_WRAP +} + +CvStatus KNearest_Train(KNearest self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus KNearest_Train_1(KNearest self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus KNearest_Clear(KNearest self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus KNearest_Save(KNearest self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus KNearest_Load(KNearest self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::KNearest::load(filepath); + END_WRAP +} + +CvStatus KNearest_LoadFromString(KNearest self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/knearest.h b/src/ml/knearest.h new file mode 100644 index 00000000..652f61b9 --- /dev/null +++ b/src/ml/knearest.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_KNEAREST_H +#define CVD_ML_KNEAREST_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrKNearest) +CVD_TYPEDEF(cv::ml::KNearest, KNearest) +#else +CVD_TYPEDEF(void *, PtrKNearest) +CVD_TYPEDEF(void, KNearest) +#endif + +CVD_TYPEDEF_PTR(PtrKNearest) +CVD_TYPEDEF_PTR(KNearest) + +// KNearest +CvStatus KNearest_Create(PtrKNearest *rval); +void KNearest_Close(PtrKNearest *self); +CvStatus KNearest_Get(PtrKNearest self, KNearest *rval); + +CvStatus KNearest_GetDefaultK(KNearest self, int *rval); +CvStatus KNearest_SetDefaultK(KNearest self, int val); +CvStatus KNearest_GetIsClassifier(KNearest self, bool *rval); +CvStatus KNearest_SetIsClassifier(KNearest self, bool val); +CvStatus KNearest_GetEmax(KNearest self, int *rval); +CvStatus KNearest_SetEmax(KNearest self, int val); +CvStatus KNearest_GetAlgorithmType(KNearest self, int *rval); +CvStatus KNearest_SetAlgorithmType(KNearest self, int val); +CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, float *rval); +CvStatus KNearest_Train(KNearest self, PtrTrainData trainData, int flags, bool *rval); +CvStatus KNearest_Train_1(KNearest self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus KNearest_Clear(KNearest self); +CvStatus KNearest_Save(KNearest self, char *filename); +CvStatus KNearest_Load(KNearest self, char *filepath); +CvStatus KNearest_LoadFromString(KNearest self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/logistic_regression.cpp b/src/ml/logistic_regression.cpp new file mode 100644 index 00000000..4a5ccaf5 --- /dev/null +++ b/src/ml/logistic_regression.cpp @@ -0,0 +1,166 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "logistic_regression.h" + +// LogisticRegression +CvStatus LogisticRegression_Create(PtrLogisticRegression *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void LogisticRegression_Close(PtrLogisticRegression *self) +{ + CVD_FREE(self) +} + +CvStatus LogisticRegression_Get(PtrLogisticRegression self, LogisticRegression *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus LogisticRegression_GetLearningRate(LogisticRegression self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getLearningRate(); + END_WRAP +} + +CvStatus LogisticRegression_SetLearningRate(LogisticRegression self, double val) +{ + BEGIN_WRAP + self.ptr->setLearningRate(val); + END_WRAP +} + +CvStatus LogisticRegression_GetIterations(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getIterations(); + END_WRAP +} + +CvStatus LogisticRegression_SetIterations(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setIterations(val); + END_WRAP +} + +CvStatus LogisticRegression_GetRegularization(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getRegularization(); + END_WRAP +} + +CvStatus LogisticRegression_SetRegularization(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setRegularization(val); + END_WRAP +} + +CvStatus LogisticRegression_GetTrainMethod(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTrainMethod(); + END_WRAP +} + +CvStatus LogisticRegression_SetTrainMethod(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setTrainMethod(val); + END_WRAP +} + +CvStatus LogisticRegression_GetMiniBatchSize(LogisticRegression self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMiniBatchSize(); + END_WRAP +} + +CvStatus LogisticRegression_SetMiniBatchSize(LogisticRegression self, int val) +{ + BEGIN_WRAP + self.ptr->setMiniBatchSize(val); + END_WRAP +} + +CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus LogisticRegression_Predict(LogisticRegression self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus LogisticRegression_Train(LogisticRegression self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus LogisticRegression_Clear(LogisticRegression self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus LogisticRegression_GetLearntThetas(LogisticRegression self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get_learnt_thetas()}; + END_WRAP +} + +CvStatus LogisticRegression_Save(LogisticRegression self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus LogisticRegression_Load(LogisticRegression self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::LogisticRegression::load(filepath); + END_WRAP +} + +CvStatus LogisticRegression_LoadFromString(LogisticRegression self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/logistic_regression.h b/src/ml/logistic_regression.h new file mode 100644 index 00000000..2059988a --- /dev/null +++ b/src/ml/logistic_regression.h @@ -0,0 +1,59 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_LOGISTIC_REGRESSION_H +#define CVD_ML_LOGISTIC_REGRESSION_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrLogisticRegression) +CVD_TYPEDEF(cv::ml::LogisticRegression, LogisticRegression) +#else +CVD_TYPEDEF(void *, PtrLogisticRegression) +CVD_TYPEDEF(void, LogisticRegression) +#endif + +CVD_TYPEDEF_PTR(PtrLogisticRegression) +CVD_TYPEDEF_PTR(LogisticRegression) + +// LogisticRegression +CvStatus LogisticRegression_Create(PtrLogisticRegression *rval); +void LogisticRegression_Close(PtrLogisticRegression *self); +CvStatus LogisticRegression_Get(PtrLogisticRegression self, LogisticRegression *rval); + +CvStatus LogisticRegression_GetLearningRate(LogisticRegression self, double *rval); +CvStatus LogisticRegression_SetLearningRate(LogisticRegression self, double val); +CvStatus LogisticRegression_GetIterations(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetIterations(LogisticRegression self, int val); +CvStatus LogisticRegression_GetRegularization(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetRegularization(LogisticRegression self, int val); +CvStatus LogisticRegression_GetTrainMethod(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetTrainMethod(LogisticRegression self, int val); +CvStatus LogisticRegression_GetMiniBatchSize(LogisticRegression self, int *rval); +CvStatus LogisticRegression_SetMiniBatchSize(LogisticRegression self, int val); +CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteria *rval); +CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val); +CvStatus LogisticRegression_Predict(LogisticRegression self, Mat samples, Mat results, int flags, float *rval); +CvStatus LogisticRegression_Train(LogisticRegression self, PtrTrainData trainData, int flags, bool *rval); +CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus LogisticRegression_Clear(LogisticRegression self); +CvStatus LogisticRegression_GetLearntThetas(LogisticRegression self, Mat *rval); +CvStatus LogisticRegression_Save(LogisticRegression self, char *filename); +CvStatus LogisticRegression_Load(LogisticRegression self, char *filepath); +CvStatus LogisticRegression_LoadFromString(LogisticRegression self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/normal_bayes_classifier.cpp b/src/ml/normal_bayes_classifier.cpp new file mode 100644 index 00000000..1ec72677 --- /dev/null +++ b/src/ml/normal_bayes_classifier.cpp @@ -0,0 +1,75 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "normal_bayes_classifier.h" + +// NormalBayesClassifier +CvStatus NormalBayesClassifier_Create(PtrNormalBayesClassifier *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void NormalBayesClassifier_Close(PtrNormalBayesClassifier *self) +{ + CVD_FREE(self) +} + +CvStatus NormalBayesClassifier_Get(PtrNormalBayesClassifier self, NormalBayesClassifier *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, Mat outputProbs, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predictProb(inputs.ptr, outputs.ptr, outputProbs.ptr, flags); + END_WRAP +} + +CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus NormalBayesClassifier_Clear(NormalBayesClassifier self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus NormalBayesClassifier_Save(NormalBayesClassifier self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus NormalBayesClassifier_Load(NormalBayesClassifier self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::NormalBayesClassifier::load(filepath); + END_WRAP +} + +CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/normal_bayes_classifier.h b/src/ml/normal_bayes_classifier.h new file mode 100644 index 00000000..de91da60 --- /dev/null +++ b/src/ml/normal_bayes_classifier.h @@ -0,0 +1,46 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_NORMAL_BAYES_CLASSIFIER_H +#define CVD_ML_NORMAL_BAYES_CLASSIFIER_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrNormalBayesClassifier) +CVD_TYPEDEF(cv::ml::NormalBayesClassifier, NormalBayesClassifier) +#else +CVD_TYPEDEF(void *, PtrNormalBayesClassifier) +CVD_TYPEDEF(void, NormalBayesClassifier) +#endif + +CVD_TYPEDEF_PTR(PtrNormalBayesClassifier) +CVD_TYPEDEF_PTR(NormalBayesClassifier) + +// NormalBayesClassifier +CvStatus NormalBayesClassifier_Create(PtrNormalBayesClassifier *rval); +void NormalBayesClassifier_Close(PtrNormalBayesClassifier *self); +CvStatus NormalBayesClassifier_Get(PtrNormalBayesClassifier self, NormalBayesClassifier *rval); + +CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, Mat outputProbs, int flags, float *rval); +CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, bool *rval); +CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus NormalBayesClassifier_Clear(NormalBayesClassifier self); +CvStatus NormalBayesClassifier_Save(NormalBayesClassifier self, char *filename); +CvStatus NormalBayesClassifier_Load(NormalBayesClassifier self, char *filepath); +CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/rtrees.cpp b/src/ml/rtrees.cpp new file mode 100644 index 00000000..7a2adb3a --- /dev/null +++ b/src/ml/rtrees.cpp @@ -0,0 +1,131 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "rtrees.h" + +// RTrees +CvStatus RTrees_Create(PtrRTrees *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void RTrees_Close(PtrRTrees *self) +{ + CVD_FREE(self) +} + +CvStatus RTrees_Get(PtrRTrees self, RTrees *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus RTrees_GetCalculateVarImportance(RTrees self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCalculateVarImportance(); + END_WRAP +} + +CvStatus RTrees_SetCalculateVarImportance(RTrees self, bool val) +{ + BEGIN_WRAP + self.ptr->setCalculateVarImportance(val); + END_WRAP +} + +CvStatus RTrees_GetActiveVarCount(RTrees self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getActiveVarCount(); + END_WRAP +} + +CvStatus RTrees_SetActiveVarCount(RTrees self, int val) +{ + BEGIN_WRAP + self.ptr->setActiveVarCount(val); + END_WRAP +} + +CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus RTrees_GetVarImportance(RTrees self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getVarImportance()}; + END_WRAP +} + +CvStatus RTrees_GetVotes(RTrees self, Mat samples, Mat results, int flags) +{ + BEGIN_WRAP + self.ptr->getVotes(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus RTrees_GetOOBError(RTrees self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getOOBError(); + END_WRAP +} + +CvStatus RTrees_Train(RTrees self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus RTrees_Train_1(RTrees self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus RTrees_Clear(RTrees self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus RTrees_Save(RTrees self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus RTrees_Load(RTrees self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::RTrees::load(filepath); + END_WRAP +} + +CvStatus RTrees_LoadFromString(RTrees self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/rtrees.h b/src/ml/rtrees.h new file mode 100644 index 00000000..73289a05 --- /dev/null +++ b/src/ml/rtrees.h @@ -0,0 +1,54 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_RTREES_H +#define CVD_ML_RTREES_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrRTrees) +CVD_TYPEDEF(cv::ml::RTrees, RTrees) +#else +CVD_TYPEDEF(void *, PtrRTrees) +CVD_TYPEDEF(void, RTrees) +#endif + +CVD_TYPEDEF_PTR(PtrRTrees) +CVD_TYPEDEF_PTR(RTrees) + +// RTrees +CvStatus RTrees_Create(PtrRTrees *rval); +void RTrees_Close(PtrRTrees *self); +CvStatus RTrees_Get(PtrRTrees self, RTrees *rval); + +CvStatus RTrees_GetCalculateVarImportance(RTrees self, bool *rval); +CvStatus RTrees_SetCalculateVarImportance(RTrees self, bool val); +CvStatus RTrees_GetActiveVarCount(RTrees self, int *rval); +CvStatus RTrees_SetActiveVarCount(RTrees self, int val); +CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval); +CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val); +CvStatus RTrees_GetVarImportance(RTrees self, Mat *rval); +CvStatus RTrees_GetVotes(RTrees self, Mat samples, Mat results, int flags); +CvStatus RTrees_GetOOBError(RTrees self, double *rval); +CvStatus RTrees_Train(RTrees self, PtrTrainData trainData, int flags, bool *rval); +CvStatus RTrees_Train_1(RTrees self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus RTrees_Clear(RTrees self); +CvStatus RTrees_Save(RTrees self, char *filename); +CvStatus RTrees_Load(RTrees self, char *filepath); +CvStatus RTrees_LoadFromString(RTrees self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/ml/svm.cpp b/src/ml/svm.cpp index 472b47f2..d87257ee 100644 --- a/src/ml/svm.cpp +++ b/src/ml/svm.cpp @@ -1,3 +1,8 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + #include "svm.h" // ParamGrid @@ -7,39 +12,52 @@ CvStatus ParamGrid_Empty(ParamGrid *rval) *rval = {new cv::ml::ParamGrid()}; END_WRAP } + CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, ParamGrid *rval) { BEGIN_WRAP *rval = {new cv::ml::ParamGrid(minVal, maxVal, logstep)}; END_WRAP } + CvStatus ParamGrid_getMinVal(ParamGrid self, double *rval) { BEGIN_WRAP *rval = self.ptr->minVal; END_WRAP } + CvStatus ParamGrid_GetMaxVal(ParamGrid self, double *rval) { BEGIN_WRAP *rval = self.ptr->maxVal; END_WRAP } + CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval) { BEGIN_WRAP *rval = self.ptr->logStep; END_WRAP } -void ParamGrid_Close(PtrParamGrid *self){CVD_FREE(self)} +void ParamGrid_Close(PtrParamGrid *self) +{ + CVD_FREE(self) +} + +// SVM CvStatus SVM_Create(PtrSVM *rval) { BEGIN_WRAP *rval = {new cv::Ptr()}; END_WRAP } -void SVM_Close(PtrSVM *self){CVD_FREE(self)} + +void SVM_Close(PtrSVM *self) +{ + CVD_FREE(self) +} CvStatus SVM_Get(PtrSVM self, SVM *rval) { @@ -47,3 +65,288 @@ CvStatus SVM_Get(PtrSVM self, SVM *rval) *rval = {self.ptr->get()}; END_WRAP } + +CvStatus SVM_GetC(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getC(); + END_WRAP +} + +CvStatus SVM_GetClassWeights(SVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getClassWeights()}; + END_WRAP +} + +CvStatus SVM_GetCoef0(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getCoef0(); + END_WRAP +} + +CvStatus SVM_GetDecisionFunction(SVM self, int i, Mat alpha, Mat svidx, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getDecisionFunction(i, alpha.ptr, svidx.ptr); + END_WRAP +} + +CvStatus SVM_GetDegree(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getDegree(); + END_WRAP +} + +CvStatus SVM_GetGamma(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getGamma(); + END_WRAP +} + +CvStatus SVM_GetKernelType(SVM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getKernelType(); + END_WRAP +} + +CvStatus SVM_GetNu(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getNu(); + END_WRAP +} + +CvStatus SVM_GetP(SVM self, double *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getP(); + END_WRAP +} + +CvStatus SVM_GetSupportVectors(SVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getSupportVectors()}; + END_WRAP +} + +CvStatus SVM_GetTermCriteria(SVM self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus SVM_GetType(SVM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getType(); + END_WRAP +} + +CvStatus SVM_GetUncompressedSupportVectors(SVM self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getUncompressedSupportVectors()}; + END_WRAP +} + +CvStatus SVM_SetC(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setC(val); + END_WRAP +} + +CvStatus SVM_SetClassWeights(SVM self, Mat val) +{ + BEGIN_WRAP + self.ptr->setClassWeights(val.ptr); + END_WRAP +} + +CvStatus SVM_SetCoef0(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setCoef0(val); + END_WRAP +} + +CvStatus SVM_SetDegree(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setDegree(val); + END_WRAP +} + +CvStatus SVM_SetGamma(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setGamma(val); + END_WRAP +} + +CvStatus SVM_SetKernel(SVM self, int kernelType) +{ + BEGIN_WRAP + self.ptr->setKernel(kernelType); + END_WRAP +} + +CvStatus SVM_SetNu(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setNu(val); + END_WRAP +} + +CvStatus SVM_SetP(SVM self, double val) +{ + BEGIN_WRAP + self.ptr->setP(val); + END_WRAP +} + +CvStatus SVM_SetTermCriteria(SVM self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus SVM_SetType(SVM self, int val) +{ + BEGIN_WRAP + self.ptr->setType(val); + END_WRAP +} + +CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, ParamGrid gammaGrid, + ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, + bool balanced, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainAuto(data.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + END_WRAP +} + +CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, + ParamGrid gammaGrid, ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, + ParamGrid degreeGrid, bool balanced, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->trainAuto(samples.ptr, layout, responses.ptr, kFold, Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + END_WRAP +} + +CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->calcError(data.ptr, test, resp.ptr); + END_WRAP +} + +CvStatus SVM_Empty(SVM self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->empty(); + END_WRAP +} + +CvStatus SVM_GetVarCount(SVM self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getVarCount(); + END_WRAP +} + +CvStatus SVM_IsClassifier(SVM self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->isClassifier(); + END_WRAP +} + +CvStatus SVM_IsTrained(SVM self, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->isTrained(); + END_WRAP +} + +CvStatus SVM_Predict(SVM self, Mat samples, Mat results, int flags, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + END_WRAP +} + +CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus SVM_Clear(SVM self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus SVM_GetDefaultName(SVM self, char *rval) +{ + BEGIN_WRAP + std::string name = self.ptr->getDefaultName(); + std::strcpy(rval, name.c_str()); + END_WRAP +} + +CvStatus SVM_GetDefaultGrid(SVM self, ParamGrid *rval) +{ + BEGIN_WRAP + *rval = {new cv::ml::ParamGrid(self.ptr->getDefaultGrid())}; + END_WRAP +} + +CvStatus SVM_GetDefaultGridPtr(SVM self, PtrParamGrid *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr(self.ptr->getDefaultGridPtr())}; + END_WRAP +} + +CvStatus SVM_Save(SVM self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus SVM_Load(SVM self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::SVM::load(filepath); + END_WRAP +} + +CvStatus SVM_LoadFromString(SVM self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/svmsgd.cpp b/src/ml/svmsgd.cpp new file mode 100644 index 00000000..bd88fa68 --- /dev/null +++ b/src/ml/svmsgd.cpp @@ -0,0 +1,173 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#include "svmsgd.h" + +// SVMSGD +CvStatus SVMSGD_Create(PtrSVMSGD *rval) +{ + BEGIN_WRAP + *rval = {new cv::Ptr()}; + END_WRAP +} + +void SVMSGD_Close(PtrSVMSGD *self) +{ + CVD_FREE(self) +} + +CvStatus SVMSGD_Get(PtrSVMSGD self, SVMSGD *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->get()}; + END_WRAP +} + +CvStatus SVMSGD_SetOptimalParameters(SVMSGD self, int svmsgdType, int marginType) +{ + BEGIN_WRAP + self.ptr->setOptimalParameters(svmsgdType, marginType); + END_WRAP +} + +CvStatus SVMSGD_GetWeights(SVMSGD self, Mat *rval) +{ + BEGIN_WRAP + *rval = {self.ptr->getWeights()}; + END_WRAP +} + +CvStatus SVMSGD_GetShift(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getShift(); + END_WRAP +} + +CvStatus SVMSGD_GetSvmsgdType(SVMSGD self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getSvmsgdType(); + END_WRAP +} + +CvStatus SVMSGD_SetSvmsgdType(SVMSGD self, int svmsgdType) +{ + BEGIN_WRAP + self.ptr->setSvmsgdType(svmsgdType); + END_WRAP +} + +CvStatus SVMSGD_GetMarginType(SVMSGD self, int *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMarginType(); + END_WRAP +} + +CvStatus SVMSGD_SetMarginType(SVMSGD self, int marginType) +{ + BEGIN_WRAP + self.ptr->setMarginType(marginType); + END_WRAP +} + +CvStatus SVMSGD_GetMarginRegularization(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getMarginRegularization(); + END_WRAP +} + +CvStatus SVMSGD_SetMarginRegularization(SVMSGD self, float marginRegularization) +{ + BEGIN_WRAP + self.ptr->setMarginRegularization(marginRegularization); + END_WRAP +} + +CvStatus SVMSGD_GetInitialStepSize(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getInitialStepSize(); + END_WRAP +} + +CvStatus SVMSGD_SetInitialStepSize(SVMSGD self, float InitialStepSize) +{ + BEGIN_WRAP + self.ptr->setInitialStepSize(InitialStepSize); + END_WRAP +} + +CvStatus SVMSGD_GetStepDecreasingPower(SVMSGD self, float *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getStepDecreasingPower(); + END_WRAP +} + +CvStatus SVMSGD_SetStepDecreasingPower(SVMSGD self, float stepDecreasingPower) +{ + BEGIN_WRAP + self.ptr->setStepDecreasingPower(stepDecreasingPower); + END_WRAP +} + +CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval) +{ + BEGIN_WRAP + *rval = self.ptr->getTermCriteria(); + END_WRAP +} + +CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val) +{ + BEGIN_WRAP + self.ptr->setTermCriteria(val); + END_WRAP +} + +CvStatus SVMSGD_Train(SVMSGD self, PtrTrainData trainData, int flags, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(trainData.ptr, flags); + END_WRAP +} + +CvStatus SVMSGD_Train_1(SVMSGD self, Mat samples, int layout, Mat responses, bool *rval) +{ + BEGIN_WRAP + *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + END_WRAP +} + +CvStatus SVMSGD_Clear(SVMSGD self) +{ + BEGIN_WRAP + self.ptr->clear(); + END_WRAP +} + +CvStatus SVMSGD_Save(SVMSGD self, char *filename) +{ + BEGIN_WRAP + self.ptr->save(filename); + END_WRAP +} + +CvStatus SVMSGD_Load(SVMSGD self, char *filepath) +{ + BEGIN_WRAP + self.ptr = cv::ml::SVMSGD::load(filepath); + END_WRAP +} + +CvStatus SVMSGD_LoadFromString(SVMSGD self, const char *strModel, const char *objname) +{ + BEGIN_WRAP + self.ptr = cv::Algorithm::loadFromString(strModel, objname); + END_WRAP +} diff --git a/src/ml/svmsgd.h b/src/ml/svmsgd.h new file mode 100644 index 00000000..64526334 --- /dev/null +++ b/src/ml/svmsgd.h @@ -0,0 +1,60 @@ +/* + Created by Abdelaziz Mahdy. + Licensed: Apache 2.0 license. Copyright (c) 2024 Abdelaziz Mahdy. +*/ + +#ifndef CVD_ML_SVMSGD_H +#define CVD_ML_SVMSGD_H + +#include "core/core.h" +#include "core/exception.h" +#include "train_data.h" + +#ifdef __cplusplus +#include +extern "C" { +#endif + +#ifdef __cplusplus +CVD_TYPEDEF(cv::Ptr, PtrSVMSGD) +CVD_TYPEDEF(cv::ml::SVMSGD, SVMSGD) +#else +CVD_TYPEDEF(void *, PtrSVMSGD) +CVD_TYPEDEF(void, SVMSGD) +#endif + +CVD_TYPEDEF_PTR(PtrSVMSGD) +CVD_TYPEDEF_PTR(SVMSGD) + +// SVMSGD +CvStatus SVMSGD_Create(PtrSVMSGD *rval); +void SVMSGD_Close(PtrSVMSGD *self); +CvStatus SVMSGD_Get(PtrSVMSGD self, SVMSGD *rval); + +CvStatus SVMSGD_SetOptimalParameters(SVMSGD self, int svmsgdType, int marginType); +CvStatus SVMSGD_GetWeights(SVMSGD self, Mat *rval); +CvStatus SVMSGD_GetShift(SVMSGD self, float *rval); +CvStatus SVMSGD_GetSvmsgdType(SVMSGD self, int *rval); +CvStatus SVMSGD_SetSvmsgdType(SVMSGD self, int svmsgdType); +CvStatus SVMSGD_GetMarginType(SVMSGD self, int *rval); +CvStatus SVMSGD_SetMarginType(SVMSGD self, int marginType); +CvStatus SVMSGD_GetMarginRegularization(SVMSGD self, float *rval); +CvStatus SVMSGD_SetMarginRegularization(SVMSGD self, float marginRegularization); +CvStatus SVMSGD_GetInitialStepSize(SVMSGD self, float *rval); +CvStatus SVMSGD_SetInitialStepSize(SVMSGD self, float InitialStepSize); +CvStatus SVMSGD_GetStepDecreasingPower(SVMSGD self, float *rval); +CvStatus SVMSGD_SetStepDecreasingPower(SVMSGD self, float stepDecreasingPower); +CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval); +CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val); +CvStatus SVMSGD_Train(SVMSGD self, PtrTrainData trainData, int flags, bool *rval); +CvStatus SVMSGD_Train_1(SVMSGD self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus SVMSGD_Clear(SVMSGD self); +CvStatus SVMSGD_Save(SVMSGD self, char *filename); +CvStatus SVMSGD_Load(SVMSGD self, char *filepath); +CvStatus SVMSGD_LoadFromString(SVMSGD self, const char *strModel, const char *objname); + +#ifdef __cplusplus +} +#endif + +#endif From dc550136f32511875e75c71ec2cb0810244c727f Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sat, 25 May 2024 14:41:45 +0300 Subject: [PATCH 03/10] rename --- src/{ml/DTrees.cpp => imgproc/dtrees.cpp} | 0 src/{ml/DTrees.h => imgproc/dtrees.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{ml/DTrees.cpp => imgproc/dtrees.cpp} (100%) rename src/{ml/DTrees.h => imgproc/dtrees.h} (100%) diff --git a/src/ml/DTrees.cpp b/src/imgproc/dtrees.cpp similarity index 100% rename from src/ml/DTrees.cpp rename to src/imgproc/dtrees.cpp diff --git a/src/ml/DTrees.h b/src/imgproc/dtrees.h similarity index 100% rename from src/ml/DTrees.h rename to src/imgproc/dtrees.h From ce854c6d7b5ac4fd8c58d562e96fb346aa674357 Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sat, 25 May 2024 14:41:52 +0300 Subject: [PATCH 04/10] revert rename --- src/{imgproc => ml}/dtrees.cpp | 0 src/{imgproc => ml}/dtrees.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{imgproc => ml}/dtrees.cpp (100%) rename src/{imgproc => ml}/dtrees.h (100%) diff --git a/src/imgproc/dtrees.cpp b/src/ml/dtrees.cpp similarity index 100% rename from src/imgproc/dtrees.cpp rename to src/ml/dtrees.cpp diff --git a/src/imgproc/dtrees.h b/src/ml/dtrees.h similarity index 100% rename from src/imgproc/dtrees.h rename to src/ml/dtrees.h From 7020db64d0256e419c02351438fe7b10096f3bf1 Mon Sep 17 00:00:00 2001 From: rainy liu Date: Sat, 25 May 2024 21:13:50 +0800 Subject: [PATCH 05/10] fix build --- src/ml/ann_mlp.cpp | 19 +++++++------ src/ml/boost.cpp | 7 ++--- src/ml/dtrees.cpp | 11 ++++---- src/ml/em.cpp | 21 +++++++++------ src/ml/knearest.cpp | 10 ++++--- src/ml/logistic_regression.cpp | 17 +++++++----- src/ml/normal_bayes_classifier.cpp | 19 ++++++++----- src/ml/rtrees.cpp | 14 +++++----- src/ml/svm.cpp | 43 +++++++++++++++++------------- src/ml/svm.h | 8 +++--- src/ml/svmsgd.cpp | 12 +++++---- src/ml/train_data.cpp | 6 ++++- src/stitching/stitching.cpp | 5 +++- 13 files changed, 114 insertions(+), 78 deletions(-) diff --git a/src/ml/ann_mlp.cpp b/src/ml/ann_mlp.cpp index c30a489c..cfab71a7 100644 --- a/src/ml/ann_mlp.cpp +++ b/src/ml/ann_mlp.cpp @@ -9,12 +9,14 @@ CvStatus ANN_MLP_Create(PtrANN_MLP *rval) { BEGIN_WRAP - *rval = {new cv::Ptr()}; + auto p = cv::ml::ANN_MLP::create(); + *rval = {new cv::Ptr(p)}; END_WRAP } void ANN_MLP_Close(PtrANN_MLP *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -49,28 +51,29 @@ CvStatus ANN_MLP_SetActivationFunction(ANN_MLP self, int type, double param1, do CvStatus ANN_MLP_SetLayerSizes(ANN_MLP self, Mat _layer_sizes) { BEGIN_WRAP - self.ptr->setLayerSizes(_layer_sizes.ptr); + self.ptr->setLayerSizes(*_layer_sizes.ptr); END_WRAP } CvStatus ANN_MLP_GetLayerSizes(ANN_MLP self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getLayerSizes()}; + *rval = {new cv::Mat(self.ptr->getLayerSizes())}; END_WRAP } CvStatus ANN_MLP_SetTermCriteria(ANN_MLP self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } CvStatus ANN_MLP_GetTermCriteria(ANN_MLP self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } @@ -231,21 +234,21 @@ CvStatus ANN_MLP_GetAnnealItePerStep(ANN_MLP self, int *rval) CvStatus ANN_MLP_Predict(ANN_MLP self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus ANN_MLP_Train(ANN_MLP self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus ANN_MLP_Train_1(ANN_MLP self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/boost.cpp b/src/ml/boost.cpp index 88c7eb11..a42dfb2e 100644 --- a/src/ml/boost.cpp +++ b/src/ml/boost.cpp @@ -15,6 +15,7 @@ CvStatus Boost_Create(PtrBoost *rval) void Boost_Close(PtrBoost *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -70,21 +71,21 @@ CvStatus Boost_SetWeightTrimRate(Boost self, double val) CvStatus Boost_Predict(Boost self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus Boost_Train(Boost self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus Boost_Train_1(Boost self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/dtrees.cpp b/src/ml/dtrees.cpp index 2f333582..9e3761d0 100644 --- a/src/ml/dtrees.cpp +++ b/src/ml/dtrees.cpp @@ -15,6 +15,7 @@ CvStatus DTrees_Create(PtrDTrees *rval) void DTrees_Close(PtrDTrees *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -140,35 +141,35 @@ CvStatus DTrees_SetRegressionAccuracy(DTrees self, float val) CvStatus DTrees_GetPriors(DTrees self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getPriors()}; + *rval = {new cv::Mat(self.ptr->getPriors())}; END_WRAP } CvStatus DTrees_SetPriors(DTrees self, Mat val) { BEGIN_WRAP - self.ptr->setPriors(val.ptr); + self.ptr->setPriors(*val.ptr); END_WRAP } CvStatus DTrees_Predict(DTrees self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus DTrees_Train(DTrees self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus DTrees_Train_1(DTrees self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/em.cpp b/src/ml/em.cpp index cd63d124..cf1cdb33 100644 --- a/src/ml/em.cpp +++ b/src/ml/em.cpp @@ -15,6 +15,7 @@ CvStatus EM_Create(PtrEM *rval) void EM_Close(PtrEM *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -56,49 +57,53 @@ CvStatus EM_SetCovarianceMatrixType(EM self, int val) CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } CvStatus EM_SetTermCriteria(EM self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } CvStatus EM_Predict(EM self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus EM_Predict2(EM self, Mat sample, Mat probs, Vec2d *rval) { BEGIN_WRAP - *rval = self.ptr->predict2(sample.ptr, probs.ptr); + auto r = self.ptr->predict2(*sample.ptr, *probs.ptr); + *rval = {r.val[0], r.val[1]}; END_WRAP } CvStatus EM_TrainEM(EM self, Mat samples, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainEM(samples.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + *rval = self.ptr->trainEM(*samples.ptr, *logLikelihoods.ptr, *labels.ptr, *probs.ptr); END_WRAP } -CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) +CvStatus EM_TrainE(EM self, Mat samples, Mat means0, Mat covs0, Mat weights0, Mat logLikelihoods, Mat labels, + Mat probs, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainE(samples.ptr, means0.ptr, covs0.ptr, weights0.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + *rval = self.ptr->trainE(*samples.ptr, *means0.ptr, *covs0.ptr, *weights0.ptr, *logLikelihoods.ptr, + *labels.ptr, *probs.ptr); END_WRAP } CvStatus EM_TrainM(EM self, Mat samples, Mat probs0, Mat logLikelihoods, Mat labels, Mat probs, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainM(samples.ptr, probs0.ptr, logLikelihoods.ptr, labels.ptr, probs.ptr); + *rval = self.ptr->trainM(*samples.ptr, *probs0.ptr, *logLikelihoods.ptr, *labels.ptr, *probs.ptr); END_WRAP } diff --git a/src/ml/knearest.cpp b/src/ml/knearest.cpp index c53a8450..476b48b8 100644 --- a/src/ml/knearest.cpp +++ b/src/ml/knearest.cpp @@ -15,6 +15,7 @@ CvStatus KNearest_Create(PtrKNearest *rval) void KNearest_Close(PtrKNearest *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -81,24 +82,25 @@ CvStatus KNearest_SetAlgorithmType(KNearest self, int val) END_WRAP } -CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, float *rval) +CvStatus KNearest_FindNearest(KNearest self, Mat samples, int k, Mat results, Mat neighborResponses, Mat dist, + float *rval) { BEGIN_WRAP - *rval = self.ptr->findNearest(samples.ptr, k, results.ptr, neighborResponses.ptr, dist.ptr); + *rval = self.ptr->findNearest(*samples.ptr, k, *results.ptr, *neighborResponses.ptr, *dist.ptr); END_WRAP } CvStatus KNearest_Train(KNearest self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus KNearest_Train_1(KNearest self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/logistic_regression.cpp b/src/ml/logistic_regression.cpp index 4a5ccaf5..9eddf562 100644 --- a/src/ml/logistic_regression.cpp +++ b/src/ml/logistic_regression.cpp @@ -15,6 +15,7 @@ CvStatus LogisticRegression_Create(PtrLogisticRegression *rval) void LogisticRegression_Close(PtrLogisticRegression *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -98,35 +99,37 @@ CvStatus LogisticRegression_SetMiniBatchSize(LogisticRegression self, int val) CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } CvStatus LogisticRegression_Predict(LogisticRegression self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus LogisticRegression_Train(LogisticRegression self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } -CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, bool *rval) +CvStatus LogisticRegression_Train_1(LogisticRegression self, Mat samples, int layout, Mat responses, + bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } @@ -140,7 +143,7 @@ CvStatus LogisticRegression_Clear(LogisticRegression self) CvStatus LogisticRegression_GetLearntThetas(LogisticRegression self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->get_learnt_thetas()}; + *rval = {new cv::Mat(self.ptr->get_learnt_thetas())}; END_WRAP } diff --git a/src/ml/normal_bayes_classifier.cpp b/src/ml/normal_bayes_classifier.cpp index 1ec72677..d00a19f7 100644 --- a/src/ml/normal_bayes_classifier.cpp +++ b/src/ml/normal_bayes_classifier.cpp @@ -15,6 +15,7 @@ CvStatus NormalBayesClassifier_Create(PtrNormalBayesClassifier *rval) void NormalBayesClassifier_Close(PtrNormalBayesClassifier *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -25,24 +26,27 @@ CvStatus NormalBayesClassifier_Get(PtrNormalBayesClassifier self, NormalBayesCla END_WRAP } -CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, Mat outputProbs, int flags, float *rval) +CvStatus NormalBayesClassifier_PredictProb(NormalBayesClassifier self, Mat inputs, Mat outputs, + Mat outputProbs, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predictProb(inputs.ptr, outputs.ptr, outputProbs.ptr, flags); + *rval = self.ptr->predictProb(*inputs.ptr, *outputs.ptr, *outputProbs.ptr, flags); END_WRAP } -CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, bool *rval) +CvStatus NormalBayesClassifier_Train(NormalBayesClassifier self, PtrTrainData trainData, int flags, + bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } -CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, bool *rval) +CvStatus NormalBayesClassifier_Train_1(NormalBayesClassifier self, Mat samples, int layout, Mat responses, + bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } @@ -67,7 +71,8 @@ CvStatus NormalBayesClassifier_Load(NormalBayesClassifier self, char *filepath) END_WRAP } -CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, const char *objname) +CvStatus NormalBayesClassifier_LoadFromString(NormalBayesClassifier self, const char *strModel, + const char *objname) { BEGIN_WRAP self.ptr = cv::Algorithm::loadFromString(strModel, objname); diff --git a/src/ml/rtrees.cpp b/src/ml/rtrees.cpp index 7a2adb3a..ebcb3c4e 100644 --- a/src/ml/rtrees.cpp +++ b/src/ml/rtrees.cpp @@ -15,6 +15,7 @@ CvStatus RTrees_Create(PtrRTrees *rval) void RTrees_Close(PtrRTrees *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -56,28 +57,29 @@ CvStatus RTrees_SetActiveVarCount(RTrees self, int val) CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } CvStatus RTrees_GetVarImportance(RTrees self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getVarImportance()}; + *rval = {new cv::Mat(self.ptr->getVarImportance())}; END_WRAP } CvStatus RTrees_GetVotes(RTrees self, Mat samples, Mat results, int flags) { BEGIN_WRAP - self.ptr->getVotes(samples.ptr, results.ptr, flags); + self.ptr->getVotes(*samples.ptr, *results.ptr, flags); END_WRAP } @@ -91,14 +93,14 @@ CvStatus RTrees_GetOOBError(RTrees self, double *rval) CvStatus RTrees_Train(RTrees self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus RTrees_Train_1(RTrees self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/svm.cpp b/src/ml/svm.cpp index d87257ee..47e7363e 100644 --- a/src/ml/svm.cpp +++ b/src/ml/svm.cpp @@ -43,6 +43,7 @@ CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval) void ParamGrid_Close(PtrParamGrid *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -56,6 +57,7 @@ CvStatus SVM_Create(PtrSVM *rval) void SVM_Close(PtrSVM *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -76,7 +78,7 @@ CvStatus SVM_GetC(SVM self, double *rval) CvStatus SVM_GetClassWeights(SVM self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getClassWeights()}; + *rval = {new cv::Mat(self.ptr->getClassWeights())}; END_WRAP } @@ -90,7 +92,7 @@ CvStatus SVM_GetCoef0(SVM self, double *rval) CvStatus SVM_GetDecisionFunction(SVM self, int i, Mat alpha, Mat svidx, double *rval) { BEGIN_WRAP - *rval = self.ptr->getDecisionFunction(i, alpha.ptr, svidx.ptr); + *rval = self.ptr->getDecisionFunction(i, *alpha.ptr, *svidx.ptr); END_WRAP } @@ -132,14 +134,15 @@ CvStatus SVM_GetP(SVM self, double *rval) CvStatus SVM_GetSupportVectors(SVM self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getSupportVectors()}; + *rval = {new cv::Mat(self.ptr->getSupportVectors())}; END_WRAP } CvStatus SVM_GetTermCriteria(SVM self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } @@ -153,7 +156,7 @@ CvStatus SVM_GetType(SVM self, int *rval) CvStatus SVM_GetUncompressedSupportVectors(SVM self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getUncompressedSupportVectors()}; + *rval = {new cv::Mat(self.ptr->getUncompressedSupportVectors())}; END_WRAP } @@ -167,7 +170,7 @@ CvStatus SVM_SetC(SVM self, double val) CvStatus SVM_SetClassWeights(SVM self, Mat val) { BEGIN_WRAP - self.ptr->setClassWeights(val.ptr); + self.ptr->setClassWeights(*val.ptr); END_WRAP } @@ -216,7 +219,7 @@ CvStatus SVM_SetP(SVM self, double val) CvStatus SVM_SetTermCriteria(SVM self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } @@ -232,23 +235,25 @@ CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, bool balanced, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainAuto(data.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + *rval = self.ptr->trainAuto(*data.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, + *coeffGrid.ptr, *degreeGrid.ptr, balanced); END_WRAP } CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, - ParamGrid gammaGrid, ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, - ParamGrid degreeGrid, bool balanced, bool *rval) + PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainAuto(samples.ptr, layout, responses.ptr, kFold, Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + *rval = self.ptr->trainAuto(*samples.ptr, layout, *responses.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, + *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); END_WRAP } CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval) { BEGIN_WRAP - *rval = self.ptr->calcError(data.ptr, test, resp.ptr); + *rval = self.ptr->calcError(*data.ptr, test, *resp.ptr); END_WRAP } @@ -283,21 +288,21 @@ CvStatus SVM_IsTrained(SVM self, bool *rval) CvStatus SVM_Predict(SVM self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(samples.ptr, results.ptr, flags); + *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); END_WRAP } CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } @@ -316,17 +321,17 @@ CvStatus SVM_GetDefaultName(SVM self, char *rval) END_WRAP } -CvStatus SVM_GetDefaultGrid(SVM self, ParamGrid *rval) +CvStatus SVM_GetDefaultGrid(SVM self, int param_id, ParamGrid *rval) { BEGIN_WRAP - *rval = {new cv::ml::ParamGrid(self.ptr->getDefaultGrid())}; + *rval = {new cv::ml::ParamGrid(self.ptr->getDefaultGrid(param_id))}; END_WRAP } -CvStatus SVM_GetDefaultGridPtr(SVM self, PtrParamGrid *rval) +CvStatus SVM_GetDefaultGridPtr(SVM self, int param_id, PtrParamGrid *rval) { BEGIN_WRAP - *rval = {new cv::Ptr(self.ptr->getDefaultGridPtr())}; + *rval = {new cv::Ptr(self.ptr->getDefaultGridPtr(param_id))}; END_WRAP } diff --git a/src/ml/svm.h b/src/ml/svm.h index 711c86f2..28b44a54 100644 --- a/src/ml/svm.h +++ b/src/ml/svm.h @@ -73,8 +73,8 @@ CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, bool balanced, bool *rval); CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, - ParamGrid gammaGrid, ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, - ParamGrid degreeGrid, bool balanced, bool *rval); + PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval); CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval); CvStatus SVM_Empty(SVM self, bool *rval); CvStatus SVM_GetVarCount(SVM self, int *rval); @@ -85,8 +85,8 @@ CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval); CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval); CvStatus SVM_Clear(SVM self); CvStatus SVM_GetDefaultName(SVM self, char *rval); -CvStatus SVM_GetDefaultGrid(SVM self, ParamGrid *rval); -CvStatus SVM_GetDefaultGridPtr(SVM self, PtrParamGrid *rval); +CvStatus SVM_GetDefaultGrid(SVM self, int param_id, ParamGrid *rval); +CvStatus SVM_GetDefaultGridPtr(SVM self, int param_id, PtrParamGrid *rval); CvStatus SVM_Save(SVM self, char *filename); CvStatus SVM_Load(SVM self, char *filepath); CvStatus SVM_LoadFromString(SVM self, const char *strModel, const char *objname); diff --git a/src/ml/svmsgd.cpp b/src/ml/svmsgd.cpp index bd88fa68..56de6fbe 100644 --- a/src/ml/svmsgd.cpp +++ b/src/ml/svmsgd.cpp @@ -15,6 +15,7 @@ CvStatus SVMSGD_Create(PtrSVMSGD *rval) void SVMSGD_Close(PtrSVMSGD *self) { + *self->ptr = nullptr; CVD_FREE(self) } @@ -35,7 +36,7 @@ CvStatus SVMSGD_SetOptimalParameters(SVMSGD self, int svmsgdType, int marginType CvStatus SVMSGD_GetWeights(SVMSGD self, Mat *rval) { BEGIN_WRAP - *rval = {self.ptr->getWeights()}; + *rval = {new cv::Mat(self.ptr->getWeights())}; END_WRAP } @@ -119,28 +120,29 @@ CvStatus SVMSGD_SetStepDecreasingPower(SVMSGD self, float stepDecreasingPower) CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval) { BEGIN_WRAP - *rval = self.ptr->getTermCriteria(); + auto tc = self.ptr->getTermCriteria(); + *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; END_WRAP } CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(val); + self.ptr->setTermCriteria(*val.ptr); END_WRAP } CvStatus SVMSGD_Train(SVMSGD self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(trainData.ptr, flags); + *rval = self.ptr->train(*trainData.ptr, flags); END_WRAP } CvStatus SVMSGD_Train_1(SVMSGD self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(samples.ptr, layout, responses.ptr); + *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); END_WRAP } diff --git a/src/ml/train_data.cpp b/src/ml/train_data.cpp index 4acdde2b..6fee7e64 100644 --- a/src/ml/train_data.cpp +++ b/src/ml/train_data.cpp @@ -19,7 +19,11 @@ CvStatus TrainData_LoadFromCSV(char *filename, int headerLineCount, int response *rval = {new cv::Ptr(p)}; END_WRAP } -void TrainData_Close(PtrTrainData *self){CVD_FREE(self)} +void TrainData_Close(PtrTrainData *self) +{ + *self->ptr = nullptr; + CVD_FREE(self) +} CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval) { diff --git a/src/stitching/stitching.cpp b/src/stitching/stitching.cpp index 6ce040c3..ec6136e8 100644 --- a/src/stitching/stitching.cpp +++ b/src/stitching/stitching.cpp @@ -13,7 +13,10 @@ CvStatus Stitcher_Create(int mode, PtrStitcher *rval) END_WRAP } -void Stitcher_Close(PtrStitcher *stitcher){CVD_FREE(stitcher)} +void Stitcher_Close(PtrStitcher *stitcher){ + *stitcher->ptr = nullptr; + CVD_FREE(stitcher) +} CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval) { From c60ac4bf63e3016ae8b0da131dd2942bf8990823 Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sat, 25 May 2024 16:36:29 +0300 Subject: [PATCH 06/10] fix macos build --- lib/src/opencv.g.dart | 49 ++++++++++++++++++++----------------- src/calib3d/calib3d.h | 2 +- src/features2d/features2d.h | 2 +- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/src/opencv.g.dart b/lib/src/opencv.g.dart index 6985fec4..b5bb6499 100644 --- a/lib/src/opencv.g.dart +++ b/lib/src/opencv.g.dart @@ -12951,36 +12951,41 @@ class CvNative { CvStatus SVM_GetDefaultGrid( SVM self, + int param_id, ffi.Pointer rval, ) { return _SVM_GetDefaultGrid( self, + param_id, rval, ); } late final _SVM_GetDefaultGridPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetDefaultGrid'); + ffi.NativeFunction< + CvStatus Function( + SVM, ffi.Int, ffi.Pointer)>>('SVM_GetDefaultGrid'); late final _SVM_GetDefaultGrid = _SVM_GetDefaultGridPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(SVM, int, ffi.Pointer)>(); CvStatus SVM_GetDefaultGridPtr( SVM self, + int param_id, ffi.Pointer rval, ) { return _SVM_GetDefaultGridPtr1( self, + param_id, rval, ); } late final _SVM_GetDefaultGridPtrPtr = _lookup< - ffi - .NativeFunction)>>( - 'SVM_GetDefaultGridPtr'); + ffi.NativeFunction< + CvStatus Function(SVM, ffi.Int, + ffi.Pointer)>>('SVM_GetDefaultGridPtr'); late final _SVM_GetDefaultGridPtr1 = _SVM_GetDefaultGridPtrPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(SVM, int, ffi.Pointer)>(); CvStatus SVM_GetDefaultName( SVM self, @@ -13500,11 +13505,11 @@ class CvNative { Mat responses, int kFold, PtrParamGrid Cgrid, - ParamGrid gammaGrid, - ParamGrid pGrid, - ParamGrid nuGrid, - ParamGrid coeffGrid, - ParamGrid degreeGrid, + PtrParamGrid gammaGrid, + PtrParamGrid pGrid, + PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, ffi.Pointer rval, ) { @@ -13534,11 +13539,11 @@ class CvNative { Mat, ffi.Int, PtrParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, ffi.Bool, ffi.Pointer)>>('SVM_TrainAuto_1'); late final _SVM_TrainAuto_1 = _SVM_TrainAuto_1Ptr.asFunction< @@ -13549,11 +13554,11 @@ class CvNative { Mat, int, PtrParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, bool, ffi.Pointer)>(); diff --git a/src/calib3d/calib3d.h b/src/calib3d/calib3d.h index 78548d6f..ffefde2a 100644 --- a/src/calib3d/calib3d.h +++ b/src/calib3d/calib3d.h @@ -17,7 +17,7 @@ extern "C" { #endif #include "core/core.h" - +#include // Calib CvStatus Fisheye_UndistortImage(Mat distorted, Mat undistorted, Mat k, Mat d); CvStatus Fisheye_UndistortImageWithParams(Mat distorted, Mat undistorted, Mat k, Mat d, Mat knew, Size size); diff --git a/src/features2d/features2d.h b/src/features2d/features2d.h index 28bb0115..ad631aac 100644 --- a/src/features2d/features2d.h +++ b/src/features2d/features2d.h @@ -15,7 +15,7 @@ extern "C" { #endif #include "core/core.h" - +#include #ifdef __cplusplus CVD_TYPEDEF(cv::Ptr, AKAZE) CVD_TYPEDEF(cv::Ptr, AgastFeatureDetector) From 8f9a3185853dba3f75b8e465815a15b1821c13d8 Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sat, 25 May 2024 16:42:38 +0300 Subject: [PATCH 07/10] updated ffigen and added ffigen binding --- ffigen.yaml | 18 + lib/src/opencv.g.dart | 12325 ++++++++++++++++++++++++++-------------- 2 files changed, 7994 insertions(+), 4349 deletions(-) diff --git a/ffigen.yaml b/ffigen.yaml index fd505338..8cb6f4a2 100644 --- a/ffigen.yaml +++ b/ffigen.yaml @@ -31,7 +31,16 @@ headers: - src/imgproc/imgproc.h - src/ml/ml.h - src/ml/train_data.h + - src/ml/ann_mlp.h + - src/ml/boost.h + - src/ml/dtrees.h + - src/ml/em.h + - src/ml/knearest.h + - src/ml/logistic_regression.h + - src/ml/normal_bayes_classifier.h + - src/ml/rtrees.h - src/ml/svm.h + - src/ml/svmsgd.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h @@ -56,6 +65,15 @@ headers: - src/ml/ml.h - src/ml/train_data.h - src/ml/svm.h + - src/ml/ann_mlp.h + - src/ml/boost.h + - src/ml/dtrees.h + - src/ml/em.h + - src/ml/knearest.h + - src/ml/logistic_regression.h + - src/ml/normal_bayes_classifier.h + - src/ml/rtrees.h + - src/ml/svmsgd.h - src/objdetect/objdetect.h - src/photo/photo.h - src/stitching/stitching.h diff --git a/lib/src/opencv.g.dart b/lib/src/opencv.g.dart index b5bb6499..d6864182 100644 --- a/lib/src/opencv.g.dart +++ b/lib/src/opencv.g.dart @@ -98,5856 +98,8324 @@ class CvNative { late final _AKAZE_DetectAndCompute = _AKAZE_DetectAndComputePtr.asFunction< CvStatus Function(AKAZE, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus AdaptiveThreshold( - Mat src, - Mat dst, - double maxValue, - int adaptiveTyp, - int typ, - int blockSize, - double c, + CvStatus ANN_MLP_Clear( + ANN_MLP self, ) { - return _AdaptiveThreshold( - src, - dst, - maxValue, - adaptiveTyp, - typ, - blockSize, - c, + return _ANN_MLP_Clear( + self, ); } - late final _AdaptiveThresholdPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Int, ffi.Int, ffi.Int, - ffi.Double)>>('AdaptiveThreshold'); - late final _AdaptiveThreshold = _AdaptiveThresholdPtr.asFunction< - CvStatus Function(Mat, Mat, double, int, int, int, double)>(); + late final _ANN_MLP_ClearPtr = + _lookup>('ANN_MLP_Clear'); + late final _ANN_MLP_Clear = + _ANN_MLP_ClearPtr.asFunction(); - void AgastFeatureDetector_Close( - ffi.Pointer a, + void ANN_MLP_Close( + ffi.Pointer self, ) { - return _AgastFeatureDetector_Close( - a, + return _ANN_MLP_Close( + self, ); } - late final _AgastFeatureDetector_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'AgastFeatureDetector_Close'); - late final _AgastFeatureDetector_Close = _AgastFeatureDetector_ClosePtr - .asFunction)>(); + late final _ANN_MLP_ClosePtr = + _lookup)>>( + 'ANN_MLP_Close'); + late final _ANN_MLP_Close = + _ANN_MLP_ClosePtr.asFunction)>(); - CvStatus AgastFeatureDetector_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_Create( + ffi.Pointer rval, ) { - return _AgastFeatureDetector_Create( + return _ANN_MLP_Create( rval, ); } - late final _AgastFeatureDetector_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'AgastFeatureDetector_Create'); - late final _AgastFeatureDetector_Create = _AgastFeatureDetector_CreatePtr - .asFunction)>(); + late final _ANN_MLP_CreatePtr = + _lookup)>>( + 'ANN_MLP_Create'); + late final _ANN_MLP_Create = _ANN_MLP_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus AgastFeatureDetector_Detect( - AgastFeatureDetector a, - Mat src, - ffi.Pointer rval, + CvStatus ANN_MLP_Get( + PtrANN_MLP self, + ffi.Pointer rval, ) { - return _AgastFeatureDetector_Detect( - a, - src, + return _ANN_MLP_Get( + self, rval, ); } - late final _AgastFeatureDetector_DetectPtr = _lookup< + late final _ANN_MLP_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(AgastFeatureDetector, Mat, - ffi.Pointer)>>('AgastFeatureDetector_Detect'); - late final _AgastFeatureDetector_Detect = - _AgastFeatureDetector_DetectPtr.asFunction< - CvStatus Function( - AgastFeatureDetector, Mat, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_Get'); + late final _ANN_MLP_Get = _ANN_MLP_GetPtr.asFunction< + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - void AlignMTB_Close( - ffi.Pointer b, + CvStatus ANN_MLP_GetAnnealCoolingRatio( + ANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Close( - b, + return _ANN_MLP_GetAnnealCoolingRatio( + self, + rval, ); } - late final _AlignMTB_ClosePtr = - _lookup)>>( - 'AlignMTB_Close'); - late final _AlignMTB_Close = - _AlignMTB_ClosePtr.asFunction)>(); + late final _ANN_MLP_GetAnnealCoolingRatioPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetAnnealCoolingRatio'); + late final _ANN_MLP_GetAnnealCoolingRatio = _ANN_MLP_GetAnnealCoolingRatioPtr + .asFunction)>(); - CvStatus AlignMTB_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_GetAnnealFinalT( + ANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Create( + return _ANN_MLP_GetAnnealFinalT( + self, rval, ); } - late final _AlignMTB_CreatePtr = - _lookup)>>( - 'AlignMTB_Create'); - late final _AlignMTB_Create = _AlignMTB_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ANN_MLP_GetAnnealFinalTPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetAnnealFinalT'); + late final _ANN_MLP_GetAnnealFinalT = _ANN_MLP_GetAnnealFinalTPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus AlignMTB_CreateWithParams( - int max_bits, - int exclude_range, - bool cut, - ffi.Pointer rval, + CvStatus ANN_MLP_GetAnnealInitialT( + ANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_CreateWithParams( - max_bits, - exclude_range, - cut, + return _ANN_MLP_GetAnnealInitialT( + self, rval, ); } - late final _AlignMTB_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Bool, - ffi.Pointer)>>('AlignMTB_CreateWithParams'); - late final _AlignMTB_CreateWithParams = _AlignMTB_CreateWithParamsPtr - .asFunction)>(); + late final _ANN_MLP_GetAnnealInitialTPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetAnnealInitialT'); + late final _ANN_MLP_GetAnnealInitialT = _ANN_MLP_GetAnnealInitialTPtr + .asFunction)>(); - CvStatus AlignMTB_Process( - AlignMTB b, - VecMat src, - ffi.Pointer dst, + CvStatus ANN_MLP_GetAnnealItePerStep( + ANN_MLP self, + ffi.Pointer rval, ) { - return _AlignMTB_Process( - b, - src, - dst, + return _ANN_MLP_GetAnnealItePerStep( + self, + rval, ); } - late final _AlignMTB_ProcessPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - AlignMTB, VecMat, ffi.Pointer)>>('AlignMTB_Process'); - late final _AlignMTB_Process = _AlignMTB_ProcessPtr.asFunction< - CvStatus Function(AlignMTB, VecMat, ffi.Pointer)>(); + late final _ANN_MLP_GetAnnealItePerStepPtr = _lookup< + ffi.NativeFunction)>>( + 'ANN_MLP_GetAnnealItePerStep'); + late final _ANN_MLP_GetAnnealItePerStep = _ANN_MLP_GetAnnealItePerStepPtr + .asFunction)>(); - CvStatus ApplyColorMap( - Mat src, - Mat dst, - int colormap, + CvStatus ANN_MLP_GetBackpropMomentumScale( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ApplyColorMap( - src, - dst, - colormap, + return _ANN_MLP_GetBackpropMomentumScale( + self, + rval, ); } - late final _ApplyColorMapPtr = - _lookup>( - 'ApplyColorMap'); - late final _ApplyColorMap = - _ApplyColorMapPtr.asFunction(); - - CvStatus ApplyCustomColorMap( - Mat src, - Mat dst, - Mat colormap, + late final _ANN_MLP_GetBackpropMomentumScalePtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetBackpropMomentumScale'); + late final _ANN_MLP_GetBackpropMomentumScale = + _ANN_MLP_GetBackpropMomentumScalePtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); + + CvStatus ANN_MLP_GetBackpropWeightScale( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ApplyCustomColorMap( - src, - dst, - colormap, + return _ANN_MLP_GetBackpropWeightScale( + self, + rval, ); } - late final _ApplyCustomColorMapPtr = - _lookup>( - 'ApplyCustomColorMap'); - late final _ApplyCustomColorMap = - _ApplyCustomColorMapPtr.asFunction(); - - CvStatus ApproxPolyDP( - VecPoint curve, - double epsilon, - bool closed, - ffi.Pointer rval, + late final _ANN_MLP_GetBackpropWeightScalePtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetBackpropWeightScale'); + late final _ANN_MLP_GetBackpropWeightScale = + _ANN_MLP_GetBackpropWeightScalePtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); + + CvStatus ANN_MLP_GetLayerSizes( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ApproxPolyDP( - curve, - epsilon, - closed, + return _ANN_MLP_GetLayerSizes( + self, rval, ); } - late final _ApproxPolyDPPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Double, ffi.Bool, - ffi.Pointer)>>('ApproxPolyDP'); - late final _ApproxPolyDP = _ApproxPolyDPPtr.asFunction< - CvStatus Function(VecPoint, double, bool, ffi.Pointer)>(); + late final _ANN_MLP_GetLayerSizesPtr = + _lookup)>>( + 'ANN_MLP_GetLayerSizes'); + late final _ANN_MLP_GetLayerSizes = _ANN_MLP_GetLayerSizesPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArcLength( - VecPoint curve, - bool is_closed, + CvStatus ANN_MLP_GetRpropDW0( + ANN_MLP self, ffi.Pointer rval, ) { - return _ArcLength( - curve, - is_closed, + return _ANN_MLP_GetRpropDW0( + self, rval, ); } - late final _ArcLengthPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint, ffi.Bool, ffi.Pointer)>>('ArcLength'); - late final _ArcLength = _ArcLengthPtr.asFunction< - CvStatus Function(VecPoint, bool, ffi.Pointer)>(); + late final _ANN_MLP_GetRpropDW0Ptr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetRpropDW0'); + late final _ANN_MLP_GetRpropDW0 = _ANN_MLP_GetRpropDW0Ptr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArrowedLine( - Mat img, - Point pt1, - Point pt2, - Scalar color, - int thickness, - int line_type, - int shift, - double tipLength, + CvStatus ANN_MLP_GetRpropDWMax( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ArrowedLine( - img, - pt1, - pt2, - color, - thickness, - line_type, - shift, - tipLength, + return _ANN_MLP_GetRpropDWMax( + self, + rval, ); } - late final _ArrowedLinePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Point, Point, Scalar, ffi.Int, ffi.Int, - ffi.Int, ffi.Double)>>('ArrowedLine'); - late final _ArrowedLine = _ArrowedLinePtr.asFunction< - CvStatus Function(Mat, Point, Point, Scalar, int, int, int, double)>(); + late final _ANN_MLP_GetRpropDWMaxPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetRpropDWMax'); + late final _ANN_MLP_GetRpropDWMax = _ANN_MLP_GetRpropDWMaxPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - void ArucoDetectorParameters_Close( - ffi.Pointer ap, + CvStatus ANN_MLP_GetRpropDWMin( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_Close( - ap, + return _ANN_MLP_GetRpropDWMin( + self, + rval, ); } - late final _ArucoDetectorParameters_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'ArucoDetectorParameters_Close'); - late final _ArucoDetectorParameters_Close = _ArucoDetectorParameters_ClosePtr - .asFunction)>(); + late final _ANN_MLP_GetRpropDWMinPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetRpropDWMin'); + late final _ANN_MLP_GetRpropDWMin = _ANN_MLP_GetRpropDWMinPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_Create( - ffi.Pointer rval, + CvStatus ANN_MLP_GetRpropDWMinus( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_Create( + return _ANN_MLP_GetRpropDWMinus( + self, rval, ); } - late final _ArucoDetectorParameters_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'ArucoDetectorParameters_Create'); - late final _ArucoDetectorParameters_Create = - _ArucoDetectorParameters_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ANN_MLP_GetRpropDWMinusPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetRpropDWMinus'); + late final _ANN_MLP_GetRpropDWMinus = _ANN_MLP_GetRpropDWMinusPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshConstant( - ArucoDetectorParameters ap, + CvStatus ANN_MLP_GetRpropDWPlus( + ANN_MLP self, ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshConstant( - ap, + return _ANN_MLP_GetRpropDWPlus( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshConstant'); - late final _ArucoDetectorParameters_GetAdaptiveThreshConstant = - _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_GetRpropDWPlusPtr = _lookup< + ffi + .NativeFunction)>>( + 'ANN_MLP_GetRpropDWPlus'); + late final _ANN_MLP_GetRpropDWPlus = _ANN_MLP_GetRpropDWPlusPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_GetTermCriteria( + ANN_MLP self, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( - ap, + return _ANN_MLP_GetTermCriteria( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ANN_MLP, ffi.Pointer)>>('ANN_MLP_GetTermCriteria'); + late final _ANN_MLP_GetTermCriteria = _ANN_MLP_GetTermCriteriaPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( - ArucoDetectorParameters ap, + CvStatus ANN_MLP_GetTrainMethod( + ANN_MLP self, ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( - ap, + return _ANN_MLP_GetTrainMethod( + self, rval, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_GetTrainMethodPtr = _lookup< + ffi.NativeFunction)>>( + 'ANN_MLP_GetTrainMethod'); + late final _ANN_MLP_GetTrainMethod = _ANN_MLP_GetTrainMethodPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Load( + ANN_MLP self, + ffi.Pointer filepath, ) { - return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( - ap, - rval, + return _ANN_MLP_Load( + self, + filepath, ); } - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep'); - late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep = - _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>>('ANN_MLP_Load'); + late final _ANN_MLP_Load = _ANN_MLP_LoadPtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagCriticalRad( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_LoadFromString( + ANN_MLP self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _ArucoDetectorParameters_GetAprilTagCriticalRad( - ap, - rval, + return _ANN_MLP_LoadFromString( + self, + strModel, + objname, ); } - late final _ArucoDetectorParameters_GetAprilTagCriticalRadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagCriticalRad'); - late final _ArucoDetectorParameters_GetAprilTagCriticalRad = - _ArucoDetectorParameters_GetAprilTagCriticalRadPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, ffi.Pointer, + ffi.Pointer)>>('ANN_MLP_LoadFromString'); + late final _ANN_MLP_LoadFromString = _ANN_MLP_LoadFromStringPtr.asFunction< + CvStatus Function( + ANN_MLP, ffi.Pointer, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagDeglitch( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Predict( + ANN_MLP self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetAprilTagDeglitch( - ap, + return _ANN_MLP_Predict( + self, + samples, + results, + flags, rval, ); } - late final _ArucoDetectorParameters_GetAprilTagDeglitchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagDeglitch'); - late final _ArucoDetectorParameters_GetAprilTagDeglitch = - _ArucoDetectorParameters_GetAprilTagDeglitchPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, Mat, Mat, ffi.Int, + ffi.Pointer)>>('ANN_MLP_Predict'); + late final _ANN_MLP_Predict = _ANN_MLP_PredictPtr.asFunction< + CvStatus Function(ANN_MLP, Mat, Mat, int, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagMaxLineFitMse( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Save( + ANN_MLP self, + ffi.Pointer filename, ) { - return _ArucoDetectorParameters_GetAprilTagMaxLineFitMse( - ap, - rval, + return _ANN_MLP_Save( + self, + filename, ); } - late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMaxLineFitMse'); - late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMse = - _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SavePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>>('ANN_MLP_Save'); + late final _ANN_MLP_Save = _ANN_MLP_SavePtr.asFunction< + CvStatus Function(ANN_MLP, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetAprilTagMaxNmaxima( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetActivationFunction( + ANN_MLP self, + int type, + double param1, + double param2, ) { - return _ArucoDetectorParameters_GetAprilTagMaxNmaxima( - ap, - rval, + return _ANN_MLP_SetActivationFunction( + self, + type, + param1, + param2, ); } - late final _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMaxNmaxima'); - late final _ArucoDetectorParameters_GetAprilTagMaxNmaxima = - _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetActivationFunctionPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, ffi.Int, ffi.Double, + ffi.Double)>>('ANN_MLP_SetActivationFunction'); + late final _ANN_MLP_SetActivationFunction = _ANN_MLP_SetActivationFunctionPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagMinClusterPixels( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealCoolingRatio( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagMinClusterPixels( - ap, - rval, + return _ANN_MLP_SetAnnealCoolingRatio( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMinClusterPixels'); - late final _ArucoDetectorParameters_GetAprilTagMinClusterPixels = - _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealCoolingRatioPtr = + _lookup>( + 'ANN_MLP_SetAnnealCoolingRatio'); + late final _ANN_MLP_SetAnnealCoolingRatio = _ANN_MLP_SetAnnealCoolingRatioPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealFinalT( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( - ap, - rval, + return _ANN_MLP_SetAnnealFinalT( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff'); - late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff = - _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealFinalTPtr = + _lookup>( + 'ANN_MLP_SetAnnealFinalT'); + late final _ANN_MLP_SetAnnealFinalT = _ANN_MLP_SetAnnealFinalTPtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetAprilTagQuadDecimate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealInitialT( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetAprilTagQuadDecimate( - ap, - rval, + return _ANN_MLP_SetAnnealInitialT( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagQuadDecimate'); - late final _ArucoDetectorParameters_GetAprilTagQuadDecimate = - _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealInitialTPtr = + _lookup>( + 'ANN_MLP_SetAnnealInitialT'); + late final _ANN_MLP_SetAnnealInitialT = _ANN_MLP_SetAnnealInitialTPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetAprilTagQuadSigma( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetAnnealItePerStep( + ANN_MLP self, + int val, ) { - return _ArucoDetectorParameters_GetAprilTagQuadSigma( - ap, - rval, + return _ANN_MLP_SetAnnealItePerStep( + self, + val, ); } - late final _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetAprilTagQuadSigma'); - late final _ArucoDetectorParameters_GetAprilTagQuadSigma = - _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetAnnealItePerStepPtr = + _lookup>( + 'ANN_MLP_SetAnnealItePerStep'); + late final _ANN_MLP_SetAnnealItePerStep = _ANN_MLP_SetAnnealItePerStepPtr + .asFunction(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMaxIterations( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetBackpropMomentumScale( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementMaxIterations( - ap, - rval, + return _ANN_MLP_SetBackpropMomentumScale( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMaxIterations'); - late final _ArucoDetectorParameters_GetCornerRefinementMaxIterations = - _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetBackpropMomentumScalePtr = + _lookup>( + 'ANN_MLP_SetBackpropMomentumScale'); + late final _ANN_MLP_SetBackpropMomentumScale = + _ANN_MLP_SetBackpropMomentumScalePtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMethod( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetBackpropWeightScale( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementMethod( - ap, - rval, + return _ANN_MLP_SetBackpropWeightScale( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMethodPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMethod'); - late final _ArucoDetectorParameters_GetCornerRefinementMethod = - _ArucoDetectorParameters_GetCornerRefinementMethodPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetBackpropWeightScalePtr = + _lookup>( + 'ANN_MLP_SetBackpropWeightScale'); + late final _ANN_MLP_SetBackpropWeightScale = + _ANN_MLP_SetBackpropWeightScalePtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetCornerRefinementMinAccuracy( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetLayerSizes( + ANN_MLP self, + Mat _layer_sizes, ) { - return _ArucoDetectorParameters_GetCornerRefinementMinAccuracy( - ap, - rval, + return _ANN_MLP_SetLayerSizes( + self, + _layer_sizes, ); } - late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementMinAccuracy'); - late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracy = - _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetLayerSizesPtr = + _lookup>( + 'ANN_MLP_SetLayerSizes'); + late final _ANN_MLP_SetLayerSizes = + _ANN_MLP_SetLayerSizesPtr.asFunction(); - CvStatus ArucoDetectorParameters_GetCornerRefinementWinSize( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDW0( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetCornerRefinementWinSize( - ap, - rval, + return _ANN_MLP_SetRpropDW0( + self, + val, ); } - late final _ArucoDetectorParameters_GetCornerRefinementWinSizePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetCornerRefinementWinSize'); - late final _ArucoDetectorParameters_GetCornerRefinementWinSize = - _ArucoDetectorParameters_GetCornerRefinementWinSizePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDW0Ptr = + _lookup>( + 'ANN_MLP_SetRpropDW0'); + late final _ANN_MLP_SetRpropDW0 = + _ANN_MLP_SetRpropDW0Ptr.asFunction(); - CvStatus ArucoDetectorParameters_GetDetectInvertedMarker( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMax( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetDetectInvertedMarker( - ap, - rval, + return _ANN_MLP_SetRpropDWMax( + self, + val, ); } - late final _ArucoDetectorParameters_GetDetectInvertedMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetDetectInvertedMarker'); - late final _ArucoDetectorParameters_GetDetectInvertedMarker = - _ArucoDetectorParameters_GetDetectInvertedMarkerPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMaxPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMax'); + late final _ANN_MLP_SetRpropDWMax = _ANN_MLP_SetRpropDWMaxPtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetErrorCorrectionRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMin( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetErrorCorrectionRate( - ap, - rval, + return _ANN_MLP_SetRpropDWMin( + self, + val, ); } - late final _ArucoDetectorParameters_GetErrorCorrectionRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetErrorCorrectionRate'); - late final _ArucoDetectorParameters_GetErrorCorrectionRate = - _ArucoDetectorParameters_GetErrorCorrectionRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMinPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMin'); + late final _ANN_MLP_SetRpropDWMin = _ANN_MLP_SetRpropDWMinPtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMarkerBorderBits( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWMinus( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetMarkerBorderBits( - ap, - rval, + return _ANN_MLP_SetRpropDWMinus( + self, + val, ); } - late final _ArucoDetectorParameters_GetMarkerBorderBitsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMarkerBorderBits'); - late final _ArucoDetectorParameters_GetMarkerBorderBits = - _ArucoDetectorParameters_GetMarkerBorderBitsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWMinusPtr = + _lookup>( + 'ANN_MLP_SetRpropDWMinus'); + late final _ANN_MLP_SetRpropDWMinus = _ANN_MLP_SetRpropDWMinusPtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetRpropDWPlus( + ANN_MLP self, + double val, ) { - return _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( - ap, - rval, + return _ANN_MLP_SetRpropDWPlus( + self, + val, ); } - late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate'); - late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate = - _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetRpropDWPlusPtr = + _lookup>( + 'ANN_MLP_SetRpropDWPlus'); + late final _ANN_MLP_SetRpropDWPlus = _ANN_MLP_SetRpropDWPlusPtr.asFunction< + CvStatus Function(ANN_MLP, double)>(); - CvStatus ArucoDetectorParameters_GetMaxMarkerPerimeterRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetTermCriteria( + ANN_MLP self, + TermCriteria val, ) { - return _ArucoDetectorParameters_GetMaxMarkerPerimeterRate( - ap, - rval, + return _ANN_MLP_SetTermCriteria( + self, + val, ); } - late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMaxMarkerPerimeterRate'); - late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRate = - _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetTermCriteriaPtr = + _lookup>( + 'ANN_MLP_SetTermCriteria'); + late final _ANN_MLP_SetTermCriteria = _ANN_MLP_SetTermCriteriaPtr.asFunction< + CvStatus Function(ANN_MLP, TermCriteria)>(); - CvStatus ArucoDetectorParameters_GetMinCornerDistanceRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_SetTrainMethod( + ANN_MLP self, + int method, + double param1, + double param2, ) { - return _ArucoDetectorParameters_GetMinCornerDistanceRate( - ap, - rval, + return _ANN_MLP_SetTrainMethod( + self, + method, + param1, + param2, ); } - late final _ArucoDetectorParameters_GetMinCornerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinCornerDistanceRate'); - late final _ArucoDetectorParameters_GetMinCornerDistanceRate = - _ArucoDetectorParameters_GetMinCornerDistanceRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_SetTrainMethodPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, ffi.Int, ffi.Double, + ffi.Double)>>('ANN_MLP_SetTrainMethod'); + late final _ANN_MLP_SetTrainMethod = _ANN_MLP_SetTrainMethodPtr.asFunction< + CvStatus Function(ANN_MLP, int, double, double)>(); - CvStatus ArucoDetectorParameters_GetMinDistanceToBorder( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Train( + ANN_MLP self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetMinDistanceToBorder( - ap, + return _ANN_MLP_Train( + self, + trainData, + flags, rval, ); } - late final _ArucoDetectorParameters_GetMinDistanceToBorderPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinDistanceToBorder'); - late final _ArucoDetectorParameters_GetMinDistanceToBorder = - _ArucoDetectorParameters_GetMinDistanceToBorderPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, PtrTrainData, ffi.Int, + ffi.Pointer)>>('ANN_MLP_Train'); + late final _ANN_MLP_Train = _ANN_MLP_TrainPtr.asFunction< + CvStatus Function(ANN_MLP, PtrTrainData, int, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetMinMarkerDistanceRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus ANN_MLP_Train_1( + ANN_MLP self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetMinMarkerDistanceRate( - ap, + return _ANN_MLP_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinMarkerDistanceRate'); - late final _ArucoDetectorParameters_GetMinMarkerDistanceRate = - _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _ANN_MLP_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(ANN_MLP, Mat, ffi.Int, Mat, + ffi.Pointer)>>('ANN_MLP_Train_1'); + late final _ANN_MLP_Train_1 = _ANN_MLP_Train_1Ptr.asFunction< + CvStatus Function(ANN_MLP, Mat, int, Mat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetMinMarkerPerimeterRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AdaptiveThreshold( + Mat src, + Mat dst, + double maxValue, + int adaptiveTyp, + int typ, + int blockSize, + double c, ) { - return _ArucoDetectorParameters_GetMinMarkerPerimeterRate( - ap, - rval, + return _AdaptiveThreshold( + src, + dst, + maxValue, + adaptiveTyp, + typ, + blockSize, + c, ); } - late final _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr = _lookup< + late final _AdaptiveThresholdPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Int, ffi.Int, ffi.Int, + ffi.Double)>>('AdaptiveThreshold'); + late final _AdaptiveThreshold = _AdaptiveThresholdPtr.asFunction< + CvStatus Function(Mat, Mat, double, int, int, int, double)>(); + + void AgastFeatureDetector_Close( + ffi.Pointer a, + ) { + return _AgastFeatureDetector_Close( + a, + ); + } + + late final _AgastFeatureDetector_ClosePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinMarkerPerimeterRate'); - late final _ArucoDetectorParameters_GetMinMarkerPerimeterRate = - _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + ffi.Void Function(ffi.Pointer)>>( + 'AgastFeatureDetector_Close'); + late final _AgastFeatureDetector_Close = _AgastFeatureDetector_ClosePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_GetMinOtsuStdDev( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AgastFeatureDetector_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetMinOtsuStdDev( - ap, + return _AgastFeatureDetector_Create( rval, ); } - late final _ArucoDetectorParameters_GetMinOtsuStdDevPtr = _lookup< + late final _AgastFeatureDetector_CreatePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetMinOtsuStdDev'); - late final _ArucoDetectorParameters_GetMinOtsuStdDev = - _ArucoDetectorParameters_GetMinOtsuStdDevPtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer)>>( + 'AgastFeatureDetector_Create'); + late final _AgastFeatureDetector_Create = _AgastFeatureDetector_CreatePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AgastFeatureDetector_Detect( + AgastFeatureDetector a, + Mat src, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( - ap, + return _AgastFeatureDetector_Detect( + a, + src, rval, ); } - late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell'); - late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell = - _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr - .asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _AgastFeatureDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(AgastFeatureDetector, Mat, + ffi.Pointer)>>('AgastFeatureDetector_Detect'); + late final _AgastFeatureDetector_Detect = + _AgastFeatureDetector_DetectPtr.asFunction< + CvStatus Function( + AgastFeatureDetector, Mat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( - ArucoDetectorParameters ap, - ffi.Pointer rval, + void AlignMTB_Close( + ffi.Pointer b, ) { - return _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( - ap, - rval, + return _AlignMTB_Close( + b, ); } - late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell'); - late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell = - _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); + late final _AlignMTB_ClosePtr = + _lookup)>>( + 'AlignMTB_Close'); + late final _AlignMTB_Close = + _AlignMTB_ClosePtr.asFunction)>(); - CvStatus ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( - ArucoDetectorParameters ap, - ffi.Pointer rval, + CvStatus AlignMTB_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( - ap, + return _AlignMTB_Create( rval, ); } - late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>>( - 'ArucoDetectorParameters_GetPolygonalApproxAccuracyRate'); - late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate = - _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr.asFunction< - CvStatus Function( - ArucoDetectorParameters, ffi.Pointer)>(); + late final _AlignMTB_CreatePtr = + _lookup)>>( + 'AlignMTB_Create'); + late final _AlignMTB_Create = _AlignMTB_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshConstant( - ArucoDetectorParameters ap, - double adaptiveThreshConstant, + CvStatus AlignMTB_CreateWithParams( + int max_bits, + int exclude_range, + bool cut, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshConstant( - ap, - adaptiveThreshConstant, + return _AlignMTB_CreateWithParams( + max_bits, + exclude_range, + cut, + rval, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetAdaptiveThreshConstant'); - late final _ArucoDetectorParameters_SetAdaptiveThreshConstant = - _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _AlignMTB_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Int, ffi.Bool, + ffi.Pointer)>>('AlignMTB_CreateWithParams'); + late final _AlignMTB_CreateWithParams = _AlignMTB_CreateWithParamsPtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeMax, + CvStatus AlignMTB_Process( + AlignMTB b, + VecMat src, + ffi.Pointer dst, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( - ap, - adaptiveThreshWinSizeMax, + return _AlignMTB_Process( + b, + src, + dst, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _AlignMTB_ProcessPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + AlignMTB, VecMat, ffi.Pointer)>>('AlignMTB_Process'); + late final _AlignMTB_Process = _AlignMTB_ProcessPtr.asFunction< + CvStatus Function(AlignMTB, VecMat, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeMin, + CvStatus ApplyColorMap( + Mat src, + Mat dst, + int colormap, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( - ap, - adaptiveThreshWinSizeMin, + return _ApplyColorMap( + src, + dst, + colormap, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ApplyColorMapPtr = + _lookup>( + 'ApplyColorMap'); + late final _ApplyColorMap = + _ApplyColorMapPtr.asFunction(); - CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( - ArucoDetectorParameters ap, - int adaptiveThreshWinSizeStep, + CvStatus ApplyCustomColorMap( + Mat src, + Mat dst, + Mat colormap, ) { - return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( - ap, - adaptiveThreshWinSizeStep, + return _ApplyCustomColorMap( + src, + dst, + colormap, ); } - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep'); - late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep = - _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ApplyCustomColorMapPtr = + _lookup>( + 'ApplyCustomColorMap'); + late final _ApplyCustomColorMap = + _ApplyCustomColorMapPtr.asFunction(); - CvStatus ArucoDetectorParameters_SetAprilTagCriticalRad( - ArucoDetectorParameters ap, - double aprilTagCriticalRad, + CvStatus ApproxPolyDP( + VecPoint curve, + double epsilon, + bool closed, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagCriticalRad( - ap, - aprilTagCriticalRad, + return _ApproxPolyDP( + curve, + epsilon, + closed, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagCriticalRadPtr = _lookup< + late final _ApproxPolyDPPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagCriticalRad'); - late final _ArucoDetectorParameters_SetAprilTagCriticalRad = - _ArucoDetectorParameters_SetAprilTagCriticalRadPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function(VecPoint, ffi.Double, ffi.Bool, + ffi.Pointer)>>('ApproxPolyDP'); + late final _ApproxPolyDP = _ApproxPolyDPPtr.asFunction< + CvStatus Function(VecPoint, double, bool, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagDeglitch( - ArucoDetectorParameters ap, - int aprilTagDeglitch, + CvStatus ArcLength( + VecPoint curve, + bool is_closed, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagDeglitch( - ap, - aprilTagDeglitch, + return _ArcLength( + curve, + is_closed, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagDeglitchPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagDeglitch'); - late final _ArucoDetectorParameters_SetAprilTagDeglitch = - _ArucoDetectorParameters_SetAprilTagDeglitchPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArcLengthPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint, ffi.Bool, ffi.Pointer)>>('ArcLength'); + late final _ArcLength = _ArcLengthPtr.asFunction< + CvStatus Function(VecPoint, bool, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMaxLineFitMse( - ArucoDetectorParameters ap, - double aprilTagMaxLineFitMse, + CvStatus ArrowedLine( + Mat img, + Point pt1, + Point pt2, + Scalar color, + int thickness, + int line_type, + int shift, + double tipLength, ) { - return _ArucoDetectorParameters_SetAprilTagMaxLineFitMse( - ap, - aprilTagMaxLineFitMse, + return _ArrowedLine( + img, + pt1, + pt2, + color, + thickness, + line_type, + shift, + tipLength, ); } - late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr = _lookup< + late final _ArrowedLinePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagMaxLineFitMse'); - late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMse = - _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function(Mat, Point, Point, Scalar, ffi.Int, ffi.Int, + ffi.Int, ffi.Double)>>('ArrowedLine'); + late final _ArrowedLine = _ArrowedLinePtr.asFunction< + CvStatus Function(Mat, Point, Point, Scalar, int, int, int, double)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMaxNmaxima( - ArucoDetectorParameters ap, - int aprilTagMaxNmaxima, + void ArucoDetectorParameters_Close( + ffi.Pointer ap, ) { - return _ArucoDetectorParameters_SetAprilTagMaxNmaxima( + return _ArucoDetectorParameters_Close( ap, - aprilTagMaxNmaxima, ); } - late final _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMaxNmaxima'); - late final _ArucoDetectorParameters_SetAprilTagMaxNmaxima = - _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'ArucoDetectorParameters_Close'); + late final _ArucoDetectorParameters_Close = _ArucoDetectorParameters_ClosePtr + .asFunction)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMinClusterPixels( - ArucoDetectorParameters ap, - int aprilTagMinClusterPixels, + CvStatus ArucoDetectorParameters_Create( + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagMinClusterPixels( - ap, - aprilTagMinClusterPixels, + return _ArucoDetectorParameters_Create( + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMinClusterPixels'); - late final _ArucoDetectorParameters_SetAprilTagMinClusterPixels = - _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'ArucoDetectorParameters_Create'); + late final _ArucoDetectorParameters_Create = + _ArucoDetectorParameters_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshConstant( ArucoDetectorParameters ap, - int aprilTagMinWhiteBlackDiff, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + return _ArucoDetectorParameters_GetAdaptiveThreshConstant( ap, - aprilTagMinWhiteBlackDiff, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff'); - late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff = - _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshConstant'); + late final _ArucoDetectorParameters_GetAdaptiveThreshConstant = + _ArucoDetectorParameters_GetAdaptiveThreshConstantPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagQuadDecimate( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( ArucoDetectorParameters ap, - double aprilTagQuadDecimate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagQuadDecimate( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax( ap, - aprilTagQuadDecimate, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadDecimate'); - late final _ArucoDetectorParameters_SetAprilTagQuadDecimate = - _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMaxPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetAprilTagQuadSigma( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( ArucoDetectorParameters ap, - double aprilTagQuadSigma, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetAprilTagQuadSigma( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin( ap, - aprilTagQuadSigma, + rval, ); } - late final _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadSigma'); - late final _ArucoDetectorParameters_SetAprilTagQuadSigma = - _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeMinPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMaxIterations( + CvStatus ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( ArucoDetectorParameters ap, - int cornerRefinementMaxIterations, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMaxIterations( + return _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep( ap, - cornerRefinementMaxIterations, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( - 'ArucoDetectorParameters_SetCornerRefinementMaxIterations'); - late final _ArucoDetectorParameters_SetCornerRefinementMaxIterations = - _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep'); + late final _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep = + _ArucoDetectorParameters_GetAdaptiveThreshWinSizeStepPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMethod( + CvStatus ArucoDetectorParameters_GetAprilTagCriticalRad( ArucoDetectorParameters ap, - int cornerRefinementMethod, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMethod( + return _ArucoDetectorParameters_GetAprilTagCriticalRad( ap, - cornerRefinementMethod, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMethodPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetCornerRefinementMethod'); - late final _ArucoDetectorParameters_SetCornerRefinementMethod = - _ArucoDetectorParameters_SetCornerRefinementMethodPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagCriticalRadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagCriticalRad'); + late final _ArucoDetectorParameters_GetAprilTagCriticalRad = + _ArucoDetectorParameters_GetAprilTagCriticalRadPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + CvStatus ArucoDetectorParameters_GetAprilTagDeglitch( ArucoDetectorParameters ap, - double cornerRefinementMinAccuracy, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + return _ArucoDetectorParameters_GetAprilTagDeglitch( ap, - cornerRefinementMinAccuracy, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetCornerRefinementMinAccuracy'); - late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracy = - _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagDeglitchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagDeglitch'); + late final _ArucoDetectorParameters_GetAprilTagDeglitch = + _ArucoDetectorParameters_GetAprilTagDeglitchPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetCornerRefinementWinSize( + CvStatus ArucoDetectorParameters_GetAprilTagMaxLineFitMse( ArucoDetectorParameters ap, - int cornerRefinementWinSize, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetCornerRefinementWinSize( + return _ArucoDetectorParameters_GetAprilTagMaxLineFitMse( ap, - cornerRefinementWinSize, + rval, ); } - late final _ArucoDetectorParameters_SetCornerRefinementWinSizePtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetCornerRefinementWinSize'); - late final _ArucoDetectorParameters_SetCornerRefinementWinSize = - _ArucoDetectorParameters_SetCornerRefinementWinSizePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMaxLineFitMse'); + late final _ArucoDetectorParameters_GetAprilTagMaxLineFitMse = + _ArucoDetectorParameters_GetAprilTagMaxLineFitMsePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetDetectInvertedMarker( + CvStatus ArucoDetectorParameters_GetAprilTagMaxNmaxima( ArucoDetectorParameters ap, - bool detectInvertedMarker, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetDetectInvertedMarker( + return _ArucoDetectorParameters_GetAprilTagMaxNmaxima( ap, - detectInvertedMarker, + rval, ); } - late final _ArucoDetectorParameters_SetDetectInvertedMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Bool)>>('ArucoDetectorParameters_SetDetectInvertedMarker'); - late final _ArucoDetectorParameters_SetDetectInvertedMarker = - _ArucoDetectorParameters_SetDetectInvertedMarkerPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, bool)>(); + late final _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMaxNmaxima'); + late final _ArucoDetectorParameters_GetAprilTagMaxNmaxima = + _ArucoDetectorParameters_GetAprilTagMaxNmaximaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetErrorCorrectionRate( + CvStatus ArucoDetectorParameters_GetAprilTagMinClusterPixels( ArucoDetectorParameters ap, - double errorCorrectionRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetErrorCorrectionRate( + return _ArucoDetectorParameters_GetAprilTagMinClusterPixels( ap, - errorCorrectionRate, + rval, ); } - late final _ArucoDetectorParameters_SetErrorCorrectionRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetErrorCorrectionRate'); - late final _ArucoDetectorParameters_SetErrorCorrectionRate = - _ArucoDetectorParameters_SetErrorCorrectionRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMinClusterPixels'); + late final _ArucoDetectorParameters_GetAprilTagMinClusterPixels = + _ArucoDetectorParameters_GetAprilTagMinClusterPixelsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMarkerBorderBits( + CvStatus ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( ArucoDetectorParameters ap, - int markerBorderBits, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMarkerBorderBits( + return _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff( ap, - markerBorderBits, + rval, ); } - late final _ArucoDetectorParameters_SetMarkerBorderBitsPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetMarkerBorderBits'); - late final _ArucoDetectorParameters_SetMarkerBorderBits = - _ArucoDetectorParameters_SetMarkerBorderBitsPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff'); + late final _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff = + _ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiffPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + CvStatus ArucoDetectorParameters_GetAprilTagQuadDecimate( ArucoDetectorParameters ap, - double maxErroneousBitsInBorderRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + return _ArucoDetectorParameters_GetAprilTagQuadDecimate( ap, - maxErroneousBitsInBorderRate, + rval, ); } - late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate'); - late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate = - _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagQuadDecimate'); + late final _ArucoDetectorParameters_GetAprilTagQuadDecimate = + _ArucoDetectorParameters_GetAprilTagQuadDecimatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + CvStatus ArucoDetectorParameters_GetAprilTagQuadSigma( ArucoDetectorParameters ap, - double maxMarkerPerimeterRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + return _ArucoDetectorParameters_GetAprilTagQuadSigma( ap, - maxMarkerPerimeterRate, + rval, ); } - late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr = _lookup< + late final _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMaxMarkerPerimeterRate'); - late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRate = - _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetAprilTagQuadSigma'); + late final _ArucoDetectorParameters_GetAprilTagQuadSigma = + _ArucoDetectorParameters_GetAprilTagQuadSigmaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinCornerDistanceRate( + CvStatus ArucoDetectorParameters_GetCornerRefinementMaxIterations( ArucoDetectorParameters ap, - double minCornerDistanceRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinCornerDistanceRate( + return _ArucoDetectorParameters_GetCornerRefinementMaxIterations( ap, - minCornerDistanceRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinCornerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinCornerDistanceRate'); - late final _ArucoDetectorParameters_SetMinCornerDistanceRate = - _ArucoDetectorParameters_SetMinCornerDistanceRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMaxIterations'); + late final _ArucoDetectorParameters_GetCornerRefinementMaxIterations = + _ArucoDetectorParameters_GetCornerRefinementMaxIterationsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinDistanceToBorder( + CvStatus ArucoDetectorParameters_GetCornerRefinementMethod( ArucoDetectorParameters ap, - int minDistanceToBorder, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinDistanceToBorder( + return _ArucoDetectorParameters_GetCornerRefinementMethod( ap, - minDistanceToBorder, + rval, ); } - late final _ArucoDetectorParameters_SetMinDistanceToBorderPtr = _lookup< - ffi - .NativeFunction>( - 'ArucoDetectorParameters_SetMinDistanceToBorder'); - late final _ArucoDetectorParameters_SetMinDistanceToBorder = - _ArucoDetectorParameters_SetMinDistanceToBorderPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetCornerRefinementMethodPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMethod'); + late final _ArucoDetectorParameters_GetCornerRefinementMethod = + _ArucoDetectorParameters_GetCornerRefinementMethodPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinMarkerDistanceRate( + CvStatus ArucoDetectorParameters_GetCornerRefinementMinAccuracy( ArucoDetectorParameters ap, - double minMarkerDistanceRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinMarkerDistanceRate( + return _ArucoDetectorParameters_GetCornerRefinementMinAccuracy( ap, - minMarkerDistanceRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinMarkerDistanceRate'); - late final _ArucoDetectorParameters_SetMinMarkerDistanceRate = - _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementMinAccuracy'); + late final _ArucoDetectorParameters_GetCornerRefinementMinAccuracy = + _ArucoDetectorParameters_GetCornerRefinementMinAccuracyPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinMarkerPerimeterRate( + CvStatus ArucoDetectorParameters_GetCornerRefinementWinSize( ArucoDetectorParameters ap, - double minMarkerPerimeterRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinMarkerPerimeterRate( + return _ArucoDetectorParameters_GetCornerRefinementWinSize( ap, - minMarkerPerimeterRate, + rval, ); } - late final _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr = _lookup< + late final _ArucoDetectorParameters_GetCornerRefinementWinSizePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetMinMarkerPerimeterRate'); - late final _ArucoDetectorParameters_SetMinMarkerPerimeterRate = - _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetCornerRefinementWinSize'); + late final _ArucoDetectorParameters_GetCornerRefinementWinSize = + _ArucoDetectorParameters_GetCornerRefinementWinSizePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetMinOtsuStdDev( + CvStatus ArucoDetectorParameters_GetDetectInvertedMarker( ArucoDetectorParameters ap, - double minOtsuStdDev, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetMinOtsuStdDev( + return _ArucoDetectorParameters_GetDetectInvertedMarker( ap, - minOtsuStdDev, + rval, ); } - late final _ArucoDetectorParameters_SetMinOtsuStdDevPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, - ffi.Double)>>('ArucoDetectorParameters_SetMinOtsuStdDev'); - late final _ArucoDetectorParameters_SetMinOtsuStdDev = - _ArucoDetectorParameters_SetMinOtsuStdDevPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + late final _ArucoDetectorParameters_GetDetectInvertedMarkerPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetDetectInvertedMarker'); + late final _ArucoDetectorParameters_GetDetectInvertedMarker = + _ArucoDetectorParameters_GetDetectInvertedMarkerPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + CvStatus ArucoDetectorParameters_GetErrorCorrectionRate( ArucoDetectorParameters ap, - double perspectiveRemoveIgnoredMarginPerCell, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + return _ArucoDetectorParameters_GetErrorCorrectionRate( ap, - perspectiveRemoveIgnoredMarginPerCell, + rval, ); } - late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell'); - late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell = - _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr - .asFunction(); + late final _ArucoDetectorParameters_GetErrorCorrectionRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetErrorCorrectionRate'); + late final _ArucoDetectorParameters_GetErrorCorrectionRate = + _ArucoDetectorParameters_GetErrorCorrectionRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + CvStatus ArucoDetectorParameters_GetMarkerBorderBits( ArucoDetectorParameters ap, - int perspectiveRemovePixelPerCell, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + return _ArucoDetectorParameters_GetMarkerBorderBits( ap, - perspectiveRemovePixelPerCell, + rval, ); } - late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr = - _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( - 'ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell'); - late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell = - _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr.asFunction< - CvStatus Function(ArucoDetectorParameters, int)>(); + late final _ArucoDetectorParameters_GetMarkerBorderBitsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMarkerBorderBits'); + late final _ArucoDetectorParameters_GetMarkerBorderBits = + _ArucoDetectorParameters_GetMarkerBorderBitsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + CvStatus ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( ArucoDetectorParameters ap, - double polygonalApproxAccuracyRate, + ffi.Pointer rval, ) { - return _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + return _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate( ap, - polygonalApproxAccuracyRate, + rval, ); } - late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr = + late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( - 'ArucoDetectorParameters_SetPolygonalApproxAccuracyRate'); - late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate = - _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr.asFunction< - CvStatus Function(ArucoDetectorParameters, double)>(); + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate'); + late final _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate = + _ArucoDetectorParameters_GetMaxErroneousBitsInBorderRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - void ArucoDetector_Close( - ffi.Pointer ad, - ) { - return _ArucoDetector_Close( - ad, - ); - } - - late final _ArucoDetector_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDetector_Close'); - late final _ArucoDetector_Close = _ArucoDetector_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); - - CvStatus ArucoDetector_DetectMarkers( - ArucoDetector ad, - Mat inputArr, - ffi.Pointer markerCorners, - ffi.Pointer markerIds, - ffi.Pointer rejectedCandidates, + CvStatus ArucoDetectorParameters_GetMaxMarkerPerimeterRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_DetectMarkers( - ad, - inputArr, - markerCorners, - markerIds, - rejectedCandidates, + return _ArucoDetectorParameters_GetMaxMarkerPerimeterRate( + ap, + rval, ); } - late final _ArucoDetector_DetectMarkersPtr = _lookup< - ffi.NativeFunction< + late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMaxMarkerPerimeterRate'); + late final _ArucoDetectorParameters_GetMaxMarkerPerimeterRate = + _ArucoDetectorParameters_GetMaxMarkerPerimeterRatePtr.asFunction< CvStatus Function( - ArucoDetector, - Mat, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>('ArucoDetector_DetectMarkers'); - late final _ArucoDetector_DetectMarkers = - _ArucoDetector_DetectMarkersPtr.asFunction< - CvStatus Function(ArucoDetector, Mat, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetector_New( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetMinCornerDistanceRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_New( + return _ArucoDetectorParameters_GetMinCornerDistanceRate( + ap, rval, ); } - late final _ArucoDetector_NewPtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDetector_New'); - late final _ArucoDetector_New = _ArucoDetector_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMinCornerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinCornerDistanceRate'); + late final _ArucoDetectorParameters_GetMinCornerDistanceRate = + _ArucoDetectorParameters_GetMinCornerDistanceRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDetector_NewWithParams( - ArucoDictionary dictionary, - ArucoDetectorParameters params, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetMinDistanceToBorder( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDetector_NewWithParams( - dictionary, - params, + return _ArucoDetectorParameters_GetMinDistanceToBorder( + ap, rval, ); } - late final _ArucoDetector_NewWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ArucoDictionary, ArucoDetectorParameters, - ffi.Pointer)>>('ArucoDetector_NewWithParams'); - late final _ArucoDetector_NewWithParams = - _ArucoDetector_NewWithParamsPtr.asFunction< - CvStatus Function(ArucoDictionary, ArucoDetectorParameters, - ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMinDistanceToBorderPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinDistanceToBorder'); + late final _ArucoDetectorParameters_GetMinDistanceToBorder = + _ArucoDetectorParameters_GetMinDistanceToBorderPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - void ArucoDictionary_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_GetMinMarkerDistanceRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDictionary_Close( - self, + return _ArucoDetectorParameters_GetMinMarkerDistanceRate( + ap, + rval, ); } - late final _ArucoDictionary_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'ArucoDictionary_Close'); - late final _ArucoDictionary_Close = _ArucoDictionary_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinMarkerDistanceRate'); + late final _ArucoDetectorParameters_GetMinMarkerDistanceRate = + _ArucoDetectorParameters_GetMinMarkerDistanceRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoDrawDetectedMarkers( - Mat image, - VecVecPoint2f markerCorners, - VecInt markerIds, - Scalar borderColor, + CvStatus ArucoDetectorParameters_GetMinMarkerPerimeterRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoDrawDetectedMarkers( - image, - markerCorners, - markerIds, - borderColor, + return _ArucoDetectorParameters_GetMinMarkerPerimeterRate( + ap, + rval, ); } - late final _ArucoDrawDetectedMarkersPtr = _lookup< - ffi.NativeFunction< + late final _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinMarkerPerimeterRate'); + late final _ArucoDetectorParameters_GetMinMarkerPerimeterRate = + _ArucoDetectorParameters_GetMinMarkerPerimeterRatePtr.asFunction< CvStatus Function( - Mat, VecVecPoint2f, VecInt, Scalar)>>('ArucoDrawDetectedMarkers'); - late final _ArucoDrawDetectedMarkers = _ArucoDrawDetectedMarkersPtr - .asFunction(); + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus ArucoGenerateImageMarker( - int dictionaryId, - int id, - int sidePixels, - Mat img, - int borderBits, + CvStatus ArucoDetectorParameters_GetMinOtsuStdDev( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _ArucoGenerateImageMarker( - dictionaryId, - id, - sidePixels, - img, - borderBits, + return _ArucoDetectorParameters_GetMinOtsuStdDev( + ap, + rval, ); } - late final _ArucoGenerateImageMarkerPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, Mat, - ffi.Int)>>('ArucoGenerateImageMarker'); - late final _ArucoGenerateImageMarker = _ArucoGenerateImageMarkerPtr - .asFunction(); + late final _ArucoDetectorParameters_GetMinOtsuStdDevPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetMinOtsuStdDev'); + late final _ArucoDetectorParameters_GetMinOtsuStdDev = + _ArucoDetectorParameters_GetMinOtsuStdDevPtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - void AsyncArray_Close( - ffi.Pointer a, + CvStatus ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_Close( - a, + return _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell( + ap, + rval, ); } - late final _AsyncArray_ClosePtr = - _lookup)>>( - 'AsyncArray_Close'); - late final _AsyncArray_Close = - _AsyncArray_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell'); + late final _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell = + _ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCellPtr + .asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus AsyncArray_Get( - AsyncArray async_out, - Mat out, + CvStatus ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_Get( - async_out, - out, + return _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell( + ap, + rval, ); } - late final _AsyncArray_GetPtr = - _lookup>( - 'AsyncArray_Get'); - late final _AsyncArray_Get = - _AsyncArray_GetPtr.asFunction(); + late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell'); + late final _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell = + _ArucoDetectorParameters_GetPerspectiveRemovePixelPerCellPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Pointer)>(); - CvStatus AsyncArray_New( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( + ArucoDetectorParameters ap, + ffi.Pointer rval, ) { - return _AsyncArray_New( + return _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate( + ap, rval, ); } - late final _AsyncArray_NewPtr = - _lookup)>>( - 'AsyncArray_New'); - late final _AsyncArray_New = _AsyncArray_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); - - void BFMatcher_Close( - ffi.Pointer b, - ) { - return _BFMatcher_Close( - b, - ); + late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>>( + 'ArucoDetectorParameters_GetPolygonalApproxAccuracyRate'); + late final _ArucoDetectorParameters_GetPolygonalApproxAccuracyRate = + _ArucoDetectorParameters_GetPolygonalApproxAccuracyRatePtr.asFunction< + CvStatus Function( + ArucoDetectorParameters, ffi.Pointer)>(); + + CvStatus ArucoDetectorParameters_SetAdaptiveThreshConstant( + ArucoDetectorParameters ap, + double adaptiveThreshConstant, + ) { + return _ArucoDetectorParameters_SetAdaptiveThreshConstant( + ap, + adaptiveThreshConstant, + ); } - late final _BFMatcher_ClosePtr = - _lookup)>>( - 'BFMatcher_Close'); - late final _BFMatcher_Close = - _BFMatcher_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetAdaptiveThreshConstant'); + late final _ArucoDetectorParameters_SetAdaptiveThreshConstant = + _ArucoDetectorParameters_SetAdaptiveThreshConstantPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BFMatcher_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeMax, ) { - return _BFMatcher_Create( - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax( + ap, + adaptiveThreshWinSizeMax, ); } - late final _BFMatcher_CreatePtr = - _lookup)>>( - 'BFMatcher_Create'); - late final _BFMatcher_Create = _BFMatcher_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMaxPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BFMatcher_CreateWithParams( - int normType, - bool crossCheck, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeMin, ) { - return _BFMatcher_CreateWithParams( - normType, - crossCheck, - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin( + ap, + adaptiveThreshWinSizeMin, ); } - late final _BFMatcher_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Bool, - ffi.Pointer)>>('BFMatcher_CreateWithParams'); - late final _BFMatcher_CreateWithParams = _BFMatcher_CreateWithParamsPtr - .asFunction)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeMinPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BFMatcher_KnnMatch( - BFMatcher b, - Mat query, - Mat train, - int k, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( + ArucoDetectorParameters ap, + int adaptiveThreshWinSizeStep, ) { - return _BFMatcher_KnnMatch( - b, - query, - train, - k, - rval, + return _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep( + ap, + adaptiveThreshWinSizeStep, ); } - late final _BFMatcher_KnnMatchPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BFMatcher, Mat, Mat, ffi.Int, - ffi.Pointer)>>('BFMatcher_KnnMatch'); - late final _BFMatcher_KnnMatch = _BFMatcher_KnnMatchPtr.asFunction< - CvStatus Function(BFMatcher, Mat, Mat, int, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep'); + late final _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep = + _ArucoDetectorParameters_SetAdaptiveThreshWinSizeStepPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BFMatcher_Match( - BFMatcher b, - Mat query, - Mat train, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagCriticalRad( + ArucoDetectorParameters ap, + double aprilTagCriticalRad, ) { - return _BFMatcher_Match( - b, - query, - train, - rval, + return _ArucoDetectorParameters_SetAprilTagCriticalRad( + ap, + aprilTagCriticalRad, ); } - late final _BFMatcher_MatchPtr = _lookup< + late final _ArucoDetectorParameters_SetAprilTagCriticalRadPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - BFMatcher, Mat, Mat, ffi.Pointer)>>('BFMatcher_Match'); - late final _BFMatcher_Match = _BFMatcher_MatchPtr.asFunction< - CvStatus Function(BFMatcher, Mat, Mat, ffi.Pointer)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagCriticalRad'); + late final _ArucoDetectorParameters_SetAprilTagCriticalRad = + _ArucoDetectorParameters_SetAprilTagCriticalRadPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void BRISK_Close( - ffi.Pointer b, + CvStatus ArucoDetectorParameters_SetAprilTagDeglitch( + ArucoDetectorParameters ap, + int aprilTagDeglitch, ) { - return _BRISK_Close( - b, + return _ArucoDetectorParameters_SetAprilTagDeglitch( + ap, + aprilTagDeglitch, ); } - late final _BRISK_ClosePtr = - _lookup)>>( - 'BRISK_Close'); - late final _BRISK_Close = - _BRISK_ClosePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetAprilTagDeglitchPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagDeglitch'); + late final _ArucoDetectorParameters_SetAprilTagDeglitch = + _ArucoDetectorParameters_SetAprilTagDeglitchPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BRISK_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagMaxLineFitMse( + ArucoDetectorParameters ap, + double aprilTagMaxLineFitMse, ) { - return _BRISK_Create( - rval, + return _ArucoDetectorParameters_SetAprilTagMaxLineFitMse( + ap, + aprilTagMaxLineFitMse, ); } - late final _BRISK_CreatePtr = - _lookup)>>( - 'BRISK_Create'); - late final _BRISK_Create = - _BRISK_CreatePtr.asFunction)>(); + late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagMaxLineFitMse'); + late final _ArucoDetectorParameters_SetAprilTagMaxLineFitMse = + _ArucoDetectorParameters_SetAprilTagMaxLineFitMsePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BRISK_Detect( - BRISK b, - Mat src, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagMaxNmaxima( + ArucoDetectorParameters ap, + int aprilTagMaxNmaxima, ) { - return _BRISK_Detect( - b, - src, - rval, + return _ArucoDetectorParameters_SetAprilTagMaxNmaxima( + ap, + aprilTagMaxNmaxima, ); } - late final _BRISK_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - BRISK, Mat, ffi.Pointer)>>('BRISK_Detect'); - late final _BRISK_Detect = _BRISK_DetectPtr.asFunction< - CvStatus Function(BRISK, Mat, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMaxNmaxima'); + late final _ArucoDetectorParameters_SetAprilTagMaxNmaxima = + _ArucoDetectorParameters_SetAprilTagMaxNmaximaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BRISK_DetectAndCompute( - BRISK b, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagMinClusterPixels( + ArucoDetectorParameters ap, + int aprilTagMinClusterPixels, ) { - return _BRISK_DetectAndCompute( - b, - src, - mask, - desc, - rval, + return _ArucoDetectorParameters_SetAprilTagMinClusterPixels( + ap, + aprilTagMinClusterPixels, ); } - late final _BRISK_DetectAndComputePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BRISK, Mat, Mat, Mat, - ffi.Pointer)>>('BRISK_DetectAndCompute'); - late final _BRISK_DetectAndCompute = _BRISK_DetectAndComputePtr.asFunction< - CvStatus Function(BRISK, Mat, Mat, Mat, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMinClusterPixels'); + late final _ArucoDetectorParameters_SetAprilTagMinClusterPixels = + _ArucoDetectorParameters_SetAprilTagMinClusterPixelsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorKNN_Apply( - BackgroundSubtractorKNN self, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + ArucoDetectorParameters ap, + int aprilTagMinWhiteBlackDiff, ) { - return _BackgroundSubtractorKNN_Apply( - self, - src, - dst, + return _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff( + ap, + aprilTagMinWhiteBlackDiff, ); } - late final _BackgroundSubtractorKNN_ApplyPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BackgroundSubtractorKNN, Mat, - Mat)>>('BackgroundSubtractorKNN_Apply'); - late final _BackgroundSubtractorKNN_Apply = _BackgroundSubtractorKNN_ApplyPtr - .asFunction(); + late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff'); + late final _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff = + _ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiffPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - void BackgroundSubtractorKNN_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetAprilTagQuadDecimate( + ArucoDetectorParameters ap, + double aprilTagQuadDecimate, ) { - return _BackgroundSubtractorKNN_Close( - self, + return _ArucoDetectorParameters_SetAprilTagQuadDecimate( + ap, + aprilTagQuadDecimate, ); } - late final _BackgroundSubtractorKNN_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'BackgroundSubtractorKNN_Close'); - late final _BackgroundSubtractorKNN_Close = _BackgroundSubtractorKNN_ClosePtr - .asFunction)>(); + late final _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadDecimate'); + late final _ArucoDetectorParameters_SetAprilTagQuadDecimate = + _ArucoDetectorParameters_SetAprilTagQuadDecimatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BackgroundSubtractorKNN_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetAprilTagQuadSigma( + ArucoDetectorParameters ap, + double aprilTagQuadSigma, ) { - return _BackgroundSubtractorKNN_Create( - rval, + return _ArucoDetectorParameters_SetAprilTagQuadSigma( + ap, + aprilTagQuadSigma, ); } - late final _BackgroundSubtractorKNN_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'BackgroundSubtractorKNN_Create'); - late final _BackgroundSubtractorKNN_Create = - _BackgroundSubtractorKNN_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Float)>>('ArucoDetectorParameters_SetAprilTagQuadSigma'); + late final _ArucoDetectorParameters_SetAprilTagQuadSigma = + _ArucoDetectorParameters_SetAprilTagQuadSigmaPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BackgroundSubtractorKNN_CreateWithParams( - int history, - double dist2Threshold, - bool detectShadows, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetCornerRefinementMaxIterations( + ArucoDetectorParameters ap, + int cornerRefinementMaxIterations, ) { - return _BackgroundSubtractorKNN_CreateWithParams( - history, - dist2Threshold, - detectShadows, - rval, + return _ArucoDetectorParameters_SetCornerRefinementMaxIterations( + ap, + cornerRefinementMaxIterations, ); } - late final _BackgroundSubtractorKNN_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, - ffi.Pointer)>>( - 'BackgroundSubtractorKNN_CreateWithParams'); - late final _BackgroundSubtractorKNN_CreateWithParams = - _BackgroundSubtractorKNN_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, double, bool, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( + 'ArucoDetectorParameters_SetCornerRefinementMaxIterations'); + late final _ArucoDetectorParameters_SetCornerRefinementMaxIterations = + _ArucoDetectorParameters_SetCornerRefinementMaxIterationsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorMOG2_Apply( - BackgroundSubtractorMOG2 self, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetCornerRefinementMethod( + ArucoDetectorParameters ap, + int cornerRefinementMethod, ) { - return _BackgroundSubtractorMOG2_Apply( - self, - src, - dst, + return _ArucoDetectorParameters_SetCornerRefinementMethod( + ap, + cornerRefinementMethod, ); } - late final _BackgroundSubtractorMOG2_ApplyPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BackgroundSubtractorMOG2, Mat, - Mat)>>('BackgroundSubtractorMOG2_Apply'); - late final _BackgroundSubtractorMOG2_Apply = - _BackgroundSubtractorMOG2_ApplyPtr.asFunction< - CvStatus Function(BackgroundSubtractorMOG2, Mat, Mat)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMethodPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetCornerRefinementMethod'); + late final _ArucoDetectorParameters_SetCornerRefinementMethod = + _ArucoDetectorParameters_SetCornerRefinementMethodPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - void BackgroundSubtractorMOG2_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + ArucoDetectorParameters ap, + double cornerRefinementMinAccuracy, ) { - return _BackgroundSubtractorMOG2_Close( - self, + return _ArucoDetectorParameters_SetCornerRefinementMinAccuracy( + ap, + cornerRefinementMinAccuracy, ); } - late final _BackgroundSubtractorMOG2_ClosePtr = _lookup< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_Close'); - late final _BackgroundSubtractorMOG2_Close = - _BackgroundSubtractorMOG2_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetCornerRefinementMinAccuracy'); + late final _ArucoDetectorParameters_SetCornerRefinementMinAccuracy = + _ArucoDetectorParameters_SetCornerRefinementMinAccuracyPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BackgroundSubtractorMOG2_Create( - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetCornerRefinementWinSize( + ArucoDetectorParameters ap, + int cornerRefinementWinSize, ) { - return _BackgroundSubtractorMOG2_Create( - rval, + return _ArucoDetectorParameters_SetCornerRefinementWinSize( + ap, + cornerRefinementWinSize, ); } - late final _BackgroundSubtractorMOG2_CreatePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_Create'); - late final _BackgroundSubtractorMOG2_Create = - _BackgroundSubtractorMOG2_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetCornerRefinementWinSizePtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetCornerRefinementWinSize'); + late final _ArucoDetectorParameters_SetCornerRefinementWinSize = + _ArucoDetectorParameters_SetCornerRefinementWinSizePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BackgroundSubtractorMOG2_CreateWithParams( - int history, - double varThreshold, - bool detectShadows, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetDetectInvertedMarker( + ArucoDetectorParameters ap, + bool detectInvertedMarker, ) { - return _BackgroundSubtractorMOG2_CreateWithParams( - history, - varThreshold, - detectShadows, - rval, + return _ArucoDetectorParameters_SetDetectInvertedMarker( + ap, + detectInvertedMarker, ); } - late final _BackgroundSubtractorMOG2_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, - ffi.Pointer)>>( - 'BackgroundSubtractorMOG2_CreateWithParams'); - late final _BackgroundSubtractorMOG2_CreateWithParams = - _BackgroundSubtractorMOG2_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, double, bool, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetDetectInvertedMarkerPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Bool)>>('ArucoDetectorParameters_SetDetectInvertedMarker'); + late final _ArucoDetectorParameters_SetDetectInvertedMarker = + _ArucoDetectorParameters_SetDetectInvertedMarkerPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, bool)>(); - CvStatus BilateralFilter( - Mat src, - Mat dst, - int d, - double sc, - double ss, + CvStatus ArucoDetectorParameters_SetErrorCorrectionRate( + ArucoDetectorParameters ap, + double errorCorrectionRate, ) { - return _BilateralFilter( - src, - dst, - d, - sc, - ss, + return _ArucoDetectorParameters_SetErrorCorrectionRate( + ap, + errorCorrectionRate, ); } - late final _BilateralFilterPtr = _lookup< + late final _ArucoDetectorParameters_SetErrorCorrectionRatePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('BilateralFilter'); - late final _BilateralFilter = _BilateralFilterPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetErrorCorrectionRate'); + late final _ArucoDetectorParameters_SetErrorCorrectionRate = + _ArucoDetectorParameters_SetErrorCorrectionRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void BlockMeanHash_Close( - ffi.Pointer self, + CvStatus ArucoDetectorParameters_SetMarkerBorderBits( + ArucoDetectorParameters ap, + int markerBorderBits, ) { - return _BlockMeanHash_Close( - self, + return _ArucoDetectorParameters_SetMarkerBorderBits( + ap, + markerBorderBits, ); } - late final _BlockMeanHash_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'BlockMeanHash_Close'); - late final _BlockMeanHash_Close = _BlockMeanHash_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMarkerBorderBitsPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetMarkerBorderBits'); + late final _ArucoDetectorParameters_SetMarkerBorderBits = + _ArucoDetectorParameters_SetMarkerBorderBitsPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BlockMeanHash_Compare( - BlockMeanHash self, - Mat hashOne, - Mat hashTwo, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + ArucoDetectorParameters ap, + double maxErroneousBitsInBorderRate, ) { - return _BlockMeanHash_Compare( - self, - hashOne, - hashTwo, - rval, + return _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate( + ap, + maxErroneousBitsInBorderRate, ); } - late final _BlockMeanHash_ComparePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BlockMeanHash, Mat, Mat, - ffi.Pointer)>>('BlockMeanHash_Compare'); - late final _BlockMeanHash_Compare = _BlockMeanHash_ComparePtr.asFunction< - CvStatus Function(BlockMeanHash, Mat, Mat, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate'); + late final _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate = + _ArucoDetectorParameters_SetMaxErroneousBitsInBorderRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BlockMeanHash_Compute( - BlockMeanHash self, - Mat inputArr, - Mat outputArr, + CvStatus ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + ArucoDetectorParameters ap, + double maxMarkerPerimeterRate, ) { - return _BlockMeanHash_Compute( - self, - inputArr, - outputArr, + return _ArucoDetectorParameters_SetMaxMarkerPerimeterRate( + ap, + maxMarkerPerimeterRate, ); } - late final _BlockMeanHash_ComputePtr = - _lookup>( - 'BlockMeanHash_Compute'); - late final _BlockMeanHash_Compute = _BlockMeanHash_ComputePtr.asFunction< - CvStatus Function(BlockMeanHash, Mat, Mat)>(); + late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMaxMarkerPerimeterRate'); + late final _ArucoDetectorParameters_SetMaxMarkerPerimeterRate = + _ArucoDetectorParameters_SetMaxMarkerPerimeterRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BlockMeanHash_Create( - int mode, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetMinCornerDistanceRate( + ArucoDetectorParameters ap, + double minCornerDistanceRate, ) { - return _BlockMeanHash_Create( - mode, - rval, + return _ArucoDetectorParameters_SetMinCornerDistanceRate( + ap, + minCornerDistanceRate, ); } - late final _BlockMeanHash_CreatePtr = _lookup< + late final _ArucoDetectorParameters_SetMinCornerDistanceRatePtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Pointer)>>('BlockMeanHash_Create'); - late final _BlockMeanHash_Create = _BlockMeanHash_CreatePtr.asFunction< - CvStatus Function(int, ffi.Pointer)>(); + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinCornerDistanceRate'); + late final _ArucoDetectorParameters_SetMinCornerDistanceRate = + _ArucoDetectorParameters_SetMinCornerDistanceRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BlockMeanHash_GetMean( - BlockMeanHash self, - ffi.Pointer> rval, - ffi.Pointer length, + CvStatus ArucoDetectorParameters_SetMinDistanceToBorder( + ArucoDetectorParameters ap, + int minDistanceToBorder, ) { - return _BlockMeanHash_GetMean( - self, - rval, - length, + return _ArucoDetectorParameters_SetMinDistanceToBorder( + ap, + minDistanceToBorder, ); } - late final _BlockMeanHash_GetMeanPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(BlockMeanHash, ffi.Pointer>, - ffi.Pointer)>>('BlockMeanHash_GetMean'); - late final _BlockMeanHash_GetMean = _BlockMeanHash_GetMeanPtr.asFunction< - CvStatus Function(BlockMeanHash, ffi.Pointer>, - ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMinDistanceToBorderPtr = _lookup< + ffi + .NativeFunction>( + 'ArucoDetectorParameters_SetMinDistanceToBorder'); + late final _ArucoDetectorParameters_SetMinDistanceToBorder = + _ArucoDetectorParameters_SetMinDistanceToBorderPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus BlockMeanHash_SetMode( - BlockMeanHash self, - int mode, + CvStatus ArucoDetectorParameters_SetMinMarkerDistanceRate( + ArucoDetectorParameters ap, + double minMarkerDistanceRate, ) { - return _BlockMeanHash_SetMode( - self, - mode, + return _ArucoDetectorParameters_SetMinMarkerDistanceRate( + ap, + minMarkerDistanceRate, ); } - late final _BlockMeanHash_SetModePtr = - _lookup>( - 'BlockMeanHash_SetMode'); - late final _BlockMeanHash_SetMode = _BlockMeanHash_SetModePtr.asFunction< - CvStatus Function(BlockMeanHash, int)>(); + late final _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinMarkerDistanceRate'); + late final _ArucoDetectorParameters_SetMinMarkerDistanceRate = + _ArucoDetectorParameters_SetMinMarkerDistanceRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus Blur( - Mat src, - Mat dst, - Size ps, + CvStatus ArucoDetectorParameters_SetMinMarkerPerimeterRate( + ArucoDetectorParameters ap, + double minMarkerPerimeterRate, ) { - return _Blur( - src, - dst, - ps, + return _ArucoDetectorParameters_SetMinMarkerPerimeterRate( + ap, + minMarkerPerimeterRate, ); } - late final _BlurPtr = - _lookup>('Blur'); - late final _Blur = _BlurPtr.asFunction(); + late final _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetMinMarkerPerimeterRate'); + late final _ArucoDetectorParameters_SetMinMarkerPerimeterRate = + _ArucoDetectorParameters_SetMinMarkerPerimeterRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BoundingRect( - VecPoint pts, - ffi.Pointer rval, + CvStatus ArucoDetectorParameters_SetMinOtsuStdDev( + ArucoDetectorParameters ap, + double minOtsuStdDev, ) { - return _BoundingRect( - pts, - rval, + return _ArucoDetectorParameters_SetMinOtsuStdDev( + ap, + minOtsuStdDev, ); } - late final _BoundingRectPtr = _lookup< - ffi.NativeFunction)>>( - 'BoundingRect'); - late final _BoundingRect = _BoundingRectPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetMinOtsuStdDevPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, + ffi.Double)>>('ArucoDetectorParameters_SetMinOtsuStdDev'); + late final _ArucoDetectorParameters_SetMinOtsuStdDev = + _ArucoDetectorParameters_SetMinOtsuStdDevPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - CvStatus BoxFilter( - Mat src, - Mat dst, - int ddepth, - Size ps, + CvStatus ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + ArucoDetectorParameters ap, + double perspectiveRemoveIgnoredMarginPerCell, ) { - return _BoxFilter( - src, - dst, - ddepth, - ps, + return _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell( + ap, + perspectiveRemoveIgnoredMarginPerCell, ); } - late final _BoxFilterPtr = - _lookup>( - 'BoxFilter'); - late final _BoxFilter = - _BoxFilterPtr.asFunction(); + late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell'); + late final _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell = + _ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCellPtr + .asFunction(); - CvStatus BoxPoints( - RotatedRect rect, - ffi.Pointer boxPts, + CvStatus ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + ArucoDetectorParameters ap, + int perspectiveRemovePixelPerCell, ) { - return _BoxPoints( - rect, - boxPts, + return _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell( + ap, + perspectiveRemovePixelPerCell, ); } - late final _BoxPointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - RotatedRect, ffi.Pointer)>>('BoxPoints'); - late final _BoxPoints = _BoxPointsPtr.asFunction< - CvStatus Function(RotatedRect, ffi.Pointer)>(); + late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Int)>>( + 'ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell'); + late final _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell = + _ArucoDetectorParameters_SetPerspectiveRemovePixelPerCellPtr.asFunction< + CvStatus Function(ArucoDetectorParameters, int)>(); - CvStatus CLAHE_Apply( - CLAHE c, - Mat src, - Mat dst, + CvStatus ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + ArucoDetectorParameters ap, + double polygonalApproxAccuracyRate, ) { - return _CLAHE_Apply( - c, - src, - dst, + return _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate( + ap, + polygonalApproxAccuracyRate, ); } - late final _CLAHE_ApplyPtr = - _lookup>( - 'CLAHE_Apply'); - late final _CLAHE_Apply = - _CLAHE_ApplyPtr.asFunction(); + late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr = + _lookup< + ffi.NativeFunction< + CvStatus Function(ArucoDetectorParameters, ffi.Double)>>( + 'ArucoDetectorParameters_SetPolygonalApproxAccuracyRate'); + late final _ArucoDetectorParameters_SetPolygonalApproxAccuracyRate = + _ArucoDetectorParameters_SetPolygonalApproxAccuracyRatePtr.asFunction< + CvStatus Function(ArucoDetectorParameters, double)>(); - void CLAHE_Close( - ffi.Pointer c, + void ArucoDetector_Close( + ffi.Pointer ad, ) { - return _CLAHE_Close( - c, + return _ArucoDetector_Close( + ad, ); } - late final _CLAHE_ClosePtr = - _lookup)>>( - 'CLAHE_Close'); - late final _CLAHE_Close = - _CLAHE_ClosePtr.asFunction)>(); + late final _ArucoDetector_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDetector_Close'); + late final _ArucoDetector_Close = _ArucoDetector_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus CLAHE_CollectGarbage( - CLAHE c, + CvStatus ArucoDetector_DetectMarkers( + ArucoDetector ad, + Mat inputArr, + ffi.Pointer markerCorners, + ffi.Pointer markerIds, + ffi.Pointer rejectedCandidates, ) { - return _CLAHE_CollectGarbage( - c, + return _ArucoDetector_DetectMarkers( + ad, + inputArr, + markerCorners, + markerIds, + rejectedCandidates, ); } - late final _CLAHE_CollectGarbagePtr = - _lookup>( - 'CLAHE_CollectGarbage'); - late final _CLAHE_CollectGarbage = - _CLAHE_CollectGarbagePtr.asFunction(); + late final _ArucoDetector_DetectMarkersPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ArucoDetector, + Mat, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('ArucoDetector_DetectMarkers'); + late final _ArucoDetector_DetectMarkers = + _ArucoDetector_DetectMarkersPtr.asFunction< + CvStatus Function(ArucoDetector, Mat, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); - CvStatus CLAHE_Create( - ffi.Pointer rval, + CvStatus ArucoDetector_New( + ffi.Pointer rval, ) { - return _CLAHE_Create( + return _ArucoDetector_New( rval, ); } - late final _CLAHE_CreatePtr = - _lookup)>>( - 'CLAHE_Create'); - late final _CLAHE_Create = - _CLAHE_CreatePtr.asFunction)>(); + late final _ArucoDetector_NewPtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDetector_New'); + late final _ArucoDetector_New = _ArucoDetector_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CLAHE_CreateWithParams( - double clipLimit, - Size tileGridSize, - ffi.Pointer rval, + CvStatus ArucoDetector_NewWithParams( + ArucoDictionary dictionary, + ArucoDetectorParameters params, + ffi.Pointer rval, ) { - return _CLAHE_CreateWithParams( - clipLimit, - tileGridSize, + return _ArucoDetector_NewWithParams( + dictionary, + params, rval, ); } - late final _CLAHE_CreateWithParamsPtr = _lookup< + late final _ArucoDetector_NewWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ffi.Double, Size, ffi.Pointer)>>('CLAHE_CreateWithParams'); - late final _CLAHE_CreateWithParams = _CLAHE_CreateWithParamsPtr.asFunction< - CvStatus Function(double, Size, ffi.Pointer)>(); + CvStatus Function(ArucoDictionary, ArucoDetectorParameters, + ffi.Pointer)>>('ArucoDetector_NewWithParams'); + late final _ArucoDetector_NewWithParams = + _ArucoDetector_NewWithParamsPtr.asFunction< + CvStatus Function(ArucoDictionary, ArucoDetectorParameters, + ffi.Pointer)>(); - CvStatus CLAHE_GetClipLimit( - CLAHE c, - ffi.Pointer rval, + void ArucoDictionary_Close( + ffi.Pointer self, ) { - return _CLAHE_GetClipLimit( - c, - rval, + return _ArucoDictionary_Close( + self, ); } - late final _CLAHE_GetClipLimitPtr = _lookup< - ffi - .NativeFunction)>>( - 'CLAHE_GetClipLimit'); - late final _CLAHE_GetClipLimit = _CLAHE_GetClipLimitPtr.asFunction< - CvStatus Function(CLAHE, ffi.Pointer)>(); + late final _ArucoDictionary_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'ArucoDictionary_Close'); + late final _ArucoDictionary_Close = _ArucoDictionary_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus CLAHE_GetTilesGridSize( - CLAHE c, - ffi.Pointer rval, + CvStatus ArucoDrawDetectedMarkers( + Mat image, + VecVecPoint2f markerCorners, + VecInt markerIds, + Scalar borderColor, ) { - return _CLAHE_GetTilesGridSize( - c, - rval, + return _ArucoDrawDetectedMarkers( + image, + markerCorners, + markerIds, + borderColor, ); } - late final _CLAHE_GetTilesGridSizePtr = - _lookup)>>( - 'CLAHE_GetTilesGridSize'); - late final _CLAHE_GetTilesGridSize = _CLAHE_GetTilesGridSizePtr.asFunction< - CvStatus Function(CLAHE, ffi.Pointer)>(); + late final _ArucoDrawDetectedMarkersPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecVecPoint2f, VecInt, Scalar)>>('ArucoDrawDetectedMarkers'); + late final _ArucoDrawDetectedMarkers = _ArucoDrawDetectedMarkersPtr + .asFunction(); - CvStatus CLAHE_SetClipLimit( - CLAHE c, - double clipLimit, + CvStatus ArucoGenerateImageMarker( + int dictionaryId, + int id, + int sidePixels, + Mat img, + int borderBits, ) { - return _CLAHE_SetClipLimit( - c, - clipLimit, + return _ArucoGenerateImageMarker( + dictionaryId, + id, + sidePixels, + img, + borderBits, ); } - late final _CLAHE_SetClipLimitPtr = - _lookup>( - 'CLAHE_SetClipLimit'); - late final _CLAHE_SetClipLimit = - _CLAHE_SetClipLimitPtr.asFunction(); + late final _ArucoGenerateImageMarkerPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, Mat, + ffi.Int)>>('ArucoGenerateImageMarker'); + late final _ArucoGenerateImageMarker = _ArucoGenerateImageMarkerPtr + .asFunction(); - CvStatus CLAHE_SetTilesGridSize( - CLAHE c, - Size size, + void AsyncArray_Close( + ffi.Pointer a, ) { - return _CLAHE_SetTilesGridSize( - c, - size, + return _AsyncArray_Close( + a, ); } - late final _CLAHE_SetTilesGridSizePtr = - _lookup>( - 'CLAHE_SetTilesGridSize'); - late final _CLAHE_SetTilesGridSize = - _CLAHE_SetTilesGridSizePtr.asFunction(); + late final _AsyncArray_ClosePtr = + _lookup)>>( + 'AsyncArray_Close'); + late final _AsyncArray_Close = + _AsyncArray_ClosePtr.asFunction)>(); - CvStatus CalcBackProject( - VecMat mats, - VecInt chans, - Mat hist, - Mat backProject, - VecFloat rng, - bool uniform, + CvStatus AsyncArray_Get( + AsyncArray async_out, + Mat out, ) { - return _CalcBackProject( - mats, - chans, - hist, - backProject, - rng, - uniform, + return _AsyncArray_Get( + async_out, + out, ); } - late final _CalcBackProjectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, - ffi.Bool)>>('CalcBackProject'); - late final _CalcBackProject = _CalcBackProjectPtr.asFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, bool)>(); + late final _AsyncArray_GetPtr = + _lookup>( + 'AsyncArray_Get'); + late final _AsyncArray_Get = + _AsyncArray_GetPtr.asFunction(); - CvStatus CalcHist( - VecMat mats, - VecInt chans, - Mat mask, - Mat hist, - VecInt sz, - VecFloat rng, - bool acc, + CvStatus AsyncArray_New( + ffi.Pointer rval, ) { - return _CalcHist( - mats, - chans, - mask, - hist, - sz, - rng, - acc, + return _AsyncArray_New( + rval, ); } - late final _CalcHistPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, - ffi.Bool)>>('CalcHist'); - late final _CalcHist = _CalcHistPtr.asFunction< - CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, bool)>(); + late final _AsyncArray_NewPtr = + _lookup)>>( + 'AsyncArray_New'); + late final _AsyncArray_New = _AsyncArray_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CalcOpticalFlowFarneback( - Mat prevImg, - Mat nextImg, - Mat flow, - double pyrScale, - int levels, - int winsize, - int iterations, - int polyN, - double polySigma, - int flags, + void BFMatcher_Close( + ffi.Pointer b, ) { - return _CalcOpticalFlowFarneback( - prevImg, - nextImg, - flow, - pyrScale, - levels, - winsize, - iterations, - polyN, - polySigma, - flags, + return _BFMatcher_Close( + b, ); } - late final _CalcOpticalFlowFarnebackPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - Mat, - ffi.Double, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Int, - ffi.Double, - ffi.Int)>>('CalcOpticalFlowFarneback'); - late final _CalcOpticalFlowFarneback = - _CalcOpticalFlowFarnebackPtr.asFunction< - CvStatus Function( - Mat, Mat, Mat, double, int, int, int, int, double, int)>(); + late final _BFMatcher_ClosePtr = + _lookup)>>( + 'BFMatcher_Close'); + late final _BFMatcher_Close = + _BFMatcher_ClosePtr.asFunction)>(); - CvStatus CalcOpticalFlowPyrLK( - Mat prevImg, - Mat nextImg, - VecPoint2f prevPts, - VecPoint2f nextPts, - VecUChar status, - VecFloat err, + CvStatus BFMatcher_Create( + ffi.Pointer rval, ) { - return _CalcOpticalFlowPyrLK( - prevImg, - nextImg, - prevPts, - nextPts, - status, - err, + return _BFMatcher_Create( + rval, ); } - late final _CalcOpticalFlowPyrLKPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, - VecFloat)>>('CalcOpticalFlowPyrLK'); - late final _CalcOpticalFlowPyrLK = _CalcOpticalFlowPyrLKPtr.asFunction< - CvStatus Function( - Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, VecFloat)>(); + late final _BFMatcher_CreatePtr = + _lookup)>>( + 'BFMatcher_Create'); + late final _BFMatcher_Create = _BFMatcher_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus CalcOpticalFlowPyrLKWithParams( - Mat prevImg, - Mat nextImg, - VecPoint2f prevPts, - VecPoint2f nextPts, - VecUChar status, - VecFloat err, - Size winSize, - int maxLevel, - TermCriteria criteria, - int flags, - double minEigThreshold, + CvStatus BFMatcher_CreateWithParams( + int normType, + bool crossCheck, + ffi.Pointer rval, ) { - return _CalcOpticalFlowPyrLKWithParams( - prevImg, - nextImg, - prevPts, - nextPts, - status, - err, - winSize, - maxLevel, - criteria, - flags, - minEigThreshold, + return _BFMatcher_CreateWithParams( + normType, + crossCheck, + rval, ); } - late final _CalcOpticalFlowPyrLKWithParamsPtr = _lookup< + late final _BFMatcher_CreateWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - VecPoint2f, - VecPoint2f, - VecUChar, - VecFloat, - Size, - ffi.Int, - TermCriteria, - ffi.Int, - ffi.Double)>>('CalcOpticalFlowPyrLKWithParams'); - late final _CalcOpticalFlowPyrLKWithParams = - _CalcOpticalFlowPyrLKWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, - VecFloat, Size, int, TermCriteria, int, double)>(); + CvStatus Function(ffi.Int, ffi.Bool, + ffi.Pointer)>>('BFMatcher_CreateWithParams'); + late final _BFMatcher_CreateWithParams = _BFMatcher_CreateWithParamsPtr + .asFunction)>(); - CvStatus CalibrateCamera( - VecVecPoint3f objectPoints, - VecVecPoint2f imagePoints, - Size imageSize, - Mat cameraMatrix, - Mat distCoeffs, - Mat rvecs, - Mat tvecs, - int flag, - TermCriteria criteria, - ffi.Pointer rval, + CvStatus BFMatcher_KnnMatch( + BFMatcher b, + Mat query, + Mat train, + int k, + ffi.Pointer rval, ) { - return _CalibrateCamera( - objectPoints, - imagePoints, - imageSize, - cameraMatrix, - distCoeffs, - rvecs, - tvecs, - flag, - criteria, + return _BFMatcher_KnnMatch( + b, + query, + train, + k, rval, ); } - late final _CalibrateCameraPtr = _lookup< + late final _BFMatcher_KnnMatchPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - VecVecPoint3f, - VecVecPoint2f, - Size, - Mat, - Mat, - Mat, - Mat, - ffi.Int, - TermCriteria, - ffi.Pointer)>>('CalibrateCamera'); - late final _CalibrateCamera = _CalibrateCameraPtr.asFunction< - CvStatus Function(VecVecPoint3f, VecVecPoint2f, Size, Mat, Mat, Mat, Mat, - int, TermCriteria, ffi.Pointer)>(); + CvStatus Function(BFMatcher, Mat, Mat, ffi.Int, + ffi.Pointer)>>('BFMatcher_KnnMatch'); + late final _BFMatcher_KnnMatch = _BFMatcher_KnnMatchPtr.asFunction< + CvStatus Function(BFMatcher, Mat, Mat, int, ffi.Pointer)>(); - CvStatus Canny( - Mat src, - Mat edges, - double t1, - double t2, - int apertureSize, - bool l2gradient, + CvStatus BFMatcher_Match( + BFMatcher b, + Mat query, + Mat train, + ffi.Pointer rval, ) { - return _Canny( - src, - edges, - t1, - t2, - apertureSize, - l2gradient, + return _BFMatcher_Match( + b, + query, + train, + rval, ); } - late final _CannyPtr = _lookup< + late final _BFMatcher_MatchPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, Mat, ffi.Double, ffi.Double, ffi.Int, ffi.Bool)>>('Canny'); - late final _Canny = _CannyPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, bool)>(); + BFMatcher, Mat, Mat, ffi.Pointer)>>('BFMatcher_Match'); + late final _BFMatcher_Match = _BFMatcher_MatchPtr.asFunction< + CvStatus Function(BFMatcher, Mat, Mat, ffi.Pointer)>(); - void CascadeClassifier_Close( - ffi.Pointer cs, + void BRISK_Close( + ffi.Pointer b, ) { - return _CascadeClassifier_Close( - cs, + return _BRISK_Close( + b, ); } - late final _CascadeClassifier_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'CascadeClassifier_Close'); - late final _CascadeClassifier_Close = _CascadeClassifier_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _BRISK_ClosePtr = + _lookup)>>( + 'BRISK_Close'); + late final _BRISK_Close = + _BRISK_ClosePtr.asFunction)>(); - CvStatus CascadeClassifier_DetectMultiScale( - CascadeClassifier cs, - Mat img, - ffi.Pointer rval, + CvStatus BRISK_Create( + ffi.Pointer rval, ) { - return _CascadeClassifier_DetectMultiScale( - cs, - img, + return _BRISK_Create( rval, ); } - late final _CascadeClassifier_DetectMultiScalePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(CascadeClassifier, Mat, - ffi.Pointer)>>('CascadeClassifier_DetectMultiScale'); - late final _CascadeClassifier_DetectMultiScale = - _CascadeClassifier_DetectMultiScalePtr.asFunction< - CvStatus Function(CascadeClassifier, Mat, ffi.Pointer)>(); + late final _BRISK_CreatePtr = + _lookup)>>( + 'BRISK_Create'); + late final _BRISK_Create = + _BRISK_CreatePtr.asFunction)>(); - CvStatus CascadeClassifier_DetectMultiScaleWithParams( - CascadeClassifier cs, - Mat img, - double scale, - int minNeighbors, - int flags, - Size minSize, - Size maxSize, - ffi.Pointer rval, + CvStatus BRISK_Detect( + BRISK b, + Mat src, + ffi.Pointer rval, ) { - return _CascadeClassifier_DetectMultiScaleWithParams( - cs, - img, - scale, - minNeighbors, - flags, - minSize, - maxSize, + return _BRISK_Detect( + b, + src, rval, ); } - late final _CascadeClassifier_DetectMultiScaleWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(CascadeClassifier, Mat, ffi.Double, ffi.Int, - ffi.Int, Size, Size, ffi.Pointer)>>( - 'CascadeClassifier_DetectMultiScaleWithParams'); - late final _CascadeClassifier_DetectMultiScaleWithParams = - _CascadeClassifier_DetectMultiScaleWithParamsPtr.asFunction< - CvStatus Function(CascadeClassifier, Mat, double, int, int, Size, - Size, ffi.Pointer)>(); + late final _BRISK_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + BRISK, Mat, ffi.Pointer)>>('BRISK_Detect'); + late final _BRISK_Detect = _BRISK_DetectPtr.asFunction< + CvStatus Function(BRISK, Mat, ffi.Pointer)>(); - CvStatus CascadeClassifier_Load( - CascadeClassifier cs, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus BRISK_DetectAndCompute( + BRISK b, + Mat src, + Mat mask, + Mat desc, + ffi.Pointer rval, ) { - return _CascadeClassifier_Load( - cs, - name, + return _BRISK_DetectAndCompute( + b, + src, + mask, + desc, rval, ); } - late final _CascadeClassifier_LoadPtr = _lookup< + late final _BRISK_DetectAndComputePtr = _lookup< ffi.NativeFunction< - CvStatus Function(CascadeClassifier, ffi.Pointer, - ffi.Pointer)>>('CascadeClassifier_Load'); - late final _CascadeClassifier_Load = _CascadeClassifier_LoadPtr.asFunction< - CvStatus Function( - CascadeClassifier, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(BRISK, Mat, Mat, Mat, + ffi.Pointer)>>('BRISK_DetectAndCompute'); + late final _BRISK_DetectAndCompute = _BRISK_DetectAndComputePtr.asFunction< + CvStatus Function(BRISK, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus CascadeClassifier_New( - ffi.Pointer rval, + CvStatus BackgroundSubtractorKNN_Apply( + BackgroundSubtractorKNN self, + Mat src, + Mat dst, ) { - return _CascadeClassifier_New( - rval, + return _BackgroundSubtractorKNN_Apply( + self, + src, + dst, ); } - late final _CascadeClassifier_NewPtr = _lookup< - ffi - .NativeFunction)>>( - 'CascadeClassifier_New'); - late final _CascadeClassifier_New = _CascadeClassifier_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _BackgroundSubtractorKNN_ApplyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(BackgroundSubtractorKNN, Mat, + Mat)>>('BackgroundSubtractorKNN_Apply'); + late final _BackgroundSubtractorKNN_Apply = _BackgroundSubtractorKNN_ApplyPtr + .asFunction(); - CvStatus Circle( - Mat img, - Point center, - int radius, - Scalar color, - int thickness, + void BackgroundSubtractorKNN_Close( + ffi.Pointer self, ) { - return _Circle( - img, - center, - radius, - color, - thickness, + return _BackgroundSubtractorKNN_Close( + self, ); } - late final _CirclePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int)>>('Circle'); - late final _Circle = - _CirclePtr.asFunction(); + late final _BackgroundSubtractorKNN_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'BackgroundSubtractorKNN_Close'); + late final _BackgroundSubtractorKNN_Close = _BackgroundSubtractorKNN_ClosePtr + .asFunction)>(); - CvStatus CircleWithParams( - Mat img, - Point center, - int radius, - Scalar color, - int thickness, - int lineType, - int shift, + CvStatus BackgroundSubtractorKNN_Create( + ffi.Pointer rval, ) { - return _CircleWithParams( - img, - center, - radius, - color, - thickness, - lineType, - shift, + return _BackgroundSubtractorKNN_Create( + rval, ); } - late final _CircleWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int, ffi.Int, - ffi.Int)>>('CircleWithParams'); - late final _CircleWithParams = _CircleWithParamsPtr.asFunction< - CvStatus Function(Mat, Point, int, Scalar, int, int, int)>(); + late final _BackgroundSubtractorKNN_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'BackgroundSubtractorKNN_Create'); + late final _BackgroundSubtractorKNN_Create = + _BackgroundSubtractorKNN_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus ClipLine( - Rect imgRect, - Point pt1, - Point pt2, - ffi.Pointer rval, + CvStatus BackgroundSubtractorKNN_CreateWithParams( + int history, + double dist2Threshold, + bool detectShadows, + ffi.Pointer rval, ) { - return _ClipLine( - imgRect, - pt1, - pt2, + return _BackgroundSubtractorKNN_CreateWithParams( + history, + dist2Threshold, + detectShadows, rval, ); } - late final _ClipLinePtr = _lookup< - ffi.NativeFunction< + late final _BackgroundSubtractorKNN_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, + ffi.Pointer)>>( + 'BackgroundSubtractorKNN_CreateWithParams'); + late final _BackgroundSubtractorKNN_CreateWithParams = + _BackgroundSubtractorKNN_CreateWithParamsPtr.asFunction< CvStatus Function( - Rect, Point, Point, ffi.Pointer)>>('ClipLine'); - late final _ClipLine = _ClipLinePtr.asFunction< - CvStatus Function(Rect, Point, Point, ffi.Pointer)>(); + int, double, bool, ffi.Pointer)>(); - CvStatus ColorChange( + CvStatus BackgroundSubtractorMOG2_Apply( + BackgroundSubtractorMOG2 self, Mat src, - Mat mask, Mat dst, - double red_mul, - double green_mul, - double blue_mul, ) { - return _ColorChange( + return _BackgroundSubtractorMOG2_Apply( + self, src, - mask, dst, - red_mul, - green_mul, - blue_mul, ); } - late final _ColorChangePtr = _lookup< + late final _BackgroundSubtractorMOG2_ApplyPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('ColorChange'); - late final _ColorChange = _ColorChangePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double, double)>(); + CvStatus Function(BackgroundSubtractorMOG2, Mat, + Mat)>>('BackgroundSubtractorMOG2_Apply'); + late final _BackgroundSubtractorMOG2_Apply = + _BackgroundSubtractorMOG2_ApplyPtr.asFunction< + CvStatus Function(BackgroundSubtractorMOG2, Mat, Mat)>(); - CvStatus CompareHist( - Mat hist1, - Mat hist2, - int method, - ffi.Pointer rval, + void BackgroundSubtractorMOG2_Close( + ffi.Pointer self, ) { - return _CompareHist( - hist1, - hist2, - method, - rval, + return _BackgroundSubtractorMOG2_Close( + self, ); } - late final _CompareHistPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('CompareHist'); - late final _CompareHist = _CompareHistPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + late final _BackgroundSubtractorMOG2_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_Close'); + late final _BackgroundSubtractorMOG2_Close = + _BackgroundSubtractorMOG2_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus ConnectedComponents( - Mat src, - Mat dst, - int connectivity, - int ltype, - int ccltype, - ffi.Pointer rval, + CvStatus BackgroundSubtractorMOG2_Create( + ffi.Pointer rval, ) { - return _ConnectedComponents( - src, - dst, - connectivity, - ltype, - ccltype, + return _BackgroundSubtractorMOG2_Create( rval, ); } - late final _ConnectedComponentsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('ConnectedComponents'); - late final _ConnectedComponents = _ConnectedComponentsPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, int, ffi.Pointer)>(); - - CvStatus ConnectedComponentsWithStats( + late final _BackgroundSubtractorMOG2_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_Create'); + late final _BackgroundSubtractorMOG2_Create = + _BackgroundSubtractorMOG2_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus BackgroundSubtractorMOG2_CreateWithParams( + int history, + double varThreshold, + bool detectShadows, + ffi.Pointer rval, + ) { + return _BackgroundSubtractorMOG2_CreateWithParams( + history, + varThreshold, + detectShadows, + rval, + ); + } + + late final _BackgroundSubtractorMOG2_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Double, ffi.Bool, + ffi.Pointer)>>( + 'BackgroundSubtractorMOG2_CreateWithParams'); + late final _BackgroundSubtractorMOG2_CreateWithParams = + _BackgroundSubtractorMOG2_CreateWithParamsPtr.asFunction< + CvStatus Function( + int, double, bool, ffi.Pointer)>(); + + CvStatus BilateralFilter( Mat src, - Mat labels, - Mat stats, - Mat centroids, - int connectivity, - int ltype, - int ccltype, - ffi.Pointer rval, + Mat dst, + int d, + double sc, + double ss, ) { - return _ConnectedComponentsWithStats( + return _BilateralFilter( src, - labels, - stats, - centroids, - connectivity, - ltype, - ccltype, - rval, + dst, + d, + sc, + ss, ); } - late final _ConnectedComponentsWithStatsPtr = _lookup< + late final _BilateralFilterPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('ConnectedComponentsWithStats'); - late final _ConnectedComponentsWithStats = - _ConnectedComponentsWithStatsPtr.asFunction< CvStatus Function( - Mat, Mat, Mat, Mat, int, int, int, ffi.Pointer)>(); + Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('BilateralFilter'); + late final _BilateralFilter = _BilateralFilterPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus ContourArea( - VecPoint pts, - ffi.Pointer rval, + void BlockMeanHash_Close( + ffi.Pointer self, ) { - return _ContourArea( - pts, - rval, + return _BlockMeanHash_Close( + self, ); } - late final _ContourAreaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Pointer)>>('ContourArea'); - late final _ContourArea = _ContourAreaPtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + late final _BlockMeanHash_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'BlockMeanHash_Close'); + late final _BlockMeanHash_Close = _BlockMeanHash_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus ConvexHull( - VecPoint points, - Mat hull, - bool clockwise, - bool returnPoints, + CvStatus BlockMeanHash_Compare( + BlockMeanHash self, + Mat hashOne, + Mat hashTwo, + ffi.Pointer rval, ) { - return _ConvexHull( - points, - hull, - clockwise, - returnPoints, + return _BlockMeanHash_Compare( + self, + hashOne, + hashTwo, + rval, ); } - late final _ConvexHullPtr = _lookup< + late final _BlockMeanHash_ComparePtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, Mat, ffi.Bool, ffi.Bool)>>('ConvexHull'); - late final _ConvexHull = - _ConvexHullPtr.asFunction(); + CvStatus Function(BlockMeanHash, Mat, Mat, + ffi.Pointer)>>('BlockMeanHash_Compare'); + late final _BlockMeanHash_Compare = _BlockMeanHash_ComparePtr.asFunction< + CvStatus Function(BlockMeanHash, Mat, Mat, ffi.Pointer)>(); - CvStatus ConvexityDefects( - VecPoint points, - Mat hull, - Mat result, + CvStatus BlockMeanHash_Compute( + BlockMeanHash self, + Mat inputArr, + Mat outputArr, ) { - return _ConvexityDefects( - points, - hull, - result, + return _BlockMeanHash_Compute( + self, + inputArr, + outputArr, ); } - late final _ConvexityDefectsPtr = - _lookup>( - 'ConvexityDefects'); - late final _ConvexityDefects = - _ConvexityDefectsPtr.asFunction(); + late final _BlockMeanHash_ComputePtr = + _lookup>( + 'BlockMeanHash_Compute'); + late final _BlockMeanHash_Compute = _BlockMeanHash_ComputePtr.asFunction< + CvStatus Function(BlockMeanHash, Mat, Mat)>(); - CvStatus CornerSubPix( - Mat img, - VecPoint2f corners, - Size winSize, - Size zeroZone, - TermCriteria criteria, + CvStatus BlockMeanHash_Create( + int mode, + ffi.Pointer rval, ) { - return _CornerSubPix( - img, - corners, - winSize, - zeroZone, - criteria, + return _BlockMeanHash_Create( + mode, + rval, ); } - late final _CornerSubPixPtr = _lookup< + late final _BlockMeanHash_CreatePtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, VecPoint2f, Size, Size, TermCriteria)>>('CornerSubPix'); - late final _CornerSubPix = _CornerSubPixPtr.asFunction< - CvStatus Function(Mat, VecPoint2f, Size, Size, TermCriteria)>(); + ffi.Int, ffi.Pointer)>>('BlockMeanHash_Create'); + late final _BlockMeanHash_Create = _BlockMeanHash_CreatePtr.asFunction< + CvStatus Function(int, ffi.Pointer)>(); - CvStatus CvtColor( - Mat src, - Mat dst, - int code, + CvStatus BlockMeanHash_GetMean( + BlockMeanHash self, + ffi.Pointer> rval, + ffi.Pointer length, ) { - return _CvtColor( - src, - dst, - code, + return _BlockMeanHash_GetMean( + self, + rval, + length, ); } - late final _CvtColorPtr = - _lookup>( - 'CvtColor'); - late final _CvtColor = - _CvtColorPtr.asFunction(); + late final _BlockMeanHash_GetMeanPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(BlockMeanHash, ffi.Pointer>, + ffi.Pointer)>>('BlockMeanHash_GetMean'); + late final _BlockMeanHash_GetMean = _BlockMeanHash_GetMeanPtr.asFunction< + CvStatus Function(BlockMeanHash, ffi.Pointer>, + ffi.Pointer)>(); - CvStatus DetailEnhance( - Mat src, - Mat dst, - double sigma_s, - double sigma_r, + CvStatus BlockMeanHash_SetMode( + BlockMeanHash self, + int mode, ) { - return _DetailEnhance( - src, - dst, - sigma_s, - sigma_r, + return _BlockMeanHash_SetMode( + self, + mode, ); } - late final _DetailEnhancePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('DetailEnhance'); - late final _DetailEnhance = _DetailEnhancePtr.asFunction< - CvStatus Function(Mat, Mat, double, double)>(); + late final _BlockMeanHash_SetModePtr = + _lookup>( + 'BlockMeanHash_SetMode'); + late final _BlockMeanHash_SetMode = _BlockMeanHash_SetModePtr.asFunction< + CvStatus Function(BlockMeanHash, int)>(); - CvStatus Dilate( + CvStatus Blur( Mat src, Mat dst, - Mat kernel, + Size ps, ) { - return _Dilate( + return _Blur( src, dst, - kernel, + ps, ); } - late final _DilatePtr = - _lookup>('Dilate'); - late final _Dilate = - _DilatePtr.asFunction(); + late final _BlurPtr = + _lookup>('Blur'); + late final _Blur = _BlurPtr.asFunction(); - CvStatus DilateWithParams( - Mat src, - Mat dst, - Mat kernel, - Point anchor, - int iterations, - int borderType, - Scalar borderValue, + CvStatus Boost_Clear( + Boost self, ) { - return _DilateWithParams( - src, - dst, - kernel, - anchor, - iterations, - borderType, - borderValue, + return _Boost_Clear( + self, ); } - late final _DilateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, - Scalar)>>('DilateWithParams'); - late final _DilateWithParams = _DilateWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + late final _Boost_ClearPtr = + _lookup>('Boost_Clear'); + late final _Boost_Clear = + _Boost_ClearPtr.asFunction(); - CvStatus DistanceTransform( - Mat src, - Mat dst, - Mat labels, - int distanceType, - int maskSize, - int labelType, + void Boost_Close( + ffi.Pointer self, ) { - return _DistanceTransform( - src, - dst, - labels, - distanceType, - maskSize, - labelType, + return _Boost_Close( + self, ); } - late final _DistanceTransformPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('DistanceTransform'); - late final _DistanceTransform = _DistanceTransformPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, int, int)>(); + late final _Boost_ClosePtr = + _lookup)>>( + 'Boost_Close'); + late final _Boost_Close = + _Boost_ClosePtr.asFunction)>(); - CvStatus DrawChessboardCorners( - Mat image, - Size patternSize, - Mat corners, - bool patternWasFound, + CvStatus Boost_Create( + ffi.Pointer rval, ) { - return _DrawChessboardCorners( - image, - patternSize, - corners, - patternWasFound, + return _Boost_Create( + rval, ); } - late final _DrawChessboardCornersPtr = - _lookup>( - 'DrawChessboardCorners'); - late final _DrawChessboardCorners = _DrawChessboardCornersPtr.asFunction< - CvStatus Function(Mat, Size, Mat, bool)>(); + late final _Boost_CreatePtr = + _lookup)>>( + 'Boost_Create'); + late final _Boost_Create = + _Boost_CreatePtr.asFunction)>(); - CvStatus DrawContours( - Mat src, - VecVecPoint contours, - int contourIdx, - Scalar color, - int thickness, + CvStatus Boost_Get( + PtrBoost self, + ffi.Pointer rval, ) { - return _DrawContours( - src, - contours, - contourIdx, - color, - thickness, + return _Boost_Get( + self, + rval, ); } - late final _DrawContoursPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int)>>('DrawContours'); - late final _DrawContours = _DrawContoursPtr.asFunction< - CvStatus Function(Mat, VecVecPoint, int, Scalar, int)>(); + late final _Boost_GetPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Get'); + late final _Boost_Get = _Boost_GetPtr.asFunction< + CvStatus Function(PtrBoost, ffi.Pointer)>(); - CvStatus DrawContoursWithParams( - Mat src, - VecVecPoint contours, - int contourIdx, - Scalar color, - int thickness, - int lineType, - Mat hierarchy, - int maxLevel, - Point offset, + CvStatus Boost_GetBoostType( + Boost self, + ffi.Pointer rval, ) { - return _DrawContoursWithParams( - src, - contours, - contourIdx, - color, - thickness, - lineType, - hierarchy, - maxLevel, - offset, + return _Boost_GetBoostType( + self, + rval, ); } - late final _DrawContoursWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int, ffi.Int, - Mat, ffi.Int, Point)>>('DrawContoursWithParams'); - late final _DrawContoursWithParams = _DrawContoursWithParamsPtr.asFunction< - CvStatus Function( - Mat, VecVecPoint, int, Scalar, int, int, Mat, int, Point)>(); + late final _Boost_GetBoostTypePtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_GetBoostType'); + late final _Boost_GetBoostType = _Boost_GetBoostTypePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus DrawKeyPoints( - Mat src, - VecKeyPoint kp, - Mat dst, - Scalar color, - int flags, + CvStatus Boost_GetWeakCount( + Boost self, + ffi.Pointer rval, ) { - return _DrawKeyPoints( - src, - kp, - dst, - color, - flags, + return _Boost_GetWeakCount( + self, + rval, ); } - late final _DrawKeyPointsPtr = _lookup< + late final _Boost_GetWeakCountPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_GetWeakCount'); + late final _Boost_GetWeakCount = _Boost_GetWeakCountPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); + + CvStatus Boost_GetWeightTrimRate( + Boost self, + ffi.Pointer rval, + ) { + return _Boost_GetWeightTrimRate( + self, + rval, + ); + } + + late final _Boost_GetWeightTrimRatePtr = _lookup< + ffi + .NativeFunction)>>( + 'Boost_GetWeightTrimRate'); + late final _Boost_GetWeightTrimRate = _Boost_GetWeightTrimRatePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); + + CvStatus Boost_Load( + Boost self, + ffi.Pointer filepath, + ) { + return _Boost_Load( + self, + filepath, + ); + } + + late final _Boost_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Load'); + late final _Boost_Load = _Boost_LoadPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); + + CvStatus Boost_LoadFromString( + Boost self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _Boost_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _Boost_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, VecKeyPoint, Mat, Scalar, ffi.Int)>>('DrawKeyPoints'); - late final _DrawKeyPoints = _DrawKeyPointsPtr.asFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, Scalar, int)>(); + CvStatus Function(Boost, ffi.Pointer, + ffi.Pointer)>>('Boost_LoadFromString'); + late final _Boost_LoadFromString = _Boost_LoadFromStringPtr.asFunction< + CvStatus Function(Boost, ffi.Pointer, ffi.Pointer)>(); - CvStatus DrawMatches( - Mat img1, - VecKeyPoint kp1, - Mat img2, - VecKeyPoint kp2, - VecDMatch matches1to2, - Mat outImg, - Scalar matchesColor, - Scalar pointColor, - VecChar matchesMask, + CvStatus Boost_Predict( + Boost self, + Mat samples, + Mat results, int flags, + ffi.Pointer rval, ) { - return _DrawMatches( - img1, - kp1, - img2, - kp2, - matches1to2, - outImg, - matchesColor, - pointColor, - matchesMask, + return _Boost_Predict( + self, + samples, + results, flags, + rval, ); } - late final _DrawMatchesPtr = _lookup< + late final _Boost_PredictPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, - Scalar, Scalar, VecChar, ffi.Int)>>('DrawMatches'); - late final _DrawMatches = _DrawMatchesPtr.asFunction< - CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, - Scalar, Scalar, VecChar, int)>(); + CvStatus Function(Boost, Mat, Mat, ffi.Int, + ffi.Pointer)>>('Boost_Predict'); + late final _Boost_Predict = _Boost_PredictPtr.asFunction< + CvStatus Function(Boost, Mat, Mat, int, ffi.Pointer)>(); - CvStatus EdgePreservingFilter( - Mat src, - Mat dst, - int filter, - double sigma_s, - double sigma_r, + CvStatus Boost_Save( + Boost self, + ffi.Pointer filename, ) { - return _EdgePreservingFilter( - src, - dst, - filter, - sigma_s, - sigma_r, + return _Boost_Save( + self, + filename, ); } - late final _EdgePreservingFilterPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, - ffi.Float)>>('EdgePreservingFilter'); - late final _EdgePreservingFilter = _EdgePreservingFilterPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _Boost_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'Boost_Save'); + late final _Boost_Save = _Boost_SavePtr.asFunction< + CvStatus Function(Boost, ffi.Pointer)>(); - CvStatus Ellipse( - Mat img, - Point center, - Point axes, - double angle, - double startAngle, - double endAngle, - Scalar color, - int thickness, + CvStatus Boost_SetBoostType( + Boost self, + int val, ) { - return _Ellipse( - img, - center, - axes, - angle, - startAngle, - endAngle, - color, - thickness, + return _Boost_SetBoostType( + self, + val, ); } - late final _EllipsePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Point, Point, ffi.Double, ffi.Double, - ffi.Double, Scalar, ffi.Int)>>('Ellipse'); - late final _Ellipse = _EllipsePtr.asFunction< - CvStatus Function( - Mat, Point, Point, double, double, double, Scalar, int)>(); + late final _Boost_SetBoostTypePtr = + _lookup>( + 'Boost_SetBoostType'); + late final _Boost_SetBoostType = + _Boost_SetBoostTypePtr.asFunction(); - CvStatus EllipseWithParams( - Mat img, - Point center, - Point axes, - double angle, - double startAngle, - double endAngle, - Scalar color, - int thickness, - int lineType, - int shift, + CvStatus Boost_SetWeakCount( + Boost self, + int val, ) { - return _EllipseWithParams( - img, - center, - axes, - angle, - startAngle, - endAngle, - color, - thickness, - lineType, - shift, + return _Boost_SetWeakCount( + self, + val, + ); + } + + late final _Boost_SetWeakCountPtr = + _lookup>( + 'Boost_SetWeakCount'); + late final _Boost_SetWeakCount = + _Boost_SetWeakCountPtr.asFunction(); + + CvStatus Boost_SetWeightTrimRate( + Boost self, + double val, + ) { + return _Boost_SetWeightTrimRate( + self, + val, + ); + } + + late final _Boost_SetWeightTrimRatePtr = + _lookup>( + 'Boost_SetWeightTrimRate'); + late final _Boost_SetWeightTrimRate = _Boost_SetWeightTrimRatePtr.asFunction< + CvStatus Function(Boost, double)>(); + + CvStatus Boost_Train( + Boost self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _Boost_Train( + self, + trainData, + flags, + rval, + ); + } + + late final _Boost_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Boost, PtrTrainData, ffi.Int, + ffi.Pointer)>>('Boost_Train'); + late final _Boost_Train = _Boost_TrainPtr.asFunction< + CvStatus Function(Boost, PtrTrainData, int, ffi.Pointer)>(); + + CvStatus Boost_Train_1( + Boost self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, + ) { + return _Boost_Train_1( + self, + samples, + layout, + responses, + rval, + ); + } + + late final _Boost_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(Boost, Mat, ffi.Int, Mat, + ffi.Pointer)>>('Boost_Train_1'); + late final _Boost_Train_1 = _Boost_Train_1Ptr.asFunction< + CvStatus Function(Boost, Mat, int, Mat, ffi.Pointer)>(); + + CvStatus BoundingRect( + VecPoint pts, + ffi.Pointer rval, + ) { + return _BoundingRect( + pts, + rval, + ); + } + + late final _BoundingRectPtr = _lookup< + ffi.NativeFunction)>>( + 'BoundingRect'); + late final _BoundingRect = _BoundingRectPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); + + CvStatus BoxFilter( + Mat src, + Mat dst, + int ddepth, + Size ps, + ) { + return _BoxFilter( + src, + dst, + ddepth, + ps, + ); + } + + late final _BoxFilterPtr = + _lookup>( + 'BoxFilter'); + late final _BoxFilter = + _BoxFilterPtr.asFunction(); + + CvStatus BoxPoints( + RotatedRect rect, + ffi.Pointer boxPts, + ) { + return _BoxPoints( + rect, + boxPts, + ); + } + + late final _BoxPointsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RotatedRect, ffi.Pointer)>>('BoxPoints'); + late final _BoxPoints = _BoxPointsPtr.asFunction< + CvStatus Function(RotatedRect, ffi.Pointer)>(); + + CvStatus CLAHE_Apply( + CLAHE c, + Mat src, + Mat dst, + ) { + return _CLAHE_Apply( + c, + src, + dst, + ); + } + + late final _CLAHE_ApplyPtr = + _lookup>( + 'CLAHE_Apply'); + late final _CLAHE_Apply = + _CLAHE_ApplyPtr.asFunction(); + + void CLAHE_Close( + ffi.Pointer c, + ) { + return _CLAHE_Close( + c, + ); + } + + late final _CLAHE_ClosePtr = + _lookup)>>( + 'CLAHE_Close'); + late final _CLAHE_Close = + _CLAHE_ClosePtr.asFunction)>(); + + CvStatus CLAHE_CollectGarbage( + CLAHE c, + ) { + return _CLAHE_CollectGarbage( + c, + ); + } + + late final _CLAHE_CollectGarbagePtr = + _lookup>( + 'CLAHE_CollectGarbage'); + late final _CLAHE_CollectGarbage = + _CLAHE_CollectGarbagePtr.asFunction(); + + CvStatus CLAHE_Create( + ffi.Pointer rval, + ) { + return _CLAHE_Create( + rval, + ); + } + + late final _CLAHE_CreatePtr = + _lookup)>>( + 'CLAHE_Create'); + late final _CLAHE_Create = + _CLAHE_CreatePtr.asFunction)>(); + + CvStatus CLAHE_CreateWithParams( + double clipLimit, + Size tileGridSize, + ffi.Pointer rval, + ) { + return _CLAHE_CreateWithParams( + clipLimit, + tileGridSize, + rval, + ); + } + + late final _CLAHE_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Double, Size, ffi.Pointer)>>('CLAHE_CreateWithParams'); + late final _CLAHE_CreateWithParams = _CLAHE_CreateWithParamsPtr.asFunction< + CvStatus Function(double, Size, ffi.Pointer)>(); + + CvStatus CLAHE_GetClipLimit( + CLAHE c, + ffi.Pointer rval, + ) { + return _CLAHE_GetClipLimit( + c, + rval, + ); + } + + late final _CLAHE_GetClipLimitPtr = _lookup< + ffi + .NativeFunction)>>( + 'CLAHE_GetClipLimit'); + late final _CLAHE_GetClipLimit = _CLAHE_GetClipLimitPtr.asFunction< + CvStatus Function(CLAHE, ffi.Pointer)>(); + + CvStatus CLAHE_GetTilesGridSize( + CLAHE c, + ffi.Pointer rval, + ) { + return _CLAHE_GetTilesGridSize( + c, + rval, + ); + } + + late final _CLAHE_GetTilesGridSizePtr = + _lookup)>>( + 'CLAHE_GetTilesGridSize'); + late final _CLAHE_GetTilesGridSize = _CLAHE_GetTilesGridSizePtr.asFunction< + CvStatus Function(CLAHE, ffi.Pointer)>(); + + CvStatus CLAHE_SetClipLimit( + CLAHE c, + double clipLimit, + ) { + return _CLAHE_SetClipLimit( + c, + clipLimit, + ); + } + + late final _CLAHE_SetClipLimitPtr = + _lookup>( + 'CLAHE_SetClipLimit'); + late final _CLAHE_SetClipLimit = + _CLAHE_SetClipLimitPtr.asFunction(); + + CvStatus CLAHE_SetTilesGridSize( + CLAHE c, + Size size, + ) { + return _CLAHE_SetTilesGridSize( + c, + size, + ); + } + + late final _CLAHE_SetTilesGridSizePtr = + _lookup>( + 'CLAHE_SetTilesGridSize'); + late final _CLAHE_SetTilesGridSize = + _CLAHE_SetTilesGridSizePtr.asFunction(); + + CvStatus CalcBackProject( + VecMat mats, + VecInt chans, + Mat hist, + Mat backProject, + VecFloat rng, + bool uniform, + ) { + return _CalcBackProject( + mats, + chans, + hist, + backProject, + rng, + uniform, + ); + } + + late final _CalcBackProjectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, + ffi.Bool)>>('CalcBackProject'); + late final _CalcBackProject = _CalcBackProjectPtr.asFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecFloat, bool)>(); + + CvStatus CalcHist( + VecMat mats, + VecInt chans, + Mat mask, + Mat hist, + VecInt sz, + VecFloat rng, + bool acc, + ) { + return _CalcHist( + mats, + chans, + mask, + hist, + sz, + rng, + acc, + ); + } + + late final _CalcHistPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, + ffi.Bool)>>('CalcHist'); + late final _CalcHist = _CalcHistPtr.asFunction< + CvStatus Function(VecMat, VecInt, Mat, Mat, VecInt, VecFloat, bool)>(); + + CvStatus CalcOpticalFlowFarneback( + Mat prevImg, + Mat nextImg, + Mat flow, + double pyrScale, + int levels, + int winsize, + int iterations, + int polyN, + double polySigma, + int flags, + ) { + return _CalcOpticalFlowFarneback( + prevImg, + nextImg, + flow, + pyrScale, + levels, + winsize, + iterations, + polyN, + polySigma, + flags, + ); + } + + late final _CalcOpticalFlowFarnebackPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + Mat, + ffi.Double, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Int, + ffi.Double, + ffi.Int)>>('CalcOpticalFlowFarneback'); + late final _CalcOpticalFlowFarneback = + _CalcOpticalFlowFarnebackPtr.asFunction< + CvStatus Function( + Mat, Mat, Mat, double, int, int, int, int, double, int)>(); + + CvStatus CalcOpticalFlowPyrLK( + Mat prevImg, + Mat nextImg, + VecPoint2f prevPts, + VecPoint2f nextPts, + VecUChar status, + VecFloat err, + ) { + return _CalcOpticalFlowPyrLK( + prevImg, + nextImg, + prevPts, + nextPts, + status, + err, + ); + } + + late final _CalcOpticalFlowPyrLKPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, + VecFloat)>>('CalcOpticalFlowPyrLK'); + late final _CalcOpticalFlowPyrLK = _CalcOpticalFlowPyrLKPtr.asFunction< + CvStatus Function( + Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, VecFloat)>(); + + CvStatus CalcOpticalFlowPyrLKWithParams( + Mat prevImg, + Mat nextImg, + VecPoint2f prevPts, + VecPoint2f nextPts, + VecUChar status, + VecFloat err, + Size winSize, + int maxLevel, + TermCriteria criteria, + int flags, + double minEigThreshold, + ) { + return _CalcOpticalFlowPyrLKWithParams( + prevImg, + nextImg, + prevPts, + nextPts, + status, + err, + winSize, + maxLevel, + criteria, + flags, + minEigThreshold, + ); + } + + late final _CalcOpticalFlowPyrLKWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + VecPoint2f, + VecPoint2f, + VecUChar, + VecFloat, + Size, + ffi.Int, + TermCriteria, + ffi.Int, + ffi.Double)>>('CalcOpticalFlowPyrLKWithParams'); + late final _CalcOpticalFlowPyrLKWithParams = + _CalcOpticalFlowPyrLKWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, VecPoint2f, VecPoint2f, VecUChar, + VecFloat, Size, int, TermCriteria, int, double)>(); + + CvStatus CalibrateCamera( + VecVecPoint3f objectPoints, + VecVecPoint2f imagePoints, + Size imageSize, + Mat cameraMatrix, + Mat distCoeffs, + Mat rvecs, + Mat tvecs, + int flag, + TermCriteria criteria, + ffi.Pointer rval, + ) { + return _CalibrateCamera( + objectPoints, + imagePoints, + imageSize, + cameraMatrix, + distCoeffs, + rvecs, + tvecs, + flag, + criteria, + rval, + ); + } + + late final _CalibrateCameraPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecVecPoint3f, + VecVecPoint2f, + Size, + Mat, + Mat, + Mat, + Mat, + ffi.Int, + TermCriteria, + ffi.Pointer)>>('CalibrateCamera'); + late final _CalibrateCamera = _CalibrateCameraPtr.asFunction< + CvStatus Function(VecVecPoint3f, VecVecPoint2f, Size, Mat, Mat, Mat, Mat, + int, TermCriteria, ffi.Pointer)>(); + + CvStatus Canny( + Mat src, + Mat edges, + double t1, + double t2, + int apertureSize, + bool l2gradient, + ) { + return _Canny( + src, + edges, + t1, + t2, + apertureSize, + l2gradient, + ); + } + + late final _CannyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Double, ffi.Double, ffi.Int, ffi.Bool)>>('Canny'); + late final _Canny = _CannyPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, bool)>(); + + void CascadeClassifier_Close( + ffi.Pointer cs, + ) { + return _CascadeClassifier_Close( + cs, + ); + } + + late final _CascadeClassifier_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'CascadeClassifier_Close'); + late final _CascadeClassifier_Close = _CascadeClassifier_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus CascadeClassifier_DetectMultiScale( + CascadeClassifier cs, + Mat img, + ffi.Pointer rval, + ) { + return _CascadeClassifier_DetectMultiScale( + cs, + img, + rval, + ); + } + + late final _CascadeClassifier_DetectMultiScalePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(CascadeClassifier, Mat, + ffi.Pointer)>>('CascadeClassifier_DetectMultiScale'); + late final _CascadeClassifier_DetectMultiScale = + _CascadeClassifier_DetectMultiScalePtr.asFunction< + CvStatus Function(CascadeClassifier, Mat, ffi.Pointer)>(); + + CvStatus CascadeClassifier_DetectMultiScaleWithParams( + CascadeClassifier cs, + Mat img, + double scale, + int minNeighbors, + int flags, + Size minSize, + Size maxSize, + ffi.Pointer rval, + ) { + return _CascadeClassifier_DetectMultiScaleWithParams( + cs, + img, + scale, + minNeighbors, + flags, + minSize, + maxSize, + rval, + ); + } + + late final _CascadeClassifier_DetectMultiScaleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(CascadeClassifier, Mat, ffi.Double, ffi.Int, + ffi.Int, Size, Size, ffi.Pointer)>>( + 'CascadeClassifier_DetectMultiScaleWithParams'); + late final _CascadeClassifier_DetectMultiScaleWithParams = + _CascadeClassifier_DetectMultiScaleWithParamsPtr.asFunction< + CvStatus Function(CascadeClassifier, Mat, double, int, int, Size, + Size, ffi.Pointer)>(); + + CvStatus CascadeClassifier_Load( + CascadeClassifier cs, + ffi.Pointer name, + ffi.Pointer rval, + ) { + return _CascadeClassifier_Load( + cs, + name, + rval, + ); + } + + late final _CascadeClassifier_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(CascadeClassifier, ffi.Pointer, + ffi.Pointer)>>('CascadeClassifier_Load'); + late final _CascadeClassifier_Load = _CascadeClassifier_LoadPtr.asFunction< + CvStatus Function( + CascadeClassifier, ffi.Pointer, ffi.Pointer)>(); + + CvStatus CascadeClassifier_New( + ffi.Pointer rval, + ) { + return _CascadeClassifier_New( + rval, + ); + } + + late final _CascadeClassifier_NewPtr = _lookup< + ffi + .NativeFunction)>>( + 'CascadeClassifier_New'); + late final _CascadeClassifier_New = _CascadeClassifier_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus Circle( + Mat img, + Point center, + int radius, + Scalar color, + int thickness, + ) { + return _Circle( + img, + center, + radius, + color, + thickness, + ); + } + + late final _CirclePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int)>>('Circle'); + late final _Circle = + _CirclePtr.asFunction(); + + CvStatus CircleWithParams( + Mat img, + Point center, + int radius, + Scalar color, + int thickness, + int lineType, + int shift, + ) { + return _CircleWithParams( + img, + center, + radius, + color, + thickness, + lineType, + shift, + ); + } + + late final _CircleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, ffi.Int, Scalar, ffi.Int, ffi.Int, + ffi.Int)>>('CircleWithParams'); + late final _CircleWithParams = _CircleWithParamsPtr.asFunction< + CvStatus Function(Mat, Point, int, Scalar, int, int, int)>(); + + CvStatus ClipLine( + Rect imgRect, + Point pt1, + Point pt2, + ffi.Pointer rval, + ) { + return _ClipLine( + imgRect, + pt1, + pt2, + rval, + ); + } + + late final _ClipLinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Rect, Point, Point, ffi.Pointer)>>('ClipLine'); + late final _ClipLine = _ClipLinePtr.asFunction< + CvStatus Function(Rect, Point, Point, ffi.Pointer)>(); + + CvStatus ColorChange( + Mat src, + Mat mask, + Mat dst, + double red_mul, + double green_mul, + double blue_mul, + ) { + return _ColorChange( + src, + mask, + dst, + red_mul, + green_mul, + blue_mul, + ); + } + + late final _ColorChangePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Float, ffi.Float)>>('ColorChange'); + late final _ColorChange = _ColorChangePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double, double)>(); + + CvStatus CompareHist( + Mat hist1, + Mat hist2, + int method, + ffi.Pointer rval, + ) { + return _CompareHist( + hist1, + hist2, + method, + rval, + ); + } + + late final _CompareHistPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('CompareHist'); + late final _CompareHist = _CompareHistPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + + CvStatus ConnectedComponents( + Mat src, + Mat dst, + int connectivity, + int ltype, + int ccltype, + ffi.Pointer rval, + ) { + return _ConnectedComponents( + src, + dst, + connectivity, + ltype, + ccltype, + rval, + ); + } + + late final _ConnectedComponentsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('ConnectedComponents'); + late final _ConnectedComponents = _ConnectedComponentsPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, int, ffi.Pointer)>(); + + CvStatus ConnectedComponentsWithStats( + Mat src, + Mat labels, + Mat stats, + Mat centroids, + int connectivity, + int ltype, + int ccltype, + ffi.Pointer rval, + ) { + return _ConnectedComponentsWithStats( + src, + labels, + stats, + centroids, + connectivity, + ltype, + ccltype, + rval, + ); + } + + late final _ConnectedComponentsWithStatsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('ConnectedComponentsWithStats'); + late final _ConnectedComponentsWithStats = + _ConnectedComponentsWithStatsPtr.asFunction< + CvStatus Function( + Mat, Mat, Mat, Mat, int, int, int, ffi.Pointer)>(); + + CvStatus ContourArea( + VecPoint pts, + ffi.Pointer rval, + ) { + return _ContourArea( + pts, + rval, + ); + } + + late final _ContourAreaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, ffi.Pointer)>>('ContourArea'); + late final _ContourArea = _ContourAreaPtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); + + CvStatus ConvexHull( + VecPoint points, + Mat hull, + bool clockwise, + bool returnPoints, + ) { + return _ConvexHull( + points, + hull, + clockwise, + returnPoints, + ); + } + + late final _ConvexHullPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, Mat, ffi.Bool, ffi.Bool)>>('ConvexHull'); + late final _ConvexHull = + _ConvexHullPtr.asFunction(); + + CvStatus ConvexityDefects( + VecPoint points, + Mat hull, + Mat result, + ) { + return _ConvexityDefects( + points, + hull, + result, + ); + } + + late final _ConvexityDefectsPtr = + _lookup>( + 'ConvexityDefects'); + late final _ConvexityDefects = + _ConvexityDefectsPtr.asFunction(); + + CvStatus CornerSubPix( + Mat img, + VecPoint2f corners, + Size winSize, + Size zeroZone, + TermCriteria criteria, + ) { + return _CornerSubPix( + img, + corners, + winSize, + zeroZone, + criteria, + ); + } + + late final _CornerSubPixPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecPoint2f, Size, Size, TermCriteria)>>('CornerSubPix'); + late final _CornerSubPix = _CornerSubPixPtr.asFunction< + CvStatus Function(Mat, VecPoint2f, Size, Size, TermCriteria)>(); + + CvStatus CvtColor( + Mat src, + Mat dst, + int code, + ) { + return _CvtColor( + src, + dst, + code, + ); + } + + late final _CvtColorPtr = + _lookup>( + 'CvtColor'); + late final _CvtColor = + _CvtColorPtr.asFunction(); + + CvStatus DTrees_Clear( + DTrees self, + ) { + return _DTrees_Clear( + self, + ); + } + + late final _DTrees_ClearPtr = + _lookup>('DTrees_Clear'); + late final _DTrees_Clear = + _DTrees_ClearPtr.asFunction(); + + void DTrees_Close( + ffi.Pointer self, + ) { + return _DTrees_Close( + self, + ); + } + + late final _DTrees_ClosePtr = + _lookup)>>( + 'DTrees_Close'); + late final _DTrees_Close = + _DTrees_ClosePtr.asFunction)>(); + + CvStatus DTrees_Create( + ffi.Pointer rval, + ) { + return _DTrees_Create( + rval, + ); + } + + late final _DTrees_CreatePtr = + _lookup)>>( + 'DTrees_Create'); + late final _DTrees_Create = + _DTrees_CreatePtr.asFunction)>(); + + CvStatus DTrees_Get( + PtrDTrees self, + ffi.Pointer rval, + ) { + return _DTrees_Get( + self, + rval, + ); + } + + late final _DTrees_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrDTrees, ffi.Pointer)>>('DTrees_Get'); + late final _DTrees_Get = _DTrees_GetPtr.asFunction< + CvStatus Function(PtrDTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetCVFolds( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetCVFolds( + self, + rval, + ); + } + + late final _DTrees_GetCVFoldsPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetCVFolds'); + late final _DTrees_GetCVFolds = _DTrees_GetCVFoldsPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetMaxCategories( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetMaxCategories( + self, + rval, + ); + } + + late final _DTrees_GetMaxCategoriesPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMaxCategories'); + late final _DTrees_GetMaxCategories = _DTrees_GetMaxCategoriesPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetMaxDepth( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetMaxDepth( + self, + rval, + ); + } + + late final _DTrees_GetMaxDepthPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMaxDepth'); + late final _DTrees_GetMaxDepth = _DTrees_GetMaxDepthPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetMinSampleCount( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetMinSampleCount( + self, + rval, + ); + } + + late final _DTrees_GetMinSampleCountPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetMinSampleCount'); + late final _DTrees_GetMinSampleCount = _DTrees_GetMinSampleCountPtr + .asFunction)>(); + + CvStatus DTrees_GetPriors( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetPriors( + self, + rval, + ); + } + + late final _DTrees_GetPriorsPtr = + _lookup)>>( + 'DTrees_GetPriors'); + late final _DTrees_GetPriors = _DTrees_GetPriorsPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetRegressionAccuracy( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetRegressionAccuracy( + self, + rval, + ); + } + + late final _DTrees_GetRegressionAccuracyPtr = _lookup< + ffi + .NativeFunction)>>( + 'DTrees_GetRegressionAccuracy'); + late final _DTrees_GetRegressionAccuracy = _DTrees_GetRegressionAccuracyPtr + .asFunction)>(); + + CvStatus DTrees_GetTruncatePrunedTree( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetTruncatePrunedTree( + self, + rval, + ); + } + + late final _DTrees_GetTruncatePrunedTreePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetTruncatePrunedTree'); + late final _DTrees_GetTruncatePrunedTree = _DTrees_GetTruncatePrunedTreePtr + .asFunction)>(); + + CvStatus DTrees_GetUse1SERule( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetUse1SERule( + self, + rval, + ); + } + + late final _DTrees_GetUse1SERulePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetUse1SERule'); + late final _DTrees_GetUse1SERule = _DTrees_GetUse1SERulePtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_GetUseSurrogates( + DTrees self, + ffi.Pointer rval, + ) { + return _DTrees_GetUseSurrogates( + self, + rval, + ); + } + + late final _DTrees_GetUseSurrogatesPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_GetUseSurrogates'); + late final _DTrees_GetUseSurrogates = _DTrees_GetUseSurrogatesPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_Load( + DTrees self, + ffi.Pointer filepath, + ) { + return _DTrees_Load( + self, + filepath, + ); + } + + late final _DTrees_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_Load'); + late final _DTrees_Load = _DTrees_LoadPtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_LoadFromString( + DTrees self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _DTrees_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _DTrees_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(DTrees, ffi.Pointer, + ffi.Pointer)>>('DTrees_LoadFromString'); + late final _DTrees_LoadFromString = _DTrees_LoadFromStringPtr.asFunction< + CvStatus Function( + DTrees, ffi.Pointer, ffi.Pointer)>(); + + CvStatus DTrees_Predict( + DTrees self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, + ) { + return _DTrees_Predict( + self, + samples, + results, + flags, + rval, + ); + } + + late final _DTrees_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(DTrees, Mat, Mat, ffi.Int, + ffi.Pointer)>>('DTrees_Predict'); + late final _DTrees_Predict = _DTrees_PredictPtr.asFunction< + CvStatus Function(DTrees, Mat, Mat, int, ffi.Pointer)>(); + + CvStatus DTrees_Save( + DTrees self, + ffi.Pointer filename, + ) { + return _DTrees_Save( + self, + filename, + ); + } + + late final _DTrees_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'DTrees_Save'); + late final _DTrees_Save = _DTrees_SavePtr.asFunction< + CvStatus Function(DTrees, ffi.Pointer)>(); + + CvStatus DTrees_SetCVFolds( + DTrees self, + int val, + ) { + return _DTrees_SetCVFolds( + self, + val, + ); + } + + late final _DTrees_SetCVFoldsPtr = + _lookup>( + 'DTrees_SetCVFolds'); + late final _DTrees_SetCVFolds = + _DTrees_SetCVFoldsPtr.asFunction(); + + CvStatus DTrees_SetMaxCategories( + DTrees self, + int val, + ) { + return _DTrees_SetMaxCategories( + self, + val, + ); + } + + late final _DTrees_SetMaxCategoriesPtr = + _lookup>( + 'DTrees_SetMaxCategories'); + late final _DTrees_SetMaxCategories = + _DTrees_SetMaxCategoriesPtr.asFunction(); + + CvStatus DTrees_SetMaxDepth( + DTrees self, + int val, + ) { + return _DTrees_SetMaxDepth( + self, + val, + ); + } + + late final _DTrees_SetMaxDepthPtr = + _lookup>( + 'DTrees_SetMaxDepth'); + late final _DTrees_SetMaxDepth = + _DTrees_SetMaxDepthPtr.asFunction(); + + CvStatus DTrees_SetMinSampleCount( + DTrees self, + int val, + ) { + return _DTrees_SetMinSampleCount( + self, + val, + ); + } + + late final _DTrees_SetMinSampleCountPtr = + _lookup>( + 'DTrees_SetMinSampleCount'); + late final _DTrees_SetMinSampleCount = + _DTrees_SetMinSampleCountPtr.asFunction(); + + CvStatus DTrees_SetPriors( + DTrees self, + Mat val, + ) { + return _DTrees_SetPriors( + self, + val, + ); + } + + late final _DTrees_SetPriorsPtr = + _lookup>( + 'DTrees_SetPriors'); + late final _DTrees_SetPriors = + _DTrees_SetPriorsPtr.asFunction(); + + CvStatus DTrees_SetRegressionAccuracy( + DTrees self, + double val, + ) { + return _DTrees_SetRegressionAccuracy( + self, + val, + ); + } + + late final _DTrees_SetRegressionAccuracyPtr = + _lookup>( + 'DTrees_SetRegressionAccuracy'); + late final _DTrees_SetRegressionAccuracy = _DTrees_SetRegressionAccuracyPtr + .asFunction(); + + CvStatus DTrees_SetTruncatePrunedTree( + DTrees self, + bool val, + ) { + return _DTrees_SetTruncatePrunedTree( + self, + val, + ); + } + + late final _DTrees_SetTruncatePrunedTreePtr = + _lookup>( + 'DTrees_SetTruncatePrunedTree'); + late final _DTrees_SetTruncatePrunedTree = _DTrees_SetTruncatePrunedTreePtr + .asFunction(); + + CvStatus DTrees_SetUse1SERule( + DTrees self, + bool val, + ) { + return _DTrees_SetUse1SERule( + self, + val, + ); + } + + late final _DTrees_SetUse1SERulePtr = + _lookup>( + 'DTrees_SetUse1SERule'); + late final _DTrees_SetUse1SERule = + _DTrees_SetUse1SERulePtr.asFunction(); + + CvStatus DTrees_SetUseSurrogates( + DTrees self, + bool val, + ) { + return _DTrees_SetUseSurrogates( + self, + val, + ); + } + + late final _DTrees_SetUseSurrogatesPtr = + _lookup>( + 'DTrees_SetUseSurrogates'); + late final _DTrees_SetUseSurrogates = + _DTrees_SetUseSurrogatesPtr.asFunction(); + + CvStatus DTrees_Train( + DTrees self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _DTrees_Train( + self, + trainData, + flags, + rval, + ); + } + + late final _DTrees_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(DTrees, PtrTrainData, ffi.Int, + ffi.Pointer)>>('DTrees_Train'); + late final _DTrees_Train = _DTrees_TrainPtr.asFunction< + CvStatus Function(DTrees, PtrTrainData, int, ffi.Pointer)>(); + + CvStatus DTrees_Train_1( + DTrees self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, + ) { + return _DTrees_Train_1( + self, + samples, + layout, + responses, + rval, + ); + } + + late final _DTrees_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(DTrees, Mat, ffi.Int, Mat, + ffi.Pointer)>>('DTrees_Train_1'); + late final _DTrees_Train_1 = _DTrees_Train_1Ptr.asFunction< + CvStatus Function(DTrees, Mat, int, Mat, ffi.Pointer)>(); + + CvStatus DetailEnhance( + Mat src, + Mat dst, + double sigma_s, + double sigma_r, + ) { + return _DetailEnhance( + src, + dst, + sigma_s, + sigma_r, + ); + } + + late final _DetailEnhancePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float)>>('DetailEnhance'); + late final _DetailEnhance = _DetailEnhancePtr.asFunction< + CvStatus Function(Mat, Mat, double, double)>(); + + CvStatus Dilate( + Mat src, + Mat dst, + Mat kernel, + ) { + return _Dilate( + src, + dst, + kernel, + ); + } + + late final _DilatePtr = + _lookup>('Dilate'); + late final _Dilate = + _DilatePtr.asFunction(); + + CvStatus DilateWithParams( + Mat src, + Mat dst, + Mat kernel, + Point anchor, + int iterations, + int borderType, + Scalar borderValue, + ) { + return _DilateWithParams( + src, + dst, + kernel, + anchor, + iterations, + borderType, + borderValue, + ); + } + + late final _DilateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, + Scalar)>>('DilateWithParams'); + late final _DilateWithParams = _DilateWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + + CvStatus DistanceTransform( + Mat src, + Mat dst, + Mat labels, + int distanceType, + int maskSize, + int labelType, + ) { + return _DistanceTransform( + src, + dst, + labels, + distanceType, + maskSize, + labelType, + ); + } + + late final _DistanceTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Mat, ffi.Int, ffi.Int, ffi.Int)>>('DistanceTransform'); + late final _DistanceTransform = _DistanceTransformPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, int, int)>(); + + CvStatus DrawChessboardCorners( + Mat image, + Size patternSize, + Mat corners, + bool patternWasFound, + ) { + return _DrawChessboardCorners( + image, + patternSize, + corners, + patternWasFound, + ); + } + + late final _DrawChessboardCornersPtr = + _lookup>( + 'DrawChessboardCorners'); + late final _DrawChessboardCorners = _DrawChessboardCornersPtr.asFunction< + CvStatus Function(Mat, Size, Mat, bool)>(); + + CvStatus DrawContours( + Mat src, + VecVecPoint contours, + int contourIdx, + Scalar color, + int thickness, + ) { + return _DrawContours( + src, + contours, + contourIdx, + color, + thickness, + ); + } + + late final _DrawContoursPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int)>>('DrawContours'); + late final _DrawContours = _DrawContoursPtr.asFunction< + CvStatus Function(Mat, VecVecPoint, int, Scalar, int)>(); + + CvStatus DrawContoursWithParams( + Mat src, + VecVecPoint contours, + int contourIdx, + Scalar color, + int thickness, + int lineType, + Mat hierarchy, + int maxLevel, + Point offset, + ) { + return _DrawContoursWithParams( + src, + contours, + contourIdx, + color, + thickness, + lineType, + hierarchy, + maxLevel, + offset, + ); + } + + late final _DrawContoursWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, VecVecPoint, ffi.Int, Scalar, ffi.Int, ffi.Int, + Mat, ffi.Int, Point)>>('DrawContoursWithParams'); + late final _DrawContoursWithParams = _DrawContoursWithParamsPtr.asFunction< + CvStatus Function( + Mat, VecVecPoint, int, Scalar, int, int, Mat, int, Point)>(); + + CvStatus DrawKeyPoints( + Mat src, + VecKeyPoint kp, + Mat dst, + Scalar color, + int flags, + ) { + return _DrawKeyPoints( + src, + kp, + dst, + color, + flags, + ); + } + + late final _DrawKeyPointsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, VecKeyPoint, Mat, Scalar, ffi.Int)>>('DrawKeyPoints'); + late final _DrawKeyPoints = _DrawKeyPointsPtr.asFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, Scalar, int)>(); + + CvStatus DrawMatches( + Mat img1, + VecKeyPoint kp1, + Mat img2, + VecKeyPoint kp2, + VecDMatch matches1to2, + Mat outImg, + Scalar matchesColor, + Scalar pointColor, + VecChar matchesMask, + int flags, + ) { + return _DrawMatches( + img1, + kp1, + img2, + kp2, + matches1to2, + outImg, + matchesColor, + pointColor, + matchesMask, + flags, + ); + } + + late final _DrawMatchesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, + Scalar, Scalar, VecChar, ffi.Int)>>('DrawMatches'); + late final _DrawMatches = _DrawMatchesPtr.asFunction< + CvStatus Function(Mat, VecKeyPoint, Mat, VecKeyPoint, VecDMatch, Mat, + Scalar, Scalar, VecChar, int)>(); + + CvStatus EM_Clear( + EM self, + ) { + return _EM_Clear( + self, + ); + } + + late final _EM_ClearPtr = + _lookup>('EM_Clear'); + late final _EM_Clear = _EM_ClearPtr.asFunction(); + + void EM_Close( + ffi.Pointer self, + ) { + return _EM_Close( + self, + ); + } + + late final _EM_ClosePtr = + _lookup)>>( + 'EM_Close'); + late final _EM_Close = + _EM_ClosePtr.asFunction)>(); + + CvStatus EM_Create( + ffi.Pointer rval, + ) { + return _EM_Create( + rval, + ); + } + + late final _EM_CreatePtr = + _lookup)>>( + 'EM_Create'); + late final _EM_Create = + _EM_CreatePtr.asFunction)>(); + + CvStatus EM_Get( + PtrEM self, + ffi.Pointer rval, + ) { + return _EM_Get( + self, + rval, + ); + } + + late final _EM_GetPtr = + _lookup)>>( + 'EM_Get'); + late final _EM_Get = + _EM_GetPtr.asFunction)>(); + + CvStatus EM_GetClustersNumber( + EM self, + ffi.Pointer rval, + ) { + return _EM_GetClustersNumber( + self, + rval, + ); + } + + late final _EM_GetClustersNumberPtr = + _lookup)>>( + 'EM_GetClustersNumber'); + late final _EM_GetClustersNumber = _EM_GetClustersNumberPtr.asFunction< + CvStatus Function(EM, ffi.Pointer)>(); + + CvStatus EM_GetCovarianceMatrixType( + EM self, + ffi.Pointer rval, + ) { + return _EM_GetCovarianceMatrixType( + self, + rval, + ); + } + + late final _EM_GetCovarianceMatrixTypePtr = + _lookup)>>( + 'EM_GetCovarianceMatrixType'); + late final _EM_GetCovarianceMatrixType = _EM_GetCovarianceMatrixTypePtr + .asFunction)>(); + + CvStatus EM_GetTermCriteria( + EM self, + ffi.Pointer rval, + ) { + return _EM_GetTermCriteria( + self, + rval, + ); + } + + late final _EM_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction)>>( + 'EM_GetTermCriteria'); + late final _EM_GetTermCriteria = _EM_GetTermCriteriaPtr.asFunction< + CvStatus Function(EM, ffi.Pointer)>(); + + CvStatus EM_Load( + EM self, + ffi.Pointer filepath, + ) { + return _EM_Load( + self, + filepath, + ); + } + + late final _EM_LoadPtr = + _lookup)>>( + 'EM_Load'); + late final _EM_Load = + _EM_LoadPtr.asFunction)>(); + + CvStatus EM_LoadFromString( + EM self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _EM_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _EM_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, ffi.Pointer, + ffi.Pointer)>>('EM_LoadFromString'); + late final _EM_LoadFromString = _EM_LoadFromStringPtr.asFunction< + CvStatus Function(EM, ffi.Pointer, ffi.Pointer)>(); + + CvStatus EM_Predict( + EM self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, + ) { + return _EM_Predict( + self, + samples, + results, + flags, + rval, + ); + } + + late final _EM_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + EM, Mat, Mat, ffi.Int, ffi.Pointer)>>('EM_Predict'); + late final _EM_Predict = _EM_PredictPtr.asFunction< + CvStatus Function(EM, Mat, Mat, int, ffi.Pointer)>(); + + CvStatus EM_Predict2( + EM self, + Mat sample, + Mat probs, + ffi.Pointer rval, + ) { + return _EM_Predict2( + self, + sample, + probs, + rval, + ); + } + + late final _EM_Predict2Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, ffi.Pointer)>>('EM_Predict2'); + late final _EM_Predict2 = _EM_Predict2Ptr.asFunction< + CvStatus Function(EM, Mat, Mat, ffi.Pointer)>(); + + CvStatus EM_Save( + EM self, + ffi.Pointer filename, + ) { + return _EM_Save( + self, + filename, + ); + } + + late final _EM_SavePtr = + _lookup)>>( + 'EM_Save'); + late final _EM_Save = + _EM_SavePtr.asFunction)>(); + + CvStatus EM_SetClustersNumber( + EM self, + int val, + ) { + return _EM_SetClustersNumber( + self, + val, + ); + } + + late final _EM_SetClustersNumberPtr = + _lookup>( + 'EM_SetClustersNumber'); + late final _EM_SetClustersNumber = + _EM_SetClustersNumberPtr.asFunction(); + + CvStatus EM_SetCovarianceMatrixType( + EM self, + int val, + ) { + return _EM_SetCovarianceMatrixType( + self, + val, + ); + } + + late final _EM_SetCovarianceMatrixTypePtr = + _lookup>( + 'EM_SetCovarianceMatrixType'); + late final _EM_SetCovarianceMatrixType = + _EM_SetCovarianceMatrixTypePtr.asFunction(); + + CvStatus EM_SetTermCriteria( + EM self, + TermCriteria val, + ) { + return _EM_SetTermCriteria( + self, + val, + ); + } + + late final _EM_SetTermCriteriaPtr = + _lookup>( + 'EM_SetTermCriteria'); + late final _EM_SetTermCriteria = + _EM_SetTermCriteriaPtr.asFunction(); + + CvStatus EM_TrainE( + EM self, + Mat samples, + Mat means0, + Mat covs0, + Mat weights0, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, + ) { + return _EM_TrainE( + self, + samples, + means0, + covs0, + weights0, + logLikelihoods, + labels, + probs, + rval, + ); + } + + late final _EM_TrainEPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('EM_TrainE'); + late final _EM_TrainE = _EM_TrainEPtr.asFunction< + CvStatus Function( + EM, Mat, Mat, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus EM_TrainEM( + EM self, + Mat samples, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, + ) { + return _EM_TrainEM( + self, + samples, + logLikelihoods, + labels, + probs, + rval, + ); + } + + late final _EM_TrainEMPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + EM, Mat, Mat, Mat, Mat, ffi.Pointer)>>('EM_TrainEM'); + late final _EM_TrainEM = _EM_TrainEMPtr.asFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus EM_TrainM( + EM self, + Mat samples, + Mat probs0, + Mat logLikelihoods, + Mat labels, + Mat probs, + ffi.Pointer rval, + ) { + return _EM_TrainM( + self, + samples, + probs0, + logLikelihoods, + labels, + probs, + rval, + ); + } + + late final _EM_TrainMPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, + ffi.Pointer)>>('EM_TrainM'); + late final _EM_TrainM = _EM_TrainMPtr.asFunction< + CvStatus Function(EM, Mat, Mat, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus EdgePreservingFilter( + Mat src, + Mat dst, + int filter, + double sigma_s, + double sigma_r, + ) { + return _EdgePreservingFilter( + src, + dst, + filter, + sigma_s, + sigma_r, + ); + } + + late final _EdgePreservingFilterPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Float, + ffi.Float)>>('EdgePreservingFilter'); + late final _EdgePreservingFilter = _EdgePreservingFilterPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); + + CvStatus Ellipse( + Mat img, + Point center, + Point axes, + double angle, + double startAngle, + double endAngle, + Scalar color, + int thickness, + ) { + return _Ellipse( + img, + center, + axes, + angle, + startAngle, + endAngle, + color, + thickness, + ); + } + + late final _EllipsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Point, Point, ffi.Double, ffi.Double, + ffi.Double, Scalar, ffi.Int)>>('Ellipse'); + late final _Ellipse = _EllipsePtr.asFunction< + CvStatus Function( + Mat, Point, Point, double, double, double, Scalar, int)>(); + + CvStatus EllipseWithParams( + Mat img, + Point center, + Point axes, + double angle, + double startAngle, + double endAngle, + Scalar color, + int thickness, + int lineType, + int shift, + ) { + return _EllipseWithParams( + img, + center, + axes, + angle, + startAngle, + endAngle, + color, + thickness, + lineType, + shift, + ); + } + + late final _EllipseWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Point, + Point, + ffi.Double, + ffi.Double, + ffi.Double, + Scalar, + ffi.Int, + ffi.Int, + ffi.Int)>>('EllipseWithParams'); + late final _EllipseWithParams = _EllipseWithParamsPtr.asFunction< + CvStatus Function( + Mat, Point, Point, double, double, double, Scalar, int, int, int)>(); + + CvStatus EqualizeHist( + Mat src, + Mat dst, + ) { + return _EqualizeHist( + src, + dst, + ); + } + + late final _EqualizeHistPtr = + _lookup>('EqualizeHist'); + late final _EqualizeHist = + _EqualizeHistPtr.asFunction(); + + CvStatus Erode( + Mat src, + Mat dst, + Mat kernel, + ) { + return _Erode( + src, + dst, + kernel, + ); + } + + late final _ErodePtr = + _lookup>('Erode'); + late final _Erode = _ErodePtr.asFunction(); + + CvStatus ErodeWithParams( + Mat src, + Mat dst, + Mat kernel, + Point anchor, + int iterations, + int borderType, + Scalar borderValue, + ) { + return _ErodeWithParams( + src, + dst, + kernel, + anchor, + iterations, + borderType, + borderValue, + ); + } + + late final _ErodeWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, + Scalar)>>('ErodeWithParams'); + late final _ErodeWithParams = _ErodeWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + + CvStatus EstimateAffine2D( + VecPoint2f from, + VecPoint2f to, + ffi.Pointer rval, + ) { + return _EstimateAffine2D( + from, + to, + rval, + ); + } + + late final _EstimateAffine2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint2f, VecPoint2f, ffi.Pointer)>>('EstimateAffine2D'); + late final _EstimateAffine2D = _EstimateAffine2DPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + + CvStatus EstimateAffine2DWithParams( + VecPoint2f from, + VecPoint2f to, + Mat inliers, + int method, + double ransacReprojThreshold, + int maxIters, + double confidence, + int refineIters, + ffi.Pointer rval, + ) { + return _EstimateAffine2DWithParams( + from, + to, + inliers, + method, + ransacReprojThreshold, + maxIters, + confidence, + refineIters, + rval, + ); + } + + late final _EstimateAffine2DWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint2f, + VecPoint2f, + Mat, + ffi.Int, + ffi.Double, + ffi.Size, + ffi.Double, + ffi.Size, + ffi.Pointer)>>('EstimateAffine2DWithParams'); + late final _EstimateAffine2DWithParams = + _EstimateAffine2DWithParamsPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, + double, int, ffi.Pointer)>(); + + CvStatus EstimateAffinePartial2D( + VecPoint2f from, + VecPoint2f to, + ffi.Pointer rval, + ) { + return _EstimateAffinePartial2D( + from, + to, + rval, + ); + } + + late final _EstimateAffinePartial2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint2f, VecPoint2f, + ffi.Pointer)>>('EstimateAffinePartial2D'); + late final _EstimateAffinePartial2D = _EstimateAffinePartial2DPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + + CvStatus EstimateAffinePartial2DWithParams( + VecPoint2f from, + VecPoint2f to, + Mat inliers, + int method, + double ransacReprojThreshold, + int maxIters, + double confidence, + int refineIters, + ffi.Pointer rval, + ) { + return _EstimateAffinePartial2DWithParams( + from, + to, + inliers, + method, + ransacReprojThreshold, + maxIters, + confidence, + refineIters, + rval, + ); + } + + late final _EstimateAffinePartial2DWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint2f, + VecPoint2f, + Mat, + ffi.Int, + ffi.Double, + ffi.Size, + ffi.Double, + ffi.Size, + ffi.Pointer)>>('EstimateAffinePartial2DWithParams'); + late final _EstimateAffinePartial2DWithParams = + _EstimateAffinePartial2DWithParamsPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, + double, int, ffi.Pointer)>(); + + CvStatus Eye( + int rows, + int cols, + int type, + ffi.Pointer rval, + ) { + return _Eye( + rows, + cols, + type, + rval, + ); + } + + late final _EyePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Eye'); + late final _Eye = + _EyePtr.asFunction)>(); + + void FastFeatureDetector_Close( + ffi.Pointer f, + ) { + return _FastFeatureDetector_Close( + f, + ); + } + + late final _FastFeatureDetector_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'FastFeatureDetector_Close'); + late final _FastFeatureDetector_Close = _FastFeatureDetector_ClosePtr + .asFunction)>(); + + CvStatus FastFeatureDetector_Create( + ffi.Pointer rval, + ) { + return _FastFeatureDetector_Create( + rval, + ); + } + + late final _FastFeatureDetector_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'FastFeatureDetector_Create'); + late final _FastFeatureDetector_Create = _FastFeatureDetector_CreatePtr + .asFunction)>(); + + CvStatus FastFeatureDetector_CreateWithParams( + int threshold, + bool nonmaxSuppression, + int type, + ffi.Pointer rval, + ) { + return _FastFeatureDetector_CreateWithParams( + threshold, + nonmaxSuppression, + type, + rval, + ); + } + + late final _FastFeatureDetector_CreateWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Int, ffi.Bool, ffi.Int, + ffi.Pointer)>>( + 'FastFeatureDetector_CreateWithParams'); + late final _FastFeatureDetector_CreateWithParams = + _FastFeatureDetector_CreateWithParamsPtr.asFunction< + CvStatus Function( + int, bool, int, ffi.Pointer)>(); + + CvStatus FastFeatureDetector_Detect( + FastFeatureDetector f, + Mat src, + ffi.Pointer rval, + ) { + return _FastFeatureDetector_Detect( + f, + src, + rval, + ); + } + + late final _FastFeatureDetector_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(FastFeatureDetector, Mat, + ffi.Pointer)>>('FastFeatureDetector_Detect'); + late final _FastFeatureDetector_Detect = + _FastFeatureDetector_DetectPtr.asFunction< + CvStatus Function( + FastFeatureDetector, Mat, ffi.Pointer)>(); + + CvStatus FastNlMeansDenoising( + Mat src, + Mat dst, + ) { + return _FastNlMeansDenoising( + src, + dst, + ); + } + + late final _FastNlMeansDenoisingPtr = + _lookup>( + 'FastNlMeansDenoising'); + late final _FastNlMeansDenoising = + _FastNlMeansDenoisingPtr.asFunction(); + + CvStatus FastNlMeansDenoisingColored( + Mat src, + Mat dst, + ) { + return _FastNlMeansDenoisingColored( + src, + dst, + ); + } + + late final _FastNlMeansDenoisingColoredPtr = + _lookup>( + 'FastNlMeansDenoisingColored'); + late final _FastNlMeansDenoisingColored = + _FastNlMeansDenoisingColoredPtr.asFunction(); + + CvStatus FastNlMeansDenoisingColoredMulti( + VecMat src, + Mat dst, + int imgToDenoiseIndex, + int temporalWindowSize, + ) { + return _FastNlMeansDenoisingColoredMulti( + src, + dst, + imgToDenoiseIndex, + temporalWindowSize, + ); + } + + late final _FastNlMeansDenoisingColoredMultiPtr = _lookup< + ffi.NativeFunction>( + 'FastNlMeansDenoisingColoredMulti'); + late final _FastNlMeansDenoisingColoredMulti = + _FastNlMeansDenoisingColoredMultiPtr.asFunction< + CvStatus Function(VecMat, Mat, int, int)>(); + + CvStatus FastNlMeansDenoisingColoredMultiWithParams( + VecMat src, + Mat dst, + int imgToDenoiseIndex, + int temporalWindowSize, + double h, + double hColor, + int templateWindowSize, + int searchWindowSize, + ) { + return _FastNlMeansDenoisingColoredMultiWithParams( + src, + dst, + imgToDenoiseIndex, + temporalWindowSize, + h, + hColor, + templateWindowSize, + searchWindowSize, + ); + } + + late final _FastNlMeansDenoisingColoredMultiWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecMat, Mat, ffi.Int, ffi.Int, ffi.Float, ffi.Float, + ffi.Int, ffi.Int)>>('FastNlMeansDenoisingColoredMultiWithParams'); + late final _FastNlMeansDenoisingColoredMultiWithParams = + _FastNlMeansDenoisingColoredMultiWithParamsPtr.asFunction< + CvStatus Function(VecMat, Mat, int, int, double, double, int, int)>(); + + CvStatus FastNlMeansDenoisingColoredWithParams( + Mat src, + Mat dst, + double h, + double hColor, + int templateWindowSize, + int searchWindowSize, + ) { + return _FastNlMeansDenoisingColoredWithParams( + src, + dst, + h, + hColor, + templateWindowSize, + searchWindowSize, + ); + } + + late final _FastNlMeansDenoisingColoredWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Float, ffi.Float, ffi.Int, + ffi.Int)>>('FastNlMeansDenoisingColoredWithParams'); + late final _FastNlMeansDenoisingColoredWithParams = + _FastNlMeansDenoisingColoredWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, int)>(); + + CvStatus FastNlMeansDenoisingWithParams( + Mat src, + Mat dst, + double h, + int templateWindowSize, + int searchWindowSize, + ) { + return _FastNlMeansDenoisingWithParams( + src, + dst, + h, + templateWindowSize, + searchWindowSize, + ); + } + + late final _FastNlMeansDenoisingWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Float, ffi.Int, + ffi.Int)>>('FastNlMeansDenoisingWithParams'); + late final _FastNlMeansDenoisingWithParams = + _FastNlMeansDenoisingWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, int, int)>(); + + CvStatus FillPoly( + Mat img, + VecVecPoint points, + Scalar color, + ) { + return _FillPoly( + img, + points, + color, + ); + } + + late final _FillPolyPtr = + _lookup>( + 'FillPoly'); + late final _FillPoly = + _FillPolyPtr.asFunction(); + + CvStatus FillPolyWithParams( + Mat img, + VecVecPoint points, + Scalar color, + int lineType, + int shift, + Point offset, + ) { + return _FillPolyWithParams( + img, + points, + color, + lineType, + shift, + offset, + ); + } + + late final _FillPolyWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, VecVecPoint, Scalar, ffi.Int, ffi.Int, + Point)>>('FillPolyWithParams'); + late final _FillPolyWithParams = _FillPolyWithParamsPtr.asFunction< + CvStatus Function(Mat, VecVecPoint, Scalar, int, int, Point)>(); + + CvStatus Filter2D( + Mat src, + Mat dst, + int ddepth, + Mat kernel, + Point anchor, + double delta, + int borderType, + ) { + return _Filter2D( + src, + dst, + ddepth, + kernel, + anchor, + delta, + borderType, + ); + } + + late final _Filter2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, Mat, Point, ffi.Double, ffi.Int)>>('Filter2D'); + late final _Filter2D = _Filter2DPtr.asFunction< + CvStatus Function(Mat, Mat, int, Mat, Point, double, int)>(); + + CvStatus FindChessboardCorners( + Mat image, + Size patternSize, + Mat corners, + int flags, + ffi.Pointer rval, + ) { + return _FindChessboardCorners( + image, + patternSize, + corners, + flags, + rval, + ); + } + + late final _FindChessboardCornersPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Size, Mat, ffi.Int, + ffi.Pointer)>>('FindChessboardCorners'); + late final _FindChessboardCorners = _FindChessboardCornersPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + + CvStatus FindChessboardCornersSB( + Mat image, + Size patternSize, + Mat corners, + int flags, + ffi.Pointer rval, + ) { + return _FindChessboardCornersSB( + image, + patternSize, + corners, + flags, + rval, + ); + } + + late final _FindChessboardCornersSBPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Size, Mat, ffi.Int, + ffi.Pointer)>>('FindChessboardCornersSB'); + late final _FindChessboardCornersSB = _FindChessboardCornersSBPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + + CvStatus FindChessboardCornersSBWithMeta( + Mat image, + Size patternSize, + Mat corners, + int flags, + Mat meta, + ffi.Pointer rval, + ) { + return _FindChessboardCornersSBWithMeta( + image, + patternSize, + corners, + flags, + meta, + rval, + ); + } + + late final _FindChessboardCornersSBWithMetaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Size, Mat, ffi.Int, Mat, + ffi.Pointer)>>('FindChessboardCornersSBWithMeta'); + late final _FindChessboardCornersSBWithMeta = + _FindChessboardCornersSBWithMetaPtr.asFunction< + CvStatus Function(Mat, Size, Mat, int, Mat, ffi.Pointer)>(); + + CvStatus FindContours( + Mat src, + Mat hierarchy, + int mode, + int method, + ffi.Pointer rval, + ) { + return _FindContours( + src, + hierarchy, + mode, + method, + rval, + ); + } + + late final _FindContoursPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, + ffi.Pointer)>>('FindContours'); + late final _FindContours = _FindContoursPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, ffi.Pointer)>(); + + CvStatus FindHomography( + Mat src, + Mat dst, + int method, + double ransacReprojThreshold, + Mat mask, + int maxIters, + double confidence, + ffi.Pointer rval, + ) { + return _FindHomography( + src, + dst, + method, + ransacReprojThreshold, + mask, + maxIters, + confidence, + rval, + ); + } + + late final _FindHomographyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Double, Mat, ffi.Int, + ffi.Double, ffi.Pointer)>>('FindHomography'); + late final _FindHomography = _FindHomographyPtr.asFunction< + CvStatus Function( + Mat, Mat, int, double, Mat, int, double, ffi.Pointer)>(); + + CvStatus FindTransformECC( + Mat templateImage, + Mat inputImage, + Mat warpMatrix, + int motionType, + TermCriteria criteria, + Mat inputMask, + int gaussFiltSize, + ffi.Pointer rval, + ) { + return _FindTransformECC( + templateImage, + inputImage, + warpMatrix, + motionType, + criteria, + inputMask, + gaussFiltSize, + rval, + ); + } + + late final _FindTransformECCPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Mat, ffi.Int, TermCriteria, Mat, ffi.Int, + ffi.Pointer)>>('FindTransformECC'); + late final _FindTransformECC = _FindTransformECCPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, int, TermCriteria, Mat, int, + ffi.Pointer)>(); + + CvStatus Fisheye_EstimateNewCameraMatrixForUndistortRectify( + Mat k, + Mat d, + Size imgSize, + Mat r, + Mat p, + double balance, + Size newSize, + double fovScale, + ) { + return _Fisheye_EstimateNewCameraMatrixForUndistortRectify( + k, + d, + imgSize, + r, + p, + balance, + newSize, + fovScale, + ); + } + + late final _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Size, Mat, Mat, ffi.Double, Size, ffi.Double)>>( + 'Fisheye_EstimateNewCameraMatrixForUndistortRectify'); + late final _Fisheye_EstimateNewCameraMatrixForUndistortRectify = + _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr.asFunction< + CvStatus Function(Mat, Mat, Size, Mat, Mat, double, Size, double)>(); + + CvStatus Fisheye_UndistortImage( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, + ) { + return _Fisheye_UndistortImage( + distorted, + undistorted, + k, + d, + ); + } + + late final _Fisheye_UndistortImagePtr = + _lookup>( + 'Fisheye_UndistortImage'); + late final _Fisheye_UndistortImage = _Fisheye_UndistortImagePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat)>(); + + CvStatus Fisheye_UndistortImageWithParams( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, + Mat knew, + Size size, + ) { + return _Fisheye_UndistortImageWithParams( + distorted, + undistorted, + k, + d, + knew, + size, + ); + } + + late final _Fisheye_UndistortImageWithParamsPtr = _lookup< + ffi.NativeFunction>( + 'Fisheye_UndistortImageWithParams'); + late final _Fisheye_UndistortImageWithParams = + _Fisheye_UndistortImageWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Mat, Size)>(); + + CvStatus Fisheye_UndistortPoints( + Mat distorted, + Mat undistorted, + Mat k, + Mat d, + Mat R, + Mat P, + ) { + return _Fisheye_UndistortPoints( + distorted, + undistorted, + k, + d, + R, + P, + ); + } + + late final _Fisheye_UndistortPointsPtr = _lookup< + ffi.NativeFunction>( + 'Fisheye_UndistortPoints'); + late final _Fisheye_UndistortPoints = _Fisheye_UndistortPointsPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Mat, Mat)>(); + + CvStatus FitEllipse( + VecPoint pts, + ffi.Pointer rval, + ) { + return _FitEllipse( + pts, + rval, + ); + } + + late final _FitEllipsePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, ffi.Pointer)>>('FitEllipse'); + late final _FitEllipse = _FitEllipsePtr.asFunction< + CvStatus Function(VecPoint, ffi.Pointer)>(); + + CvStatus FitLine( + VecPoint pts, + Mat line, + int distType, + double param, + double reps, + double aeps, + ) { + return _FitLine( + pts, + line, + distType, + param, + reps, + aeps, + ); + } + + late final _FitLinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, Mat, ffi.Int, ffi.Double, ffi.Double, + ffi.Double)>>('FitLine'); + late final _FitLine = _FitLinePtr.asFunction< + CvStatus Function(VecPoint, Mat, int, double, double, double)>(); + + void FlannBasedMatcher_Close( + ffi.Pointer f, + ) { + return _FlannBasedMatcher_Close( + f, + ); + } + + late final _FlannBasedMatcher_ClosePtr = _lookup< + ffi + .NativeFunction)>>( + 'FlannBasedMatcher_Close'); + late final _FlannBasedMatcher_Close = _FlannBasedMatcher_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus FlannBasedMatcher_Create( + ffi.Pointer rval, + ) { + return _FlannBasedMatcher_Create( + rval, + ); + } + + late final _FlannBasedMatcher_CreatePtr = _lookup< + ffi + .NativeFunction)>>( + 'FlannBasedMatcher_Create'); + late final _FlannBasedMatcher_Create = _FlannBasedMatcher_CreatePtr + .asFunction)>(); + + CvStatus FlannBasedMatcher_KnnMatch( + FlannBasedMatcher f, + Mat query, + Mat train, + int k, + ffi.Pointer rval, + ) { + return _FlannBasedMatcher_KnnMatch( + f, + query, + train, + k, + rval, + ); + } + + late final _FlannBasedMatcher_KnnMatchPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(FlannBasedMatcher, Mat, Mat, ffi.Int, + ffi.Pointer)>>('FlannBasedMatcher_KnnMatch'); + late final _FlannBasedMatcher_KnnMatch = + _FlannBasedMatcher_KnnMatchPtr.asFunction< + CvStatus Function( + FlannBasedMatcher, Mat, Mat, int, ffi.Pointer)>(); + + void GFTTDetector_Close( + ffi.Pointer a, + ) { + return _GFTTDetector_Close( + a, + ); + } + + late final _GFTTDetector_ClosePtr = + _lookup)>>( + 'GFTTDetector_Close'); + late final _GFTTDetector_Close = _GFTTDetector_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); + + CvStatus GFTTDetector_Create( + ffi.Pointer rval, + ) { + return _GFTTDetector_Create( + rval, + ); + } + + late final _GFTTDetector_CreatePtr = + _lookup)>>( + 'GFTTDetector_Create'); + late final _GFTTDetector_Create = _GFTTDetector_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus GFTTDetector_Detect( + GFTTDetector a, + Mat src, + ffi.Pointer rval, + ) { + return _GFTTDetector_Detect( + a, + src, + rval, ); } - late final _EllipseWithParamsPtr = _lookup< + late final _GFTTDetector_DetectPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, - Point, - Point, - ffi.Double, - ffi.Double, - ffi.Double, - Scalar, - ffi.Int, - ffi.Int, - ffi.Int)>>('EllipseWithParams'); - late final _EllipseWithParams = _EllipseWithParamsPtr.asFunction< - CvStatus Function( - Mat, Point, Point, double, double, double, Scalar, int, int, int)>(); + CvStatus Function(GFTTDetector, Mat, + ffi.Pointer)>>('GFTTDetector_Detect'); + late final _GFTTDetector_Detect = _GFTTDetector_DetectPtr.asFunction< + CvStatus Function(GFTTDetector, Mat, ffi.Pointer)>(); - CvStatus EqualizeHist( + CvStatus GaussianBlur( Mat src, Mat dst, + Size ps, + double sX, + double sY, + int bt, ) { - return _EqualizeHist( + return _GaussianBlur( src, dst, + ps, + sX, + sY, + bt, ); } - late final _EqualizeHistPtr = - _lookup>('EqualizeHist'); - late final _EqualizeHist = - _EqualizeHistPtr.asFunction(); + late final _GaussianBlurPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, Size, ffi.Double, ffi.Double, + ffi.Int)>>('GaussianBlur'); + late final _GaussianBlur = _GaussianBlurPtr.asFunction< + CvStatus Function(Mat, Mat, Size, double, double, int)>(); - CvStatus Erode( - Mat src, - Mat dst, - Mat kernel, + CvStatus GetAffineTransform( + VecPoint src, + VecPoint dst, + ffi.Pointer rval, ) { - return _Erode( + return _GetAffineTransform( src, dst, - kernel, + rval, ); } - late final _ErodePtr = - _lookup>('Erode'); - late final _Erode = _ErodePtr.asFunction(); + late final _GetAffineTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + VecPoint, VecPoint, ffi.Pointer)>>('GetAffineTransform'); + late final _GetAffineTransform = _GetAffineTransformPtr.asFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer)>(); - CvStatus ErodeWithParams( - Mat src, - Mat dst, - Mat kernel, - Point anchor, - int iterations, - int borderType, - Scalar borderValue, + CvStatus GetAffineTransform2f( + VecPoint2f src, + VecPoint2f dst, + ffi.Pointer rval, ) { - return _ErodeWithParams( + return _GetAffineTransform2f( src, dst, - kernel, - anchor, - iterations, - borderType, - borderValue, + rval, ); } - late final _ErodeWithParamsPtr = _lookup< + late final _GetAffineTransform2fPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Point, ffi.Int, ffi.Int, - Scalar)>>('ErodeWithParams'); - late final _ErodeWithParams = _ErodeWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Point, int, int, Scalar)>(); + CvStatus Function(VecPoint2f, VecPoint2f, + ffi.Pointer)>>('GetAffineTransform2f'); + late final _GetAffineTransform2f = _GetAffineTransform2fPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); - CvStatus EstimateAffine2D( - VecPoint2f from, - VecPoint2f to, - ffi.Pointer rval, + CvStatus GetCVTickCount( + ffi.Pointer rval, ) { - return _EstimateAffine2D( - from, - to, + return _GetCVTickCount( rval, ); } - late final _EstimateAffine2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint2f, VecPoint2f, ffi.Pointer)>>('EstimateAffine2D'); - late final _EstimateAffine2D = _EstimateAffine2DPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + late final _GetCVTickCountPtr = + _lookup)>>( + 'GetCVTickCount'); + late final _GetCVTickCount = _GetCVTickCountPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus EstimateAffine2DWithParams( - VecPoint2f from, - VecPoint2f to, - Mat inliers, - int method, - double ransacReprojThreshold, - int maxIters, - double confidence, - int refineIters, + CvStatus GetGaussianKernel( + int ksize, + double sigma, + int ktype, ffi.Pointer rval, ) { - return _EstimateAffine2DWithParams( - from, - to, - inliers, - method, - ransacReprojThreshold, - maxIters, - confidence, - refineIters, + return _GetGaussianKernel( + ksize, + sigma, + ktype, rval, ); } - late final _EstimateAffine2DWithParamsPtr = _lookup< + late final _GetGaussianKernelPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - VecPoint2f, - VecPoint2f, - Mat, - ffi.Int, - ffi.Double, - ffi.Size, - ffi.Double, - ffi.Size, - ffi.Pointer)>>('EstimateAffine2DWithParams'); - late final _EstimateAffine2DWithParams = - _EstimateAffine2DWithParamsPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, - double, int, ffi.Pointer)>(); + CvStatus Function(ffi.Int, ffi.Double, ffi.Int, + ffi.Pointer)>>('GetGaussianKernel'); + late final _GetGaussianKernel = _GetGaussianKernelPtr.asFunction< + CvStatus Function(int, double, int, ffi.Pointer)>(); - CvStatus EstimateAffinePartial2D( - VecPoint2f from, - VecPoint2f to, - ffi.Pointer rval, + CvStatus GetNumThreads( + ffi.Pointer rval, ) { - return _EstimateAffinePartial2D( - from, - to, + return _GetNumThreads( rval, ); } - late final _EstimateAffinePartial2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, - ffi.Pointer)>>('EstimateAffinePartial2D'); - late final _EstimateAffinePartial2D = _EstimateAffinePartial2DPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + late final _GetNumThreadsPtr = + _lookup)>>( + 'GetNumThreads'); + late final _GetNumThreads = + _GetNumThreadsPtr.asFunction)>(); - CvStatus EstimateAffinePartial2DWithParams( - VecPoint2f from, - VecPoint2f to, - Mat inliers, - int method, - double ransacReprojThreshold, - int maxIters, - double confidence, - int refineIters, + CvStatus GetOptimalNewCameraMatrixWithParams( + Mat cameraMatrix, + Mat distCoeffs, + Size size, + double alpha, + Size newImgSize, + ffi.Pointer validPixROI, + bool centerPrincipalPoint, ffi.Pointer rval, ) { - return _EstimateAffinePartial2DWithParams( - from, - to, - inliers, - method, - ransacReprojThreshold, - maxIters, - confidence, - refineIters, + return _GetOptimalNewCameraMatrixWithParams( + cameraMatrix, + distCoeffs, + size, + alpha, + newImgSize, + validPixROI, + centerPrincipalPoint, rval, ); } - late final _EstimateAffinePartial2DWithParamsPtr = _lookup< + late final _GetOptimalNewCameraMatrixWithParamsPtr = _lookup< ffi.NativeFunction< CvStatus Function( - VecPoint2f, - VecPoint2f, Mat, - ffi.Int, - ffi.Double, - ffi.Size, + Mat, + Size, ffi.Double, - ffi.Size, - ffi.Pointer)>>('EstimateAffinePartial2DWithParams'); - late final _EstimateAffinePartial2DWithParams = - _EstimateAffinePartial2DWithParamsPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, Mat, int, double, int, - double, int, ffi.Pointer)>(); + Size, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('GetOptimalNewCameraMatrixWithParams'); + late final _GetOptimalNewCameraMatrixWithParams = + _GetOptimalNewCameraMatrixWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, Size, double, Size, ffi.Pointer, + bool, ffi.Pointer)>(); + + CvStatus GetPerspectiveTransform( + VecPoint src, + VecPoint dst, + ffi.Pointer rval, + int solveMethod, + ) { + return _GetPerspectiveTransform( + src, + dst, + rval, + solveMethod, + ); + } - CvStatus Eye( - int rows, - int cols, - int type, + late final _GetPerspectiveTransformPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer, + ffi.Int)>>('GetPerspectiveTransform'); + late final _GetPerspectiveTransform = _GetPerspectiveTransformPtr.asFunction< + CvStatus Function(VecPoint, VecPoint, ffi.Pointer, int)>(); + + CvStatus GetPerspectiveTransform2f( + VecPoint2f src, + VecPoint2f dst, ffi.Pointer rval, + int solveMethod, ) { - return _Eye( - rows, - cols, - type, + return _GetPerspectiveTransform2f( + src, + dst, rval, + solveMethod, ); } - late final _EyePtr = _lookup< + late final _GetPerspectiveTransform2fPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ffi.Int, ffi.Int, ffi.Int, ffi.Pointer)>>('Eye'); - late final _Eye = - _EyePtr.asFunction)>(); + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, + ffi.Int)>>('GetPerspectiveTransform2f'); + late final _GetPerspectiveTransform2f = + _GetPerspectiveTransform2fPtr.asFunction< + CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, int)>(); - void FastFeatureDetector_Close( - ffi.Pointer f, + CvStatus GetRectSubPix( + Mat src, + Size patchSize, + Point2f center, + Mat dst, ) { - return _FastFeatureDetector_Close( - f, + return _GetRectSubPix( + src, + patchSize, + center, + dst, ); } - late final _FastFeatureDetector_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'FastFeatureDetector_Close'); - late final _FastFeatureDetector_Close = _FastFeatureDetector_ClosePtr - .asFunction)>(); + late final _GetRectSubPixPtr = + _lookup>( + 'GetRectSubPix'); + late final _GetRectSubPix = _GetRectSubPixPtr.asFunction< + CvStatus Function(Mat, Size, Point2f, Mat)>(); - CvStatus FastFeatureDetector_Create( - ffi.Pointer rval, + CvStatus GetRotationMatrix2D( + Point2f center, + double angle, + double scale, + ffi.Pointer rval, ) { - return _FastFeatureDetector_Create( + return _GetRotationMatrix2D( + center, + angle, + scale, rval, ); } - late final _FastFeatureDetector_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'FastFeatureDetector_Create'); - late final _FastFeatureDetector_Create = _FastFeatureDetector_CreatePtr - .asFunction)>(); + late final _GetRotationMatrix2DPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Point2f, ffi.Double, ffi.Double, + ffi.Pointer)>>('GetRotationMatrix2D'); + late final _GetRotationMatrix2D = _GetRotationMatrix2DPtr.asFunction< + CvStatus Function(Point2f, double, double, ffi.Pointer)>(); - CvStatus FastFeatureDetector_CreateWithParams( - int threshold, - bool nonmaxSuppression, - int type, - ffi.Pointer rval, + CvStatus GetStructuringElement( + int shape, + Size ksize, + ffi.Pointer rval, ) { - return _FastFeatureDetector_CreateWithParams( - threshold, - nonmaxSuppression, - type, + return _GetStructuringElement( + shape, + ksize, rval, ); } - late final _FastFeatureDetector_CreateWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Bool, ffi.Int, - ffi.Pointer)>>( - 'FastFeatureDetector_CreateWithParams'); - late final _FastFeatureDetector_CreateWithParams = - _FastFeatureDetector_CreateWithParamsPtr.asFunction< - CvStatus Function( - int, bool, int, ffi.Pointer)>(); + late final _GetStructuringElementPtr = _lookup< + ffi + .NativeFunction)>>( + 'GetStructuringElement'); + late final _GetStructuringElement = _GetStructuringElementPtr.asFunction< + CvStatus Function(int, Size, ffi.Pointer)>(); - CvStatus FastFeatureDetector_Detect( - FastFeatureDetector f, - Mat src, - ffi.Pointer rval, + CvStatus GetTextSizeWithBaseline( + ffi.Pointer text, + int fontFace, + double fontScale, + int thickness, + ffi.Pointer baseline, + ffi.Pointer rval, ) { - return _FastFeatureDetector_Detect( - f, - src, + return _GetTextSizeWithBaseline( + text, + fontFace, + fontScale, + thickness, + baseline, rval, ); } - late final _FastFeatureDetector_DetectPtr = _lookup< + late final _GetTextSizeWithBaselinePtr = _lookup< ffi.NativeFunction< - CvStatus Function(FastFeatureDetector, Mat, - ffi.Pointer)>>('FastFeatureDetector_Detect'); - late final _FastFeatureDetector_Detect = - _FastFeatureDetector_DetectPtr.asFunction< CvStatus Function( - FastFeatureDetector, Mat, ffi.Pointer)>(); + ffi.Pointer, + ffi.Int, + ffi.Double, + ffi.Int, + ffi.Pointer, + ffi.Pointer)>>('GetTextSizeWithBaseline'); + late final _GetTextSizeWithBaseline = _GetTextSizeWithBaselinePtr.asFunction< + CvStatus Function(ffi.Pointer, int, double, int, + ffi.Pointer, ffi.Pointer)>(); - CvStatus FastNlMeansDenoising( - Mat src, - Mat dst, + CvStatus GetTickFrequency( + ffi.Pointer rval, ) { - return _FastNlMeansDenoising( - src, - dst, + return _GetTickFrequency( + rval, ); } - late final _FastNlMeansDenoisingPtr = - _lookup>( - 'FastNlMeansDenoising'); - late final _FastNlMeansDenoising = - _FastNlMeansDenoisingPtr.asFunction(); + late final _GetTickFrequencyPtr = + _lookup)>>( + 'GetTickFrequency'); + late final _GetTickFrequency = _GetTickFrequencyPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus FastNlMeansDenoisingColored( - Mat src, - Mat dst, + CvStatus GoodFeaturesToTrack( + Mat img, + VecPoint2f corners, + int maxCorners, + double quality, + double minDist, + Mat mask, + int blockSize, + bool useHarrisDetector, + double k, ) { - return _FastNlMeansDenoisingColored( - src, - dst, + return _GoodFeaturesToTrack( + img, + corners, + maxCorners, + quality, + minDist, + mask, + blockSize, + useHarrisDetector, + k, ); } - late final _FastNlMeansDenoisingColoredPtr = - _lookup>( - 'FastNlMeansDenoisingColored'); - late final _FastNlMeansDenoisingColored = - _FastNlMeansDenoisingColoredPtr.asFunction(); + late final _GoodFeaturesToTrackPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, VecPoint2f, ffi.Int, ffi.Double, ffi.Double, + Mat, ffi.Int, ffi.Bool, ffi.Double)>>('GoodFeaturesToTrack'); + late final _GoodFeaturesToTrack = _GoodFeaturesToTrackPtr.asFunction< + CvStatus Function( + Mat, VecPoint2f, int, double, double, Mat, int, bool, double)>(); - CvStatus FastNlMeansDenoisingColoredMulti( - VecMat src, - Mat dst, - int imgToDenoiseIndex, - int temporalWindowSize, + CvStatus GoodFeaturesToTrackWithGradient( + Mat img, + VecPoint2f corners, + int maxCorners, + double quality, + double minDist, + Mat mask, + int blockSize, + int gradientSize, + bool useHarrisDetector, + double k, ) { - return _FastNlMeansDenoisingColoredMulti( - src, - dst, - imgToDenoiseIndex, - temporalWindowSize, + return _GoodFeaturesToTrackWithGradient( + img, + corners, + maxCorners, + quality, + minDist, + mask, + blockSize, + gradientSize, + useHarrisDetector, + k, ); } - late final _FastNlMeansDenoisingColoredMultiPtr = _lookup< - ffi.NativeFunction>( - 'FastNlMeansDenoisingColoredMulti'); - late final _FastNlMeansDenoisingColoredMulti = - _FastNlMeansDenoisingColoredMultiPtr.asFunction< - CvStatus Function(VecMat, Mat, int, int)>(); + late final _GoodFeaturesToTrackWithGradientPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + VecPoint2f, + ffi.Int, + ffi.Double, + ffi.Double, + Mat, + ffi.Int, + ffi.Int, + ffi.Bool, + ffi.Double)>>('GoodFeaturesToTrackWithGradient'); + late final _GoodFeaturesToTrackWithGradient = + _GoodFeaturesToTrackWithGradientPtr.asFunction< + CvStatus Function(Mat, VecPoint2f, int, double, double, Mat, int, int, + bool, double)>(); - CvStatus FastNlMeansDenoisingColoredMultiWithParams( - VecMat src, - Mat dst, - int imgToDenoiseIndex, - int temporalWindowSize, - double h, - double hColor, - int templateWindowSize, - int searchWindowSize, + CvStatus GrabCut( + Mat img, + Mat mask, + Rect rect, + Mat bgdModel, + Mat fgdModel, + int iterCount, + int mode, ) { - return _FastNlMeansDenoisingColoredMultiWithParams( - src, - dst, - imgToDenoiseIndex, - temporalWindowSize, - h, - hColor, - templateWindowSize, - searchWindowSize, + return _GrabCut( + img, + mask, + rect, + bgdModel, + fgdModel, + iterCount, + mode, ); } - late final _FastNlMeansDenoisingColoredMultiWithParamsPtr = _lookup< + late final _GrabCutPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecMat, Mat, ffi.Int, ffi.Int, ffi.Float, ffi.Float, - ffi.Int, ffi.Int)>>('FastNlMeansDenoisingColoredMultiWithParams'); - late final _FastNlMeansDenoisingColoredMultiWithParams = - _FastNlMeansDenoisingColoredMultiWithParamsPtr.asFunction< - CvStatus Function(VecMat, Mat, int, int, double, double, int, int)>(); + CvStatus Function( + Mat, Mat, Rect, Mat, Mat, ffi.Int, ffi.Int)>>('GrabCut'); + late final _GrabCut = _GrabCutPtr.asFunction< + CvStatus Function(Mat, Mat, Rect, Mat, Mat, int, int)>(); - CvStatus FastNlMeansDenoisingColoredWithParams( - Mat src, - Mat dst, - double h, - double hColor, - int templateWindowSize, - int searchWindowSize, + CvStatus GroupRectangles( + VecRect rects, + int groupThreshold, + double eps, ) { - return _FastNlMeansDenoisingColoredWithParams( - src, - dst, - h, - hColor, - templateWindowSize, - searchWindowSize, + return _GroupRectangles( + rects, + groupThreshold, + eps, ); } - late final _FastNlMeansDenoisingColoredWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Float, ffi.Int, - ffi.Int)>>('FastNlMeansDenoisingColoredWithParams'); - late final _FastNlMeansDenoisingColoredWithParams = - _FastNlMeansDenoisingColoredWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, int)>(); + late final _GroupRectanglesPtr = _lookup< + ffi.NativeFunction>( + 'GroupRectangles'); + late final _GroupRectangles = + _GroupRectanglesPtr.asFunction(); - CvStatus FastNlMeansDenoisingWithParams( - Mat src, - Mat dst, - double h, - int templateWindowSize, - int searchWindowSize, + void HOGDescriptor_Close( + ffi.Pointer hog, ) { - return _FastNlMeansDenoisingWithParams( - src, - dst, - h, - templateWindowSize, - searchWindowSize, + return _HOGDescriptor_Close( + hog, ); } - late final _FastNlMeansDenoisingWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Float, ffi.Int, - ffi.Int)>>('FastNlMeansDenoisingWithParams'); - late final _FastNlMeansDenoisingWithParams = - _FastNlMeansDenoisingWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, int, int)>(); + late final _HOGDescriptor_ClosePtr = _lookup< + ffi.NativeFunction)>>( + 'HOGDescriptor_Close'); + late final _HOGDescriptor_Close = _HOGDescriptor_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus FillPoly( + CvStatus HOGDescriptor_DetectMultiScale( + HOGDescriptor hog, Mat img, - VecVecPoint points, - Scalar color, + ffi.Pointer rval, ) { - return _FillPoly( + return _HOGDescriptor_DetectMultiScale( + hog, img, - points, - color, + rval, ); } - late final _FillPolyPtr = - _lookup>( - 'FillPoly'); - late final _FillPoly = - _FillPolyPtr.asFunction(); + late final _HOGDescriptor_DetectMultiScalePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(HOGDescriptor, Mat, + ffi.Pointer)>>('HOGDescriptor_DetectMultiScale'); + late final _HOGDescriptor_DetectMultiScale = + _HOGDescriptor_DetectMultiScalePtr.asFunction< + CvStatus Function(HOGDescriptor, Mat, ffi.Pointer)>(); - CvStatus FillPolyWithParams( + CvStatus HOGDescriptor_DetectMultiScaleWithParams( + HOGDescriptor hog, Mat img, - VecVecPoint points, - Scalar color, - int lineType, - int shift, - Point offset, + double hitThresh, + Size winStride, + Size padding, + double scale, + double finalThreshold, + bool useMeanshiftGrouping, + ffi.Pointer rval, ) { - return _FillPolyWithParams( + return _HOGDescriptor_DetectMultiScaleWithParams( + hog, img, - points, - color, - lineType, - shift, - offset, + hitThresh, + winStride, + padding, + scale, + finalThreshold, + useMeanshiftGrouping, + rval, ); } - late final _FillPolyWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecVecPoint, Scalar, ffi.Int, ffi.Int, - Point)>>('FillPolyWithParams'); - late final _FillPolyWithParams = _FillPolyWithParamsPtr.asFunction< - CvStatus Function(Mat, VecVecPoint, Scalar, int, int, Point)>(); + late final _HOGDescriptor_DetectMultiScaleWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(HOGDescriptor, Mat, ffi.Double, Size, Size, + ffi.Double, ffi.Double, ffi.Bool, ffi.Pointer)>>( + 'HOGDescriptor_DetectMultiScaleWithParams'); + late final _HOGDescriptor_DetectMultiScaleWithParams = + _HOGDescriptor_DetectMultiScaleWithParamsPtr.asFunction< + CvStatus Function(HOGDescriptor, Mat, double, Size, Size, double, + double, bool, ffi.Pointer)>(); - CvStatus Filter2D( - Mat src, - Mat dst, - int ddepth, - Mat kernel, - Point anchor, - double delta, - int borderType, + CvStatus HOGDescriptor_Load( + HOGDescriptor hog, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _Filter2D( - src, - dst, - ddepth, - kernel, - anchor, - delta, - borderType, + return _HOGDescriptor_Load( + hog, + name, + rval, ); } - late final _Filter2DPtr = _lookup< + late final _HOGDescriptor_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, Mat, Point, ffi.Double, ffi.Int)>>('Filter2D'); - late final _Filter2D = _Filter2DPtr.asFunction< - CvStatus Function(Mat, Mat, int, Mat, Point, double, int)>(); + CvStatus Function(HOGDescriptor, ffi.Pointer, + ffi.Pointer)>>('HOGDescriptor_Load'); + late final _HOGDescriptor_Load = _HOGDescriptor_LoadPtr.asFunction< + CvStatus Function( + HOGDescriptor, ffi.Pointer, ffi.Pointer)>(); - CvStatus FindChessboardCorners( - Mat image, - Size patternSize, - Mat corners, - int flags, - ffi.Pointer rval, + CvStatus HOGDescriptor_New( + ffi.Pointer rval, ) { - return _FindChessboardCorners( - image, - patternSize, - corners, - flags, + return _HOGDescriptor_New( rval, ); } - late final _FindChessboardCornersPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, - ffi.Pointer)>>('FindChessboardCorners'); - late final _FindChessboardCorners = _FindChessboardCornersPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); - - CvStatus FindChessboardCornersSB( - Mat image, - Size patternSize, - Mat corners, - int flags, - ffi.Pointer rval, + late final _HOGDescriptor_NewPtr = _lookup< + ffi.NativeFunction)>>( + 'HOGDescriptor_New'); + late final _HOGDescriptor_New = _HOGDescriptor_NewPtr.asFunction< + CvStatus Function(ffi.Pointer)>(); + + CvStatus HOGDescriptor_SetSVMDetector( + HOGDescriptor hog, + VecFloat det, ) { - return _FindChessboardCornersSB( - image, - patternSize, - corners, - flags, - rval, + return _HOGDescriptor_SetSVMDetector( + hog, + det, ); } - late final _FindChessboardCornersSBPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, - ffi.Pointer)>>('FindChessboardCornersSB'); - late final _FindChessboardCornersSB = _FindChessboardCornersSBPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, ffi.Pointer)>(); + late final _HOGDescriptor_SetSVMDetectorPtr = + _lookup>( + 'HOGDescriptor_SetSVMDetector'); + late final _HOGDescriptor_SetSVMDetector = _HOGDescriptor_SetSVMDetectorPtr + .asFunction(); - CvStatus FindChessboardCornersSBWithMeta( - Mat image, - Size patternSize, - Mat corners, - int flags, - Mat meta, - ffi.Pointer rval, + CvStatus HOG_GetDefaultPeopleDetector( + ffi.Pointer rval, ) { - return _FindChessboardCornersSBWithMeta( - image, - patternSize, - corners, - flags, - meta, + return _HOG_GetDefaultPeopleDetector( rval, ); } - late final _FindChessboardCornersSBWithMetaPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Size, Mat, ffi.Int, Mat, - ffi.Pointer)>>('FindChessboardCornersSBWithMeta'); - late final _FindChessboardCornersSBWithMeta = - _FindChessboardCornersSBWithMetaPtr.asFunction< - CvStatus Function(Mat, Size, Mat, int, Mat, ffi.Pointer)>(); + late final _HOG_GetDefaultPeopleDetectorPtr = + _lookup)>>( + 'HOG_GetDefaultPeopleDetector'); + late final _HOG_GetDefaultPeopleDetector = _HOG_GetDefaultPeopleDetectorPtr + .asFunction)>(); - CvStatus FindContours( + CvStatus HoughCircles( Mat src, - Mat hierarchy, - int mode, + Mat circles, int method, - ffi.Pointer rval, + double dp, + double minDist, ) { - return _FindContours( + return _HoughCircles( src, - hierarchy, - mode, + circles, method, - rval, + dp, + minDist, ); } - late final _FindContoursPtr = _lookup< + late final _HoughCirclesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, - ffi.Pointer)>>('FindContours'); - late final _FindContours = _FindContoursPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, ffi.Pointer)>(); + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('HoughCircles'); + late final _HoughCircles = _HoughCirclesPtr.asFunction< + CvStatus Function(Mat, Mat, int, double, double)>(); - CvStatus FindHomography( + CvStatus HoughCirclesWithParams( Mat src, - Mat dst, + Mat circles, int method, - double ransacReprojThreshold, - Mat mask, - int maxIters, - double confidence, - ffi.Pointer rval, + double dp, + double minDist, + double param1, + double param2, + int minRadius, + int maxRadius, ) { - return _FindHomography( + return _HoughCirclesWithParams( src, - dst, + circles, method, - ransacReprojThreshold, - mask, - maxIters, - confidence, - rval, + dp, + minDist, + param1, + param2, + minRadius, + maxRadius, ); } - late final _FindHomographyPtr = _lookup< + late final _HoughCirclesWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Double, Mat, ffi.Int, - ffi.Double, ffi.Pointer)>>('FindHomography'); - late final _FindHomography = _FindHomographyPtr.asFunction< + CvStatus Function( + Mat, + Mat, + ffi.Int, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Int, + ffi.Int)>>('HoughCirclesWithParams'); + late final _HoughCirclesWithParams = _HoughCirclesWithParamsPtr.asFunction< CvStatus Function( - Mat, Mat, int, double, Mat, int, double, ffi.Pointer)>(); + Mat, Mat, int, double, double, double, double, int, int)>(); - CvStatus FindTransformECC( - Mat templateImage, - Mat inputImage, - Mat warpMatrix, - int motionType, - TermCriteria criteria, - Mat inputMask, - int gaussFiltSize, - ffi.Pointer rval, + CvStatus HoughLines( + Mat src, + Mat lines, + double rho, + double theta, + int threshold, + double srn, + double stn, + double min_theta, + double max_theta, ) { - return _FindTransformECC( - templateImage, - inputImage, - warpMatrix, - motionType, - criteria, - inputMask, - gaussFiltSize, - rval, + return _HoughLines( + src, + lines, + rho, + theta, + threshold, + srn, + stn, + min_theta, + max_theta, ); } - late final _FindTransformECCPtr = _lookup< + late final _HoughLinesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, ffi.Int, TermCriteria, Mat, ffi.Int, - ffi.Pointer)>>('FindTransformECC'); - late final _FindTransformECC = _FindTransformECCPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, int, TermCriteria, Mat, int, - ffi.Pointer)>(); - - CvStatus Fisheye_EstimateNewCameraMatrixForUndistortRectify( - Mat k, - Mat d, - Size imgSize, - Mat r, - Mat p, - double balance, - Size newSize, - double fovScale, - ) { - return _Fisheye_EstimateNewCameraMatrixForUndistortRectify( - k, - d, - imgSize, - r, - p, - balance, - newSize, - fovScale, - ); - } - - late final _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Size, Mat, Mat, ffi.Double, Size, ffi.Double)>>( - 'Fisheye_EstimateNewCameraMatrixForUndistortRectify'); - late final _Fisheye_EstimateNewCameraMatrixForUndistortRectify = - _Fisheye_EstimateNewCameraMatrixForUndistortRectifyPtr.asFunction< - CvStatus Function(Mat, Mat, Size, Mat, Mat, double, Size, double)>(); + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Double, ffi.Double, ffi.Double, ffi.Double)>>('HoughLines'); + late final _HoughLines = _HoughLinesPtr.asFunction< + CvStatus Function( + Mat, Mat, double, double, int, double, double, double, double)>(); - CvStatus Fisheye_UndistortImage( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, + CvStatus HoughLinesP( + Mat src, + Mat lines, + double rho, + double theta, + int threshold, ) { - return _Fisheye_UndistortImage( - distorted, - undistorted, - k, - d, + return _HoughLinesP( + src, + lines, + rho, + theta, + threshold, ); } - late final _Fisheye_UndistortImagePtr = - _lookup>( - 'Fisheye_UndistortImage'); - late final _Fisheye_UndistortImage = _Fisheye_UndistortImagePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat)>(); + late final _HoughLinesPPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('HoughLinesP'); + late final _HoughLinesP = _HoughLinesPPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int)>(); - CvStatus Fisheye_UndistortImageWithParams( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, - Mat knew, - Size size, + CvStatus HoughLinesPWithParams( + Mat src, + Mat lines, + double rho, + double theta, + int threshold, + double minLineLength, + double maxLineGap, ) { - return _Fisheye_UndistortImageWithParams( - distorted, - undistorted, - k, - d, - knew, - size, + return _HoughLinesPWithParams( + src, + lines, + rho, + theta, + threshold, + minLineLength, + maxLineGap, ); } - late final _Fisheye_UndistortImageWithParamsPtr = _lookup< - ffi.NativeFunction>( - 'Fisheye_UndistortImageWithParams'); - late final _Fisheye_UndistortImageWithParams = - _Fisheye_UndistortImageWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Mat, Size)>(); + late final _HoughLinesPWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, + ffi.Double, ffi.Double)>>('HoughLinesPWithParams'); + late final _HoughLinesPWithParams = _HoughLinesPWithParamsPtr.asFunction< + CvStatus Function(Mat, Mat, double, double, int, double, double)>(); - CvStatus Fisheye_UndistortPoints( - Mat distorted, - Mat undistorted, - Mat k, - Mat d, - Mat R, - Mat P, + CvStatus HoughLinesPointSet( + Mat points, + Mat lines, + int lines_max, + int threshold, + double min_rho, + double max_rho, + double rho_step, + double min_theta, + double max_theta, + double theta_step, ) { - return _Fisheye_UndistortPoints( - distorted, - undistorted, - k, - d, - R, - P, + return _HoughLinesPointSet( + points, + lines, + lines_max, + threshold, + min_rho, + max_rho, + rho_step, + min_theta, + max_theta, + theta_step, ); } - late final _Fisheye_UndistortPointsPtr = _lookup< - ffi.NativeFunction>( - 'Fisheye_UndistortPoints'); - late final _Fisheye_UndistortPoints = _Fisheye_UndistortPointsPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Mat, Mat)>(); + late final _HoughLinesPointSetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, + Mat, + ffi.Int, + ffi.Int, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double)>>('HoughLinesPointSet'); + late final _HoughLinesPointSet = _HoughLinesPointSetPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, double, double, double, double, + double, double)>(); - CvStatus FitEllipse( - VecPoint pts, - ffi.Pointer rval, + CvStatus IlluminationChange( + Mat src, + Mat mask, + Mat dst, + double alpha, + double beta, ) { - return _FitEllipse( - pts, - rval, + return _IlluminationChange( + src, + mask, + dst, + alpha, + beta, ); } - late final _FitEllipsePtr = _lookup< + late final _IlluminationChangePtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, ffi.Pointer)>>('FitEllipse'); - late final _FitEllipse = _FitEllipsePtr.asFunction< - CvStatus Function(VecPoint, ffi.Pointer)>(); + CvStatus Function( + Mat, Mat, Mat, ffi.Float, ffi.Float)>>('IlluminationChange'); + late final _IlluminationChange = _IlluminationChangePtr.asFunction< + CvStatus Function(Mat, Mat, Mat, double, double)>(); - CvStatus FitLine( - VecPoint pts, - Mat line, - int distType, - double param, - double reps, - double aeps, + CvStatus Image_IMDecode( + VecUChar buf, + int flags, + ffi.Pointer rval, ) { - return _FitLine( - pts, - line, - distType, - param, - reps, - aeps, + return _Image_IMDecode( + buf, + flags, + rval, ); } - late final _FitLinePtr = _lookup< + late final _Image_IMDecodePtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, Mat, ffi.Int, ffi.Double, ffi.Double, - ffi.Double)>>('FitLine'); - late final _FitLine = _FitLinePtr.asFunction< - CvStatus Function(VecPoint, Mat, int, double, double, double)>(); + CvStatus Function( + VecUChar, ffi.Int, ffi.Pointer)>>('Image_IMDecode'); + late final _Image_IMDecode = _Image_IMDecodePtr.asFunction< + CvStatus Function(VecUChar, int, ffi.Pointer)>(); - void FlannBasedMatcher_Close( - ffi.Pointer f, + CvStatus Image_IMEncode( + ffi.Pointer fileExt, + Mat img, + ffi.Pointer rval, ) { - return _FlannBasedMatcher_Close( - f, + return _Image_IMEncode( + fileExt, + img, + rval, ); } - late final _FlannBasedMatcher_ClosePtr = _lookup< - ffi - .NativeFunction)>>( - 'FlannBasedMatcher_Close'); - late final _FlannBasedMatcher_Close = _FlannBasedMatcher_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _Image_IMEncodePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, + ffi.Pointer)>>('Image_IMEncode'); + late final _Image_IMEncode = _Image_IMEncodePtr.asFunction< + CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); - CvStatus FlannBasedMatcher_Create( - ffi.Pointer rval, + CvStatus Image_IMEncode_WithParams( + ffi.Pointer fileExt, + Mat img, + VecInt params, + ffi.Pointer rval, ) { - return _FlannBasedMatcher_Create( + return _Image_IMEncode_WithParams( + fileExt, + img, + params, rval, ); } - late final _FlannBasedMatcher_CreatePtr = _lookup< - ffi - .NativeFunction)>>( - 'FlannBasedMatcher_Create'); - late final _FlannBasedMatcher_Create = _FlannBasedMatcher_CreatePtr - .asFunction)>(); + late final _Image_IMEncode_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, VecInt, + ffi.Pointer)>>('Image_IMEncode_WithParams'); + late final _Image_IMEncode_WithParams = + _Image_IMEncode_WithParamsPtr.asFunction< + CvStatus Function( + ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); - CvStatus FlannBasedMatcher_KnnMatch( - FlannBasedMatcher f, - Mat query, - Mat train, - int k, - ffi.Pointer rval, + CvStatus Image_IMRead( + ffi.Pointer filename, + int flags, + ffi.Pointer rval, ) { - return _FlannBasedMatcher_KnnMatch( - f, - query, - train, - k, + return _Image_IMRead( + filename, + flags, rval, ); } - late final _FlannBasedMatcher_KnnMatchPtr = _lookup< + late final _Image_IMReadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(FlannBasedMatcher, Mat, Mat, ffi.Int, - ffi.Pointer)>>('FlannBasedMatcher_KnnMatch'); - late final _FlannBasedMatcher_KnnMatch = - _FlannBasedMatcher_KnnMatchPtr.asFunction< - CvStatus Function( - FlannBasedMatcher, Mat, Mat, int, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, ffi.Int, + ffi.Pointer)>>('Image_IMRead'); + late final _Image_IMRead = _Image_IMReadPtr.asFunction< + CvStatus Function(ffi.Pointer, int, ffi.Pointer)>(); - void GFTTDetector_Close( - ffi.Pointer a, + CvStatus Image_IMWrite( + ffi.Pointer filename, + Mat img, + ffi.Pointer rval, ) { - return _GFTTDetector_Close( - a, + return _Image_IMWrite( + filename, + img, + rval, ); } - late final _GFTTDetector_ClosePtr = - _lookup)>>( - 'GFTTDetector_Close'); - late final _GFTTDetector_Close = _GFTTDetector_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _Image_IMWritePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, + ffi.Pointer)>>('Image_IMWrite'); + late final _Image_IMWrite = _Image_IMWritePtr.asFunction< + CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); - CvStatus GFTTDetector_Create( - ffi.Pointer rval, + CvStatus Image_IMWrite_WithParams( + ffi.Pointer filename, + Mat img, + VecInt params, + ffi.Pointer rval, ) { - return _GFTTDetector_Create( + return _Image_IMWrite_WithParams( + filename, + img, + params, rval, ); } - late final _GFTTDetector_CreatePtr = - _lookup)>>( - 'GFTTDetector_Create'); - late final _GFTTDetector_Create = _GFTTDetector_CreatePtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _Image_IMWrite_WithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer, Mat, VecInt, + ffi.Pointer)>>('Image_IMWrite_WithParams'); + late final _Image_IMWrite_WithParams = + _Image_IMWrite_WithParamsPtr.asFunction< + CvStatus Function( + ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); - CvStatus GFTTDetector_Detect( - GFTTDetector a, - Mat src, - ffi.Pointer rval, + CvStatus InitUndistortRectifyMap( + Mat cameraMatrix, + Mat distCoeffs, + Mat r, + Mat newCameraMatrix, + Size size, + int m1type, + Mat map1, + Mat map2, ) { - return _GFTTDetector_Detect( - a, - src, - rval, + return _InitUndistortRectifyMap( + cameraMatrix, + distCoeffs, + r, + newCameraMatrix, + size, + m1type, + map1, + map2, ); } - late final _GFTTDetector_DetectPtr = _lookup< + late final _InitUndistortRectifyMapPtr = _lookup< ffi.NativeFunction< - CvStatus Function(GFTTDetector, Mat, - ffi.Pointer)>>('GFTTDetector_Detect'); - late final _GFTTDetector_Detect = _GFTTDetector_DetectPtr.asFunction< - CvStatus Function(GFTTDetector, Mat, ffi.Pointer)>(); + CvStatus Function(Mat, Mat, Mat, Mat, Size, ffi.Int, Mat, + Mat)>>('InitUndistortRectifyMap'); + late final _InitUndistortRectifyMap = _InitUndistortRectifyMapPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, Size, int, Mat, Mat)>(); - CvStatus GaussianBlur( + CvStatus Integral( Mat src, - Mat dst, - Size ps, - double sX, - double sY, - int bt, + Mat sum, + Mat sqsum, + Mat tilted, + int sdepth, + int sqdepth, ) { - return _GaussianBlur( + return _Integral( src, - dst, - ps, - sX, - sY, - bt, + sum, + sqsum, + tilted, + sdepth, + sqdepth, ); } - late final _GaussianBlurPtr = _lookup< + late final _IntegralPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, Size, ffi.Double, ffi.Double, - ffi.Int)>>('GaussianBlur'); - late final _GaussianBlur = _GaussianBlurPtr.asFunction< - CvStatus Function(Mat, Mat, Size, double, double, int)>(); + CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int)>>('Integral'); + late final _Integral = _IntegralPtr.asFunction< + CvStatus Function(Mat, Mat, Mat, Mat, int, int)>(); - CvStatus GetAffineTransform( - VecPoint src, - VecPoint dst, - ffi.Pointer rval, + CvStatus InvertAffineTransform( + Mat src, + Mat dst, ) { - return _GetAffineTransform( + return _InvertAffineTransform( src, dst, - rval, ); } - late final _GetAffineTransformPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecPoint, VecPoint, ffi.Pointer)>>('GetAffineTransform'); - late final _GetAffineTransform = _GetAffineTransformPtr.asFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer)>(); + late final _InvertAffineTransformPtr = + _lookup>( + 'InvertAffineTransform'); + late final _InvertAffineTransform = + _InvertAffineTransformPtr.asFunction(); - CvStatus GetAffineTransform2f( - VecPoint2f src, - VecPoint2f dst, - ffi.Pointer rval, + void KAZE_Close( + ffi.Pointer a, ) { - return _GetAffineTransform2f( - src, - dst, - rval, + return _KAZE_Close( + a, ); } - late final _GetAffineTransform2fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, - ffi.Pointer)>>('GetAffineTransform2f'); - late final _GetAffineTransform2f = _GetAffineTransform2fPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer)>(); + late final _KAZE_ClosePtr = + _lookup)>>( + 'KAZE_Close'); + late final _KAZE_Close = + _KAZE_ClosePtr.asFunction)>(); - CvStatus GetCVTickCount( - ffi.Pointer rval, + CvStatus KAZE_Create( + ffi.Pointer rval, ) { - return _GetCVTickCount( + return _KAZE_Create( rval, ); } - late final _GetCVTickCountPtr = - _lookup)>>( - 'GetCVTickCount'); - late final _GetCVTickCount = _GetCVTickCountPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _KAZE_CreatePtr = + _lookup)>>( + 'KAZE_Create'); + late final _KAZE_Create = + _KAZE_CreatePtr.asFunction)>(); - CvStatus GetGaussianKernel( - int ksize, - double sigma, - int ktype, - ffi.Pointer rval, + CvStatus KAZE_Detect( + KAZE a, + Mat src, + ffi.Pointer rval, ) { - return _GetGaussianKernel( - ksize, - sigma, - ktype, + return _KAZE_Detect( + a, + src, rval, ); } - late final _GetGaussianKernelPtr = _lookup< + late final _KAZE_DetectPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Double, ffi.Int, - ffi.Pointer)>>('GetGaussianKernel'); - late final _GetGaussianKernel = _GetGaussianKernelPtr.asFunction< - CvStatus Function(int, double, int, ffi.Pointer)>(); + CvStatus Function( + KAZE, Mat, ffi.Pointer)>>('KAZE_Detect'); + late final _KAZE_Detect = _KAZE_DetectPtr.asFunction< + CvStatus Function(KAZE, Mat, ffi.Pointer)>(); - CvStatus GetNumThreads( - ffi.Pointer rval, + CvStatus KAZE_DetectAndCompute( + KAZE a, + Mat src, + Mat mask, + Mat desc, + ffi.Pointer rval, ) { - return _GetNumThreads( + return _KAZE_DetectAndCompute( + a, + src, + mask, + desc, rval, ); } - late final _GetNumThreadsPtr = - _lookup)>>( - 'GetNumThreads'); - late final _GetNumThreads = - _GetNumThreadsPtr.asFunction)>(); + late final _KAZE_DetectAndComputePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KAZE, Mat, Mat, Mat, + ffi.Pointer)>>('KAZE_DetectAndCompute'); + late final _KAZE_DetectAndCompute = _KAZE_DetectAndComputePtr.asFunction< + CvStatus Function(KAZE, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus GetOptimalNewCameraMatrixWithParams( - Mat cameraMatrix, - Mat distCoeffs, - Size size, - double alpha, - Size newImgSize, - ffi.Pointer validPixROI, - bool centerPrincipalPoint, - ffi.Pointer rval, + CvStatus KMeans( + Mat data, + int k, + Mat bestLabels, + TermCriteria criteria, + int attempts, + int flags, + Mat centers, + ffi.Pointer rval, ) { - return _GetOptimalNewCameraMatrixWithParams( - cameraMatrix, - distCoeffs, - size, - alpha, - newImgSize, - validPixROI, - centerPrincipalPoint, + return _KMeans( + data, + k, + bestLabels, + criteria, + attempts, + flags, + centers, rval, ); } - late final _GetOptimalNewCameraMatrixWithParamsPtr = _lookup< + late final _KMeansPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - Size, - ffi.Double, - Size, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>('GetOptimalNewCameraMatrixWithParams'); - late final _GetOptimalNewCameraMatrixWithParams = - _GetOptimalNewCameraMatrixWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, Size, double, Size, ffi.Pointer, - bool, ffi.Pointer)>(); + CvStatus Function(Mat, ffi.Int, Mat, TermCriteria, ffi.Int, ffi.Int, + Mat, ffi.Pointer)>>('KMeans'); + late final _KMeans = _KMeansPtr.asFunction< + CvStatus Function(Mat, int, Mat, TermCriteria, int, int, Mat, + ffi.Pointer)>(); - CvStatus GetPerspectiveTransform( - VecPoint src, - VecPoint dst, - ffi.Pointer rval, - int solveMethod, + CvStatus KMeansPoints( + VecPoint2f pts, + int k, + Mat bestLabels, + TermCriteria criteria, + int attempts, + int flags, + Mat centers, + ffi.Pointer rval, ) { - return _GetPerspectiveTransform( - src, - dst, + return _KMeansPoints( + pts, + k, + bestLabels, + criteria, + attempts, + flags, + centers, rval, - solveMethod, ); } - late final _GetPerspectiveTransformPtr = _lookup< + late final _KMeansPointsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer, - ffi.Int)>>('GetPerspectiveTransform'); - late final _GetPerspectiveTransform = _GetPerspectiveTransformPtr.asFunction< - CvStatus Function(VecPoint, VecPoint, ffi.Pointer, int)>(); + CvStatus Function(VecPoint2f, ffi.Int, Mat, TermCriteria, ffi.Int, + ffi.Int, Mat, ffi.Pointer)>>('KMeansPoints'); + late final _KMeansPoints = _KMeansPointsPtr.asFunction< + CvStatus Function(VecPoint2f, int, Mat, TermCriteria, int, int, Mat, + ffi.Pointer)>(); - CvStatus GetPerspectiveTransform2f( - VecPoint2f src, - VecPoint2f dst, - ffi.Pointer rval, - int solveMethod, + CvStatus KNearest_Clear( + KNearest self, ) { - return _GetPerspectiveTransform2f( - src, - dst, - rval, - solveMethod, + return _KNearest_Clear( + self, ); } - late final _GetPerspectiveTransform2fPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, - ffi.Int)>>('GetPerspectiveTransform2f'); - late final _GetPerspectiveTransform2f = - _GetPerspectiveTransform2fPtr.asFunction< - CvStatus Function(VecPoint2f, VecPoint2f, ffi.Pointer, int)>(); + late final _KNearest_ClearPtr = + _lookup>( + 'KNearest_Clear'); + late final _KNearest_Clear = + _KNearest_ClearPtr.asFunction(); - CvStatus GetRectSubPix( - Mat src, - Size patchSize, - Point2f center, - Mat dst, + void KNearest_Close( + ffi.Pointer self, ) { - return _GetRectSubPix( - src, - patchSize, - center, - dst, + return _KNearest_Close( + self, ); } - late final _GetRectSubPixPtr = - _lookup>( - 'GetRectSubPix'); - late final _GetRectSubPix = _GetRectSubPixPtr.asFunction< - CvStatus Function(Mat, Size, Point2f, Mat)>(); + late final _KNearest_ClosePtr = + _lookup)>>( + 'KNearest_Close'); + late final _KNearest_Close = + _KNearest_ClosePtr.asFunction)>(); - CvStatus GetRotationMatrix2D( - Point2f center, - double angle, - double scale, - ffi.Pointer rval, + CvStatus KNearest_Create( + ffi.Pointer rval, ) { - return _GetRotationMatrix2D( - center, - angle, - scale, + return _KNearest_Create( rval, ); } - late final _GetRotationMatrix2DPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Point2f, ffi.Double, ffi.Double, - ffi.Pointer)>>('GetRotationMatrix2D'); - late final _GetRotationMatrix2D = _GetRotationMatrix2DPtr.asFunction< - CvStatus Function(Point2f, double, double, ffi.Pointer)>(); + late final _KNearest_CreatePtr = + _lookup)>>( + 'KNearest_Create'); + late final _KNearest_Create = _KNearest_CreatePtr.asFunction< + CvStatus Function(ffi.Pointer)>(); - CvStatus GetStructuringElement( - int shape, - Size ksize, - ffi.Pointer rval, + CvStatus KNearest_FindNearest( + KNearest self, + Mat samples, + int k, + Mat results, + Mat neighborResponses, + Mat dist, + ffi.Pointer rval, ) { - return _GetStructuringElement( - shape, - ksize, + return _KNearest_FindNearest( + self, + samples, + k, + results, + neighborResponses, + dist, rval, ); } - late final _GetStructuringElementPtr = _lookup< - ffi - .NativeFunction)>>( - 'GetStructuringElement'); - late final _GetStructuringElement = _GetStructuringElementPtr.asFunction< - CvStatus Function(int, Size, ffi.Pointer)>(); + late final _KNearest_FindNearestPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, Mat, ffi.Int, Mat, Mat, Mat, + ffi.Pointer)>>('KNearest_FindNearest'); + late final _KNearest_FindNearest = _KNearest_FindNearestPtr.asFunction< + CvStatus Function( + KNearest, Mat, int, Mat, Mat, Mat, ffi.Pointer)>(); - CvStatus GetTextSizeWithBaseline( - ffi.Pointer text, - int fontFace, - double fontScale, - int thickness, - ffi.Pointer baseline, - ffi.Pointer rval, + CvStatus KNearest_Get( + PtrKNearest self, + ffi.Pointer rval, ) { - return _GetTextSizeWithBaseline( - text, - fontFace, - fontScale, - thickness, - baseline, + return _KNearest_Get( + self, rval, ); } - late final _GetTextSizeWithBaselinePtr = _lookup< + late final _KNearest_GetPtr = _lookup< ffi.NativeFunction< CvStatus Function( - ffi.Pointer, - ffi.Int, - ffi.Double, - ffi.Int, - ffi.Pointer, - ffi.Pointer)>>('GetTextSizeWithBaseline'); - late final _GetTextSizeWithBaseline = _GetTextSizeWithBaselinePtr.asFunction< - CvStatus Function(ffi.Pointer, int, double, int, - ffi.Pointer, ffi.Pointer)>(); + PtrKNearest, ffi.Pointer)>>('KNearest_Get'); + late final _KNearest_Get = _KNearest_GetPtr.asFunction< + CvStatus Function(PtrKNearest, ffi.Pointer)>(); - CvStatus GetTickFrequency( - ffi.Pointer rval, + CvStatus KNearest_GetAlgorithmType( + KNearest self, + ffi.Pointer rval, ) { - return _GetTickFrequency( + return _KNearest_GetAlgorithmType( + self, rval, ); } - late final _GetTickFrequencyPtr = - _lookup)>>( - 'GetTickFrequency'); - late final _GetTickFrequency = _GetTickFrequencyPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _KNearest_GetAlgorithmTypePtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetAlgorithmType'); + late final _KNearest_GetAlgorithmType = _KNearest_GetAlgorithmTypePtr + .asFunction)>(); - CvStatus GoodFeaturesToTrack( - Mat img, - VecPoint2f corners, - int maxCorners, - double quality, - double minDist, - Mat mask, - int blockSize, - bool useHarrisDetector, - double k, + CvStatus KNearest_GetDefaultK( + KNearest self, + ffi.Pointer rval, ) { - return _GoodFeaturesToTrack( - img, - corners, - maxCorners, - quality, - minDist, - mask, - blockSize, - useHarrisDetector, - k, + return _KNearest_GetDefaultK( + self, + rval, ); } - late final _GoodFeaturesToTrackPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, VecPoint2f, ffi.Int, ffi.Double, ffi.Double, - Mat, ffi.Int, ffi.Bool, ffi.Double)>>('GoodFeaturesToTrack'); - late final _GoodFeaturesToTrack = _GoodFeaturesToTrackPtr.asFunction< - CvStatus Function( - Mat, VecPoint2f, int, double, double, Mat, int, bool, double)>(); + late final _KNearest_GetDefaultKPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetDefaultK'); + late final _KNearest_GetDefaultK = _KNearest_GetDefaultKPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus GoodFeaturesToTrackWithGradient( - Mat img, - VecPoint2f corners, - int maxCorners, - double quality, - double minDist, - Mat mask, - int blockSize, - int gradientSize, - bool useHarrisDetector, - double k, + CvStatus KNearest_GetEmax( + KNearest self, + ffi.Pointer rval, ) { - return _GoodFeaturesToTrackWithGradient( - img, - corners, - maxCorners, - quality, - minDist, - mask, - blockSize, - gradientSize, - useHarrisDetector, - k, + return _KNearest_GetEmax( + self, + rval, ); } - late final _GoodFeaturesToTrackWithGradientPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - VecPoint2f, - ffi.Int, - ffi.Double, - ffi.Double, - Mat, - ffi.Int, - ffi.Int, - ffi.Bool, - ffi.Double)>>('GoodFeaturesToTrackWithGradient'); - late final _GoodFeaturesToTrackWithGradient = - _GoodFeaturesToTrackWithGradientPtr.asFunction< - CvStatus Function(Mat, VecPoint2f, int, double, double, Mat, int, int, - bool, double)>(); + late final _KNearest_GetEmaxPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetEmax'); + late final _KNearest_GetEmax = _KNearest_GetEmaxPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus GrabCut( - Mat img, - Mat mask, - Rect rect, - Mat bgdModel, - Mat fgdModel, - int iterCount, - int mode, + CvStatus KNearest_GetIsClassifier( + KNearest self, + ffi.Pointer rval, ) { - return _GrabCut( - img, - mask, - rect, - bgdModel, - fgdModel, - iterCount, - mode, + return _KNearest_GetIsClassifier( + self, + rval, ); } - late final _GrabCutPtr = _lookup< + late final _KNearest_GetIsClassifierPtr = _lookup< + ffi + .NativeFunction)>>( + 'KNearest_GetIsClassifier'); + late final _KNearest_GetIsClassifier = _KNearest_GetIsClassifierPtr + .asFunction)>(); + + CvStatus KNearest_Load( + KNearest self, + ffi.Pointer filepath, + ) { + return _KNearest_Load( + self, + filepath, + ); + } + + late final _KNearest_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Rect, Mat, Mat, ffi.Int, ffi.Int)>>('GrabCut'); - late final _GrabCut = _GrabCutPtr.asFunction< - CvStatus Function(Mat, Mat, Rect, Mat, Mat, int, int)>(); + CvStatus Function(KNearest, ffi.Pointer)>>('KNearest_Load'); + late final _KNearest_Load = _KNearest_LoadPtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus GroupRectangles( - VecRect rects, - int groupThreshold, - double eps, + CvStatus KNearest_LoadFromString( + KNearest self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _GroupRectangles( - rects, - groupThreshold, - eps, + return _KNearest_LoadFromString( + self, + strModel, + objname, ); } - late final _GroupRectanglesPtr = _lookup< - ffi.NativeFunction>( - 'GroupRectangles'); - late final _GroupRectangles = - _GroupRectanglesPtr.asFunction(); + late final _KNearest_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, ffi.Pointer, + ffi.Pointer)>>('KNearest_LoadFromString'); + late final _KNearest_LoadFromString = _KNearest_LoadFromStringPtr.asFunction< + CvStatus Function( + KNearest, ffi.Pointer, ffi.Pointer)>(); - void HOGDescriptor_Close( - ffi.Pointer hog, + CvStatus KNearest_Save( + KNearest self, + ffi.Pointer filename, ) { - return _HOGDescriptor_Close( - hog, + return _KNearest_Save( + self, + filename, ); } - late final _HOGDescriptor_ClosePtr = _lookup< - ffi.NativeFunction)>>( - 'HOGDescriptor_Close'); - late final _HOGDescriptor_Close = _HOGDescriptor_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _KNearest_SavePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, ffi.Pointer)>>('KNearest_Save'); + late final _KNearest_Save = _KNearest_SavePtr.asFunction< + CvStatus Function(KNearest, ffi.Pointer)>(); - CvStatus HOGDescriptor_DetectMultiScale( - HOGDescriptor hog, - Mat img, - ffi.Pointer rval, + CvStatus KNearest_SetAlgorithmType( + KNearest self, + int val, ) { - return _HOGDescriptor_DetectMultiScale( - hog, - img, - rval, + return _KNearest_SetAlgorithmType( + self, + val, ); } - late final _HOGDescriptor_DetectMultiScalePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(HOGDescriptor, Mat, - ffi.Pointer)>>('HOGDescriptor_DetectMultiScale'); - late final _HOGDescriptor_DetectMultiScale = - _HOGDescriptor_DetectMultiScalePtr.asFunction< - CvStatus Function(HOGDescriptor, Mat, ffi.Pointer)>(); + late final _KNearest_SetAlgorithmTypePtr = + _lookup>( + 'KNearest_SetAlgorithmType'); + late final _KNearest_SetAlgorithmType = _KNearest_SetAlgorithmTypePtr + .asFunction(); - CvStatus HOGDescriptor_DetectMultiScaleWithParams( - HOGDescriptor hog, - Mat img, - double hitThresh, - Size winStride, - Size padding, - double scale, - double finalThreshold, - bool useMeanshiftGrouping, - ffi.Pointer rval, + CvStatus KNearest_SetDefaultK( + KNearest self, + int val, ) { - return _HOGDescriptor_DetectMultiScaleWithParams( - hog, - img, - hitThresh, - winStride, - padding, - scale, - finalThreshold, - useMeanshiftGrouping, - rval, + return _KNearest_SetDefaultK( + self, + val, ); } - late final _HOGDescriptor_DetectMultiScaleWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(HOGDescriptor, Mat, ffi.Double, Size, Size, - ffi.Double, ffi.Double, ffi.Bool, ffi.Pointer)>>( - 'HOGDescriptor_DetectMultiScaleWithParams'); - late final _HOGDescriptor_DetectMultiScaleWithParams = - _HOGDescriptor_DetectMultiScaleWithParamsPtr.asFunction< - CvStatus Function(HOGDescriptor, Mat, double, Size, Size, double, - double, bool, ffi.Pointer)>(); + late final _KNearest_SetDefaultKPtr = + _lookup>( + 'KNearest_SetDefaultK'); + late final _KNearest_SetDefaultK = + _KNearest_SetDefaultKPtr.asFunction(); - CvStatus HOGDescriptor_Load( - HOGDescriptor hog, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus KNearest_SetEmax( + KNearest self, + int val, ) { - return _HOGDescriptor_Load( - hog, - name, - rval, + return _KNearest_SetEmax( + self, + val, ); } - late final _HOGDescriptor_LoadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(HOGDescriptor, ffi.Pointer, - ffi.Pointer)>>('HOGDescriptor_Load'); - late final _HOGDescriptor_Load = _HOGDescriptor_LoadPtr.asFunction< - CvStatus Function( - HOGDescriptor, ffi.Pointer, ffi.Pointer)>(); + late final _KNearest_SetEmaxPtr = + _lookup>( + 'KNearest_SetEmax'); + late final _KNearest_SetEmax = + _KNearest_SetEmaxPtr.asFunction(); - CvStatus HOGDescriptor_New( - ffi.Pointer rval, + CvStatus KNearest_SetIsClassifier( + KNearest self, + bool val, ) { - return _HOGDescriptor_New( - rval, + return _KNearest_SetIsClassifier( + self, + val, ); } - late final _HOGDescriptor_NewPtr = _lookup< - ffi.NativeFunction)>>( - 'HOGDescriptor_New'); - late final _HOGDescriptor_New = _HOGDescriptor_NewPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + late final _KNearest_SetIsClassifierPtr = + _lookup>( + 'KNearest_SetIsClassifier'); + late final _KNearest_SetIsClassifier = _KNearest_SetIsClassifierPtr + .asFunction(); - CvStatus HOGDescriptor_SetSVMDetector( - HOGDescriptor hog, - VecFloat det, + CvStatus KNearest_Train( + KNearest self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _HOGDescriptor_SetSVMDetector( - hog, - det, + return _KNearest_Train( + self, + trainData, + flags, + rval, ); } - late final _HOGDescriptor_SetSVMDetectorPtr = - _lookup>( - 'HOGDescriptor_SetSVMDetector'); - late final _HOGDescriptor_SetSVMDetector = _HOGDescriptor_SetSVMDetectorPtr - .asFunction(); + late final _KNearest_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, PtrTrainData, ffi.Int, + ffi.Pointer)>>('KNearest_Train'); + late final _KNearest_Train = _KNearest_TrainPtr.asFunction< + CvStatus Function(KNearest, PtrTrainData, int, ffi.Pointer)>(); - CvStatus HOG_GetDefaultPeopleDetector( - ffi.Pointer rval, + CvStatus KNearest_Train_1( + KNearest self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _HOG_GetDefaultPeopleDetector( + return _KNearest_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _HOG_GetDefaultPeopleDetectorPtr = - _lookup)>>( - 'HOG_GetDefaultPeopleDetector'); - late final _HOG_GetDefaultPeopleDetector = _HOG_GetDefaultPeopleDetectorPtr - .asFunction)>(); + late final _KNearest_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(KNearest, Mat, ffi.Int, Mat, + ffi.Pointer)>>('KNearest_Train_1'); + late final _KNearest_Train_1 = _KNearest_Train_1Ptr.asFunction< + CvStatus Function(KNearest, Mat, int, Mat, ffi.Pointer)>(); - CvStatus HoughCircles( - Mat src, - Mat circles, - int method, - double dp, - double minDist, + void KalmanFilter_Close( + ffi.Pointer self, ) { - return _HoughCircles( - src, - circles, - method, - dp, - minDist, + return _KalmanFilter_Close( + self, ); } - late final _HoughCirclesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Int, ffi.Double, ffi.Double)>>('HoughCircles'); - late final _HoughCircles = _HoughCirclesPtr.asFunction< - CvStatus Function(Mat, Mat, int, double, double)>(); + late final _KalmanFilter_ClosePtr = + _lookup)>>( + 'KalmanFilter_Close'); + late final _KalmanFilter_Close = _KalmanFilter_ClosePtr.asFunction< + void Function(ffi.Pointer)>(); - CvStatus HoughCirclesWithParams( - Mat src, - Mat circles, - int method, - double dp, - double minDist, - double param1, - double param2, - int minRadius, - int maxRadius, + CvStatus KalmanFilter_Correct( + KalmanFilter self, + Mat measurement, + ffi.Pointer rval, ) { - return _HoughCirclesWithParams( - src, - circles, - method, - dp, - minDist, - param1, - param2, - minRadius, - maxRadius, + return _KalmanFilter_Correct( + self, + measurement, + rval, ); } - late final _HoughCirclesWithParamsPtr = _lookup< + late final _KalmanFilter_CorrectPtr = _lookup< ffi.NativeFunction< CvStatus Function( - Mat, - Mat, - ffi.Int, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Int, - ffi.Int)>>('HoughCirclesWithParams'); - late final _HoughCirclesWithParams = _HoughCirclesWithParamsPtr.asFunction< - CvStatus Function( - Mat, Mat, int, double, double, double, double, int, int)>(); + KalmanFilter, Mat, ffi.Pointer)>>('KalmanFilter_Correct'); + late final _KalmanFilter_Correct = _KalmanFilter_CorrectPtr.asFunction< + CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); - CvStatus HoughLines( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, - double srn, - double stn, - double min_theta, - double max_theta, + CvStatus KalmanFilter_GetControlMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _HoughLines( - src, - lines, - rho, - theta, - threshold, - srn, - stn, - min_theta, - max_theta, + return _KalmanFilter_GetControlMatrix( + self, + rval, ); } - late final _HoughLinesPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Double, ffi.Double, ffi.Double, ffi.Double)>>('HoughLines'); - late final _HoughLines = _HoughLinesPtr.asFunction< - CvStatus Function( - Mat, Mat, double, double, int, double, double, double, double)>(); + late final _KalmanFilter_GetControlMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetControlMatrix'); + late final _KalmanFilter_GetControlMatrix = _KalmanFilter_GetControlMatrixPtr + .asFunction)>(); - CvStatus HoughLinesP( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, + CvStatus KalmanFilter_GetErrorCovPost( + KalmanFilter self, + ffi.Pointer rval, ) { - return _HoughLinesP( - src, - lines, - rho, - theta, - threshold, + return _KalmanFilter_GetErrorCovPost( + self, + rval, ); } - late final _HoughLinesPPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, ffi.Double, ffi.Double, ffi.Int)>>('HoughLinesP'); - late final _HoughLinesP = _HoughLinesPPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int)>(); + late final _KalmanFilter_GetErrorCovPostPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetErrorCovPost'); + late final _KalmanFilter_GetErrorCovPost = _KalmanFilter_GetErrorCovPostPtr + .asFunction)>(); - CvStatus HoughLinesPWithParams( - Mat src, - Mat lines, - double rho, - double theta, - int threshold, - double minLineLength, - double maxLineGap, + CvStatus KalmanFilter_GetErrorCovPre( + KalmanFilter self, + ffi.Pointer rval, ) { - return _HoughLinesPWithParams( - src, - lines, - rho, - theta, - threshold, - minLineLength, - maxLineGap, + return _KalmanFilter_GetErrorCovPre( + self, + rval, ); } - late final _HoughLinesPWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Double, ffi.Double, ffi.Int, - ffi.Double, ffi.Double)>>('HoughLinesPWithParams'); - late final _HoughLinesPWithParams = _HoughLinesPWithParamsPtr.asFunction< - CvStatus Function(Mat, Mat, double, double, int, double, double)>(); + late final _KalmanFilter_GetErrorCovPrePtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetErrorCovPre'); + late final _KalmanFilter_GetErrorCovPre = _KalmanFilter_GetErrorCovPrePtr + .asFunction)>(); - CvStatus HoughLinesPointSet( - Mat points, - Mat lines, - int lines_max, - int threshold, - double min_rho, - double max_rho, - double rho_step, - double min_theta, - double max_theta, - double theta_step, + CvStatus KalmanFilter_GetGain( + KalmanFilter self, + ffi.Pointer rval, ) { - return _HoughLinesPointSet( - points, - lines, - lines_max, - threshold, - min_rho, - max_rho, - rho_step, - min_theta, - max_theta, - theta_step, + return _KalmanFilter_GetGain( + self, + rval, ); } - late final _HoughLinesPointSetPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, - Mat, - ffi.Int, - ffi.Int, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double)>>('HoughLinesPointSet'); - late final _HoughLinesPointSet = _HoughLinesPointSetPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, double, double, double, double, - double, double)>(); + late final _KalmanFilter_GetGainPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetGain'); + late final _KalmanFilter_GetGain = _KalmanFilter_GetGainPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus IlluminationChange( - Mat src, - Mat mask, - Mat dst, - double alpha, - double beta, + CvStatus KalmanFilter_GetMeasurementMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _IlluminationChange( - src, - mask, - dst, - alpha, - beta, + return _KalmanFilter_GetMeasurementMatrix( + self, + rval, ); } - late final _IlluminationChangePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Mat, Mat, ffi.Float, ffi.Float)>>('IlluminationChange'); - late final _IlluminationChange = _IlluminationChangePtr.asFunction< - CvStatus Function(Mat, Mat, Mat, double, double)>(); + late final _KalmanFilter_GetMeasurementMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetMeasurementMatrix'); + late final _KalmanFilter_GetMeasurementMatrix = + _KalmanFilter_GetMeasurementMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Image_IMDecode( - VecUChar buf, - int flags, + CvStatus KalmanFilter_GetMeasurementNoiseCov( + KalmanFilter self, ffi.Pointer rval, ) { - return _Image_IMDecode( - buf, - flags, + return _KalmanFilter_GetMeasurementNoiseCov( + self, rval, ); } - late final _Image_IMDecodePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - VecUChar, ffi.Int, ffi.Pointer)>>('Image_IMDecode'); - late final _Image_IMDecode = _Image_IMDecodePtr.asFunction< - CvStatus Function(VecUChar, int, ffi.Pointer)>(); + late final _KalmanFilter_GetMeasurementNoiseCovPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetMeasurementNoiseCov'); + late final _KalmanFilter_GetMeasurementNoiseCov = + _KalmanFilter_GetMeasurementNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Image_IMEncode( - ffi.Pointer fileExt, - Mat img, - ffi.Pointer rval, + CvStatus KalmanFilter_GetProcessNoiseCov( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Image_IMEncode( - fileExt, - img, + return _KalmanFilter_GetProcessNoiseCov( + self, rval, ); } - late final _Image_IMEncodePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, - ffi.Pointer)>>('Image_IMEncode'); - late final _Image_IMEncode = _Image_IMEncodePtr.asFunction< - CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); + late final _KalmanFilter_GetProcessNoiseCovPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetProcessNoiseCov'); + late final _KalmanFilter_GetProcessNoiseCov = + _KalmanFilter_GetProcessNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Image_IMEncode_WithParams( - ffi.Pointer fileExt, - Mat img, - VecInt params, - ffi.Pointer rval, + CvStatus KalmanFilter_GetStatePost( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Image_IMEncode_WithParams( - fileExt, - img, - params, + return _KalmanFilter_GetStatePost( + self, rval, ); } - late final _Image_IMEncode_WithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, VecInt, - ffi.Pointer)>>('Image_IMEncode_WithParams'); - late final _Image_IMEncode_WithParams = - _Image_IMEncode_WithParamsPtr.asFunction< - CvStatus Function( - ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); + late final _KalmanFilter_GetStatePostPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetStatePost'); + late final _KalmanFilter_GetStatePost = _KalmanFilter_GetStatePostPtr + .asFunction)>(); - CvStatus Image_IMRead( - ffi.Pointer filename, - int flags, + CvStatus KalmanFilter_GetStatePre( + KalmanFilter self, ffi.Pointer rval, ) { - return _Image_IMRead( - filename, - flags, + return _KalmanFilter_GetStatePre( + self, rval, ); } - late final _Image_IMReadPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, ffi.Int, - ffi.Pointer)>>('Image_IMRead'); - late final _Image_IMRead = _Image_IMReadPtr.asFunction< - CvStatus Function(ffi.Pointer, int, ffi.Pointer)>(); + late final _KalmanFilter_GetStatePrePtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetStatePre'); + late final _KalmanFilter_GetStatePre = _KalmanFilter_GetStatePrePtr + .asFunction)>(); - CvStatus Image_IMWrite( - ffi.Pointer filename, - Mat img, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp1( + KalmanFilter self, + ffi.Pointer rval, + ) { + return _KalmanFilter_GetTemp1( + self, + rval, + ); + } + + late final _KalmanFilter_GetTemp1Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp1'); + late final _KalmanFilter_GetTemp1 = _KalmanFilter_GetTemp1Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); + + CvStatus KalmanFilter_GetTemp2( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Image_IMWrite( - filename, - img, + return _KalmanFilter_GetTemp2( + self, rval, ); } - late final _Image_IMWritePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, - ffi.Pointer)>>('Image_IMWrite'); - late final _Image_IMWrite = _Image_IMWritePtr.asFunction< - CvStatus Function(ffi.Pointer, Mat, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp2Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp2'); + late final _KalmanFilter_GetTemp2 = _KalmanFilter_GetTemp2Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Image_IMWrite_WithParams( - ffi.Pointer filename, - Mat img, - VecInt params, - ffi.Pointer rval, + CvStatus KalmanFilter_GetTemp3( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Image_IMWrite_WithParams( - filename, - img, - params, + return _KalmanFilter_GetTemp3( + self, rval, ); } - late final _Image_IMWrite_WithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Pointer, Mat, VecInt, - ffi.Pointer)>>('Image_IMWrite_WithParams'); - late final _Image_IMWrite_WithParams = - _Image_IMWrite_WithParamsPtr.asFunction< - CvStatus Function( - ffi.Pointer, Mat, VecInt, ffi.Pointer)>(); + late final _KalmanFilter_GetTemp3Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp3'); + late final _KalmanFilter_GetTemp3 = _KalmanFilter_GetTemp3Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus InitUndistortRectifyMap( - Mat cameraMatrix, - Mat distCoeffs, - Mat r, - Mat newCameraMatrix, - Size size, - int m1type, - Mat map1, - Mat map2, + CvStatus KalmanFilter_GetTemp4( + KalmanFilter self, + ffi.Pointer rval, ) { - return _InitUndistortRectifyMap( - cameraMatrix, - distCoeffs, - r, - newCameraMatrix, - size, - m1type, - map1, - map2, + return _KalmanFilter_GetTemp4( + self, + rval, ); } - late final _InitUndistortRectifyMapPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Size, ffi.Int, Mat, - Mat)>>('InitUndistortRectifyMap'); - late final _InitUndistortRectifyMap = _InitUndistortRectifyMapPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, Size, int, Mat, Mat)>(); + late final _KalmanFilter_GetTemp4Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp4'); + late final _KalmanFilter_GetTemp4 = _KalmanFilter_GetTemp4Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus Integral( - Mat src, - Mat sum, - Mat sqsum, - Mat tilted, - int sdepth, - int sqdepth, + CvStatus KalmanFilter_GetTemp5( + KalmanFilter self, + ffi.Pointer rval, ) { - return _Integral( - src, - sum, - sqsum, - tilted, - sdepth, - sqdepth, + return _KalmanFilter_GetTemp5( + self, + rval, ); } - late final _IntegralPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Mat, Mat, Mat, Mat, ffi.Int, ffi.Int)>>('Integral'); - late final _Integral = _IntegralPtr.asFunction< - CvStatus Function(Mat, Mat, Mat, Mat, int, int)>(); + late final _KalmanFilter_GetTemp5Ptr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTemp5'); + late final _KalmanFilter_GetTemp5 = _KalmanFilter_GetTemp5Ptr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus InvertAffineTransform( - Mat src, - Mat dst, + CvStatus KalmanFilter_GetTransitionMatrix( + KalmanFilter self, + ffi.Pointer rval, ) { - return _InvertAffineTransform( - src, - dst, + return _KalmanFilter_GetTransitionMatrix( + self, + rval, ); } - late final _InvertAffineTransformPtr = - _lookup>( - 'InvertAffineTransform'); - late final _InvertAffineTransform = - _InvertAffineTransformPtr.asFunction(); + late final _KalmanFilter_GetTransitionMatrixPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_GetTransitionMatrix'); + late final _KalmanFilter_GetTransitionMatrix = + _KalmanFilter_GetTransitionMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - void KAZE_Close( - ffi.Pointer a, + CvStatus KalmanFilter_Init( + KalmanFilter self, + int dynamParams, + int measureParams, ) { - return _KAZE_Close( - a, + return _KalmanFilter_Init( + self, + dynamParams, + measureParams, ); } - late final _KAZE_ClosePtr = - _lookup)>>( - 'KAZE_Close'); - late final _KAZE_Close = - _KAZE_ClosePtr.asFunction)>(); + late final _KalmanFilter_InitPtr = _lookup< + ffi + .NativeFunction>( + 'KalmanFilter_Init'); + late final _KalmanFilter_Init = _KalmanFilter_InitPtr.asFunction< + CvStatus Function(KalmanFilter, int, int)>(); - CvStatus KAZE_Create( - ffi.Pointer rval, + CvStatus KalmanFilter_InitWithParams( + KalmanFilter self, + int dynamParams, + int measureParams, + int controlParams, + int type, ) { - return _KAZE_Create( - rval, + return _KalmanFilter_InitWithParams( + self, + dynamParams, + measureParams, + controlParams, + type, ); } - late final _KAZE_CreatePtr = - _lookup)>>( - 'KAZE_Create'); - late final _KAZE_Create = - _KAZE_CreatePtr.asFunction)>(); + late final _KalmanFilter_InitWithParamsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(KalmanFilter, ffi.Int, ffi.Int, ffi.Int, + ffi.Int)>>('KalmanFilter_InitWithParams'); + late final _KalmanFilter_InitWithParams = _KalmanFilter_InitWithParamsPtr + .asFunction(); - CvStatus KAZE_Detect( - KAZE a, - Mat src, - ffi.Pointer rval, + CvStatus KalmanFilter_New( + int dynamParams, + int measureParams, + int controlParams, + int type, + ffi.Pointer rval, ) { - return _KAZE_Detect( - a, - src, + return _KalmanFilter_New( + dynamParams, + measureParams, + controlParams, + type, rval, ); } - late final _KAZE_DetectPtr = _lookup< + late final _KalmanFilter_NewPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - KAZE, Mat, ffi.Pointer)>>('KAZE_Detect'); - late final _KAZE_Detect = _KAZE_DetectPtr.asFunction< - CvStatus Function(KAZE, Mat, ffi.Pointer)>(); + CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Int, + ffi.Pointer)>>('KalmanFilter_New'); + late final _KalmanFilter_New = _KalmanFilter_NewPtr.asFunction< + CvStatus Function(int, int, int, int, ffi.Pointer)>(); - CvStatus KAZE_DetectAndCompute( - KAZE a, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus KalmanFilter_Predict( + KalmanFilter self, + ffi.Pointer rval, ) { - return _KAZE_DetectAndCompute( - a, - src, - mask, - desc, + return _KalmanFilter_Predict( + self, rval, ); } - late final _KAZE_DetectAndComputePtr = _lookup< - ffi.NativeFunction< - CvStatus Function(KAZE, Mat, Mat, Mat, - ffi.Pointer)>>('KAZE_DetectAndCompute'); - late final _KAZE_DetectAndCompute = _KAZE_DetectAndComputePtr.asFunction< - CvStatus Function(KAZE, Mat, Mat, Mat, ffi.Pointer)>(); + late final _KalmanFilter_PredictPtr = _lookup< + ffi + .NativeFunction)>>( + 'KalmanFilter_Predict'); + late final _KalmanFilter_Predict = _KalmanFilter_PredictPtr.asFunction< + CvStatus Function(KalmanFilter, ffi.Pointer)>(); - CvStatus KMeans( - Mat data, - int k, - Mat bestLabels, - TermCriteria criteria, - int attempts, - int flags, - Mat centers, - ffi.Pointer rval, + CvStatus KalmanFilter_PredictWithParams( + KalmanFilter self, + Mat control, + ffi.Pointer rval, ) { - return _KMeans( - data, - k, - bestLabels, - criteria, - attempts, - flags, - centers, + return _KalmanFilter_PredictWithParams( + self, + control, rval, ); } - late final _KMeansPtr = _lookup< + late final _KalmanFilter_PredictWithParamsPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, Mat, TermCriteria, ffi.Int, ffi.Int, - Mat, ffi.Pointer)>>('KMeans'); - late final _KMeans = _KMeansPtr.asFunction< - CvStatus Function(Mat, int, Mat, TermCriteria, int, int, Mat, - ffi.Pointer)>(); + CvStatus Function(KalmanFilter, Mat, + ffi.Pointer)>>('KalmanFilter_PredictWithParams'); + late final _KalmanFilter_PredictWithParams = + _KalmanFilter_PredictWithParamsPtr.asFunction< + CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); - CvStatus KMeansPoints( - VecPoint2f pts, - int k, - Mat bestLabels, - TermCriteria criteria, - int attempts, - int flags, - Mat centers, - ffi.Pointer rval, + CvStatus KalmanFilter_SetControlMatrix( + KalmanFilter self, + Mat controlMatrix, ) { - return _KMeansPoints( - pts, - k, - bestLabels, - criteria, - attempts, - flags, - centers, - rval, + return _KalmanFilter_SetControlMatrix( + self, + controlMatrix, ); } - late final _KMeansPointsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(VecPoint2f, ffi.Int, Mat, TermCriteria, ffi.Int, - ffi.Int, Mat, ffi.Pointer)>>('KMeansPoints'); - late final _KMeansPoints = _KMeansPointsPtr.asFunction< - CvStatus Function(VecPoint2f, int, Mat, TermCriteria, int, int, Mat, - ffi.Pointer)>(); + late final _KalmanFilter_SetControlMatrixPtr = + _lookup>( + 'KalmanFilter_SetControlMatrix'); + late final _KalmanFilter_SetControlMatrix = _KalmanFilter_SetControlMatrixPtr + .asFunction(); - void KalmanFilter_Close( - ffi.Pointer self, + CvStatus KalmanFilter_SetErrorCovPost( + KalmanFilter self, + Mat errorCovPost, ) { - return _KalmanFilter_Close( + return _KalmanFilter_SetErrorCovPost( self, + errorCovPost, ); } - late final _KalmanFilter_ClosePtr = - _lookup)>>( - 'KalmanFilter_Close'); - late final _KalmanFilter_Close = _KalmanFilter_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); + late final _KalmanFilter_SetErrorCovPostPtr = + _lookup>( + 'KalmanFilter_SetErrorCovPost'); + late final _KalmanFilter_SetErrorCovPost = _KalmanFilter_SetErrorCovPostPtr + .asFunction(); - CvStatus KalmanFilter_Correct( + CvStatus KalmanFilter_SetErrorCovPre( KalmanFilter self, - Mat measurement, - ffi.Pointer rval, + Mat errorCovPre, ) { - return _KalmanFilter_Correct( + return _KalmanFilter_SetErrorCovPre( self, - measurement, - rval, + errorCovPre, ); } - late final _KalmanFilter_CorrectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - KalmanFilter, Mat, ffi.Pointer)>>('KalmanFilter_Correct'); - late final _KalmanFilter_Correct = _KalmanFilter_CorrectPtr.asFunction< - CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); + late final _KalmanFilter_SetErrorCovPrePtr = + _lookup>( + 'KalmanFilter_SetErrorCovPre'); + late final _KalmanFilter_SetErrorCovPre = _KalmanFilter_SetErrorCovPrePtr + .asFunction(); - CvStatus KalmanFilter_GetControlMatrix( + CvStatus KalmanFilter_SetGain( KalmanFilter self, - ffi.Pointer rval, + Mat gain, ) { - return _KalmanFilter_GetControlMatrix( + return _KalmanFilter_SetGain( self, - rval, + gain, ); } - late final _KalmanFilter_GetControlMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetControlMatrix'); - late final _KalmanFilter_GetControlMatrix = _KalmanFilter_GetControlMatrixPtr - .asFunction)>(); + late final _KalmanFilter_SetGainPtr = + _lookup>( + 'KalmanFilter_SetGain'); + late final _KalmanFilter_SetGain = _KalmanFilter_SetGainPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus KalmanFilter_GetErrorCovPost( + CvStatus KalmanFilter_SetMeasurementMatrix( KalmanFilter self, - ffi.Pointer rval, + Mat measurementMatrix, ) { - return _KalmanFilter_GetErrorCovPost( + return _KalmanFilter_SetMeasurementMatrix( self, - rval, + measurementMatrix, ); } - late final _KalmanFilter_GetErrorCovPostPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetErrorCovPost'); - late final _KalmanFilter_GetErrorCovPost = _KalmanFilter_GetErrorCovPostPtr - .asFunction)>(); + late final _KalmanFilter_SetMeasurementMatrixPtr = + _lookup>( + 'KalmanFilter_SetMeasurementMatrix'); + late final _KalmanFilter_SetMeasurementMatrix = + _KalmanFilter_SetMeasurementMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus KalmanFilter_GetErrorCovPre( + CvStatus KalmanFilter_SetMeasurementNoiseCov( KalmanFilter self, - ffi.Pointer rval, + Mat measurementNoiseCov, ) { - return _KalmanFilter_GetErrorCovPre( + return _KalmanFilter_SetMeasurementNoiseCov( self, - rval, + measurementNoiseCov, ); } - late final _KalmanFilter_GetErrorCovPrePtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetErrorCovPre'); - late final _KalmanFilter_GetErrorCovPre = _KalmanFilter_GetErrorCovPrePtr - .asFunction)>(); + late final _KalmanFilter_SetMeasurementNoiseCovPtr = + _lookup>( + 'KalmanFilter_SetMeasurementNoiseCov'); + late final _KalmanFilter_SetMeasurementNoiseCov = + _KalmanFilter_SetMeasurementNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus KalmanFilter_GetGain( + CvStatus KalmanFilter_SetProcessNoiseCov( KalmanFilter self, - ffi.Pointer rval, + Mat processNoiseCov, ) { - return _KalmanFilter_GetGain( + return _KalmanFilter_SetProcessNoiseCov( self, - rval, + processNoiseCov, ); } - late final _KalmanFilter_GetGainPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetGain'); - late final _KalmanFilter_GetGain = _KalmanFilter_GetGainPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _KalmanFilter_SetProcessNoiseCovPtr = + _lookup>( + 'KalmanFilter_SetProcessNoiseCov'); + late final _KalmanFilter_SetProcessNoiseCov = + _KalmanFilter_SetProcessNoiseCovPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); - CvStatus KalmanFilter_GetMeasurementMatrix( + CvStatus KalmanFilter_SetStatePost( KalmanFilter self, - ffi.Pointer rval, + Mat statePost, ) { - return _KalmanFilter_GetMeasurementMatrix( + return _KalmanFilter_SetStatePost( self, - rval, + statePost, ); } - late final _KalmanFilter_GetMeasurementMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetMeasurementMatrix'); - late final _KalmanFilter_GetMeasurementMatrix = - _KalmanFilter_GetMeasurementMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _KalmanFilter_SetStatePostPtr = + _lookup>( + 'KalmanFilter_SetStatePost'); + late final _KalmanFilter_SetStatePost = _KalmanFilter_SetStatePostPtr + .asFunction(); - CvStatus KalmanFilter_GetMeasurementNoiseCov( + CvStatus KalmanFilter_SetStatePre( KalmanFilter self, - ffi.Pointer rval, + Mat statePre, ) { - return _KalmanFilter_GetMeasurementNoiseCov( + return _KalmanFilter_SetStatePre( self, - rval, + statePre, ); } - late final _KalmanFilter_GetMeasurementNoiseCovPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetMeasurementNoiseCov'); - late final _KalmanFilter_GetMeasurementNoiseCov = - _KalmanFilter_GetMeasurementNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _KalmanFilter_SetStatePrePtr = + _lookup>( + 'KalmanFilter_SetStatePre'); + late final _KalmanFilter_SetStatePre = _KalmanFilter_SetStatePrePtr + .asFunction(); - CvStatus KalmanFilter_GetProcessNoiseCov( + CvStatus KalmanFilter_SetTransitionMatrix( KalmanFilter self, - ffi.Pointer rval, + Mat transitionMatrix, ) { - return _KalmanFilter_GetProcessNoiseCov( + return _KalmanFilter_SetTransitionMatrix( self, - rval, + transitionMatrix, ); } - late final _KalmanFilter_GetProcessNoiseCovPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetProcessNoiseCov'); - late final _KalmanFilter_GetProcessNoiseCov = - _KalmanFilter_GetProcessNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _KalmanFilter_SetTransitionMatrixPtr = + _lookup>( + 'KalmanFilter_SetTransitionMatrix'); + late final _KalmanFilter_SetTransitionMatrix = + _KalmanFilter_SetTransitionMatrixPtr.asFunction< + CvStatus Function(KalmanFilter, Mat)>(); + + CvStatus LUT( + Mat src, + Mat lut, + Mat dst, + ) { + return _LUT( + src, + lut, + dst, + ); + } + + late final _LUTPtr = + _lookup>('LUT'); + late final _LUT = _LUTPtr.asFunction(); - CvStatus KalmanFilter_GetStatePost( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Laplacian( + Mat src, + Mat dst, + int dDepth, + int kSize, + double scale, + double delta, + int borderType, ) { - return _KalmanFilter_GetStatePost( - self, - rval, + return _Laplacian( + src, + dst, + dDepth, + kSize, + scale, + delta, + borderType, ); } - late final _KalmanFilter_GetStatePostPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetStatePost'); - late final _KalmanFilter_GetStatePost = _KalmanFilter_GetStatePostPtr - .asFunction)>(); + late final _LaplacianPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Double, ffi.Double, + ffi.Int)>>('Laplacian'); + late final _Laplacian = _LaplacianPtr.asFunction< + CvStatus Function(Mat, Mat, int, int, double, double, int)>(); - CvStatus KalmanFilter_GetStatePre( - KalmanFilter self, - ffi.Pointer rval, + void Layer_Close( + ffi.Pointer layer, ) { - return _KalmanFilter_GetStatePre( - self, - rval, + return _Layer_Close( + layer, ); } - late final _KalmanFilter_GetStatePrePtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetStatePre'); - late final _KalmanFilter_GetStatePre = _KalmanFilter_GetStatePrePtr - .asFunction)>(); + late final _Layer_ClosePtr = + _lookup)>>( + 'Layer_Close'); + late final _Layer_Close = + _Layer_ClosePtr.asFunction)>(); - CvStatus KalmanFilter_GetTemp1( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Layer_GetName( + Layer layer, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp1( - self, + return _Layer_GetName( + layer, rval, ); } - late final _KalmanFilter_GetTemp1Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp1'); - late final _KalmanFilter_GetTemp1 = _KalmanFilter_GetTemp1Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _Layer_GetNamePtr = _lookup< + ffi.NativeFunction)>>( + 'Layer_GetName'); + late final _Layer_GetName = _Layer_GetNamePtr.asFunction< + CvStatus Function(Layer, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp2( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Layer_GetType( + Layer layer, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp2( - self, + return _Layer_GetType( + layer, rval, ); } - late final _KalmanFilter_GetTemp2Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp2'); - late final _KalmanFilter_GetTemp2 = _KalmanFilter_GetTemp2Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _Layer_GetTypePtr = _lookup< + ffi.NativeFunction)>>( + 'Layer_GetType'); + late final _Layer_GetType = _Layer_GetTypePtr.asFunction< + CvStatus Function(Layer, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp3( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Layer_InputNameToIndex( + Layer layer, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp3( - self, + return _Layer_InputNameToIndex( + layer, + name, rval, ); } - late final _KalmanFilter_GetTemp3Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp3'); - late final _KalmanFilter_GetTemp3 = _KalmanFilter_GetTemp3Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _Layer_InputNameToIndexPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Layer, ffi.Pointer, + ffi.Pointer)>>('Layer_InputNameToIndex'); + late final _Layer_InputNameToIndex = _Layer_InputNameToIndexPtr.asFunction< + CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp4( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Layer_OutputNameToIndex( + Layer layer, + ffi.Pointer name, + ffi.Pointer rval, ) { - return _KalmanFilter_GetTemp4( - self, + return _Layer_OutputNameToIndex( + layer, + name, rval, ); } - late final _KalmanFilter_GetTemp4Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp4'); - late final _KalmanFilter_GetTemp4 = _KalmanFilter_GetTemp4Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _Layer_OutputNameToIndexPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Layer, ffi.Pointer, + ffi.Pointer)>>('Layer_OutputNameToIndex'); + late final _Layer_OutputNameToIndex = _Layer_OutputNameToIndexPtr.asFunction< + CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); - CvStatus KalmanFilter_GetTemp5( - KalmanFilter self, - ffi.Pointer rval, + CvStatus Line( + Mat img, + Point pt1, + Point pt2, + Scalar color, + int thickness, + int lineType, + int shift, ) { - return _KalmanFilter_GetTemp5( - self, - rval, + return _Line( + img, + pt1, + pt2, + color, + thickness, + lineType, + shift, ); } - late final _KalmanFilter_GetTemp5Ptr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTemp5'); - late final _KalmanFilter_GetTemp5 = _KalmanFilter_GetTemp5Ptr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _LinePtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Point, Point, Scalar, ffi.Int, ffi.Int, ffi.Int)>>('Line'); + late final _Line = _LinePtr.asFunction< + CvStatus Function(Mat, Point, Point, Scalar, int, int, int)>(); - CvStatus KalmanFilter_GetTransitionMatrix( - KalmanFilter self, - ffi.Pointer rval, + CvStatus LinearPolar( + Mat src, + Mat dst, + Point2f center, + double maxRadius, + int flags, ) { - return _KalmanFilter_GetTransitionMatrix( - self, - rval, + return _LinearPolar( + src, + dst, + center, + maxRadius, + flags, ); } - late final _KalmanFilter_GetTransitionMatrixPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_GetTransitionMatrix'); - late final _KalmanFilter_GetTransitionMatrix = - _KalmanFilter_GetTransitionMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _LinearPolarPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LinearPolar'); + late final _LinearPolar = _LinearPolarPtr.asFunction< + CvStatus Function(Mat, Mat, Point2f, double, int)>(); - CvStatus KalmanFilter_Init( - KalmanFilter self, - int dynamParams, - int measureParams, + CvStatus LogPolar( + Mat src, + Mat dst, + Point2f center, + double m, + int flags, ) { - return _KalmanFilter_Init( - self, - dynamParams, - measureParams, + return _LogPolar( + src, + dst, + center, + m, + flags, ); } - late final _KalmanFilter_InitPtr = _lookup< - ffi - .NativeFunction>( - 'KalmanFilter_Init'); - late final _KalmanFilter_Init = _KalmanFilter_InitPtr.asFunction< - CvStatus Function(KalmanFilter, int, int)>(); + late final _LogPolarPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LogPolar'); + late final _LogPolar = _LogPolarPtr.asFunction< + CvStatus Function(Mat, Mat, Point2f, double, int)>(); - CvStatus KalmanFilter_InitWithParams( - KalmanFilter self, - int dynamParams, - int measureParams, - int controlParams, - int type, - ) { - return _KalmanFilter_InitWithParams( - self, - dynamParams, - measureParams, - controlParams, - type, + CvStatus LogisticRegression_Clear( + LogisticRegression self, + ) { + return _LogisticRegression_Clear( + self, ); } - late final _KalmanFilter_InitWithParamsPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(KalmanFilter, ffi.Int, ffi.Int, ffi.Int, - ffi.Int)>>('KalmanFilter_InitWithParams'); - late final _KalmanFilter_InitWithParams = _KalmanFilter_InitWithParamsPtr - .asFunction(); + late final _LogisticRegression_ClearPtr = + _lookup>( + 'LogisticRegression_Clear'); + late final _LogisticRegression_Clear = _LogisticRegression_ClearPtr + .asFunction(); - CvStatus KalmanFilter_New( - int dynamParams, - int measureParams, - int controlParams, - int type, - ffi.Pointer rval, + void LogisticRegression_Close( + ffi.Pointer self, ) { - return _KalmanFilter_New( - dynamParams, - measureParams, - controlParams, - type, - rval, + return _LogisticRegression_Close( + self, ); } - late final _KalmanFilter_NewPtr = _lookup< + late final _LogisticRegression_ClosePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Int, ffi.Int, - ffi.Pointer)>>('KalmanFilter_New'); - late final _KalmanFilter_New = _KalmanFilter_NewPtr.asFunction< - CvStatus Function(int, int, int, int, ffi.Pointer)>(); + ffi.Void Function( + ffi.Pointer)>>('LogisticRegression_Close'); + late final _LogisticRegression_Close = _LogisticRegression_ClosePtr + .asFunction)>(); - CvStatus KalmanFilter_Predict( - KalmanFilter self, - ffi.Pointer rval, + CvStatus LogisticRegression_Create( + ffi.Pointer rval, ) { - return _KalmanFilter_Predict( - self, + return _LogisticRegression_Create( rval, ); } - late final _KalmanFilter_PredictPtr = _lookup< - ffi - .NativeFunction)>>( - 'KalmanFilter_Predict'); - late final _KalmanFilter_Predict = _KalmanFilter_PredictPtr.asFunction< - CvStatus Function(KalmanFilter, ffi.Pointer)>(); + late final _LogisticRegression_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'LogisticRegression_Create'); + late final _LogisticRegression_Create = _LogisticRegression_CreatePtr + .asFunction)>(); - CvStatus KalmanFilter_PredictWithParams( - KalmanFilter self, - Mat control, - ffi.Pointer rval, + CvStatus LogisticRegression_Get( + PtrLogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_PredictWithParams( + return _LogisticRegression_Get( self, - control, rval, ); } - late final _KalmanFilter_PredictWithParamsPtr = _lookup< + late final _LogisticRegression_GetPtr = _lookup< ffi.NativeFunction< - CvStatus Function(KalmanFilter, Mat, - ffi.Pointer)>>('KalmanFilter_PredictWithParams'); - late final _KalmanFilter_PredictWithParams = - _KalmanFilter_PredictWithParamsPtr.asFunction< - CvStatus Function(KalmanFilter, Mat, ffi.Pointer)>(); + CvStatus Function(PtrLogisticRegression, + ffi.Pointer)>>('LogisticRegression_Get'); + late final _LogisticRegression_Get = _LogisticRegression_GetPtr.asFunction< + CvStatus Function( + PtrLogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetControlMatrix( - KalmanFilter self, - Mat controlMatrix, + CvStatus LogisticRegression_GetIterations( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetControlMatrix( + return _LogisticRegression_GetIterations( self, - controlMatrix, + rval, ); } - late final _KalmanFilter_SetControlMatrixPtr = - _lookup>( - 'KalmanFilter_SetControlMatrix'); - late final _KalmanFilter_SetControlMatrix = _KalmanFilter_SetControlMatrixPtr - .asFunction(); + late final _LogisticRegression_GetIterationsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetIterations'); + late final _LogisticRegression_GetIterations = + _LogisticRegression_GetIterationsPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetErrorCovPost( - KalmanFilter self, - Mat errorCovPost, + CvStatus LogisticRegression_GetLearningRate( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetErrorCovPost( + return _LogisticRegression_GetLearningRate( self, - errorCovPost, + rval, ); } - late final _KalmanFilter_SetErrorCovPostPtr = - _lookup>( - 'KalmanFilter_SetErrorCovPost'); - late final _KalmanFilter_SetErrorCovPost = _KalmanFilter_SetErrorCovPostPtr - .asFunction(); + late final _LogisticRegression_GetLearningRatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetLearningRate'); + late final _LogisticRegression_GetLearningRate = + _LogisticRegression_GetLearningRatePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetErrorCovPre( - KalmanFilter self, - Mat errorCovPre, + CvStatus LogisticRegression_GetLearntThetas( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetErrorCovPre( + return _LogisticRegression_GetLearntThetas( self, - errorCovPre, + rval, ); } - late final _KalmanFilter_SetErrorCovPrePtr = - _lookup>( - 'KalmanFilter_SetErrorCovPre'); - late final _KalmanFilter_SetErrorCovPre = _KalmanFilter_SetErrorCovPrePtr - .asFunction(); + late final _LogisticRegression_GetLearntThetasPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetLearntThetas'); + late final _LogisticRegression_GetLearntThetas = + _LogisticRegression_GetLearntThetasPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetGain( - KalmanFilter self, - Mat gain, + CvStatus LogisticRegression_GetMiniBatchSize( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetGain( + return _LogisticRegression_GetMiniBatchSize( self, - gain, + rval, ); } - late final _KalmanFilter_SetGainPtr = - _lookup>( - 'KalmanFilter_SetGain'); - late final _KalmanFilter_SetGain = _KalmanFilter_SetGainPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _LogisticRegression_GetMiniBatchSizePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetMiniBatchSize'); + late final _LogisticRegression_GetMiniBatchSize = + _LogisticRegression_GetMiniBatchSizePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetMeasurementMatrix( - KalmanFilter self, - Mat measurementMatrix, + CvStatus LogisticRegression_GetRegularization( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetMeasurementMatrix( + return _LogisticRegression_GetRegularization( self, - measurementMatrix, + rval, ); } - late final _KalmanFilter_SetMeasurementMatrixPtr = - _lookup>( - 'KalmanFilter_SetMeasurementMatrix'); - late final _KalmanFilter_SetMeasurementMatrix = - _KalmanFilter_SetMeasurementMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _LogisticRegression_GetRegularizationPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetRegularization'); + late final _LogisticRegression_GetRegularization = + _LogisticRegression_GetRegularizationPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetMeasurementNoiseCov( - KalmanFilter self, - Mat measurementNoiseCov, + CvStatus LogisticRegression_GetTermCriteria( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetMeasurementNoiseCov( + return _LogisticRegression_GetTermCriteria( self, - measurementNoiseCov, + rval, ); } - late final _KalmanFilter_SetMeasurementNoiseCovPtr = - _lookup>( - 'KalmanFilter_SetMeasurementNoiseCov'); - late final _KalmanFilter_SetMeasurementNoiseCov = - _KalmanFilter_SetMeasurementNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); - - CvStatus KalmanFilter_SetProcessNoiseCov( - KalmanFilter self, - Mat processNoiseCov, + late final _LogisticRegression_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + LogisticRegression, ffi.Pointer)>>( + 'LogisticRegression_GetTermCriteria'); + late final _LogisticRegression_GetTermCriteria = + _LogisticRegression_GetTermCriteriaPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); + + CvStatus LogisticRegression_GetTrainMethod( + LogisticRegression self, + ffi.Pointer rval, ) { - return _KalmanFilter_SetProcessNoiseCov( + return _LogisticRegression_GetTrainMethod( self, - processNoiseCov, + rval, ); } - late final _KalmanFilter_SetProcessNoiseCovPtr = - _lookup>( - 'KalmanFilter_SetProcessNoiseCov'); - late final _KalmanFilter_SetProcessNoiseCov = - _KalmanFilter_SetProcessNoiseCovPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); + late final _LogisticRegression_GetTrainMethodPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_GetTrainMethod'); + late final _LogisticRegression_GetTrainMethod = + _LogisticRegression_GetTrainMethodPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetStatePost( - KalmanFilter self, - Mat statePost, + CvStatus LogisticRegression_Load( + LogisticRegression self, + ffi.Pointer filepath, ) { - return _KalmanFilter_SetStatePost( + return _LogisticRegression_Load( self, - statePost, + filepath, ); } - late final _KalmanFilter_SetStatePostPtr = - _lookup>( - 'KalmanFilter_SetStatePost'); - late final _KalmanFilter_SetStatePost = _KalmanFilter_SetStatePostPtr - .asFunction(); + late final _LogisticRegression_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_Load'); + late final _LogisticRegression_Load = _LogisticRegression_LoadPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - CvStatus KalmanFilter_SetStatePre( - KalmanFilter self, - Mat statePre, + CvStatus LogisticRegression_LoadFromString( + LogisticRegression self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _KalmanFilter_SetStatePre( + return _LogisticRegression_LoadFromString( self, - statePre, + strModel, + objname, ); } - late final _KalmanFilter_SetStatePrePtr = - _lookup>( - 'KalmanFilter_SetStatePre'); - late final _KalmanFilter_SetStatePre = _KalmanFilter_SetStatePrePtr - .asFunction(); + late final _LogisticRegression_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, ffi.Pointer, + ffi.Pointer)>>('LogisticRegression_LoadFromString'); + late final _LogisticRegression_LoadFromString = + _LogisticRegression_LoadFromStringPtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer, + ffi.Pointer)>(); - CvStatus KalmanFilter_SetTransitionMatrix( - KalmanFilter self, - Mat transitionMatrix, + CvStatus LogisticRegression_Predict( + LogisticRegression self, + Mat samples, + Mat results, + int flags, + ffi.Pointer rval, ) { - return _KalmanFilter_SetTransitionMatrix( + return _LogisticRegression_Predict( self, - transitionMatrix, - ); - } - - late final _KalmanFilter_SetTransitionMatrixPtr = - _lookup>( - 'KalmanFilter_SetTransitionMatrix'); - late final _KalmanFilter_SetTransitionMatrix = - _KalmanFilter_SetTransitionMatrixPtr.asFunction< - CvStatus Function(KalmanFilter, Mat)>(); - - CvStatus LUT( - Mat src, - Mat lut, - Mat dst, - ) { - return _LUT( - src, - lut, - dst, + samples, + results, + flags, + rval, ); } - late final _LUTPtr = - _lookup>('LUT'); - late final _LUT = _LUTPtr.asFunction(); + late final _LogisticRegression_PredictPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(LogisticRegression, Mat, Mat, ffi.Int, + ffi.Pointer)>>('LogisticRegression_Predict'); + late final _LogisticRegression_Predict = + _LogisticRegression_PredictPtr.asFunction< + CvStatus Function( + LogisticRegression, Mat, Mat, int, ffi.Pointer)>(); - CvStatus Laplacian( - Mat src, - Mat dst, - int dDepth, - int kSize, - double scale, - double delta, - int borderType, + CvStatus LogisticRegression_Save( + LogisticRegression self, + ffi.Pointer filename, ) { - return _Laplacian( - src, - dst, - dDepth, - kSize, - scale, - delta, - borderType, + return _LogisticRegression_Save( + self, + filename, ); } - late final _LaplacianPtr = _lookup< + late final _LogisticRegression_SavePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, Mat, ffi.Int, ffi.Int, ffi.Double, ffi.Double, - ffi.Int)>>('Laplacian'); - late final _Laplacian = _LaplacianPtr.asFunction< - CvStatus Function(Mat, Mat, int, int, double, double, int)>(); + CvStatus Function(LogisticRegression, + ffi.Pointer)>>('LogisticRegression_Save'); + late final _LogisticRegression_Save = _LogisticRegression_SavePtr.asFunction< + CvStatus Function(LogisticRegression, ffi.Pointer)>(); - void Layer_Close( - ffi.Pointer layer, + CvStatus LogisticRegression_SetIterations( + LogisticRegression self, + int val, ) { - return _Layer_Close( - layer, + return _LogisticRegression_SetIterations( + self, + val, ); } - late final _Layer_ClosePtr = - _lookup)>>( - 'Layer_Close'); - late final _Layer_Close = - _Layer_ClosePtr.asFunction)>(); + late final _LogisticRegression_SetIterationsPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetIterations'); + late final _LogisticRegression_SetIterations = + _LogisticRegression_SetIterationsPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus Layer_GetName( - Layer layer, - ffi.Pointer rval, - ) { - return _Layer_GetName( - layer, - rval, + CvStatus LogisticRegression_SetLearningRate( + LogisticRegression self, + double val, + ) { + return _LogisticRegression_SetLearningRate( + self, + val, ); } - late final _Layer_GetNamePtr = _lookup< - ffi.NativeFunction)>>( - 'Layer_GetName'); - late final _Layer_GetName = _Layer_GetNamePtr.asFunction< - CvStatus Function(Layer, ffi.Pointer)>(); - - CvStatus Layer_GetType( - Layer layer, - ffi.Pointer rval, + late final _LogisticRegression_SetLearningRatePtr = _lookup< + ffi + .NativeFunction>( + 'LogisticRegression_SetLearningRate'); + late final _LogisticRegression_SetLearningRate = + _LogisticRegression_SetLearningRatePtr.asFunction< + CvStatus Function(LogisticRegression, double)>(); + + CvStatus LogisticRegression_SetMiniBatchSize( + LogisticRegression self, + int val, ) { - return _Layer_GetType( - layer, - rval, + return _LogisticRegression_SetMiniBatchSize( + self, + val, ); } - late final _Layer_GetTypePtr = _lookup< - ffi.NativeFunction)>>( - 'Layer_GetType'); - late final _Layer_GetType = _Layer_GetTypePtr.asFunction< - CvStatus Function(Layer, ffi.Pointer)>(); + late final _LogisticRegression_SetMiniBatchSizePtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetMiniBatchSize'); + late final _LogisticRegression_SetMiniBatchSize = + _LogisticRegression_SetMiniBatchSizePtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus Layer_InputNameToIndex( - Layer layer, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus LogisticRegression_SetRegularization( + LogisticRegression self, + int val, ) { - return _Layer_InputNameToIndex( - layer, - name, - rval, + return _LogisticRegression_SetRegularization( + self, + val, ); } - late final _Layer_InputNameToIndexPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Layer, ffi.Pointer, - ffi.Pointer)>>('Layer_InputNameToIndex'); - late final _Layer_InputNameToIndex = _Layer_InputNameToIndexPtr.asFunction< - CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); + late final _LogisticRegression_SetRegularizationPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetRegularization'); + late final _LogisticRegression_SetRegularization = + _LogisticRegression_SetRegularizationPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus Layer_OutputNameToIndex( - Layer layer, - ffi.Pointer name, - ffi.Pointer rval, + CvStatus LogisticRegression_SetTermCriteria( + LogisticRegression self, + TermCriteria val, ) { - return _Layer_OutputNameToIndex( - layer, - name, - rval, + return _LogisticRegression_SetTermCriteria( + self, + val, ); } - late final _Layer_OutputNameToIndexPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(Layer, ffi.Pointer, - ffi.Pointer)>>('Layer_OutputNameToIndex'); - late final _Layer_OutputNameToIndex = _Layer_OutputNameToIndexPtr.asFunction< - CvStatus Function(Layer, ffi.Pointer, ffi.Pointer)>(); - - CvStatus Line( - Mat img, - Point pt1, - Point pt2, - Scalar color, - int thickness, - int lineType, - int shift, + late final _LogisticRegression_SetTermCriteriaPtr = _lookup< + ffi + .NativeFunction>( + 'LogisticRegression_SetTermCriteria'); + late final _LogisticRegression_SetTermCriteria = + _LogisticRegression_SetTermCriteriaPtr.asFunction< + CvStatus Function(LogisticRegression, TermCriteria)>(); + + CvStatus LogisticRegression_SetTrainMethod( + LogisticRegression self, + int val, ) { - return _Line( - img, - pt1, - pt2, - color, - thickness, - lineType, - shift, + return _LogisticRegression_SetTrainMethod( + self, + val, ); } - late final _LinePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - Mat, Point, Point, Scalar, ffi.Int, ffi.Int, ffi.Int)>>('Line'); - late final _Line = _LinePtr.asFunction< - CvStatus Function(Mat, Point, Point, Scalar, int, int, int)>(); + late final _LogisticRegression_SetTrainMethodPtr = _lookup< + ffi.NativeFunction>( + 'LogisticRegression_SetTrainMethod'); + late final _LogisticRegression_SetTrainMethod = + _LogisticRegression_SetTrainMethodPtr.asFunction< + CvStatus Function(LogisticRegression, int)>(); - CvStatus LinearPolar( - Mat src, - Mat dst, - Point2f center, - double maxRadius, + CvStatus LogisticRegression_Train( + LogisticRegression self, + PtrTrainData trainData, int flags, + ffi.Pointer rval, ) { - return _LinearPolar( - src, - dst, - center, - maxRadius, + return _LogisticRegression_Train( + self, + trainData, flags, + rval, ); } - late final _LinearPolarPtr = _lookup< + late final _LogisticRegression_TrainPtr = _lookup< ffi.NativeFunction< + CvStatus Function(LogisticRegression, PtrTrainData, ffi.Int, + ffi.Pointer)>>('LogisticRegression_Train'); + late final _LogisticRegression_Train = + _LogisticRegression_TrainPtr.asFunction< CvStatus Function( - Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LinearPolar'); - late final _LinearPolar = _LinearPolarPtr.asFunction< - CvStatus Function(Mat, Mat, Point2f, double, int)>(); + LogisticRegression, PtrTrainData, int, ffi.Pointer)>(); - CvStatus LogPolar( - Mat src, - Mat dst, - Point2f center, - double m, - int flags, + CvStatus LogisticRegression_Train_1( + LogisticRegression self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _LogPolar( - src, - dst, - center, - m, - flags, + return _LogisticRegression_Train_1( + self, + samples, + layout, + responses, + rval, ); } - late final _LogPolarPtr = _lookup< + late final _LogisticRegression_Train_1Ptr = _lookup< ffi.NativeFunction< + CvStatus Function(LogisticRegression, Mat, ffi.Int, Mat, + ffi.Pointer)>>('LogisticRegression_Train_1'); + late final _LogisticRegression_Train_1 = + _LogisticRegression_Train_1Ptr.asFunction< CvStatus Function( - Mat, Mat, Point2f, ffi.Double, ffi.Int)>>('LogPolar'); - late final _LogPolar = _LogPolarPtr.asFunction< - CvStatus Function(Mat, Mat, Point2f, double, int)>(); + LogisticRegression, Mat, int, Mat, ffi.Pointer)>(); void MSER_Close( ffi.Pointer a, @@ -11601,95 +14069,291 @@ class CvNative { late final _Net_SetInput = _Net_SetInputPtr.asFunction< CvStatus Function(Net, Mat, ffi.Pointer)>(); - CvStatus Net_SetPreferableBackend( - Net net, - int backend, + CvStatus Net_SetPreferableBackend( + Net net, + int backend, + ) { + return _Net_SetPreferableBackend( + net, + backend, + ); + } + + late final _Net_SetPreferableBackendPtr = + _lookup>( + 'Net_SetPreferableBackend'); + late final _Net_SetPreferableBackend = + _Net_SetPreferableBackendPtr.asFunction(); + + CvStatus Net_SetPreferableTarget( + Net net, + int target, + ) { + return _Net_SetPreferableTarget( + net, + target, + ); + } + + late final _Net_SetPreferableTargetPtr = + _lookup>( + 'Net_SetPreferableTarget'); + late final _Net_SetPreferableTarget = + _Net_SetPreferableTargetPtr.asFunction(); + + CvStatus Net_forwardAsync( + Net net, + ffi.Pointer outputName, + ffi.Pointer rval, + ) { + return _Net_forwardAsync( + net, + outputName, + rval, + ); + } + + late final _Net_forwardAsyncPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Net, ffi.Pointer, + ffi.Pointer)>>('Net_forwardAsync'); + late final _Net_forwardAsync = _Net_forwardAsyncPtr.asFunction< + CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + + CvStatus Norm( + Mat src1, + int normType, + ffi.Pointer rval, + ) { + return _Norm( + src1, + normType, + rval, + ); + } + + late final _NormPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(Mat, ffi.Int, ffi.Pointer)>>('Norm'); + late final _Norm = _NormPtr.asFunction< + CvStatus Function(Mat, int, ffi.Pointer)>(); + + CvStatus NormWithMats( + Mat src1, + Mat src2, + int normType, + ffi.Pointer rval, + ) { + return _NormWithMats( + src1, + src2, + normType, + rval, + ); + } + + late final _NormWithMatsPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + Mat, Mat, ffi.Int, ffi.Pointer)>>('NormWithMats'); + late final _NormWithMats = _NormWithMatsPtr.asFunction< + CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Clear( + NormalBayesClassifier self, + ) { + return _NormalBayesClassifier_Clear( + self, + ); + } + + late final _NormalBayesClassifier_ClearPtr = + _lookup>( + 'NormalBayesClassifier_Clear'); + late final _NormalBayesClassifier_Clear = _NormalBayesClassifier_ClearPtr + .asFunction(); + + void NormalBayesClassifier_Close( + ffi.Pointer self, + ) { + return _NormalBayesClassifier_Close( + self, + ); + } + + late final _NormalBayesClassifier_ClosePtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>>( + 'NormalBayesClassifier_Close'); + late final _NormalBayesClassifier_Close = _NormalBayesClassifier_ClosePtr + .asFunction)>(); + + CvStatus NormalBayesClassifier_Create( + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Create( + rval, + ); + } + + late final _NormalBayesClassifier_CreatePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(ffi.Pointer)>>( + 'NormalBayesClassifier_Create'); + late final _NormalBayesClassifier_Create = _NormalBayesClassifier_CreatePtr + .asFunction)>(); + + CvStatus NormalBayesClassifier_Get( + PtrNormalBayesClassifier self, + ffi.Pointer rval, + ) { + return _NormalBayesClassifier_Get( + self, + rval, + ); + } + + late final _NormalBayesClassifier_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrNormalBayesClassifier, + ffi.Pointer)>>( + 'NormalBayesClassifier_Get'); + late final _NormalBayesClassifier_Get = + _NormalBayesClassifier_GetPtr.asFunction< + CvStatus Function( + PtrNormalBayesClassifier, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_Load( + NormalBayesClassifier self, + ffi.Pointer filepath, + ) { + return _NormalBayesClassifier_Load( + self, + filepath, + ); + } + + late final _NormalBayesClassifier_LoadPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, + ffi.Pointer)>>('NormalBayesClassifier_Load'); + late final _NormalBayesClassifier_Load = + _NormalBayesClassifier_LoadPtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer)>(); + + CvStatus NormalBayesClassifier_LoadFromString( + NormalBayesClassifier self, + ffi.Pointer strModel, + ffi.Pointer objname, ) { - return _Net_SetPreferableBackend( - net, - backend, + return _NormalBayesClassifier_LoadFromString( + self, + strModel, + objname, ); } - late final _Net_SetPreferableBackendPtr = - _lookup>( - 'Net_SetPreferableBackend'); - late final _Net_SetPreferableBackend = - _Net_SetPreferableBackendPtr.asFunction(); + late final _NormalBayesClassifier_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer, + ffi.Pointer)>>('NormalBayesClassifier_LoadFromString'); + late final _NormalBayesClassifier_LoadFromString = + _NormalBayesClassifier_LoadFromStringPtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer, + ffi.Pointer)>(); - CvStatus Net_SetPreferableTarget( - Net net, - int target, + CvStatus NormalBayesClassifier_PredictProb( + NormalBayesClassifier self, + Mat inputs, + Mat outputs, + Mat outputProbs, + int flags, + ffi.Pointer rval, ) { - return _Net_SetPreferableTarget( - net, - target, + return _NormalBayesClassifier_PredictProb( + self, + inputs, + outputs, + outputProbs, + flags, + rval, ); } - late final _Net_SetPreferableTargetPtr = - _lookup>( - 'Net_SetPreferableTarget'); - late final _Net_SetPreferableTarget = - _Net_SetPreferableTargetPtr.asFunction(); + late final _NormalBayesClassifier_PredictProbPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, Mat, Mat, Mat, ffi.Int, + ffi.Pointer)>>('NormalBayesClassifier_PredictProb'); + late final _NormalBayesClassifier_PredictProb = + _NormalBayesClassifier_PredictProbPtr.asFunction< + CvStatus Function(NormalBayesClassifier, Mat, Mat, Mat, int, + ffi.Pointer)>(); - CvStatus Net_forwardAsync( - Net net, - ffi.Pointer outputName, - ffi.Pointer rval, + CvStatus NormalBayesClassifier_Save( + NormalBayesClassifier self, + ffi.Pointer filename, ) { - return _Net_forwardAsync( - net, - outputName, - rval, + return _NormalBayesClassifier_Save( + self, + filename, ); } - late final _Net_forwardAsyncPtr = _lookup< + late final _NormalBayesClassifier_SavePtr = _lookup< ffi.NativeFunction< - CvStatus Function(Net, ffi.Pointer, - ffi.Pointer)>>('Net_forwardAsync'); - late final _Net_forwardAsync = _Net_forwardAsyncPtr.asFunction< - CvStatus Function(Net, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(NormalBayesClassifier, + ffi.Pointer)>>('NormalBayesClassifier_Save'); + late final _NormalBayesClassifier_Save = + _NormalBayesClassifier_SavePtr.asFunction< + CvStatus Function(NormalBayesClassifier, ffi.Pointer)>(); - CvStatus Norm( - Mat src1, - int normType, - ffi.Pointer rval, + CvStatus NormalBayesClassifier_Train( + NormalBayesClassifier self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _Norm( - src1, - normType, + return _NormalBayesClassifier_Train( + self, + trainData, + flags, rval, ); } - late final _NormPtr = _lookup< + late final _NormalBayesClassifier_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Mat, ffi.Int, ffi.Pointer)>>('Norm'); - late final _Norm = _NormPtr.asFunction< - CvStatus Function(Mat, int, ffi.Pointer)>(); + CvStatus Function(NormalBayesClassifier, PtrTrainData, ffi.Int, + ffi.Pointer)>>('NormalBayesClassifier_Train'); + late final _NormalBayesClassifier_Train = + _NormalBayesClassifier_TrainPtr.asFunction< + CvStatus Function(NormalBayesClassifier, PtrTrainData, int, + ffi.Pointer)>(); - CvStatus NormWithMats( - Mat src1, - Mat src2, - int normType, - ffi.Pointer rval, + CvStatus NormalBayesClassifier_Train_1( + NormalBayesClassifier self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _NormWithMats( - src1, - src2, - normType, + return _NormalBayesClassifier_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _NormWithMatsPtr = _lookup< + late final _NormalBayesClassifier_Train_1Ptr = _lookup< ffi.NativeFunction< + CvStatus Function(NormalBayesClassifier, Mat, ffi.Int, Mat, + ffi.Pointer)>>('NormalBayesClassifier_Train_1'); + late final _NormalBayesClassifier_Train_1 = + _NormalBayesClassifier_Train_1Ptr.asFunction< CvStatus Function( - Mat, Mat, ffi.Int, ffi.Pointer)>>('NormWithMats'); - late final _NormWithMats = _NormWithMatsPtr.asFunction< - CvStatus Function(Mat, Mat, int, ffi.Pointer)>(); + NormalBayesClassifier, Mat, int, Mat, ffi.Pointer)>(); void ORB_Close( ffi.Pointer o, @@ -12392,26 +15056,331 @@ class CvNative { late final _RNG_Uniform = _RNG_UniformPtr.asFunction< CvStatus Function(RNG, int, int, ffi.Pointer)>(); - CvStatus RNG_UniformDouble( - RNG rng, - double a, - double b, - ffi.Pointer rval, + CvStatus RNG_UniformDouble( + RNG rng, + double a, + double b, + ffi.Pointer rval, + ) { + return _RNG_UniformDouble( + rng, + a, + b, + rval, + ); + } + + late final _RNG_UniformDoublePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RNG, ffi.Double, ffi.Double, + ffi.Pointer)>>('RNG_UniformDouble'); + late final _RNG_UniformDouble = _RNG_UniformDoublePtr.asFunction< + CvStatus Function(RNG, double, double, ffi.Pointer)>(); + + CvStatus RTrees_Clear( + RTrees self, + ) { + return _RTrees_Clear( + self, + ); + } + + late final _RTrees_ClearPtr = + _lookup>('RTrees_Clear'); + late final _RTrees_Clear = + _RTrees_ClearPtr.asFunction(); + + void RTrees_Close( + ffi.Pointer self, + ) { + return _RTrees_Close( + self, + ); + } + + late final _RTrees_ClosePtr = + _lookup)>>( + 'RTrees_Close'); + late final _RTrees_Close = + _RTrees_ClosePtr.asFunction)>(); + + CvStatus RTrees_Create( + ffi.Pointer rval, + ) { + return _RTrees_Create( + rval, + ); + } + + late final _RTrees_CreatePtr = + _lookup)>>( + 'RTrees_Create'); + late final _RTrees_Create = + _RTrees_CreatePtr.asFunction)>(); + + CvStatus RTrees_Get( + PtrRTrees self, + ffi.Pointer rval, + ) { + return _RTrees_Get( + self, + rval, + ); + } + + late final _RTrees_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrRTrees, ffi.Pointer)>>('RTrees_Get'); + late final _RTrees_Get = _RTrees_GetPtr.asFunction< + CvStatus Function(PtrRTrees, ffi.Pointer)>(); + + CvStatus RTrees_GetActiveVarCount( + RTrees self, + ffi.Pointer rval, + ) { + return _RTrees_GetActiveVarCount( + self, + rval, + ); + } + + late final _RTrees_GetActiveVarCountPtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_GetActiveVarCount'); + late final _RTrees_GetActiveVarCount = _RTrees_GetActiveVarCountPtr + .asFunction)>(); + + CvStatus RTrees_GetCalculateVarImportance( + RTrees self, + ffi.Pointer rval, + ) { + return _RTrees_GetCalculateVarImportance( + self, + rval, + ); + } + + late final _RTrees_GetCalculateVarImportancePtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_GetCalculateVarImportance'); + late final _RTrees_GetCalculateVarImportance = + _RTrees_GetCalculateVarImportancePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_GetOOBError( + RTrees self, + ffi.Pointer rval, + ) { + return _RTrees_GetOOBError( + self, + rval, + ); + } + + late final _RTrees_GetOOBErrorPtr = _lookup< + ffi + .NativeFunction)>>( + 'RTrees_GetOOBError'); + late final _RTrees_GetOOBError = _RTrees_GetOOBErrorPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_GetTermCriteria( + RTrees self, + ffi.Pointer rval, + ) { + return _RTrees_GetTermCriteria( + self, + rval, + ); + } + + late final _RTrees_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + RTrees, ffi.Pointer)>>('RTrees_GetTermCriteria'); + late final _RTrees_GetTermCriteria = _RTrees_GetTermCriteriaPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_GetVarImportance( + RTrees self, + ffi.Pointer rval, + ) { + return _RTrees_GetVarImportance( + self, + rval, + ); + } + + late final _RTrees_GetVarImportancePtr = + _lookup)>>( + 'RTrees_GetVarImportance'); + late final _RTrees_GetVarImportance = _RTrees_GetVarImportancePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_GetVotes( + RTrees self, + Mat samples, + Mat results, + int flags, + ) { + return _RTrees_GetVotes( + self, + samples, + results, + flags, + ); + } + + late final _RTrees_GetVotesPtr = + _lookup>( + 'RTrees_GetVotes'); + late final _RTrees_GetVotes = _RTrees_GetVotesPtr.asFunction< + CvStatus Function(RTrees, Mat, Mat, int)>(); + + CvStatus RTrees_Load( + RTrees self, + ffi.Pointer filepath, + ) { + return _RTrees_Load( + self, + filepath, + ); + } + + late final _RTrees_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_Load'); + late final _RTrees_Load = _RTrees_LoadPtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_LoadFromString( + RTrees self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _RTrees_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _RTrees_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RTrees, ffi.Pointer, + ffi.Pointer)>>('RTrees_LoadFromString'); + late final _RTrees_LoadFromString = _RTrees_LoadFromStringPtr.asFunction< + CvStatus Function( + RTrees, ffi.Pointer, ffi.Pointer)>(); + + CvStatus RTrees_Save( + RTrees self, + ffi.Pointer filename, + ) { + return _RTrees_Save( + self, + filename, + ); + } + + late final _RTrees_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'RTrees_Save'); + late final _RTrees_Save = _RTrees_SavePtr.asFunction< + CvStatus Function(RTrees, ffi.Pointer)>(); + + CvStatus RTrees_SetActiveVarCount( + RTrees self, + int val, + ) { + return _RTrees_SetActiveVarCount( + self, + val, + ); + } + + late final _RTrees_SetActiveVarCountPtr = + _lookup>( + 'RTrees_SetActiveVarCount'); + late final _RTrees_SetActiveVarCount = + _RTrees_SetActiveVarCountPtr.asFunction(); + + CvStatus RTrees_SetCalculateVarImportance( + RTrees self, + bool val, + ) { + return _RTrees_SetCalculateVarImportance( + self, + val, + ); + } + + late final _RTrees_SetCalculateVarImportancePtr = + _lookup>( + 'RTrees_SetCalculateVarImportance'); + late final _RTrees_SetCalculateVarImportance = + _RTrees_SetCalculateVarImportancePtr.asFunction< + CvStatus Function(RTrees, bool)>(); + + CvStatus RTrees_SetTermCriteria( + RTrees self, + TermCriteria val, + ) { + return _RTrees_SetTermCriteria( + self, + val, + ); + } + + late final _RTrees_SetTermCriteriaPtr = + _lookup>( + 'RTrees_SetTermCriteria'); + late final _RTrees_SetTermCriteria = _RTrees_SetTermCriteriaPtr.asFunction< + CvStatus Function(RTrees, TermCriteria)>(); + + CvStatus RTrees_Train( + RTrees self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, + ) { + return _RTrees_Train( + self, + trainData, + flags, + rval, + ); + } + + late final _RTrees_TrainPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(RTrees, PtrTrainData, ffi.Int, + ffi.Pointer)>>('RTrees_Train'); + late final _RTrees_Train = _RTrees_TrainPtr.asFunction< + CvStatus Function(RTrees, PtrTrainData, int, ffi.Pointer)>(); + + CvStatus RTrees_Train_1( + RTrees self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _RNG_UniformDouble( - rng, - a, - b, + return _RTrees_Train_1( + self, + samples, + layout, + responses, rval, ); } - late final _RNG_UniformDoublePtr = _lookup< + late final _RTrees_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(RNG, ffi.Double, ffi.Double, - ffi.Pointer)>>('RNG_UniformDouble'); - late final _RNG_UniformDouble = _RNG_UniformDoublePtr.asFunction< - CvStatus Function(RNG, double, double, ffi.Pointer)>(); + CvStatus Function(RTrees, Mat, ffi.Int, Mat, + ffi.Pointer)>>('RTrees_Train_1'); + late final _RTrees_Train_1 = _RTrees_Train_1Ptr.asFunction< + CvStatus Function(RTrees, Mat, int, Mat, ffi.Pointer)>(); CvStatus RandN( Mat mat, @@ -12690,97 +15659,499 @@ class CvNative { late final _RotatedRect_Points = _RotatedRect_PointsPtr.asFunction< CvStatus Function(RotatedRect, ffi.Pointer)>(); - void SIFT_Close( - ffi.Pointer f, + void SIFT_Close( + ffi.Pointer f, + ) { + return _SIFT_Close( + f, + ); + } + + late final _SIFT_ClosePtr = + _lookup)>>( + 'SIFT_Close'); + late final _SIFT_Close = + _SIFT_ClosePtr.asFunction)>(); + + CvStatus SIFT_Create( + ffi.Pointer rval, + ) { + return _SIFT_Create( + rval, + ); + } + + late final _SIFT_CreatePtr = + _lookup)>>( + 'SIFT_Create'); + late final _SIFT_Create = + _SIFT_CreatePtr.asFunction)>(); + + CvStatus SIFT_Detect( + SIFT f, + Mat src, + ffi.Pointer rval, + ) { + return _SIFT_Detect( + f, + src, + rval, + ); + } + + late final _SIFT_DetectPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SIFT, Mat, ffi.Pointer)>>('SIFT_Detect'); + late final _SIFT_Detect = _SIFT_DetectPtr.asFunction< + CvStatus Function(SIFT, Mat, ffi.Pointer)>(); + + CvStatus SIFT_DetectAndCompute( + SIFT f, + Mat src, + Mat mask, + Mat desc, + ffi.Pointer rval, + ) { + return _SIFT_DetectAndCompute( + f, + src, + mask, + desc, + rval, + ); + } + + late final _SIFT_DetectAndComputePtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SIFT, Mat, Mat, Mat, + ffi.Pointer)>>('SIFT_DetectAndCompute'); + late final _SIFT_DetectAndCompute = _SIFT_DetectAndComputePtr.asFunction< + CvStatus Function(SIFT, Mat, Mat, Mat, ffi.Pointer)>(); + + CvStatus SVD_Compute( + Mat src, + Mat w, + Mat u, + Mat vt, + int flags, + ) { + return _SVD_Compute( + src, + w, + u, + vt, + flags, + ); + } + + late final _SVD_ComputePtr = _lookup< + ffi.NativeFunction>( + 'SVD_Compute'); + late final _SVD_Compute = + _SVD_ComputePtr.asFunction(); + + CvStatus SVMSGD_Clear( + SVMSGD self, + ) { + return _SVMSGD_Clear( + self, + ); + } + + late final _SVMSGD_ClearPtr = + _lookup>('SVMSGD_Clear'); + late final _SVMSGD_Clear = + _SVMSGD_ClearPtr.asFunction(); + + void SVMSGD_Close( + ffi.Pointer self, + ) { + return _SVMSGD_Close( + self, + ); + } + + late final _SVMSGD_ClosePtr = + _lookup)>>( + 'SVMSGD_Close'); + late final _SVMSGD_Close = + _SVMSGD_ClosePtr.asFunction)>(); + + CvStatus SVMSGD_Create( + ffi.Pointer rval, + ) { + return _SVMSGD_Create( + rval, + ); + } + + late final _SVMSGD_CreatePtr = + _lookup)>>( + 'SVMSGD_Create'); + late final _SVMSGD_Create = + _SVMSGD_CreatePtr.asFunction)>(); + + CvStatus SVMSGD_Get( + PtrSVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_Get( + self, + rval, + ); + } + + late final _SVMSGD_GetPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrSVMSGD, ffi.Pointer)>>('SVMSGD_Get'); + late final _SVMSGD_Get = _SVMSGD_GetPtr.asFunction< + CvStatus Function(PtrSVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetInitialStepSize( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetInitialStepSize( + self, + rval, + ); + } + + late final _SVMSGD_GetInitialStepSizePtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetInitialStepSize'); + late final _SVMSGD_GetInitialStepSize = _SVMSGD_GetInitialStepSizePtr + .asFunction)>(); + + CvStatus SVMSGD_GetMarginRegularization( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetMarginRegularization( + self, + rval, + ); + } + + late final _SVMSGD_GetMarginRegularizationPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetMarginRegularization'); + late final _SVMSGD_GetMarginRegularization = + _SVMSGD_GetMarginRegularizationPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetMarginType( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetMarginType( + self, + rval, + ); + } + + late final _SVMSGD_GetMarginTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_GetMarginType'); + late final _SVMSGD_GetMarginType = _SVMSGD_GetMarginTypePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetShift( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetShift( + self, + rval, + ); + } + + late final _SVMSGD_GetShiftPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetShift'); + late final _SVMSGD_GetShift = _SVMSGD_GetShiftPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetStepDecreasingPower( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetStepDecreasingPower( + self, + rval, + ); + } + + late final _SVMSGD_GetStepDecreasingPowerPtr = _lookup< + ffi + .NativeFunction)>>( + 'SVMSGD_GetStepDecreasingPower'); + late final _SVMSGD_GetStepDecreasingPower = _SVMSGD_GetStepDecreasingPowerPtr + .asFunction)>(); + + CvStatus SVMSGD_GetSvmsgdType( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetSvmsgdType( + self, + rval, + ); + } + + late final _SVMSGD_GetSvmsgdTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_GetSvmsgdType'); + late final _SVMSGD_GetSvmsgdType = _SVMSGD_GetSvmsgdTypePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetTermCriteria( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetTermCriteria( + self, + rval, + ); + } + + late final _SVMSGD_GetTermCriteriaPtr = _lookup< + ffi.NativeFunction< + CvStatus Function( + SVMSGD, ffi.Pointer)>>('SVMSGD_GetTermCriteria'); + late final _SVMSGD_GetTermCriteria = _SVMSGD_GetTermCriteriaPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_GetWeights( + SVMSGD self, + ffi.Pointer rval, + ) { + return _SVMSGD_GetWeights( + self, + rval, + ); + } + + late final _SVMSGD_GetWeightsPtr = + _lookup)>>( + 'SVMSGD_GetWeights'); + late final _SVMSGD_GetWeights = _SVMSGD_GetWeightsPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_Load( + SVMSGD self, + ffi.Pointer filepath, + ) { + return _SVMSGD_Load( + self, + filepath, + ); + } + + late final _SVMSGD_LoadPtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_Load'); + late final _SVMSGD_Load = _SVMSGD_LoadPtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_LoadFromString( + SVMSGD self, + ffi.Pointer strModel, + ffi.Pointer objname, + ) { + return _SVMSGD_LoadFromString( + self, + strModel, + objname, + ); + } + + late final _SVMSGD_LoadFromStringPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(SVMSGD, ffi.Pointer, + ffi.Pointer)>>('SVMSGD_LoadFromString'); + late final _SVMSGD_LoadFromString = _SVMSGD_LoadFromStringPtr.asFunction< + CvStatus Function( + SVMSGD, ffi.Pointer, ffi.Pointer)>(); + + CvStatus SVMSGD_Save( + SVMSGD self, + ffi.Pointer filename, + ) { + return _SVMSGD_Save( + self, + filename, + ); + } + + late final _SVMSGD_SavePtr = _lookup< + ffi.NativeFunction)>>( + 'SVMSGD_Save'); + late final _SVMSGD_Save = _SVMSGD_SavePtr.asFunction< + CvStatus Function(SVMSGD, ffi.Pointer)>(); + + CvStatus SVMSGD_SetInitialStepSize( + SVMSGD self, + double InitialStepSize, + ) { + return _SVMSGD_SetInitialStepSize( + self, + InitialStepSize, + ); + } + + late final _SVMSGD_SetInitialStepSizePtr = + _lookup>( + 'SVMSGD_SetInitialStepSize'); + late final _SVMSGD_SetInitialStepSize = _SVMSGD_SetInitialStepSizePtr + .asFunction(); + + CvStatus SVMSGD_SetMarginRegularization( + SVMSGD self, + double marginRegularization, + ) { + return _SVMSGD_SetMarginRegularization( + self, + marginRegularization, + ); + } + + late final _SVMSGD_SetMarginRegularizationPtr = + _lookup>( + 'SVMSGD_SetMarginRegularization'); + late final _SVMSGD_SetMarginRegularization = + _SVMSGD_SetMarginRegularizationPtr.asFunction< + CvStatus Function(SVMSGD, double)>(); + + CvStatus SVMSGD_SetMarginType( + SVMSGD self, + int marginType, + ) { + return _SVMSGD_SetMarginType( + self, + marginType, + ); + } + + late final _SVMSGD_SetMarginTypePtr = + _lookup>( + 'SVMSGD_SetMarginType'); + late final _SVMSGD_SetMarginType = + _SVMSGD_SetMarginTypePtr.asFunction(); + + CvStatus SVMSGD_SetOptimalParameters( + SVMSGD self, + int svmsgdType, + int marginType, + ) { + return _SVMSGD_SetOptimalParameters( + self, + svmsgdType, + marginType, + ); + } + + late final _SVMSGD_SetOptimalParametersPtr = + _lookup>( + 'SVMSGD_SetOptimalParameters'); + late final _SVMSGD_SetOptimalParameters = _SVMSGD_SetOptimalParametersPtr + .asFunction(); + + CvStatus SVMSGD_SetStepDecreasingPower( + SVMSGD self, + double stepDecreasingPower, ) { - return _SIFT_Close( - f, + return _SVMSGD_SetStepDecreasingPower( + self, + stepDecreasingPower, ); } - late final _SIFT_ClosePtr = - _lookup)>>( - 'SIFT_Close'); - late final _SIFT_Close = - _SIFT_ClosePtr.asFunction)>(); + late final _SVMSGD_SetStepDecreasingPowerPtr = + _lookup>( + 'SVMSGD_SetStepDecreasingPower'); + late final _SVMSGD_SetStepDecreasingPower = _SVMSGD_SetStepDecreasingPowerPtr + .asFunction(); - CvStatus SIFT_Create( - ffi.Pointer rval, + CvStatus SVMSGD_SetSvmsgdType( + SVMSGD self, + int svmsgdType, ) { - return _SIFT_Create( - rval, + return _SVMSGD_SetSvmsgdType( + self, + svmsgdType, ); } - late final _SIFT_CreatePtr = - _lookup)>>( - 'SIFT_Create'); - late final _SIFT_Create = - _SIFT_CreatePtr.asFunction)>(); + late final _SVMSGD_SetSvmsgdTypePtr = + _lookup>( + 'SVMSGD_SetSvmsgdType'); + late final _SVMSGD_SetSvmsgdType = + _SVMSGD_SetSvmsgdTypePtr.asFunction(); - CvStatus SIFT_Detect( - SIFT f, - Mat src, - ffi.Pointer rval, + CvStatus SVMSGD_SetTermCriteria( + SVMSGD self, + TermCriteria val, ) { - return _SIFT_Detect( - f, - src, - rval, + return _SVMSGD_SetTermCriteria( + self, + val, ); } - late final _SIFT_DetectPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - SIFT, Mat, ffi.Pointer)>>('SIFT_Detect'); - late final _SIFT_Detect = _SIFT_DetectPtr.asFunction< - CvStatus Function(SIFT, Mat, ffi.Pointer)>(); + late final _SVMSGD_SetTermCriteriaPtr = + _lookup>( + 'SVMSGD_SetTermCriteria'); + late final _SVMSGD_SetTermCriteria = _SVMSGD_SetTermCriteriaPtr.asFunction< + CvStatus Function(SVMSGD, TermCriteria)>(); - CvStatus SIFT_DetectAndCompute( - SIFT f, - Mat src, - Mat mask, - Mat desc, - ffi.Pointer rval, + CvStatus SVMSGD_Train( + SVMSGD self, + PtrTrainData trainData, + int flags, + ffi.Pointer rval, ) { - return _SIFT_DetectAndCompute( - f, - src, - mask, - desc, + return _SVMSGD_Train( + self, + trainData, + flags, rval, ); } - late final _SIFT_DetectAndComputePtr = _lookup< + late final _SVMSGD_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SIFT, Mat, Mat, Mat, - ffi.Pointer)>>('SIFT_DetectAndCompute'); - late final _SIFT_DetectAndCompute = _SIFT_DetectAndComputePtr.asFunction< - CvStatus Function(SIFT, Mat, Mat, Mat, ffi.Pointer)>(); + CvStatus Function(SVMSGD, PtrTrainData, ffi.Int, + ffi.Pointer)>>('SVMSGD_Train'); + late final _SVMSGD_Train = _SVMSGD_TrainPtr.asFunction< + CvStatus Function(SVMSGD, PtrTrainData, int, ffi.Pointer)>(); - CvStatus SVD_Compute( - Mat src, - Mat w, - Mat u, - Mat vt, - int flags, + CvStatus SVMSGD_Train_1( + SVMSGD self, + Mat samples, + int layout, + Mat responses, + ffi.Pointer rval, ) { - return _SVD_Compute( - src, - w, - u, - vt, - flags, + return _SVMSGD_Train_1( + self, + samples, + layout, + responses, + rval, ); } - late final _SVD_ComputePtr = _lookup< - ffi.NativeFunction>( - 'SVD_Compute'); - late final _SVD_Compute = - _SVD_ComputePtr.asFunction(); + late final _SVMSGD_Train_1Ptr = _lookup< + ffi.NativeFunction< + CvStatus Function(SVMSGD, Mat, ffi.Int, Mat, + ffi.Pointer)>>('SVMSGD_Train_1'); + late final _SVMSGD_Train_1 = _SVMSGD_Train_1Ptr.asFunction< + CvStatus Function(SVMSGD, Mat, int, Mat, ffi.Pointer)>(); CvStatus SVM_CalcError( SVM self, @@ -19014,6 +22385,8 @@ class _SymbolAddresses { _SymbolAddresses(this._library); ffi.Pointer)>> get AKAZE_Close => _library._AKAZE_ClosePtr; + ffi.Pointer)>> + get ANN_MLP_Close => _library._ANN_MLP_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -19048,11 +22421,17 @@ class _SymbolAddresses { _library._BackgroundSubtractorMOG2_ClosePtr; ffi.Pointer)>> get BlockMeanHash_Close => _library._BlockMeanHash_ClosePtr; + ffi.Pointer)>> + get Boost_Close => _library._Boost_ClosePtr; ffi.Pointer)>> get CLAHE_Close => _library._CLAHE_ClosePtr; ffi.Pointer< ffi.NativeFunction)>> get CascadeClassifier_Close => _library._CascadeClassifier_ClosePtr; + ffi.Pointer)>> + get DTrees_Close => _library._DTrees_ClosePtr; + ffi.Pointer)>> + get EM_Close => _library._EM_ClosePtr; ffi.Pointer< ffi .NativeFunction)>> @@ -19066,10 +22445,16 @@ class _SymbolAddresses { get HOGDescriptor_Close => _library._HOGDescriptor_ClosePtr; ffi.Pointer)>> get KAZE_Close => _library._KAZE_ClosePtr; + ffi.Pointer)>> + get KNearest_Close => _library._KNearest_ClosePtr; ffi.Pointer)>> get KalmanFilter_Close => _library._KalmanFilter_ClosePtr; ffi.Pointer)>> get Layer_Close => _library._Layer_ClosePtr; + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>> + get LogisticRegression_Close => _library._LogisticRegression_ClosePtr; ffi.Pointer)>> get MSER_Close => _library._MSER_ClosePtr; ffi.Pointer)>> @@ -19080,6 +22465,11 @@ class _SymbolAddresses { get MergeMertens_Close => _library._MergeMertens_ClosePtr; ffi.Pointer)>> get Net_Close => _library._Net_ClosePtr; + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer)>> + get NormalBayesClassifier_Close => + _library._NormalBayesClassifier_ClosePtr; ffi.Pointer)>> get ORB_Close => _library._ORB_ClosePtr; ffi.Pointer)>> @@ -19087,10 +22477,14 @@ class _SymbolAddresses { ffi.Pointer< ffi.NativeFunction)>> get QRCodeDetector_Close => _library._QRCodeDetector_ClosePtr; + ffi.Pointer)>> + get RTrees_Close => _library._RTrees_ClosePtr; ffi.Pointer)>> get Rng_Close => _library._Rng_ClosePtr; ffi.Pointer)>> get SIFT_Close => _library._SIFT_ClosePtr; + ffi.Pointer)>> + get SVMSGD_Close => _library._SVMSGD_ClosePtr; ffi.Pointer)>> get SVM_Close => _library._SVM_ClosePtr; ffi.Pointer< @@ -19157,6 +22551,12 @@ final class AKAZE extends ffi.Struct { typedef AKAZEPtr = ffi.Pointer; +final class ANN_MLP extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef ANN_MLPPtr = ffi.Pointer; + final class AgastFeatureDetector extends ffi.Struct { external ffi.Pointer ptr; } @@ -19226,6 +22626,12 @@ final class BlockMeanHash extends ffi.Struct { typedef BlockMeanHashPtr = ffi.Pointer; +final class Boost extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef BoostPtr = ffi.Pointer; + final class CLAHE extends ffi.Struct { external ffi.Pointer ptr; } @@ -19268,6 +22674,17 @@ final class DMatch extends ffi.Struct { external double distance; } +final class DTrees extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef DTreesPtr = ffi.Pointer; + +final class EM extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef EMPtr = ffi.Pointer; typedef ErrorCallback = ffi.Pointer>; typedef ErrorCallbackFunction = ffi.Void Function( ffi.Int status, @@ -19320,6 +22737,12 @@ final class KAZE extends ffi.Struct { typedef KAZEPtr = ffi.Pointer; +final class KNearest extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef KNearestPtr = ffi.Pointer; + final class KalmanFilter extends ffi.Struct { external ffi.Pointer ptr; } @@ -19355,6 +22778,12 @@ final class Layer extends ffi.Struct { typedef LayerPtr = ffi.Pointer; +final class LogisticRegression extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef LogisticRegressionPtr = ffi.Pointer; + final class MSER extends ffi.Struct { external ffi.Pointer ptr; } @@ -19454,6 +22883,13 @@ final class NO_USE_AKAZEPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_ANN_MLPPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19531,6 +22967,13 @@ final class NO_USE_BlockMeanHashPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_BoostPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19545,6 +22988,20 @@ final class NO_USE_CascadeClassifierPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_DTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_EMPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19587,6 +23044,13 @@ final class NO_USE_KAZEPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_KNearestPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19601,6 +23065,13 @@ final class NO_USE_LayerPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_LogisticRegressionPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19629,6 +23100,13 @@ final class NO_USE_NetPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_NormalBayesClassifierPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19643,6 +23121,62 @@ final class NO_USE_ParamGridPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrANN_MLPPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrBoostPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrDTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrEMPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrKNearestPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrLogisticRegressionPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrNormalBayesClassifierPtr extends ffi.Struct { + external ffi.Pointer p; +} + +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrRTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19650,6 +23184,13 @@ final class NO_USE_PtrSVMPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrSVMSGDPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19678,6 +23219,13 @@ final class NO_USE_RNGPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_RTreesPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19692,6 +23240,13 @@ final class NO_USE_SVMPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_SVMSGDPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -19894,6 +23449,12 @@ final class Net extends ffi.Struct { typedef NetPtr = ffi.Pointer; +final class NormalBayesClassifier extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef NormalBayesClassifierPtr = ffi.Pointer; + final class ORB extends ffi.Struct { external ffi.Pointer ptr; } @@ -19933,16 +23494,70 @@ final class Point3f extends ffi.Struct { external double z; } +final class PtrANN_MLP extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrANN_MLPPtr = ffi.Pointer; + +final class PtrBoost extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrBoostPtr = ffi.Pointer; + +final class PtrDTrees extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrDTreesPtr = ffi.Pointer; + +final class PtrEM extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrEMPtr = ffi.Pointer; + +final class PtrKNearest extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrKNearestPtr = ffi.Pointer; + +final class PtrLogisticRegression extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrLogisticRegressionPtr = ffi.Pointer; + +final class PtrNormalBayesClassifier extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrNormalBayesClassifierPtr = ffi.Pointer; + final class PtrParamGrid extends ffi.Struct { external ffi.Pointer> ptr; } +final class PtrRTrees extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrRTreesPtr = ffi.Pointer; + final class PtrSVM extends ffi.Struct { external ffi.Pointer> ptr; } typedef PtrSVMPtr = ffi.Pointer; +final class PtrSVMSGD extends ffi.Struct { + external ffi.Pointer> ptr; +} + +typedef PtrSVMSGDPtr = ffi.Pointer; + final class PtrStitcher extends ffi.Struct { external ffi.Pointer> ptr; } @@ -19967,6 +23582,12 @@ final class RNG extends ffi.Struct { typedef RNGPtr = ffi.Pointer; +final class RTrees extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef RTreesPtr = ffi.Pointer; + final class Rect extends ffi.Struct { @ffi.Int() external int x; @@ -20028,6 +23649,12 @@ final class SVM extends ffi.Struct { typedef SVMPtr = ffi.Pointer; +final class SVMSGD extends ffi.Struct { + external ffi.Pointer ptr; +} + +typedef SVMSGDPtr = ffi.Pointer; + final class Scalar extends ffi.Struct { @ffi.Double() external double val1; From 363d3d42e95e352a0931373c2675d31a6962243e Mon Sep 17 00:00:00 2001 From: Abdelaziz Mahdy Date: Sun, 26 May 2024 17:46:45 +0300 Subject: [PATCH 08/10] adding svm and ANN_MLP dart bindings --- lib/src/ml/ann_mlp.dart | 290 ++++++++++++++++++++++++++++ lib/src/ml/svm.dart | 415 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 694 insertions(+), 11 deletions(-) create mode 100644 lib/src/ml/ann_mlp.dart diff --git a/lib/src/ml/ann_mlp.dart b/lib/src/ml/ann_mlp.dart new file mode 100644 index 00000000..9db716b5 --- /dev/null +++ b/lib/src/ml/ann_mlp.dart @@ -0,0 +1,290 @@ +// ignore_for_file: constant_identifier_names + +import 'dart:ffi' as ffi; +import 'package:ffi/ffi.dart'; + +import '../core/base.dart'; +import '../core/mat.dart'; +import '../opencv.g.dart' as cvg; + +class ANN_MLP extends CvStruct { + ANN_MLP._(cvg.ANN_MLPPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory ANN_MLP.create() { + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_Create(p)); + return ANN_MLP._(p); + } + + static final finalizer = + OcvFinalizer(CFFI.addresses.ANN_MLP_Close); + + int getTrainMethod() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetTrainMethod(ref, p)); + return p.value; + }); + } + + void setTrainMethod(int method, double param1, double param2) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetTrainMethod(ref, method, param1, param2)); + }); + } + + void setActivationFunction(int type, double param1, double param2) { + return using((arena) { + cvRun( + () => CFFI.ANN_MLP_SetActivationFunction(ref, type, param1, param2)); + }); + } + + void setLayerSizes(Mat layerSizes) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetLayerSizes(ref, layerSizes.ref)); + }); + } + + Mat getLayerSizes() { + return using((arena) { + final p = arena>(); + cvRun(() => CFFI.ANN_MLP_GetLayerSizes(ref, p)); + return Mat.fromPointer(p); + }); + } + + void setTermCriteria(TermCriteria val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetTermCriteria(ref, val.ref)); + }); + } + + TermCriteria getTermCriteria() { + return using((arena) { + final p = arena>(); + cvRun(() => CFFI.ANN_MLP_GetTermCriteria(ref, p)); + return TermCriteria.fromPointer(p); + }); + } + + void setBackpropWeightScale(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetBackpropWeightScale(ref, val)); + }); + } + + double getBackpropWeightScale() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetBackpropWeightScale(ref, p)); + return p.value; + }); + } + + void setBackpropMomentumScale(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetBackpropMomentumScale(ref, val)); + }); + } + + double getBackpropMomentumScale() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetBackpropMomentumScale(ref, p)); + return p.value; + }); + } + + void setRpropDW0(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDW0(ref, val)); + }); + } + + double getRpropDW0() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDW0(ref, p)); + return p.value; + }); + } + + void setRpropDWPlus(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWPlus(ref, val)); + }); + } + + double getRpropDWPlus() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWPlus(ref, p)); + return p.value; + }); + } + + void setRpropDWMinus(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMinus(ref, val)); + }); + } + + double getRpropDWMinus() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMinus(ref, p)); + return p.value; + }); + } + + void setRpropDWMin(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMin(ref, val)); + }); + } + + double getRpropDWMin() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMin(ref, p)); + return p.value; + }); + } + + void setRpropDWMax(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetRpropDWMax(ref, val)); + }); + } + + double getRpropDWMax() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetRpropDWMax(ref, p)); + return p.value; + }); + } + + void setAnnealInitialT(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealInitialT(ref, val)); + }); + } + + double getAnnealInitialT() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealInitialT(ref, p)); + return p.value; + }); + } + + void setAnnealFinalT(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealFinalT(ref, val)); + }); + } + + double getAnnealFinalT() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealFinalT(ref, p)); + return p.value; + }); + } + + void setAnnealCoolingRatio(double val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealCoolingRatio(ref, val)); + }); + } + + double getAnnealCoolingRatio() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealCoolingRatio(ref, p)); + return p.value; + }); + } + + void setAnnealItePerStep(int val) { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_SetAnnealItePerStep(ref, val)); + }); + } + + int getAnnealItePerStep() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_GetAnnealItePerStep(ref, p)); + return p.value; + }); + } + + double predict(Mat samples, Mat results, int flags) { + return using((arena) { + final p = arena(); + cvRun( + () => CFFI.ANN_MLP_Predict(ref, samples.ref, results.ref, flags, p)); + return p.value; + }); + } + + bool train(cvg.PtrTrainData trainData, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ANN_MLP_Train(ref, trainData, flags, p)); + return p.value; + }); + } + + bool trainWithSamples(Mat samples, int layout, Mat responses) { + return using((arena) { + final p = arena(); + cvRun(() => + CFFI.ANN_MLP_Train_1(ref, samples.ref, layout, responses.ref, p)); + return p.value; + }); + } + + void clear() { + return using((arena) { + cvRun(() => CFFI.ANN_MLP_Clear(ref)); + }); + } + + void save(String filename) { + return using((arena) { + final p = filename.toNativeUtf8().cast(); + cvRun(() => CFFI.ANN_MLP_Save(ref, p)); + calloc.free(p); + }); + } + + void load(String filepath) { + return using((arena) { + final p = filepath.toNativeUtf8().cast(); + cvRun(() => CFFI.ANN_MLP_Load(ref, p)); + calloc.free(p); + }); + } + + void loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8().cast(); + final on = objname.toNativeUtf8().cast(); + cvRun(() => CFFI.ANN_MLP_LoadFromString(ref, sm, on)); + calloc.free(sm); + calloc.free(on); + }); + } + + @override + List get props => [ptr.address]; + + @override + cvg.ANN_MLP get ref => ptr.ref; +} diff --git a/lib/src/ml/svm.dart b/lib/src/ml/svm.dart index 4bfed03d..57500f7c 100644 --- a/lib/src/ml/svm.dart +++ b/lib/src/ml/svm.dart @@ -1,14 +1,13 @@ // ignore_for_file: constant_identifier_names -library cv; - import 'dart:ffi' as ffi; - import 'package:ffi/ffi.dart'; import '../core/base.dart'; import '../core/mat.dart'; +import '../core/termcriteria.dart'; import '../core/vec.dart'; + import '../opencv.g.dart' as cvg; /// Support Vector Machines. @@ -18,23 +17,368 @@ class SVM extends CvStruct { finalizer.attach(this, ptr.cast()); } - factory SVM() { - throw UnimplementedError(); + factory SVM.create() { + final p = calloc(); + cvRun(() => CFFI.SVM_Create(p)); + return SVM._(p); + } + + static final finalizer = + OcvFinalizer(CFFI.addresses.SVM_Close); + + double getC() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetC(ref, p)); + return p.value; + }); + } + + Mat getClassWeights() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetClassWeights(ref, p)); + return Mat.fromPointer(p); + }); + } + + double getCoef0() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetCoef0(ref, p)); + return p.value; + }); + } + + double getDecisionFunction(int i, Mat alpha, Mat svidx) { + return using((arena) { + final p = arena(); + cvRun( + () => CFFI.SVM_GetDecisionFunction(ref, i, alpha.ref, svidx.ref, p)); + return p.value; + }); + } + + double getDegree() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetDegree(ref, p)); + return p.value; + }); + } + + double getGamma() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetGamma(ref, p)); + return p.value; + }); + } + + int getKernelType() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetKernelType(ref, p)); + return p.value; + }); + } + + double getNu() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetNu(ref, p)); + return p.value; + }); + } + + double getP() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetP(ref, p)); + return p.value; + }); + } + + Mat getSupportVectors() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetSupportVectors(ref, p)); + return Mat.fromPointer(p); + }); + } +//TODO: from pointer is not found + // TermCriteria getTermCriteria() { + // return using((arena) { + // final p = arena(); + // cvRun(() => CFFI.SVM_GetTermCriteria(ref, p)); + // return TermCriteria.fromPointer(p); + // }); + // } + + int getType() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetType(ref, p)); + return p.value; + }); + } + + Mat getUncompressedSupportVectors() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetUncompressedSupportVectors(ref, p)); + return Mat.fromPointer(p); + }); + } + + void setC(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetC(ref, val)); + }); + } + + void setClassWeights(Mat val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetClassWeights(ref, val.ref)); + }); + } + + void setCoef0(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetCoef0(ref, val)); + }); + } + + void setDegree(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetDegree(ref, val)); + }); + } + + void setGamma(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetGamma(ref, val)); + }); + } + + void setKernel(int kernelType) { + return using((arena) { + cvRun(() => CFFI.SVM_SetKernel(ref, kernelType)); + }); + } + + void setNu(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetNu(ref, val)); + }); + } + + void setP(double val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetP(ref, val)); + }); + } + + void setTermCriteria(TermCriteria val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetTermCriteria(ref, val.ref)); + }); + } + + void setType(int val) { + return using((arena) { + cvRun(() => CFFI.SVM_SetType(ref, val)); + }); + } + + bool trainAuto( + cvg.PtrTrainData data, + int kFold, + ParamGrid Cgrid, + ParamGrid gammaGrid, + ParamGrid pGrid, + ParamGrid nuGrid, + ParamGrid coeffGrid, + ParamGrid degreeGrid, + bool balanced) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_TrainAuto( + ref, + data.ref, + kFold, + Cgrid.ref, + gammaGrid.ref, + pGrid.ref, + nuGrid.ref, + coeffGrid.ref, + degreeGrid.ref, + balanced, + p)); + return p.value; + }); + } + + bool trainAutoWithSamples( + Mat samples, + int layout, + Mat responses, + int kFold, + cvg.PtrParamGrid Cgrid, + cvg.PtrParamGrid gammaGrid, + cvg.PtrParamGrid pGrid, + cvg.PtrParamGrid nuGrid, + cvg.PtrParamGrid coeffGrid, + cvg.PtrParamGrid degreeGrid, + bool balanced) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_TrainAuto_1( + ref, + samples.ref, + layout, + responses.ref, + kFold, + Cgrid.ref, + gammaGrid.ref, + pGrid.ref, + nuGrid.ref, + coeffGrid.ref, + degreeGrid.ref, + balanced, + p)); + return p.value != 0; + }); } - static final finalizer = OcvFinalizer(CFFI.addresses.SVM_Close); + double calcError(cvg.PtrTrainData data, bool test, Mat resp) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_CalcError(ref, data.ref, test, resp.ref, p)); + return p.value; + }); + } - cvg.SVM get svm { - final s = calloc(); - cvRun(() => CFFI.SVM_Get(ref, s)); - return s.ref; + bool empty() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Empty(ref, p)); + return p.value; + }); + } + + int getVarCount() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetVarCount(ref, p)); + return p.value; + }); + } + + bool isClassifier() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_IsClassifier(ref, p)); + return p.value; + }); + } + + bool isTrained() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_IsTrained(ref, p)); + return p.value; + }); + } + + double predict(Mat samples, Mat results, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Predict(ref, samples.ref, results.ref, flags, p)); + return p.value; + }); + } + + bool train(cvg.PtrTrainData trainData, int flags) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Train(ref, trainData.ref, flags, p)); + return p.value; + }); + } + + bool trainWithSamples(Mat samples, int layout, Mat responses) { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_Train_1(ref, samples.ref, layout, responses.ref, p)); + return p.value != 0; + }); + } + + void clear() { + return using((arena) { + cvRun(() => CFFI.SVM_Clear(ref)); + }); + } + + String getDefaultName() { + return using((arena) { + final p = arena>(); + cvRun(() => CFFI.SVM_GetDefaultName(ref, p)); + return p.cast().toDartString(); + }); + } + + ParamGrid getDefaultGrid(int param_id) { + return using((arena) { + final p = calloc(); + cvRun(() => CFFI.SVM_GetDefaultGrid(ref, param_id, p)); + return ParamGrid.fromPointer(p); + }); + } + + cvg.PtrParamGrid getDefaultGridPtr(int param_id) { + return using((arena) { + final p = calloc(); + cvRun(() => CFFI.SVM_GetDefaultGridPtr(ref, param_id, p)); + return cvg.PtrParamGrid.fromPointer(p); + }); + } + + void save(String filename) { + return using((arena) { + final p = filename.toNativeUtf8().cast(); + cvRun(() => CFFI.SVM_Save(ref, p)); + calloc.free(p); + }); + } + + void load(String filepath) { + return using((arena) { + final p = filepath.toNativeUtf8().cast(); + cvRun(() => CFFI.SVM_Load(ref, p)); + calloc.free(p); + }); + } + + void loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8().cast(); + final on = objname.toNativeUtf8().cast(); + cvRun(() => CFFI.SVM_LoadFromString(ref, sm, on)); + calloc.free(sm); + calloc.free(on); + }); } @override List get props => [ptr.address]; @override - cvg.PtrSVM get ref => ptr.ref; + cvg.SVM get ref => ptr.ref; + + // @override + // cvg.PtrSVM get ref => ptr.ref; static const int KERNEL_CUSTOM = -1; static const int KERNEL_LINEAR = 0; @@ -75,3 +419,52 @@ class SVM extends CvStruct { /// See @cite LibSVM for details. static const int NU_SVR = 104; } + +class ParamGrid extends CvStruct { + ParamGrid._(cvg.ParamGridPtr ptr) : super.fromPointer(ptr); + + factory ParamGrid.empty() { + final p = calloc(); + cvRun(() => CFFI.ParamGrid_Empty(p)); + return ParamGrid._(p); + } + + factory ParamGrid.newGrid(double minVal, double maxVal, double logstep) { + final p = calloc(); + cvRun(() => CFFI.ParamGrid_New(minVal, maxVal, logstep, p)); + return ParamGrid._(p); + } + + double getMinVal() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_getMinVal(ref, p)); + return p.value; + }); + } + + double getMaxVal() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_GetMaxVal(ref, p)); + return p.value; + }); + } + + double getLogStep() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.ParamGrid_GetLogStep(ref, p)); + return p.value; + }); + } + + static final finalizer = + OcvFinalizer(CFFI.addresses.ParamGrid_Close); + + @override + List get props => [ptr.address]; + + @override + cvg.ParamGrid get ref => ptr.ref; +} From b27f7171e05a499c66f2e09af40152e05a39c9c5 Mon Sep 17 00:00:00 2001 From: rainy liu Date: Tue, 28 May 2024 19:05:10 +0800 Subject: [PATCH 09/10] C backend: object -> pointer for cv::Ptr, change termcriteria, add fix bindings for traindata, svm, ann_mlp --- ffigen_const.yaml | 4 +- lib/src/calib3d/calib3d.dart | 14 +- lib/src/constants.g.dart | 14 + lib/src/core/core.dart | 6 +- lib/src/core/termcriteria.dart | 29 +- lib/src/imgproc/imgproc.dart | 4 +- lib/src/ml/ann_mlp.dart | 98 +- lib/src/ml/svm.dart | 198 +- lib/src/ml/train_data.dart | 381 +- lib/src/opencv.dart | 4 + lib/src/opencv.g.dart | 1306 ++- lib/src/stitching/stitching.dart | 46 +- lib/src/video/video.dart | 4 +- src/calib3d/calib3d.cpp | 7 +- src/core/constants.h | 22 +- src/core/core.cpp | 33 +- src/core/core.h | 14 +- src/imgproc/imgproc.cpp | 4 +- src/ml/ann_mlp.cpp | 160 +- src/ml/ann_mlp.h | 81 +- src/ml/em.cpp | 5 +- src/ml/logistic_regression.cpp | 5 +- src/ml/rtrees.cpp | 5 +- src/ml/svm.cpp | 226 +- src/ml/svm.h | 103 +- src/ml/svmsgd.cpp | 5 +- src/ml/train_data.cpp | 169 +- src/ml/train_data.h | 77 +- src/stitching/stitching.cpp | 99 +- src/stitching/stitching.h | 50 +- src/test/core.cc | 27 +- src/test/imgproc.cc | 4 +- src/video/video.cpp | 6 +- test/data/agaricus-lepiota.data | 8124 +++++++++++++++++ test/data/agaricus-lepiota.names | 148 + .../haarcascade_frontalface_default.xml | 0 test/ml/ann_mlp_test.dart | 12 + test/ml/svm_test.dart | 15 + test/ml/train_data_test.dart | 65 + 39 files changed, 10060 insertions(+), 1514 deletions(-) create mode 100644 test/data/agaricus-lepiota.data create mode 100644 test/data/agaricus-lepiota.names rename test/{ => data}/haarcascade_frontalface_default.xml (100%) create mode 100644 test/ml/ann_mlp_test.dart create mode 100644 test/ml/svm_test.dart create mode 100644 test/ml/train_data_test.dart diff --git a/ffigen_const.yaml b/ffigen_const.yaml index cb83ad99..d14dc2eb 100644 --- a/ffigen_const.yaml +++ b/ffigen_const.yaml @@ -8,9 +8,9 @@ output: compiler-opts: "" headers: entry-points: - - src/constants.h + - src/core/constants.h include-directives: - - src/constants.h + - src/core/constants.h preamble: | // opencv_dart - OpenCV bindings for Dart language diff --git a/lib/src/calib3d/calib3d.dart b/lib/src/calib3d/calib3d.dart index 98a473ca..7d1a4708 100644 --- a/lib/src/calib3d/calib3d.dart +++ b/lib/src/calib3d/calib3d.dart @@ -10,8 +10,8 @@ import '../core/rect.dart'; import '../core/base.dart'; import '../core/mat.dart'; import '../core/size.dart'; -import '../core/termcriteria.dart'; import '../constants.g.dart'; +import '../core/termcriteria.dart'; import '../opencv.g.dart' as cvg; class Fisheye { @@ -189,7 +189,7 @@ class Fisheye { rvecs!.ref, tvecs!.ref, flags, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, rmsErr, ), ); @@ -233,8 +233,8 @@ Mat undistortPoints( R ??= Mat.empty(); P ??= Mat.empty(); dst ??= Mat.empty(); - cvRunArena( - (arena) => cvRun( + cvRunArena((arena) { + cvRun( () => CFFI.UndistortPoints( src.ref, dst!.ref, @@ -242,10 +242,10 @@ Mat undistortPoints( distCoeffs.ref, R!.ref, P!.ref, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, ), - ), - ); + ); + }); return dst; } diff --git a/lib/src/constants.g.dart b/lib/src/constants.g.dart index c9367d65..fe68758a 100644 --- a/lib/src/constants.g.dart +++ b/lib/src/constants.g.dart @@ -2090,3 +2090,17 @@ const int CALIB_ZERO_DISPARITY = 1024; const int CALIB_USE_LU = 131072; const int CALIB_USE_EXTRINSIC_GUESS = 4194304; + +const int VAR_NUMERICAL = 0; + +const int VAR_ORDERED = 0; + +const int VAR_CATEGORICAL = 1; + +const int TEST_ERROR = 0; + +const int TRAIN_ERROR = 1; + +const int ROW_SAMPLE = 0; + +const int COL_SAMPLE = 1; diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index 8bb60816..57cb2e61 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -674,7 +674,7 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeans(data.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, attempts, + () => CFFI.KMeans(data.ref, K, bestLabels.ref, criteria.toNativePtr(arena).ref, attempts, flags, centers!.ref, p), ); return p.value; @@ -699,8 +699,8 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeansPoints(pts.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, - attempts, flags, centers!.ref, p), + () => CFFI.KMeansPoints(pts.ref, K, bestLabels.ref, criteria.toNativePtr(arena).ref, attempts, + flags, centers!.ref, p), ); return p.value; }); diff --git a/lib/src/core/termcriteria.dart b/lib/src/core/termcriteria.dart index b2889778..47e9b602 100644 --- a/lib/src/core/termcriteria.dart +++ b/lib/src/core/termcriteria.dart @@ -1,22 +1,25 @@ -library cv; - import 'dart:ffi' as ffi; import 'package:ffi/ffi.dart'; - -import 'base.dart'; import '../opencv.g.dart' as cvg; typedef TermCriteria = (int type, int count, double eps); -extension TermCriteriaExtension on TermCriteria { - /// TermCriteria is the criteria for iterative algorithms. - /// - /// For further details, please see: - /// https://docs.opencv.org/master/d9/d5d/classcv_1_1TermCriteria.html - cvg.TermCriteriaPtr toTermCriteria(Arena arena) { - final p = arena(); - cvRun(() => CFFI.TermCriteria_New($1, $2, $3, p)); - return p; +extension TermCriteriaX on TermCriteria { + ffi.Pointer toNativePtr(Arena arena) { + return arena() + ..ref.type = this.$1 + ..ref.maxCount = this.$2 + ..ref.epsilon = this.$3; + } + + int get type => this.$1; + int get count => this.$2; + double get eps => this.$3; +} + +extension TermCriteriaX1 on cvg.TermCriteria { + TermCriteria toDart() { + return (type, maxCount, epsilon); } } diff --git a/lib/src/imgproc/imgproc.dart b/lib/src/imgproc/imgproc.dart index 026eedbf..25516c58 100644 --- a/lib/src/imgproc/imgproc.dart +++ b/lib/src/imgproc/imgproc.dart @@ -700,8 +700,8 @@ VecPoint2f cornerSubPix( cvRunArena((arena) { final size = winSize.toSize(arena); final zone = zeroZone.toSize(arena); - final c = criteria.toTermCriteria(arena); - cvRun(() => CFFI.CornerSubPix(image.ref, corners.ref, size.ref, zone.ref, c.ref)); + final tc = criteria.toNativePtr(arena); + cvRun(() => CFFI.CornerSubPix(image.ref, corners.ref, size.ref, zone.ref, tc.ref)); }); return corners; } diff --git a/lib/src/ml/ann_mlp.dart b/lib/src/ml/ann_mlp.dart index 9db716b5..bc9cf807 100644 --- a/lib/src/ml/ann_mlp.dart +++ b/lib/src/ml/ann_mlp.dart @@ -1,25 +1,44 @@ -// ignore_for_file: constant_identifier_names +// ignore_for_file: constant_identifier_names, camel_case_types import 'dart:ffi' as ffi; import 'package:ffi/ffi.dart'; import '../core/base.dart'; import '../core/mat.dart'; +import '../core/termcriteria.dart'; import '../opencv.g.dart' as cvg; -class ANN_MLP extends CvStruct { - ANN_MLP._(cvg.ANN_MLPPtr ptr) : super.fromPointer(ptr) { +class ANN_MLP extends CvStruct { + ANN_MLP._(cvg.PtrANN_MLPPtr ptr) : super.fromPointer(ptr) { finalizer.attach(this, ptr.cast()); } factory ANN_MLP.create() { - final p = calloc(); + final p = calloc(); cvRun(() => CFFI.ANN_MLP_Create(p)); return ANN_MLP._(p); } - static final finalizer = - OcvFinalizer(CFFI.addresses.ANN_MLP_Close); + factory ANN_MLP.load(String filepath) { + return using((arena) { + final fp = filepath.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_Load(fp, p)); + return ANN_MLP._(p); + }); + } + + factory ANN_MLP.loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8(allocator: arena).cast(); + final on = objname.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.ANN_MLP_LoadFromString(sm, on, p)); + return ANN_MLP._(p); + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.ANN_MLP_Close); int getTrainMethod() { return using((arena) { @@ -29,7 +48,12 @@ class ANN_MLP extends CvStruct { }); } - void setTrainMethod(int method, double param1, double param2) { + /// Sets training method and common parameters. + /// + /// [method] Default value is [TRAIN_METHODS_RPROP]. + /// + /// https://docs.opencv.org/4.x/d0/dce/classcv_1_1ml_1_1ANN__MLP.html#a4be093cfd2e743ee2f41e34e50cf3a54 + void setTrainMethod(int method, [double param1 = 0, double param2 = 0]) { return using((arena) { cvRun(() => CFFI.ANN_MLP_SetTrainMethod(ref, method, param1, param2)); }); @@ -37,8 +61,7 @@ class ANN_MLP extends CvStruct { void setActivationFunction(int type, double param1, double param2) { return using((arena) { - cvRun( - () => CFFI.ANN_MLP_SetActivationFunction(ref, type, param1, param2)); + cvRun(() => CFFI.ANN_MLP_SetActivationFunction(ref, type, param1, param2)); }); } @@ -50,23 +73,23 @@ class ANN_MLP extends CvStruct { Mat getLayerSizes() { return using((arena) { - final p = arena>(); - cvRun(() => CFFI.ANN_MLP_GetLayerSizes(ref, p)); - return Mat.fromPointer(p); + final mat = Mat.empty(); + cvRun(() => CFFI.ANN_MLP_GetLayerSizes(ref, mat.ptr)); + return mat; }); } void setTermCriteria(TermCriteria val) { return using((arena) { - cvRun(() => CFFI.ANN_MLP_SetTermCriteria(ref, val.ref)); + cvRun(() => CFFI.ANN_MLP_SetTermCriteria(ref, val.toNativePtr(arena).ref)); }); } TermCriteria getTermCriteria() { return using((arena) { - final p = arena>(); + final p = arena(); cvRun(() => CFFI.ANN_MLP_GetTermCriteria(ref, p)); - return TermCriteria.fromPointer(p); + return p.ref.toDart(); }); } @@ -227,8 +250,7 @@ class ANN_MLP extends CvStruct { double predict(Mat samples, Mat results, int flags) { return using((arena) { final p = arena(); - cvRun( - () => CFFI.ANN_MLP_Predict(ref, samples.ref, results.ref, flags, p)); + cvRun(() => CFFI.ANN_MLP_Predict(ref, samples.ref, results.ref, flags, p)); return p.value; }); } @@ -244,8 +266,7 @@ class ANN_MLP extends CvStruct { bool trainWithSamples(Mat samples, int layout, Mat responses) { return using((arena) { final p = arena(); - cvRun(() => - CFFI.ANN_MLP_Train_1(ref, samples.ref, layout, responses.ref, p)); + cvRun(() => CFFI.ANN_MLP_Train_1(ref, samples.ref, layout, responses.ref, p)); return p.value; }); } @@ -264,27 +285,28 @@ class ANN_MLP extends CvStruct { }); } - void load(String filepath) { - return using((arena) { - final p = filepath.toNativeUtf8().cast(); - cvRun(() => CFFI.ANN_MLP_Load(ref, p)); - calloc.free(p); - }); - } - - void loadFromString(String strModel, String objname) { - return using((arena) { - final sm = strModel.toNativeUtf8().cast(); - final on = objname.toNativeUtf8().cast(); - cvRun(() => CFFI.ANN_MLP_LoadFromString(ref, sm, on)); - calloc.free(sm); - calloc.free(on); - }); - } - @override List get props => [ptr.address]; @override - cvg.ANN_MLP get ref => ptr.ref; + cvg.PtrANN_MLP get ref => ptr.ref; + + /// The back-propagation algorithm. + static const int TRAIN_METHODS_BACKPROP = 0; + + /// The RPROP algorithm. See @cite RPROP93 for details. + static const int TRAIN_METHODS_RPROP = 1; + + /// The simulated annealing algorithm. See @cite Kirkpatrick83 for details. + static const int TRAIN_METHODS_ANNEAL = 2; + + static const int TRAIN_FLAGS_UPDATE_WEIGHTS = 1; + static const int TRAIN_FLAGS_NO_INPUT_SCALE = 2; + static const int TRAIN_FLAGS_NO_OUTPUT_SCALE = 4; + + static const int ACTIVATION_IDENTITY = 0; + static const int ACTIVATION_SIGMOID_SYM = 1; + static const int ACTIVATION_GAUSSIAN = 2; + static const int ACTIVATION_RELU = 3; + static const int ACTIVATION_LEAKYRELU = 4; } diff --git a/lib/src/ml/svm.dart b/lib/src/ml/svm.dart index 57500f7c..b86b5cd6 100644 --- a/lib/src/ml/svm.dart +++ b/lib/src/ml/svm.dart @@ -6,9 +6,9 @@ import 'package:ffi/ffi.dart'; import '../core/base.dart'; import '../core/mat.dart'; import '../core/termcriteria.dart'; -import '../core/vec.dart'; import '../opencv.g.dart' as cvg; +import 'train_data.dart'; /// Support Vector Machines. /// https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html#ab4b93a4c42bbe213ffd9fb3832c6c44f @@ -23,8 +23,26 @@ class SVM extends CvStruct { return SVM._(p); } - static final finalizer = - OcvFinalizer(CFFI.addresses.SVM_Close); + factory SVM.load(String filepath) { + return using((arena) { + final fp = filepath.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.SVM_Load(fp, p)); + return SVM._(p); + }); + } + + factory SVM.loadFromString(String strModel, String objname) { + return using((arena) { + final sm = strModel.toNativeUtf8(allocator: arena).cast(); + final on = objname.toNativeUtf8(allocator: arena).cast(); + final p = calloc(); + cvRun(() => CFFI.SVM_LoadFromString(sm, on, p)); + return SVM._(p); + }); + } + + static final finalizer = OcvFinalizer(CFFI.addresses.SVM_Close); double getC() { return using((arena) { @@ -53,8 +71,7 @@ class SVM extends CvStruct { double getDecisionFunction(int i, Mat alpha, Mat svidx) { return using((arena) { final p = arena(); - cvRun( - () => CFFI.SVM_GetDecisionFunction(ref, i, alpha.ref, svidx.ref, p)); + cvRun(() => CFFI.SVM_GetDecisionFunction(ref, i, alpha.ref, svidx.ref, p)); return p.value; }); } @@ -100,20 +117,18 @@ class SVM extends CvStruct { } Mat getSupportVectors() { - return using((arena) { - final p = arena(); - cvRun(() => CFFI.SVM_GetSupportVectors(ref, p)); - return Mat.fromPointer(p); + final p = calloc(); + cvRun(() => CFFI.SVM_GetSupportVectors(ref, p)); + return Mat.fromPointer(p); + } + + TermCriteria getTermCriteria() { + return using((arena) { + final p = arena(); + cvRun(() => CFFI.SVM_GetTermCriteria(ref, p)); + return p.ref.toDart(); }); } -//TODO: from pointer is not found - // TermCriteria getTermCriteria() { - // return using((arena) { - // final p = arena(); - // cvRun(() => CFFI.SVM_GetTermCriteria(ref, p)); - // return TermCriteria.fromPointer(p); - // }); - // } int getType() { return using((arena) { @@ -181,7 +196,7 @@ class SVM extends CvStruct { void setTermCriteria(TermCriteria val) { return using((arena) { - cvRun(() => CFFI.SVM_SetTermCriteria(ref, val.ref)); + cvRun(() => CFFI.SVM_SetTermCriteria(ref, val.toNativePtr(arena).ref)); }); } @@ -191,30 +206,12 @@ class SVM extends CvStruct { }); } - bool trainAuto( - cvg.PtrTrainData data, - int kFold, - ParamGrid Cgrid, - ParamGrid gammaGrid, - ParamGrid pGrid, - ParamGrid nuGrid, - ParamGrid coeffGrid, - ParamGrid degreeGrid, - bool balanced) { + bool trainAuto(TrainData data, int kFold, ParamGrid cGrid, ParamGrid gammaGrid, ParamGrid pGrid, + ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, bool balanced) { return using((arena) { final p = arena(); - cvRun(() => CFFI.SVM_TrainAuto( - ref, - data.ref, - kFold, - Cgrid.ref, - gammaGrid.ref, - pGrid.ref, - nuGrid.ref, - coeffGrid.ref, - degreeGrid.ref, - balanced, - p)); + cvRun(() => CFFI.SVM_TrainAuto(ref, data.ref, kFold, cGrid.ref, gammaGrid.ref, pGrid.ref, + nuGrid.ref, coeffGrid.ref, degreeGrid.ref, balanced, p)); return p.value; }); } @@ -224,34 +221,22 @@ class SVM extends CvStruct { int layout, Mat responses, int kFold, - cvg.PtrParamGrid Cgrid, - cvg.PtrParamGrid gammaGrid, - cvg.PtrParamGrid pGrid, - cvg.PtrParamGrid nuGrid, - cvg.PtrParamGrid coeffGrid, - cvg.PtrParamGrid degreeGrid, + ParamGrid cGrid, + ParamGrid gammaGrid, + ParamGrid pGrid, + ParamGrid nuGrid, + ParamGrid coeffGrid, + ParamGrid degreeGrid, bool balanced) { return using((arena) { - final p = arena(); - cvRun(() => CFFI.SVM_TrainAuto_1( - ref, - samples.ref, - layout, - responses.ref, - kFold, - Cgrid.ref, - gammaGrid.ref, - pGrid.ref, - nuGrid.ref, - coeffGrid.ref, - degreeGrid.ref, - balanced, - p)); - return p.value != 0; - }); - } - - double calcError(cvg.PtrTrainData data, bool test, Mat resp) { + final p = arena(); + cvRun(() => CFFI.SVM_TrainAuto_1(ref, samples.ref, layout, responses.ref, kFold, cGrid.ref, + gammaGrid.ref, pGrid.ref, nuGrid.ref, coeffGrid.ref, degreeGrid.ref, balanced, p)); + return p.value; + }); + } + + double calcError(TrainData data, bool test, Mat resp) { return using((arena) { final p = arena(); cvRun(() => CFFI.SVM_CalcError(ref, data.ref, test, resp.ref, p)); @@ -299,7 +284,7 @@ class SVM extends CvStruct { }); } - bool train(cvg.PtrTrainData trainData, int flags) { + bool train(TrainData trainData, int flags) { return using((arena) { final p = arena(); cvRun(() => CFFI.SVM_Train(ref, trainData.ref, flags, p)); @@ -309,65 +294,42 @@ class SVM extends CvStruct { bool trainWithSamples(Mat samples, int layout, Mat responses) { return using((arena) { - final p = arena(); + final p = arena(); cvRun(() => CFFI.SVM_Train_1(ref, samples.ref, layout, responses.ref, p)); - return p.value != 0; + return p.value; }); } - void clear() { - return using((arena) { - cvRun(() => CFFI.SVM_Clear(ref)); - }); - } + void clear() => cvRun(() => CFFI.SVM_Clear(ref)); String getDefaultName() { return using((arena) { - final p = arena>(); + final p = arena(); cvRun(() => CFFI.SVM_GetDefaultName(ref, p)); return p.cast().toDartString(); }); } - ParamGrid getDefaultGrid(int param_id) { - return using((arena) { - final p = calloc(); - cvRun(() => CFFI.SVM_GetDefaultGrid(ref, param_id, p)); - return ParamGrid.fromPointer(p); - }); - } + // ParamGrid getDefaultGrid(int param_id) { + // return using((arena) { + // final p = calloc(); + // cvRun(() => CFFI.SVM_GetDefaultGrid(ref, param_id, p)); + // return ParamGrid.fromPointer(p); + // }); + // } - cvg.PtrParamGrid getDefaultGridPtr(int param_id) { - return using((arena) { + ParamGrid getDefaultGridPtr(int paramId) { + return using((arena) { final p = calloc(); - cvRun(() => CFFI.SVM_GetDefaultGridPtr(ref, param_id, p)); - return cvg.PtrParamGrid.fromPointer(p); + cvRun(() => CFFI.SVM_GetDefaultGridPtr(ref, paramId, p)); + return ParamGrid.fromPointer(p); }); } void save(String filename) { return using((arena) { - final p = filename.toNativeUtf8().cast(); + final p = filename.toNativeUtf8(allocator: arena).cast(); cvRun(() => CFFI.SVM_Save(ref, p)); - calloc.free(p); - }); - } - - void load(String filepath) { - return using((arena) { - final p = filepath.toNativeUtf8().cast(); - cvRun(() => CFFI.SVM_Load(ref, p)); - calloc.free(p); - }); - } - - void loadFromString(String strModel, String objname) { - return using((arena) { - final sm = strModel.toNativeUtf8().cast(); - final on = objname.toNativeUtf8().cast(); - cvRun(() => CFFI.SVM_LoadFromString(ref, sm, on)); - calloc.free(sm); - calloc.free(on); }); } @@ -375,10 +337,7 @@ class SVM extends CvStruct { List get props => [ptr.address]; @override - cvg.SVM get ref => ptr.ref; - - // @override - // cvg.PtrSVM get ref => ptr.ref; + cvg.PtrSVM get ref => ptr.ref; static const int KERNEL_CUSTOM = -1; static const int KERNEL_LINEAR = 0; @@ -420,17 +379,21 @@ class SVM extends CvStruct { static const int NU_SVR = 104; } -class ParamGrid extends CvStruct { - ParamGrid._(cvg.ParamGridPtr ptr) : super.fromPointer(ptr); +class ParamGrid extends CvStruct { + ParamGrid._(cvg.PtrParamGridPtr ptr) : super.fromPointer(ptr) { + finalizer.attach(this, ptr.cast()); + } + + factory ParamGrid.fromPointer(cvg.PtrParamGridPtr ptr) => ParamGrid._(ptr); factory ParamGrid.empty() { - final p = calloc(); + final p = calloc(); cvRun(() => CFFI.ParamGrid_Empty(p)); return ParamGrid._(p); } - factory ParamGrid.newGrid(double minVal, double maxVal, double logstep) { - final p = calloc(); + factory ParamGrid.create(double minVal, double maxVal, double logstep) { + final p = calloc(); cvRun(() => CFFI.ParamGrid_New(minVal, maxVal, logstep, p)); return ParamGrid._(p); } @@ -459,12 +422,11 @@ class ParamGrid extends CvStruct { }); } - static final finalizer = - OcvFinalizer(CFFI.addresses.ParamGrid_Close); + static final finalizer = OcvFinalizer(CFFI.addresses.ParamGrid_Close); @override List get props => [ptr.address]; @override - cvg.ParamGrid get ref => ptr.ref; + cvg.PtrParamGrid get ref => ptr.ref; } diff --git a/lib/src/ml/train_data.dart b/lib/src/ml/train_data.dart index 6dd91e0c..c051c47a 100644 --- a/lib/src/ml/train_data.dart +++ b/lib/src/ml/train_data.dart @@ -2,10 +2,12 @@ library cv; +import 'dart:convert'; import 'dart:ffi' as ffi; import 'package:ffi/ffi.dart'; +import '../constants.g.dart'; import '../core/base.dart'; import '../core/mat.dart'; import '../core/vec.dart'; @@ -16,6 +18,23 @@ class TrainData extends CvStruct { finalizer.attach(this, ptr.cast()); } + /// Creates training data from in-memory arrays. + /// + /// [samples] matrix of samples. It should have CV_32F type. + /// + /// [layout] see ml::SampleTypes. + /// + /// [responses] matrix of responses. If the responses are scalar, they should be stored as a single row or as a single column. The matrix should have type CV_32F or CV_32S (in the former case the responses are considered as ordered by default; in the latter case - as categorical) + /// + /// [varIdx] vector specifying which variables to use for training. It can be an integer vector (CV_32S) containing 0-based variable indices or byte vector (CV_8U) containing a mask of active variables. + /// + /// [sampleIdx] vector specifying which samples to use for training. It can be an integer vector (CV_32S) containing 0-based sample indices or byte vector (CV_8U) containing a mask of training samples. + /// + /// [sampleWeights] optional vector with weights for each sample. It should have CV_32F type. + /// + /// [varType] optional vector of type CV_8U and size + , containing types of each input and output variable. See ml::VariableTypes. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7755186f510669f35fbdee8c044ced10 factory TrainData( InputArray samples, int layout, @@ -35,7 +54,28 @@ class TrainData extends CvStruct { return TrainData._(p); } - factory TrainData.fromCsv( + /// Reads the dataset from a .csv file and returns the ready-to-use training data. + /// + /// [filename] The input file name + /// + /// [headerLineCount] The number of lines in the beginning to skip; besides the header, the function also skips empty lines and lines staring with # + /// + /// [responseStartIdx] Index of the first output variable. If -1, the function considers the last variable as the response + /// + /// [responseEndIdx] Index of the last output variable + 1. If -1, then there is single response variable at responseStartIdx. + /// + /// [varTypeSpec] The optional text string that specifies the variables' types. It has the format ord[n1-n2,n3,n4-n5,...]cat[n6,n7-n8,...]. That is, variables from n1 to n2 (inclusive range), n3, n4 to n5 ... are considered ordered and n6, n7 to n8 ... are considered as categorical. The range [n1..n2] + [n3] + [n4..n5] + ... + [n6] + [n7..n8] should cover all the variables. If varTypeSpec is not specified, then algorithm uses the following rules: + /// + /// - all input variables are considered ordered by default. If some column contains has non- numerical values, e.g. 'apple', 'pear', 'apple', 'apple', 'mango', the corresponding variable is considered categorical. + /// - if there are several output variables, they are all considered as ordered. Error is reported when non-numerical values are used. + /// - if there is a single output variable, then if its values are non-numerical or are all integers, then it's considered categorical. Otherwise, it's considered ordered. + /// + /// [delimiter] The character used to separate values in each line. + /// + /// [missch] The character used to specify missing measurements. It should not be a digit. Although it's a non-numerical value, it surely does not affect the decision of whether the variable ordered or categorical. + /// + ///https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a12eac7e52509b6ee39ddaa7b3df1db8c + factory TrainData.loadFromCSV( String filename, int headerLineCount, { int responseStartIdx = -1, @@ -44,7 +84,24 @@ class TrainData extends CvStruct { String delimiter = ',', String missch = '?', }) { - throw UnimplementedError(); + return cvRunArena((arena) { + final p = calloc(); + final fp = filename.toNativeUtf8(allocator: arena).cast(); + final vp = varTypeSpec.toNativeUtf8(allocator: arena).cast(); + final dp = ascii.encode(delimiter)[0]; + final mp = ascii.encode(missch)[0]; + cvRun(() => CFFI.TrainData_LoadFromCSV( + fp, headerLineCount, responseStartIdx, responseEndIdx, vp, dp, mp, p)); + return TrainData._(p); + }); + } + + static double missingValue() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_MissingValue(p)); + return p.value; + }); } static final finalizer = OcvFinalizer(CFFI.addresses.TrainData_Close); @@ -55,14 +112,332 @@ class TrainData extends CvStruct { return s.ref; } + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7e687b7ee8325380bced49f5cd5baf15 int getCatCount(int vi) { return cvRunArena((arena) { final p = arena(); - cvRun(() => CFFI.TrainData_GetCatCount(traindata, vi, p)); + cvRun(() => CFFI.TrainData_GetCatCount(ref, vi, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a3c2c8c6bf46955d9c52f256fdfa9097c + Mat getCatMap() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetCatMap(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a65ad5f0565ffe9ac26fbff8026faec36 + Mat getCatOfs() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetCatOfs(ref, m.ptr)); + return m; + } + + /// Returns the vector of class labels. + /// + /// The function returns vector of unique labels occurred in the responses. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0e40c6bd62aa9ad0ae6f5273d2bd824b + Mat getClassLabels() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetClassLabels(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ab8c65d4efcb364be41febd8e3c2dae70 + Mat getDefaultSubstValues() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetDefaultSubstValues(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aa2d2889b6dddad5e663cb18b206ac3f1 + int getLayout() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetLayout(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a71f13029c92961dc432fcfeec376ad9a + Mat getMissing() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetMissing(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a4c81aad5723a86d1f9f97e0ca2cf271b + int getNAllVars() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNAllVars(ref, p)); + return p.value; + }); + } + + /// Returns vector of symbolic names captured in [TrainData.loadFromCSV] + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae14e1e1c607472f3c72a5a63679d08cb + List getNames() { + final v = calloc(); + cvRun(() => CFFI.TrainData_GetNames(ref, v)); + return VecVecChar.fromPointer(v).asStringList(); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a2f6bd6ae08ded472532b28e1b1266230 + Mat getNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetNormCatResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a38b6da04d4765000e890d614a01be446 + int getNSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0f3265d83658f7effd2cb4c05fe6b8c8 + int getNTestSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNTestSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac34c8467851769cac20d99cde52f3812 + int getNTrainSamples() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNTrainSamples(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#acafca98ec8fb43ddcec59af1cc906611 + int getNVars() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetNVars(ref, p)); + return p.value; + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a10c5bb5ac7c4b70fbc9db0d3a94684e2 + Mat getResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#afc86c4d4670e535dee2459742f87ea95 + int getResponseType() { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetResponseType(ref, p)); return p.value; }); } + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a86fc3bbc9a6d0fef62ec97b28eb452fe + VecFloat getSample(InputArray varIdx, int sidx) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetSample(ref, varIdx.ref, sidx, p)); + return VecFloat.fromPointer(p); + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a86fc3bbc9a6d0fef62ec97b28eb452fe + Mat getSamples() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSamples(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7ab7348f09a9a44bf1e30df1b979e034 + Mat getSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSampleWeights(ref, m.ptr)); + return m; + } + + /// Extract from matrix rows/cols specified by passed indexes. + /// + /// [matrix] input matrix (supported types: CV_32S, CV_32F, CV_64F) + /// + /// [idx] 1D index vector + /// + /// [layout] specifies to extract rows (cv::ml::ROW_SAMPLES) or to extract columns (cv::ml::COL_SAMPLES) + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac3c8a080653b64495a13913903b4667c + static Mat getSubMatrix(Mat matrix, Mat idx, int layout) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSubMatrix(matrix.ref, idx.ref, layout, m.ptr)); + return m; + } + + /// Extract from 1D vector elements specified by passed indexes. + /// + /// [vec] input vector (supported types: CV_32S, CV_32F, CV_64F) + /// + /// [idx] 1D index vector + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a3d01eda6a2eb795bd7ab223b6d065e52 + static Mat getSubVector(Mat vec, Mat idx) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetSubVector(vec.ref, idx.ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a4fc48158587fe44f863788aefed5d245 + Mat getTestNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestNormCatResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae83fc71c776cd9971463c2e4dbab0427 + Mat getTestResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a923fc78e64e96543bf8ebe87d179ea29 + Mat getTestSampleIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSampleIdx(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ae8549c2b1e3b16b8f0fc64917ffd6fd6 + Mat getTestSamples() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSamples(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#acddb9c4642e9b4f39a4bf1337ceb06f7 + Mat getTestSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTestSampleWeights(ref, m.ptr)); + return m; + } + + /// Returns the vector of normalized categorical responses. + /// + /// The function returns vector of responses. Each response is integer from 0 to -1. The actual label value can be retrieved then from the class label vector, see TrainData::getClassLabels. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0901c9bed4728e3fa29b93a0afa46371 + Mat getTrainNormCatResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainNormCatResponses(ref, m.ptr)); + return m; + } + + /// Returns the vector of responses. + /// + /// The function returns ordered or the original categorical responses. Usually it's used in regression algorithms. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ac248adbafbc43a1c00bfa32e2526cf4c + Mat getTrainResponses() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainResponses(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aaefa64f1e3c208d4dc38127b6739eff7 + Mat getTrainSampleIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSampleIdx(ref, m.ptr)); + return m; + } + + /// Returns matrix of train samples. + /// + /// layout The requested layout. If it's different from the initial one, the matrix is transposed. See ml::SampleTypes. + /// + /// compressSamples if true, the function returns only the training samples (specified by sampleIdx) + /// + /// compressVars if true, the function returns the shorter training samples, containing only the active variables. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#af35073f4d4e0777159c57622df56117c + Mat getTrainSamples([ + int layout = ROW_SAMPLE, + bool compressSamples = true, + bool compressVars = true, + ]) { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSamples(ref, layout, compressSamples, compressVars, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ad2de4f384f28259ac849e289be8d970d + Mat getTrainSampleWeights() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetTrainSampleWeights(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a38d657b15e30bc94124c31cd3c23d816 + VecFloat getValues(int vi, Mat sidx) { + return cvRunArena((arena) { + final p = arena(); + cvRun(() => CFFI.TrainData_GetValues(ref, vi, sidx.ref, p)); + return VecFloat.fromPointer(p); + }); + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#aee63a2fc0f0679e3f8dd65dbc2c2b571 + Mat getVarIdx() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarIdx(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a7d08ff25ec3eed7c970a707e3000d212 + Mat getVarSymbolFlags() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarSymbolFlags(ref, m.ptr)); + return m; + } + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a56959ac3541cd7d8d3bbcba02f8a1308 + Mat getVarType() { + final m = Mat.empty(); + cvRun(() => CFFI.TrainData_GetVarType(ref, m.ptr)); + return m; + } + + /// Splits the training data into the training and test parts. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ab444173f4d980bb3c18d856df706c920 + void setTrainTestSplit(int count, [bool shuffle = true]) => + cvRun(() => CFFI.TrainData_SetTrainTestSplit(ref, count, shuffle)); + + /// Splits the training data into the training and test parts. + /// + /// The function selects a subset of specified relative size and then returns + /// it as the training set. If the function is not called, all the data is used + /// for training. Please, note that for each of TrainData::getTrain* there is + /// corresponding TrainData::getTest*, so that the test subset can be retrieved + /// and processed as well. + /// + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#ad59c8df14e133ba492ff5cbfa21244cc + void setTrainTestSplitRatio(double ratio, [bool shuffle = true]) => + cvRun(() => CFFI.TrainData_SetTrainTestSplitRatio(ref, ratio, shuffle)); + + /// https://docs.opencv.org/4.x/dc/d32/classcv_1_1ml_1_1TrainData.html#a0515ddd44168aa5c42478536375c760b + void shuffleTrainTest() => cvRun(() => CFFI.TrainData_ShuffleTrainTest(ref)); + @override List get props => [ptr.address]; diff --git a/lib/src/opencv.dart b/lib/src/opencv.dart index 51d094bf..cc3b802a 100644 --- a/lib/src/opencv.dart +++ b/lib/src/opencv.dart @@ -37,6 +37,10 @@ export 'imgproc/imgproc.dart'; export 'imgproc/clahe.dart'; export 'imgproc/subdiv2d.dart'; +export 'ml/ann_mlp.dart'; +export 'ml/svm.dart'; +export 'ml/train_data.dart'; + export 'objdetect/objdetect.dart'; export 'photo/photo.dart'; export 'svd/svd.dart'; diff --git a/lib/src/opencv.g.dart b/lib/src/opencv.g.dart index d6864182..79f3ba80 100644 --- a/lib/src/opencv.g.dart +++ b/lib/src/opencv.g.dart @@ -99,7 +99,7 @@ class CvNative { CvStatus Function(AKAZE, Mat, Mat, Mat, ffi.Pointer)>(); CvStatus ANN_MLP_Clear( - ANN_MLP self, + PtrANN_MLP self, ) { return _ANN_MLP_Clear( self, @@ -107,9 +107,10 @@ class CvNative { } late final _ANN_MLP_ClearPtr = - _lookup>('ANN_MLP_Clear'); + _lookup>( + 'ANN_MLP_Clear'); late final _ANN_MLP_Clear = - _ANN_MLP_ClearPtr.asFunction(); + _ANN_MLP_ClearPtr.asFunction(); void ANN_MLP_Close( ffi.Pointer self, @@ -139,24 +140,8 @@ class CvNative { late final _ANN_MLP_Create = _ANN_MLP_CreatePtr.asFunction< CvStatus Function(ffi.Pointer)>(); - CvStatus ANN_MLP_Get( - PtrANN_MLP self, - ffi.Pointer rval, - ) { - return _ANN_MLP_Get( - self, - rval, - ); - } - - late final _ANN_MLP_GetPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_Get'); - late final _ANN_MLP_Get = _ANN_MLP_GetPtr.asFunction< - CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); - CvStatus ANN_MLP_GetAnnealCoolingRatio( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetAnnealCoolingRatio( @@ -166,14 +151,14 @@ class CvNative { } late final _ANN_MLP_GetAnnealCoolingRatioPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetAnnealCoolingRatio'); + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetAnnealCoolingRatio'); late final _ANN_MLP_GetAnnealCoolingRatio = _ANN_MLP_GetAnnealCoolingRatioPtr - .asFunction)>(); + .asFunction)>(); CvStatus ANN_MLP_GetAnnealFinalT( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetAnnealFinalT( @@ -183,14 +168,14 @@ class CvNative { } late final _ANN_MLP_GetAnnealFinalTPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetAnnealFinalT'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetAnnealFinalT'); late final _ANN_MLP_GetAnnealFinalT = _ANN_MLP_GetAnnealFinalTPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetAnnealInitialT( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetAnnealInitialT( @@ -200,14 +185,14 @@ class CvNative { } late final _ANN_MLP_GetAnnealInitialTPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetAnnealInitialT'); + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetAnnealInitialT'); late final _ANN_MLP_GetAnnealInitialT = _ANN_MLP_GetAnnealInitialTPtr - .asFunction)>(); + .asFunction)>(); CvStatus ANN_MLP_GetAnnealItePerStep( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetAnnealItePerStep( @@ -217,13 +202,14 @@ class CvNative { } late final _ANN_MLP_GetAnnealItePerStepPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'ANN_MLP_GetAnnealItePerStep'); late final _ANN_MLP_GetAnnealItePerStep = _ANN_MLP_GetAnnealItePerStepPtr - .asFunction)>(); + .asFunction)>(); CvStatus ANN_MLP_GetBackpropMomentumScale( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetBackpropMomentumScale( @@ -233,15 +219,15 @@ class CvNative { } late final _ANN_MLP_GetBackpropMomentumScalePtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetBackpropMomentumScale'); + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetBackpropMomentumScale'); late final _ANN_MLP_GetBackpropMomentumScale = _ANN_MLP_GetBackpropMomentumScalePtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetBackpropWeightScale( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetBackpropWeightScale( @@ -251,15 +237,15 @@ class CvNative { } late final _ANN_MLP_GetBackpropWeightScalePtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetBackpropWeightScale'); + ffi.NativeFunction< + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetBackpropWeightScale'); late final _ANN_MLP_GetBackpropWeightScale = _ANN_MLP_GetBackpropWeightScalePtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetLayerSizes( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetLayerSizes( @@ -268,14 +254,14 @@ class CvNative { ); } - late final _ANN_MLP_GetLayerSizesPtr = - _lookup)>>( - 'ANN_MLP_GetLayerSizes'); + late final _ANN_MLP_GetLayerSizesPtr = _lookup< + ffi.NativeFunction)>>( + 'ANN_MLP_GetLayerSizes'); late final _ANN_MLP_GetLayerSizes = _ANN_MLP_GetLayerSizesPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetRpropDW0( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetRpropDW0( @@ -285,14 +271,14 @@ class CvNative { } late final _ANN_MLP_GetRpropDW0Ptr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetRpropDW0'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDW0'); late final _ANN_MLP_GetRpropDW0 = _ANN_MLP_GetRpropDW0Ptr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetRpropDWMax( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetRpropDWMax( @@ -302,14 +288,14 @@ class CvNative { } late final _ANN_MLP_GetRpropDWMaxPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetRpropDWMax'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMax'); late final _ANN_MLP_GetRpropDWMax = _ANN_MLP_GetRpropDWMaxPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetRpropDWMin( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetRpropDWMin( @@ -319,14 +305,14 @@ class CvNative { } late final _ANN_MLP_GetRpropDWMinPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetRpropDWMin'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMin'); late final _ANN_MLP_GetRpropDWMin = _ANN_MLP_GetRpropDWMinPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetRpropDWMinus( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetRpropDWMinus( @@ -336,14 +322,14 @@ class CvNative { } late final _ANN_MLP_GetRpropDWMinusPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetRpropDWMinus'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWMinus'); late final _ANN_MLP_GetRpropDWMinus = _ANN_MLP_GetRpropDWMinusPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetRpropDWPlus( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetRpropDWPlus( @@ -353,14 +339,14 @@ class CvNative { } late final _ANN_MLP_GetRpropDWPlusPtr = _lookup< - ffi - .NativeFunction)>>( - 'ANN_MLP_GetRpropDWPlus'); + ffi.NativeFunction< + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_GetRpropDWPlus'); late final _ANN_MLP_GetRpropDWPlus = _ANN_MLP_GetRpropDWPlusPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetTermCriteria( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetTermCriteria( @@ -371,13 +357,13 @@ class CvNative { late final _ANN_MLP_GetTermCriteriaPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - ANN_MLP, ffi.Pointer)>>('ANN_MLP_GetTermCriteria'); + CvStatus Function(PtrANN_MLP, + ffi.Pointer)>>('ANN_MLP_GetTermCriteria'); late final _ANN_MLP_GetTermCriteria = _ANN_MLP_GetTermCriteriaPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_GetTrainMethod( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer rval, ) { return _ANN_MLP_GetTrainMethod( @@ -387,49 +373,51 @@ class CvNative { } late final _ANN_MLP_GetTrainMethodPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'ANN_MLP_GetTrainMethod'); late final _ANN_MLP_GetTrainMethod = _ANN_MLP_GetTrainMethodPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_Load( - ANN_MLP self, ffi.Pointer filepath, + ffi.Pointer rval, ) { return _ANN_MLP_Load( - self, filepath, + rval, ); } late final _ANN_MLP_LoadPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>>('ANN_MLP_Load'); + CvStatus Function( + ffi.Pointer, ffi.Pointer)>>('ANN_MLP_Load'); late final _ANN_MLP_Load = _ANN_MLP_LoadPtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); CvStatus ANN_MLP_LoadFromString( - ANN_MLP self, ffi.Pointer strModel, ffi.Pointer objname, + ffi.Pointer rval, ) { return _ANN_MLP_LoadFromString( - self, strModel, objname, + rval, ); } late final _ANN_MLP_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, ffi.Pointer, - ffi.Pointer)>>('ANN_MLP_LoadFromString'); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('ANN_MLP_LoadFromString'); late final _ANN_MLP_LoadFromString = _ANN_MLP_LoadFromStringPtr.asFunction< - CvStatus Function( - ANN_MLP, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); CvStatus ANN_MLP_Predict( - ANN_MLP self, + PtrANN_MLP self, Mat samples, Mat results, int flags, @@ -446,13 +434,13 @@ class CvNative { late final _ANN_MLP_PredictPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, Mat, Mat, ffi.Int, + CvStatus Function(PtrANN_MLP, Mat, Mat, ffi.Int, ffi.Pointer)>>('ANN_MLP_Predict'); late final _ANN_MLP_Predict = _ANN_MLP_PredictPtr.asFunction< - CvStatus Function(ANN_MLP, Mat, Mat, int, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, Mat, Mat, int, ffi.Pointer)>(); CvStatus ANN_MLP_Save( - ANN_MLP self, + PtrANN_MLP self, ffi.Pointer filename, ) { return _ANN_MLP_Save( @@ -463,12 +451,13 @@ class CvNative { late final _ANN_MLP_SavePtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>>('ANN_MLP_Save'); + CvStatus Function( + PtrANN_MLP, ffi.Pointer)>>('ANN_MLP_Save'); late final _ANN_MLP_Save = _ANN_MLP_SavePtr.asFunction< - CvStatus Function(ANN_MLP, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, ffi.Pointer)>(); CvStatus ANN_MLP_SetActivationFunction( - ANN_MLP self, + PtrANN_MLP self, int type, double param1, double param2, @@ -483,13 +472,13 @@ class CvNative { late final _ANN_MLP_SetActivationFunctionPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, ffi.Int, ffi.Double, + CvStatus Function(PtrANN_MLP, ffi.Int, ffi.Double, ffi.Double)>>('ANN_MLP_SetActivationFunction'); late final _ANN_MLP_SetActivationFunction = _ANN_MLP_SetActivationFunctionPtr - .asFunction(); + .asFunction(); CvStatus ANN_MLP_SetAnnealCoolingRatio( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetAnnealCoolingRatio( @@ -499,13 +488,13 @@ class CvNative { } late final _ANN_MLP_SetAnnealCoolingRatioPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetAnnealCoolingRatio'); late final _ANN_MLP_SetAnnealCoolingRatio = _ANN_MLP_SetAnnealCoolingRatioPtr - .asFunction(); + .asFunction(); CvStatus ANN_MLP_SetAnnealFinalT( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetAnnealFinalT( @@ -515,13 +504,13 @@ class CvNative { } late final _ANN_MLP_SetAnnealFinalTPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetAnnealFinalT'); late final _ANN_MLP_SetAnnealFinalT = _ANN_MLP_SetAnnealFinalTPtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetAnnealInitialT( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetAnnealInitialT( @@ -531,13 +520,13 @@ class CvNative { } late final _ANN_MLP_SetAnnealInitialTPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetAnnealInitialT'); late final _ANN_MLP_SetAnnealInitialT = _ANN_MLP_SetAnnealInitialTPtr - .asFunction(); + .asFunction(); CvStatus ANN_MLP_SetAnnealItePerStep( - ANN_MLP self, + PtrANN_MLP self, int val, ) { return _ANN_MLP_SetAnnealItePerStep( @@ -547,13 +536,13 @@ class CvNative { } late final _ANN_MLP_SetAnnealItePerStepPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetAnnealItePerStep'); late final _ANN_MLP_SetAnnealItePerStep = _ANN_MLP_SetAnnealItePerStepPtr - .asFunction(); + .asFunction(); CvStatus ANN_MLP_SetBackpropMomentumScale( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetBackpropMomentumScale( @@ -563,14 +552,14 @@ class CvNative { } late final _ANN_MLP_SetBackpropMomentumScalePtr = - _lookup>( + _lookup>( 'ANN_MLP_SetBackpropMomentumScale'); late final _ANN_MLP_SetBackpropMomentumScale = _ANN_MLP_SetBackpropMomentumScalePtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetBackpropWeightScale( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetBackpropWeightScale( @@ -580,14 +569,14 @@ class CvNative { } late final _ANN_MLP_SetBackpropWeightScalePtr = - _lookup>( + _lookup>( 'ANN_MLP_SetBackpropWeightScale'); late final _ANN_MLP_SetBackpropWeightScale = _ANN_MLP_SetBackpropWeightScalePtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetLayerSizes( - ANN_MLP self, + PtrANN_MLP self, Mat _layer_sizes, ) { return _ANN_MLP_SetLayerSizes( @@ -597,13 +586,13 @@ class CvNative { } late final _ANN_MLP_SetLayerSizesPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetLayerSizes'); - late final _ANN_MLP_SetLayerSizes = - _ANN_MLP_SetLayerSizesPtr.asFunction(); + late final _ANN_MLP_SetLayerSizes = _ANN_MLP_SetLayerSizesPtr.asFunction< + CvStatus Function(PtrANN_MLP, Mat)>(); CvStatus ANN_MLP_SetRpropDW0( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetRpropDW0( @@ -613,13 +602,13 @@ class CvNative { } late final _ANN_MLP_SetRpropDW0Ptr = - _lookup>( + _lookup>( 'ANN_MLP_SetRpropDW0'); - late final _ANN_MLP_SetRpropDW0 = - _ANN_MLP_SetRpropDW0Ptr.asFunction(); + late final _ANN_MLP_SetRpropDW0 = _ANN_MLP_SetRpropDW0Ptr.asFunction< + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetRpropDWMax( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetRpropDWMax( @@ -629,13 +618,13 @@ class CvNative { } late final _ANN_MLP_SetRpropDWMaxPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetRpropDWMax'); late final _ANN_MLP_SetRpropDWMax = _ANN_MLP_SetRpropDWMaxPtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetRpropDWMin( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetRpropDWMin( @@ -645,13 +634,13 @@ class CvNative { } late final _ANN_MLP_SetRpropDWMinPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetRpropDWMin'); late final _ANN_MLP_SetRpropDWMin = _ANN_MLP_SetRpropDWMinPtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetRpropDWMinus( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetRpropDWMinus( @@ -661,13 +650,13 @@ class CvNative { } late final _ANN_MLP_SetRpropDWMinusPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetRpropDWMinus'); late final _ANN_MLP_SetRpropDWMinus = _ANN_MLP_SetRpropDWMinusPtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetRpropDWPlus( - ANN_MLP self, + PtrANN_MLP self, double val, ) { return _ANN_MLP_SetRpropDWPlus( @@ -677,13 +666,13 @@ class CvNative { } late final _ANN_MLP_SetRpropDWPlusPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetRpropDWPlus'); late final _ANN_MLP_SetRpropDWPlus = _ANN_MLP_SetRpropDWPlusPtr.asFunction< - CvStatus Function(ANN_MLP, double)>(); + CvStatus Function(PtrANN_MLP, double)>(); CvStatus ANN_MLP_SetTermCriteria( - ANN_MLP self, + PtrANN_MLP self, TermCriteria val, ) { return _ANN_MLP_SetTermCriteria( @@ -693,13 +682,13 @@ class CvNative { } late final _ANN_MLP_SetTermCriteriaPtr = - _lookup>( + _lookup>( 'ANN_MLP_SetTermCriteria'); late final _ANN_MLP_SetTermCriteria = _ANN_MLP_SetTermCriteriaPtr.asFunction< - CvStatus Function(ANN_MLP, TermCriteria)>(); + CvStatus Function(PtrANN_MLP, TermCriteria)>(); CvStatus ANN_MLP_SetTrainMethod( - ANN_MLP self, + PtrANN_MLP self, int method, double param1, double param2, @@ -714,13 +703,13 @@ class CvNative { late final _ANN_MLP_SetTrainMethodPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, ffi.Int, ffi.Double, + CvStatus Function(PtrANN_MLP, ffi.Int, ffi.Double, ffi.Double)>>('ANN_MLP_SetTrainMethod'); late final _ANN_MLP_SetTrainMethod = _ANN_MLP_SetTrainMethodPtr.asFunction< - CvStatus Function(ANN_MLP, int, double, double)>(); + CvStatus Function(PtrANN_MLP, int, double, double)>(); CvStatus ANN_MLP_Train( - ANN_MLP self, + PtrANN_MLP self, PtrTrainData trainData, int flags, ffi.Pointer rval, @@ -735,13 +724,14 @@ class CvNative { late final _ANN_MLP_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, PtrTrainData, ffi.Int, + CvStatus Function(PtrANN_MLP, PtrTrainData, ffi.Int, ffi.Pointer)>>('ANN_MLP_Train'); late final _ANN_MLP_Train = _ANN_MLP_TrainPtr.asFunction< - CvStatus Function(ANN_MLP, PtrTrainData, int, ffi.Pointer)>(); + CvStatus Function( + PtrANN_MLP, PtrTrainData, int, ffi.Pointer)>(); CvStatus ANN_MLP_Train_1( - ANN_MLP self, + PtrANN_MLP self, Mat samples, int layout, Mat responses, @@ -758,10 +748,10 @@ class CvNative { late final _ANN_MLP_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(ANN_MLP, Mat, ffi.Int, Mat, + CvStatus Function(PtrANN_MLP, Mat, ffi.Int, Mat, ffi.Pointer)>>('ANN_MLP_Train_1'); late final _ANN_MLP_Train_1 = _ANN_MLP_Train_1Ptr.asFunction< - CvStatus Function(ANN_MLP, Mat, int, Mat, ffi.Pointer)>(); + CvStatus Function(PtrANN_MLP, Mat, int, Mat, ffi.Pointer)>(); CvStatus AdaptiveThreshold( Mat src, @@ -14503,7 +14493,7 @@ class CvNative { void Function(ffi.Pointer)>(); CvStatus ParamGrid_Empty( - ffi.Pointer rval, + ffi.Pointer rval, ) { return _ParamGrid_Empty( rval, @@ -14511,13 +14501,13 @@ class CvNative { } late final _ParamGrid_EmptyPtr = - _lookup)>>( + _lookup)>>( 'ParamGrid_Empty'); late final _ParamGrid_Empty = _ParamGrid_EmptyPtr.asFunction< - CvStatus Function(ffi.Pointer)>(); + CvStatus Function(ffi.Pointer)>(); CvStatus ParamGrid_GetLogStep( - ParamGrid self, + PtrParamGrid self, ffi.Pointer rval, ) { return _ParamGrid_GetLogStep( @@ -14529,12 +14519,12 @@ class CvNative { late final _ParamGrid_GetLogStepPtr = _lookup< ffi.NativeFunction< CvStatus Function( - ParamGrid, ffi.Pointer)>>('ParamGrid_GetLogStep'); + PtrParamGrid, ffi.Pointer)>>('ParamGrid_GetLogStep'); late final _ParamGrid_GetLogStep = _ParamGrid_GetLogStepPtr.asFunction< - CvStatus Function(ParamGrid, ffi.Pointer)>(); + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); CvStatus ParamGrid_GetMaxVal( - ParamGrid self, + PtrParamGrid self, ffi.Pointer rval, ) { return _ParamGrid_GetMaxVal( @@ -14546,15 +14536,15 @@ class CvNative { late final _ParamGrid_GetMaxValPtr = _lookup< ffi.NativeFunction< CvStatus Function( - ParamGrid, ffi.Pointer)>>('ParamGrid_GetMaxVal'); + PtrParamGrid, ffi.Pointer)>>('ParamGrid_GetMaxVal'); late final _ParamGrid_GetMaxVal = _ParamGrid_GetMaxValPtr.asFunction< - CvStatus Function(ParamGrid, ffi.Pointer)>(); + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); CvStatus ParamGrid_New( double minVal, double maxVal, double logstep, - ffi.Pointer rval, + ffi.Pointer rval, ) { return _ParamGrid_New( minVal, @@ -14567,12 +14557,12 @@ class CvNative { late final _ParamGrid_NewPtr = _lookup< ffi.NativeFunction< CvStatus Function(ffi.Double, ffi.Double, ffi.Double, - ffi.Pointer)>>('ParamGrid_New'); + ffi.Pointer)>>('ParamGrid_New'); late final _ParamGrid_New = _ParamGrid_NewPtr.asFunction< - CvStatus Function(double, double, double, ffi.Pointer)>(); + CvStatus Function(double, double, double, ffi.Pointer)>(); CvStatus ParamGrid_getMinVal( - ParamGrid self, + PtrParamGrid self, ffi.Pointer rval, ) { return _ParamGrid_getMinVal( @@ -14584,9 +14574,9 @@ class CvNative { late final _ParamGrid_getMinValPtr = _lookup< ffi.NativeFunction< CvStatus Function( - ParamGrid, ffi.Pointer)>>('ParamGrid_getMinVal'); + PtrParamGrid, ffi.Pointer)>>('ParamGrid_getMinVal'); late final _ParamGrid_getMinVal = _ParamGrid_getMinValPtr.asFunction< - CvStatus Function(ParamGrid, ffi.Pointer)>(); + CvStatus Function(PtrParamGrid, ffi.Pointer)>(); CvStatus PencilSketch( Mat src, @@ -16154,7 +16144,7 @@ class CvNative { CvStatus Function(SVMSGD, Mat, int, Mat, ffi.Pointer)>(); CvStatus SVM_CalcError( - SVM self, + PtrSVM self, PtrTrainData data, bool test, Mat resp, @@ -16171,14 +16161,14 @@ class CvNative { late final _SVM_CalcErrorPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SVM, PtrTrainData, ffi.Bool, Mat, + CvStatus Function(PtrSVM, PtrTrainData, ffi.Bool, Mat, ffi.Pointer)>>('SVM_CalcError'); late final _SVM_CalcError = _SVM_CalcErrorPtr.asFunction< CvStatus Function( - SVM, PtrTrainData, bool, Mat, ffi.Pointer)>(); + PtrSVM, PtrTrainData, bool, Mat, ffi.Pointer)>(); CvStatus SVM_Clear( - SVM self, + PtrSVM self, ) { return _SVM_Clear( self, @@ -16186,8 +16176,8 @@ class CvNative { } late final _SVM_ClearPtr = - _lookup>('SVM_Clear'); - late final _SVM_Clear = _SVM_ClearPtr.asFunction(); + _lookup>('SVM_Clear'); + late final _SVM_Clear = _SVM_ClearPtr.asFunction(); void SVM_Close( ffi.Pointer self, @@ -16218,7 +16208,7 @@ class CvNative { _SVM_CreatePtr.asFunction)>(); CvStatus SVM_Empty( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_Empty( @@ -16228,29 +16218,13 @@ class CvNative { } late final _SVM_EmptyPtr = _lookup< - ffi.NativeFunction)>>( + ffi.NativeFunction)>>( 'SVM_Empty'); - late final _SVM_Empty = - _SVM_EmptyPtr.asFunction)>(); - - CvStatus SVM_Get( - PtrSVM self, - ffi.Pointer rval, - ) { - return _SVM_Get( - self, - rval, - ); - } - - late final _SVM_GetPtr = - _lookup)>>( - 'SVM_Get'); - late final _SVM_Get = - _SVM_GetPtr.asFunction)>(); + late final _SVM_Empty = _SVM_EmptyPtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetC( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetC( @@ -16260,13 +16234,13 @@ class CvNative { } late final _SVM_GetCPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetC'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetC'); late final _SVM_GetC = _SVM_GetCPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetClassWeights( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetClassWeights( @@ -16276,13 +16250,13 @@ class CvNative { } late final _SVM_GetClassWeightsPtr = - _lookup)>>( + _lookup)>>( 'SVM_GetClassWeights'); late final _SVM_GetClassWeights = _SVM_GetClassWeightsPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetCoef0( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetCoef0( @@ -16292,13 +16266,13 @@ class CvNative { } late final _SVM_GetCoef0Ptr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetCoef0'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetCoef0'); late final _SVM_GetCoef0 = _SVM_GetCoef0Ptr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetDecisionFunction( - SVM self, + PtrSVM self, int i, Mat alpha, Mat svidx, @@ -16315,36 +16289,17 @@ class CvNative { late final _SVM_GetDecisionFunctionPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SVM, ffi.Int, Mat, Mat, + CvStatus Function(PtrSVM, ffi.Int, Mat, Mat, ffi.Pointer)>>('SVM_GetDecisionFunction'); late final _SVM_GetDecisionFunction = _SVM_GetDecisionFunctionPtr.asFunction< - CvStatus Function(SVM, int, Mat, Mat, ffi.Pointer)>(); - - CvStatus SVM_GetDefaultGrid( - SVM self, - int param_id, - ffi.Pointer rval, - ) { - return _SVM_GetDefaultGrid( - self, - param_id, - rval, - ); - } - - late final _SVM_GetDefaultGridPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - SVM, ffi.Int, ffi.Pointer)>>('SVM_GetDefaultGrid'); - late final _SVM_GetDefaultGrid = _SVM_GetDefaultGridPtr.asFunction< - CvStatus Function(SVM, int, ffi.Pointer)>(); + CvStatus Function(PtrSVM, int, Mat, Mat, ffi.Pointer)>(); CvStatus SVM_GetDefaultGridPtr( - SVM self, + PtrSVM self, int param_id, ffi.Pointer rval, ) { - return _SVM_GetDefaultGridPtr1( + return _SVM_GetDefaultGridPtr( self, param_id, rval, @@ -16353,13 +16308,13 @@ class CvNative { late final _SVM_GetDefaultGridPtrPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SVM, ffi.Int, + CvStatus Function(PtrSVM, ffi.Int, ffi.Pointer)>>('SVM_GetDefaultGridPtr'); - late final _SVM_GetDefaultGridPtr1 = _SVM_GetDefaultGridPtrPtr.asFunction< - CvStatus Function(SVM, int, ffi.Pointer)>(); + late final _SVM_GetDefaultGridPtr = _SVM_GetDefaultGridPtrPtr.asFunction< + CvStatus Function(PtrSVM, int, ffi.Pointer)>(); CvStatus SVM_GetDefaultName( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetDefaultName( @@ -16369,13 +16324,13 @@ class CvNative { } late final _SVM_GetDefaultNamePtr = _lookup< - ffi.NativeFunction)>>( + ffi.NativeFunction)>>( 'SVM_GetDefaultName'); late final _SVM_GetDefaultName = _SVM_GetDefaultNamePtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetDegree( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetDegree( @@ -16385,13 +16340,13 @@ class CvNative { } late final _SVM_GetDegreePtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetDegree'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetDegree'); late final _SVM_GetDegree = _SVM_GetDegreePtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetGamma( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetGamma( @@ -16401,13 +16356,13 @@ class CvNative { } late final _SVM_GetGammaPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetGamma'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetGamma'); late final _SVM_GetGamma = _SVM_GetGammaPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetKernelType( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetKernelType( @@ -16416,14 +16371,14 @@ class CvNative { ); } - late final _SVM_GetKernelTypePtr = - _lookup)>>( - 'SVM_GetKernelType'); + late final _SVM_GetKernelTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetKernelType'); late final _SVM_GetKernelType = _SVM_GetKernelTypePtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetNu( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetNu( @@ -16433,13 +16388,13 @@ class CvNative { } late final _SVM_GetNuPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetNu'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetNu'); late final _SVM_GetNu = _SVM_GetNuPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetP( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetP( @@ -16449,13 +16404,13 @@ class CvNative { } late final _SVM_GetPPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_GetP'); + ffi.NativeFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>>('SVM_GetP'); late final _SVM_GetP = _SVM_GetPPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetSupportVectors( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetSupportVectors( @@ -16465,13 +16420,13 @@ class CvNative { } late final _SVM_GetSupportVectorsPtr = - _lookup)>>( + _lookup)>>( 'SVM_GetSupportVectors'); late final _SVM_GetSupportVectors = _SVM_GetSupportVectorsPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetTermCriteria( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetTermCriteria( @@ -16481,14 +16436,14 @@ class CvNative { } late final _SVM_GetTermCriteriaPtr = _lookup< - ffi - .NativeFunction)>>( - 'SVM_GetTermCriteria'); + ffi.NativeFunction< + CvStatus Function( + PtrSVM, ffi.Pointer)>>('SVM_GetTermCriteria'); late final _SVM_GetTermCriteria = _SVM_GetTermCriteriaPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetType( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetType( @@ -16497,14 +16452,14 @@ class CvNative { ); } - late final _SVM_GetTypePtr = - _lookup)>>( - 'SVM_GetType'); + late final _SVM_GetTypePtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetType'); late final _SVM_GetType = _SVM_GetTypePtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetUncompressedSupportVectors( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetUncompressedSupportVectors( @@ -16514,14 +16469,14 @@ class CvNative { } late final _SVM_GetUncompressedSupportVectorsPtr = - _lookup)>>( + _lookup)>>( 'SVM_GetUncompressedSupportVectors'); late final _SVM_GetUncompressedSupportVectors = _SVM_GetUncompressedSupportVectorsPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_GetVarCount( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_GetVarCount( @@ -16530,14 +16485,14 @@ class CvNative { ); } - late final _SVM_GetVarCountPtr = - _lookup)>>( - 'SVM_GetVarCount'); + late final _SVM_GetVarCountPtr = _lookup< + ffi.NativeFunction)>>( + 'SVM_GetVarCount'); late final _SVM_GetVarCount = _SVM_GetVarCountPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_IsClassifier( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_IsClassifier( @@ -16547,13 +16502,13 @@ class CvNative { } late final _SVM_IsClassifierPtr = _lookup< - ffi.NativeFunction)>>( + ffi.NativeFunction)>>( 'SVM_IsClassifier'); late final _SVM_IsClassifier = _SVM_IsClassifierPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_IsTrained( - SVM self, + PtrSVM self, ffi.Pointer rval, ) { return _SVM_IsTrained( @@ -16563,48 +16518,50 @@ class CvNative { } late final _SVM_IsTrainedPtr = _lookup< - ffi.NativeFunction)>>( + ffi.NativeFunction)>>( 'SVM_IsTrained'); late final _SVM_IsTrained = _SVM_IsTrainedPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer)>(); + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_Load( - SVM self, ffi.Pointer filepath, + ffi.Pointer rval, ) { return _SVM_Load( - self, filepath, + rval, ); } late final _SVM_LoadPtr = _lookup< - ffi.NativeFunction)>>( - 'SVM_Load'); - late final _SVM_Load = - _SVM_LoadPtr.asFunction)>(); + ffi.NativeFunction< + CvStatus Function( + ffi.Pointer, ffi.Pointer)>>('SVM_Load'); + late final _SVM_Load = _SVM_LoadPtr.asFunction< + CvStatus Function(ffi.Pointer, ffi.Pointer)>(); CvStatus SVM_LoadFromString( - SVM self, ffi.Pointer strModel, ffi.Pointer objname, + ffi.Pointer rval, ) { return _SVM_LoadFromString( - self, strModel, objname, + rval, ); } late final _SVM_LoadFromStringPtr = _lookup< ffi.NativeFunction< - CvStatus Function(SVM, ffi.Pointer, - ffi.Pointer)>>('SVM_LoadFromString'); + CvStatus Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('SVM_LoadFromString'); late final _SVM_LoadFromString = _SVM_LoadFromStringPtr.asFunction< - CvStatus Function(SVM, ffi.Pointer, ffi.Pointer)>(); + CvStatus Function( + ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); CvStatus SVM_Predict( - SVM self, + PtrSVM self, Mat samples, Mat results, int flags, @@ -16621,13 +16578,13 @@ class CvNative { late final _SVM_PredictPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - SVM, Mat, Mat, ffi.Int, ffi.Pointer)>>('SVM_Predict'); + CvStatus Function(PtrSVM, Mat, Mat, ffi.Int, + ffi.Pointer)>>('SVM_Predict'); late final _SVM_Predict = _SVM_PredictPtr.asFunction< - CvStatus Function(SVM, Mat, Mat, int, ffi.Pointer)>(); + CvStatus Function(PtrSVM, Mat, Mat, int, ffi.Pointer)>(); CvStatus SVM_Save( - SVM self, + PtrSVM self, ffi.Pointer filename, ) { return _SVM_Save( @@ -16637,13 +16594,13 @@ class CvNative { } late final _SVM_SavePtr = _lookup< - ffi.NativeFunction)>>( + ffi.NativeFunction)>>( 'SVM_Save'); - late final _SVM_Save = - _SVM_SavePtr.asFunction)>(); + late final _SVM_Save = _SVM_SavePtr.asFunction< + CvStatus Function(PtrSVM, ffi.Pointer)>(); CvStatus SVM_SetC( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetC( @@ -16653,13 +16610,13 @@ class CvNative { } late final _SVM_SetCPtr = - _lookup>( + _lookup>( 'SVM_SetC'); late final _SVM_SetC = - _SVM_SetCPtr.asFunction(); + _SVM_SetCPtr.asFunction(); CvStatus SVM_SetClassWeights( - SVM self, + PtrSVM self, Mat val, ) { return _SVM_SetClassWeights( @@ -16669,13 +16626,13 @@ class CvNative { } late final _SVM_SetClassWeightsPtr = - _lookup>( + _lookup>( 'SVM_SetClassWeights'); late final _SVM_SetClassWeights = - _SVM_SetClassWeightsPtr.asFunction(); + _SVM_SetClassWeightsPtr.asFunction(); CvStatus SVM_SetCoef0( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetCoef0( @@ -16685,13 +16642,13 @@ class CvNative { } late final _SVM_SetCoef0Ptr = - _lookup>( + _lookup>( 'SVM_SetCoef0'); late final _SVM_SetCoef0 = - _SVM_SetCoef0Ptr.asFunction(); + _SVM_SetCoef0Ptr.asFunction(); CvStatus SVM_SetDegree( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetDegree( @@ -16701,13 +16658,13 @@ class CvNative { } late final _SVM_SetDegreePtr = - _lookup>( + _lookup>( 'SVM_SetDegree'); late final _SVM_SetDegree = - _SVM_SetDegreePtr.asFunction(); + _SVM_SetDegreePtr.asFunction(); CvStatus SVM_SetGamma( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetGamma( @@ -16717,13 +16674,13 @@ class CvNative { } late final _SVM_SetGammaPtr = - _lookup>( + _lookup>( 'SVM_SetGamma'); late final _SVM_SetGamma = - _SVM_SetGammaPtr.asFunction(); + _SVM_SetGammaPtr.asFunction(); CvStatus SVM_SetKernel( - SVM self, + PtrSVM self, int kernelType, ) { return _SVM_SetKernel( @@ -16733,13 +16690,13 @@ class CvNative { } late final _SVM_SetKernelPtr = - _lookup>( + _lookup>( 'SVM_SetKernel'); late final _SVM_SetKernel = - _SVM_SetKernelPtr.asFunction(); + _SVM_SetKernelPtr.asFunction(); CvStatus SVM_SetNu( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetNu( @@ -16749,13 +16706,13 @@ class CvNative { } late final _SVM_SetNuPtr = - _lookup>( + _lookup>( 'SVM_SetNu'); late final _SVM_SetNu = - _SVM_SetNuPtr.asFunction(); + _SVM_SetNuPtr.asFunction(); CvStatus SVM_SetP( - SVM self, + PtrSVM self, double val, ) { return _SVM_SetP( @@ -16765,13 +16722,13 @@ class CvNative { } late final _SVM_SetPPtr = - _lookup>( + _lookup>( 'SVM_SetP'); late final _SVM_SetP = - _SVM_SetPPtr.asFunction(); + _SVM_SetPPtr.asFunction(); CvStatus SVM_SetTermCriteria( - SVM self, + PtrSVM self, TermCriteria val, ) { return _SVM_SetTermCriteria( @@ -16781,13 +16738,13 @@ class CvNative { } late final _SVM_SetTermCriteriaPtr = - _lookup>( + _lookup>( 'SVM_SetTermCriteria'); late final _SVM_SetTermCriteria = _SVM_SetTermCriteriaPtr.asFunction< - CvStatus Function(SVM, TermCriteria)>(); + CvStatus Function(PtrSVM, TermCriteria)>(); CvStatus SVM_SetType( - SVM self, + PtrSVM self, int val, ) { return _SVM_SetType( @@ -16797,13 +16754,13 @@ class CvNative { } late final _SVM_SetTypePtr = - _lookup>( + _lookup>( 'SVM_SetType'); late final _SVM_SetType = - _SVM_SetTypePtr.asFunction(); + _SVM_SetTypePtr.asFunction(); CvStatus SVM_Train( - SVM self, + PtrSVM self, PtrTrainData trainData, int flags, ffi.Pointer rval, @@ -16818,21 +16775,21 @@ class CvNative { late final _SVM_TrainPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - SVM, PtrTrainData, ffi.Int, ffi.Pointer)>>('SVM_Train'); + CvStatus Function(PtrSVM, PtrTrainData, ffi.Int, + ffi.Pointer)>>('SVM_Train'); late final _SVM_Train = _SVM_TrainPtr.asFunction< - CvStatus Function(SVM, PtrTrainData, int, ffi.Pointer)>(); + CvStatus Function(PtrSVM, PtrTrainData, int, ffi.Pointer)>(); CvStatus SVM_TrainAuto( - SVM self, + PtrSVM self, PtrTrainData data, int kFold, - ParamGrid Cgrid, - ParamGrid gammaGrid, - ParamGrid pGrid, - ParamGrid nuGrid, - ParamGrid coeffGrid, - ParamGrid degreeGrid, + PtrParamGrid Cgrid, + PtrParamGrid gammaGrid, + PtrParamGrid pGrid, + PtrParamGrid nuGrid, + PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, ffi.Pointer rval, ) { @@ -16854,23 +16811,33 @@ class CvNative { late final _SVM_TrainAutoPtr = _lookup< ffi.NativeFunction< CvStatus Function( - SVM, + PtrSVM, PtrTrainData, ffi.Int, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, - ParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, ffi.Bool, ffi.Pointer)>>('SVM_TrainAuto'); late final _SVM_TrainAuto = _SVM_TrainAutoPtr.asFunction< - CvStatus Function(SVM, PtrTrainData, int, ParamGrid, ParamGrid, ParamGrid, - ParamGrid, ParamGrid, ParamGrid, bool, ffi.Pointer)>(); + CvStatus Function( + PtrSVM, + PtrTrainData, + int, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + PtrParamGrid, + bool, + ffi.Pointer)>(); CvStatus SVM_TrainAuto_1( - SVM self, + PtrSVM self, Mat samples, int layout, Mat responses, @@ -16904,7 +16871,7 @@ class CvNative { late final _SVM_TrainAuto_1Ptr = _lookup< ffi.NativeFunction< CvStatus Function( - SVM, + PtrSVM, Mat, ffi.Int, Mat, @@ -16919,7 +16886,7 @@ class CvNative { ffi.Pointer)>>('SVM_TrainAuto_1'); late final _SVM_TrainAuto_1 = _SVM_TrainAuto_1Ptr.asFunction< CvStatus Function( - SVM, + PtrSVM, Mat, int, Mat, @@ -16934,7 +16901,7 @@ class CvNative { ffi.Pointer)>(); CvStatus SVM_Train_1( - SVM self, + PtrSVM self, Mat samples, int layout, Mat responses, @@ -16951,10 +16918,10 @@ class CvNative { late final _SVM_Train_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function( - SVM, Mat, ffi.Int, Mat, ffi.Pointer)>>('SVM_Train_1'); + CvStatus Function(PtrSVM, Mat, ffi.Int, Mat, + ffi.Pointer)>>('SVM_Train_1'); late final _SVM_Train_1 = _SVM_Train_1Ptr.asFunction< - CvStatus Function(SVM, Mat, int, Mat, ffi.Pointer)>(); + CvStatus Function(PtrSVM, Mat, int, Mat, ffi.Pointer)>(); CvStatus Scharr( Mat src, @@ -17240,7 +17207,7 @@ class CvNative { _Stitcher_ClosePtr.asFunction)>(); CvStatus Stitcher_Component( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_Component( @@ -17250,13 +17217,14 @@ class CvNative { } late final _Stitcher_ComponentPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'Stitcher_Component'); late final _Stitcher_Component = _Stitcher_ComponentPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, ffi.Pointer)>(); CvStatus Stitcher_ComposePanorama( - Stitcher self, + PtrStitcher self, Mat rpano, ffi.Pointer rval, ) { @@ -17269,13 +17237,13 @@ class CvNative { late final _Stitcher_ComposePanoramaPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, Mat, + CvStatus Function(PtrStitcher, Mat, ffi.Pointer)>>('Stitcher_ComposePanorama'); late final _Stitcher_ComposePanorama = _Stitcher_ComposePanoramaPtr - .asFunction)>(); + .asFunction)>(); CvStatus Stitcher_ComposePanorama_1( - Stitcher self, + PtrStitcher self, VecMat mats, Mat rpano, ffi.Pointer rval, @@ -17290,11 +17258,11 @@ class CvNative { late final _Stitcher_ComposePanorama_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, Mat, + CvStatus Function(PtrStitcher, VecMat, Mat, ffi.Pointer)>>('Stitcher_ComposePanorama_1'); late final _Stitcher_ComposePanorama_1 = _Stitcher_ComposePanorama_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, VecMat, Mat, ffi.Pointer)>(); CvStatus Stitcher_Create( int mode, @@ -17314,7 +17282,7 @@ class CvNative { CvStatus Function(int, ffi.Pointer)>(); CvStatus Stitcher_EstimateTransform( - Stitcher self, + PtrStitcher self, VecMat mats, VecMat masks, ffi.Pointer rval, @@ -17329,31 +17297,15 @@ class CvNative { late final _Stitcher_EstimateTransformPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, + CvStatus Function(PtrStitcher, VecMat, VecMat, ffi.Pointer)>>('Stitcher_EstimateTransform'); late final _Stitcher_EstimateTransform = _Stitcher_EstimateTransformPtr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, ffi.Pointer)>(); - - CvStatus Stitcher_Get( - PtrStitcher self, - ffi.Pointer rval, - ) { - return _Stitcher_Get( - self, - rval, - ); - } - - late final _Stitcher_GetPtr = _lookup< - ffi.NativeFunction< CvStatus Function( - PtrStitcher, ffi.Pointer)>>('Stitcher_Get'); - late final _Stitcher_Get = _Stitcher_GetPtr.asFunction< - CvStatus Function(PtrStitcher, ffi.Pointer)>(); + PtrStitcher, VecMat, VecMat, ffi.Pointer)>(); CvStatus Stitcher_GetCompositingResol( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetCompositingResol( @@ -17364,13 +17316,13 @@ class CvNative { late final _Stitcher_GetCompositingResolPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, + CvStatus Function(PtrStitcher, ffi.Pointer)>>('Stitcher_GetCompositingResol'); late final _Stitcher_GetCompositingResol = _Stitcher_GetCompositingResolPtr - .asFunction)>(); + .asFunction)>(); CvStatus Stitcher_GetInterpolationFlags( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetInterpolationFlags( @@ -17380,15 +17332,15 @@ class CvNative { } late final _Stitcher_GetInterpolationFlagsPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetInterpolationFlags'); + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetInterpolationFlags'); late final _Stitcher_GetInterpolationFlags = _Stitcher_GetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, ffi.Pointer)>(); CvStatus Stitcher_GetPanoConfidenceThresh( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetPanoConfidenceThresh( @@ -17399,14 +17351,14 @@ class CvNative { late final _Stitcher_GetPanoConfidenceThreshPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, + CvStatus Function(PtrStitcher, ffi.Pointer)>>('Stitcher_GetPanoConfidenceThresh'); late final _Stitcher_GetPanoConfidenceThresh = _Stitcher_GetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, ffi.Pointer)>(); CvStatus Stitcher_GetRegistrationResol( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetRegistrationResol( @@ -17417,13 +17369,13 @@ class CvNative { late final _Stitcher_GetRegistrationResolPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, + CvStatus Function(PtrStitcher, ffi.Pointer)>>('Stitcher_GetRegistrationResol'); late final _Stitcher_GetRegistrationResol = _Stitcher_GetRegistrationResolPtr - .asFunction)>(); + .asFunction)>(); CvStatus Stitcher_GetSeamEstimationResol( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetSeamEstimationResol( @@ -17434,14 +17386,14 @@ class CvNative { late final _Stitcher_GetSeamEstimationResolPtr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, + CvStatus Function(PtrStitcher, ffi.Pointer)>>('Stitcher_GetSeamEstimationResol'); late final _Stitcher_GetSeamEstimationResol = _Stitcher_GetSeamEstimationResolPtr.asFunction< - CvStatus Function(Stitcher, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, ffi.Pointer)>(); CvStatus Stitcher_GetWaveCorrectKind( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetWaveCorrectKind( @@ -17451,14 +17403,14 @@ class CvNative { } late final _Stitcher_GetWaveCorrectKindPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrectKind'); + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetWaveCorrectKind'); late final _Stitcher_GetWaveCorrectKind = _Stitcher_GetWaveCorrectKindPtr - .asFunction)>(); + .asFunction)>(); CvStatus Stitcher_GetWaveCorrection( - Stitcher self, + PtrStitcher self, ffi.Pointer rval, ) { return _Stitcher_GetWaveCorrection( @@ -17468,14 +17420,14 @@ class CvNative { } late final _Stitcher_GetWaveCorrectionPtr = _lookup< - ffi - .NativeFunction)>>( - 'Stitcher_GetWaveCorrection'); + ffi.NativeFunction< + CvStatus Function(PtrStitcher, + ffi.Pointer)>>('Stitcher_GetWaveCorrection'); late final _Stitcher_GetWaveCorrection = _Stitcher_GetWaveCorrectionPtr - .asFunction)>(); + .asFunction)>(); CvStatus Stitcher_SetCompositingResol( - Stitcher self, + PtrStitcher self, double inval, ) { return _Stitcher_SetCompositingResol( @@ -17485,13 +17437,13 @@ class CvNative { } late final _Stitcher_SetCompositingResolPtr = - _lookup>( + _lookup>( 'Stitcher_SetCompositingResol'); late final _Stitcher_SetCompositingResol = _Stitcher_SetCompositingResolPtr - .asFunction(); + .asFunction(); CvStatus Stitcher_SetInterpolationFlags( - Stitcher self, + PtrStitcher self, int inval, ) { return _Stitcher_SetInterpolationFlags( @@ -17501,14 +17453,14 @@ class CvNative { } late final _Stitcher_SetInterpolationFlagsPtr = - _lookup>( + _lookup>( 'Stitcher_SetInterpolationFlags'); late final _Stitcher_SetInterpolationFlags = _Stitcher_SetInterpolationFlagsPtr.asFunction< - CvStatus Function(Stitcher, int)>(); + CvStatus Function(PtrStitcher, int)>(); CvStatus Stitcher_SetPanoConfidenceThresh( - Stitcher self, + PtrStitcher self, double inval, ) { return _Stitcher_SetPanoConfidenceThresh( @@ -17518,14 +17470,14 @@ class CvNative { } late final _Stitcher_SetPanoConfidenceThreshPtr = - _lookup>( + _lookup>( 'Stitcher_SetPanoConfidenceThresh'); late final _Stitcher_SetPanoConfidenceThresh = _Stitcher_SetPanoConfidenceThreshPtr.asFunction< - CvStatus Function(Stitcher, double)>(); + CvStatus Function(PtrStitcher, double)>(); CvStatus Stitcher_SetRegistrationResol( - Stitcher self, + PtrStitcher self, double inval, ) { return _Stitcher_SetRegistrationResol( @@ -17535,13 +17487,13 @@ class CvNative { } late final _Stitcher_SetRegistrationResolPtr = - _lookup>( + _lookup>( 'Stitcher_SetRegistrationResol'); late final _Stitcher_SetRegistrationResol = _Stitcher_SetRegistrationResolPtr - .asFunction(); + .asFunction(); CvStatus Stitcher_SetSeamEstimationResol( - Stitcher self, + PtrStitcher self, double inval, ) { return _Stitcher_SetSeamEstimationResol( @@ -17551,14 +17503,14 @@ class CvNative { } late final _Stitcher_SetSeamEstimationResolPtr = - _lookup>( + _lookup>( 'Stitcher_SetSeamEstimationResol'); late final _Stitcher_SetSeamEstimationResol = _Stitcher_SetSeamEstimationResolPtr.asFunction< - CvStatus Function(Stitcher, double)>(); + CvStatus Function(PtrStitcher, double)>(); CvStatus Stitcher_SetWaveCorrectKind( - Stitcher self, + PtrStitcher self, int inval, ) { return _Stitcher_SetWaveCorrectKind( @@ -17568,13 +17520,13 @@ class CvNative { } late final _Stitcher_SetWaveCorrectKindPtr = - _lookup>( + _lookup>( 'Stitcher_SetWaveCorrectKind'); late final _Stitcher_SetWaveCorrectKind = _Stitcher_SetWaveCorrectKindPtr - .asFunction(); + .asFunction(); CvStatus Stitcher_SetWaveCorrection( - Stitcher self, + PtrStitcher self, bool inval, ) { return _Stitcher_SetWaveCorrection( @@ -17584,13 +17536,13 @@ class CvNative { } late final _Stitcher_SetWaveCorrectionPtr = - _lookup>( + _lookup>( 'Stitcher_SetWaveCorrection'); late final _Stitcher_SetWaveCorrection = _Stitcher_SetWaveCorrectionPtr - .asFunction(); + .asFunction(); CvStatus Stitcher_Stitch( - Stitcher self, + PtrStitcher self, VecMat mats, Mat rpano, ffi.Pointer rval, @@ -17605,13 +17557,13 @@ class CvNative { late final _Stitcher_StitchPtr = _lookup< ffi.NativeFunction< - CvStatus Function( - Stitcher, VecMat, Mat, ffi.Pointer)>>('Stitcher_Stitch'); + CvStatus Function(PtrStitcher, VecMat, Mat, + ffi.Pointer)>>('Stitcher_Stitch'); late final _Stitcher_Stitch = _Stitcher_StitchPtr.asFunction< - CvStatus Function(Stitcher, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function(PtrStitcher, VecMat, Mat, ffi.Pointer)>(); CvStatus Stitcher_Stitch_1( - Stitcher self, + PtrStitcher self, VecMat mats, VecMat masks, Mat rpano, @@ -17628,10 +17580,11 @@ class CvNative { late final _Stitcher_Stitch_1Ptr = _lookup< ffi.NativeFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, + CvStatus Function(PtrStitcher, VecMat, VecMat, Mat, ffi.Pointer)>>('Stitcher_Stitch_1'); late final _Stitcher_Stitch_1 = _Stitcher_Stitch_1Ptr.asFunction< - CvStatus Function(Stitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); + CvStatus Function( + PtrStitcher, VecMat, VecMat, Mat, ffi.Pointer)>(); CvStatus Stylization( Mat src, @@ -18020,92 +17973,6 @@ class CvNative { late final _Subdiv2D_SymEdge = _Subdiv2D_SymEdgePtr.asFunction< CvStatus Function(Subdiv2D, int, ffi.Pointer)>(); - void TermCriteria_Close( - ffi.Pointer tc, - ) { - return _TermCriteria_Close( - tc, - ); - } - - late final _TermCriteria_ClosePtr = - _lookup)>>( - 'TermCriteria_Close'); - late final _TermCriteria_Close = _TermCriteria_ClosePtr.asFunction< - void Function(ffi.Pointer)>(); - - CvStatus TermCriteria_Epsilon( - TermCriteria tc, - ffi.Pointer rval, - ) { - return _TermCriteria_Epsilon( - tc, - rval, - ); - } - - late final _TermCriteria_EpsilonPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Epsilon'); - late final _TermCriteria_Epsilon = _TermCriteria_EpsilonPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); - - CvStatus TermCriteria_MaxCount( - TermCriteria tc, - ffi.Pointer rval, - ) { - return _TermCriteria_MaxCount( - tc, - rval, - ); - } - - late final _TermCriteria_MaxCountPtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_MaxCount'); - late final _TermCriteria_MaxCount = _TermCriteria_MaxCountPtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); - - CvStatus TermCriteria_New( - int typ, - int maxCount, - double epsilon, - ffi.Pointer rval, - ) { - return _TermCriteria_New( - typ, - maxCount, - epsilon, - rval, - ); - } - - late final _TermCriteria_NewPtr = _lookup< - ffi.NativeFunction< - CvStatus Function(ffi.Int, ffi.Int, ffi.Double, - ffi.Pointer)>>('TermCriteria_New'); - late final _TermCriteria_New = _TermCriteria_NewPtr.asFunction< - CvStatus Function(int, int, double, ffi.Pointer)>(); - - CvStatus TermCriteria_Type( - TermCriteria tc, - ffi.Pointer rval, - ) { - return _TermCriteria_Type( - tc, - rval, - ); - } - - late final _TermCriteria_TypePtr = _lookup< - ffi.NativeFunction< - CvStatus Function( - TermCriteria, ffi.Pointer)>>('TermCriteria_Type'); - late final _TermCriteria_Type = _TermCriteria_TypePtr.asFunction< - CvStatus Function(TermCriteria, ffi.Pointer)>(); - CvStatus TextureFlattening( Mat src, Mat mask, @@ -18420,7 +18287,7 @@ class CvNative { CvStatus Function(ffi.Pointer, ffi.Pointer)>(); CvStatus TrainData_GetCatCount( - TrainData self, + PtrTrainData self, int vi, ffi.Pointer rval, ) { @@ -18433,13 +18300,13 @@ class CvNative { late final _TrainData_GetCatCountPtr = _lookup< ffi.NativeFunction< - CvStatus Function(TrainData, ffi.Int, + CvStatus Function(PtrTrainData, ffi.Int, ffi.Pointer)>>('TrainData_GetCatCount'); late final _TrainData_GetCatCount = _TrainData_GetCatCountPtr.asFunction< - CvStatus Function(TrainData, int, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, int, ffi.Pointer)>(); CvStatus TrainData_GetCatMap( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetCatMap( @@ -18449,13 +18316,14 @@ class CvNative { } late final _TrainData_GetCatMapPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetCatMap'); late final _TrainData_GetCatMap = _TrainData_GetCatMapPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetCatOfs( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetCatOfs( @@ -18465,13 +18333,14 @@ class CvNative { } late final _TrainData_GetCatOfsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetCatOfs'); late final _TrainData_GetCatOfs = _TrainData_GetCatOfsPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetClassLabels( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetClassLabels( @@ -18481,13 +18350,14 @@ class CvNative { } late final _TrainData_GetClassLabelsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetClassLabels'); late final _TrainData_GetClassLabels = _TrainData_GetClassLabelsPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetDefaultSubstValues( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetDefaultSubstValues( @@ -18497,14 +18367,15 @@ class CvNative { } late final _TrainData_GetDefaultSubstValuesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetDefaultSubstValues'); late final _TrainData_GetDefaultSubstValues = _TrainData_GetDefaultSubstValuesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetLayout( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetLayout( @@ -18514,14 +18385,14 @@ class CvNative { } late final _TrainData_GetLayoutPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetLayout'); + ffi.NativeFunction< + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetLayout'); late final _TrainData_GetLayout = _TrainData_GetLayoutPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetMissing( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetMissing( @@ -18531,13 +18402,14 @@ class CvNative { } late final _TrainData_GetMissingPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetMissing'); late final _TrainData_GetMissing = _TrainData_GetMissingPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetNAllVars( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNAllVars( @@ -18547,14 +18419,14 @@ class CvNative { } late final _TrainData_GetNAllVarsPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetNAllVars'); + ffi.NativeFunction< + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNAllVars'); late final _TrainData_GetNAllVars = _TrainData_GetNAllVarsPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetNSamples( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNSamples( @@ -18564,14 +18436,14 @@ class CvNative { } late final _TrainData_GetNSamplesPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetNSamples'); + ffi.NativeFunction< + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNSamples'); late final _TrainData_GetNSamples = _TrainData_GetNSamplesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetNTestSamples( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNTestSamples( @@ -18581,14 +18453,14 @@ class CvNative { } late final _TrainData_GetNTestSamplesPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetNTestSamples'); + ffi.NativeFunction< + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetNTestSamples'); late final _TrainData_GetNTestSamples = _TrainData_GetNTestSamplesPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetNTrainSamples( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNTrainSamples( @@ -18598,14 +18470,14 @@ class CvNative { } late final _TrainData_GetNTrainSamplesPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetNTrainSamples'); + ffi.NativeFunction< + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetNTrainSamples'); late final _TrainData_GetNTrainSamples = _TrainData_GetNTrainSamplesPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetNVars( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNVars( @@ -18615,14 +18487,14 @@ class CvNative { } late final _TrainData_GetNVarsPtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetNVars'); + ffi.NativeFunction< + CvStatus Function( + PtrTrainData, ffi.Pointer)>>('TrainData_GetNVars'); late final _TrainData_GetNVars = _TrainData_GetNVarsPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetNames( - TrainData self, + PtrTrainData self, ffi.Pointer names, ) { return _TrainData_GetNames( @@ -18634,12 +18506,12 @@ class CvNative { late final _TrainData_GetNamesPtr = _lookup< ffi.NativeFunction< CvStatus Function( - TrainData, ffi.Pointer)>>('TrainData_GetNames'); + PtrTrainData, ffi.Pointer)>>('TrainData_GetNames'); late final _TrainData_GetNames = _TrainData_GetNamesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetNormCatResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetNormCatResponses( @@ -18649,13 +18521,36 @@ class CvNative { } late final _TrainData_GetNormCatResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetNormCatResponses'); late final _TrainData_GetNormCatResponses = _TrainData_GetNormCatResponsesPtr - .asFunction)>(); + .asFunction)>(); + + CvStatus TrainData_GetNormCatValues( + PtrTrainData self, + int vi, + Mat sidx, + ffi.Pointer values, + ) { + return _TrainData_GetNormCatValues( + self, + vi, + sidx, + values, + ); + } + + late final _TrainData_GetNormCatValuesPtr = _lookup< + ffi.NativeFunction< + CvStatus Function(PtrTrainData, ffi.Int, Mat, + ffi.Pointer)>>('TrainData_GetNormCatValues'); + late final _TrainData_GetNormCatValues = + _TrainData_GetNormCatValuesPtr.asFunction< + CvStatus Function(PtrTrainData, int, Mat, ffi.Pointer)>(); CvStatus TrainData_GetResponseType( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetResponseType( @@ -18665,14 +18560,14 @@ class CvNative { } late final _TrainData_GetResponseTypePtr = _lookup< - ffi - .NativeFunction)>>( - 'TrainData_GetResponseType'); + ffi.NativeFunction< + CvStatus Function(PtrTrainData, + ffi.Pointer)>>('TrainData_GetResponseType'); late final _TrainData_GetResponseType = _TrainData_GetResponseTypePtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetResponses( @@ -18682,16 +18577,17 @@ class CvNative { } late final _TrainData_GetResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetResponses'); late final _TrainData_GetResponses = _TrainData_GetResponsesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetSample( - TrainData self, + PtrTrainData self, Mat varIdx, int sidx, - ffi.Pointer buf, + ffi.Pointer buf, ) { return _TrainData_GetSample( self, @@ -18703,13 +18599,13 @@ class CvNative { late final _TrainData_GetSamplePtr = _lookup< ffi.NativeFunction< - CvStatus Function(TrainData, Mat, ffi.Int, - ffi.Pointer)>>('TrainData_GetSample'); + CvStatus Function(PtrTrainData, Mat, ffi.Int, + ffi.Pointer)>>('TrainData_GetSample'); late final _TrainData_GetSample = _TrainData_GetSamplePtr.asFunction< - CvStatus Function(TrainData, Mat, int, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, Mat, int, ffi.Pointer)>(); CvStatus TrainData_GetSampleWeights( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetSampleWeights( @@ -18719,13 +18615,14 @@ class CvNative { } late final _TrainData_GetSampleWeightsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetSampleWeights'); late final _TrainData_GetSampleWeights = _TrainData_GetSampleWeightsPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetSamples( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetSamples( @@ -18735,10 +18632,11 @@ class CvNative { } late final _TrainData_GetSamplesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetSamples'); late final _TrainData_GetSamples = _TrainData_GetSamplesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetSubMatrix( Mat matrix, @@ -18780,7 +18678,7 @@ class CvNative { CvStatus Function(Mat, Mat, ffi.Pointer)>(); CvStatus TrainData_GetTestNormCatResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTestNormCatResponses( @@ -18790,14 +18688,15 @@ class CvNative { } late final _TrainData_GetTestNormCatResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTestNormCatResponses'); late final _TrainData_GetTestNormCatResponses = _TrainData_GetTestNormCatResponsesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetTestResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTestResponses( @@ -18807,13 +18706,14 @@ class CvNative { } late final _TrainData_GetTestResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTestResponses'); late final _TrainData_GetTestResponses = _TrainData_GetTestResponsesPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetTestSampleIdx( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTestSampleIdx( @@ -18823,13 +18723,14 @@ class CvNative { } late final _TrainData_GetTestSampleIdxPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTestSampleIdx'); late final _TrainData_GetTestSampleIdx = _TrainData_GetTestSampleIdxPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetTestSampleWeights( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTestSampleWeights( @@ -18839,14 +18740,15 @@ class CvNative { } late final _TrainData_GetTestSampleWeightsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTestSampleWeights'); late final _TrainData_GetTestSampleWeights = _TrainData_GetTestSampleWeightsPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetTestSamples( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTestSamples( @@ -18856,13 +18758,14 @@ class CvNative { } late final _TrainData_GetTestSamplesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTestSamples'); late final _TrainData_GetTestSamples = _TrainData_GetTestSamplesPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetTrainNormCatResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTrainNormCatResponses( @@ -18872,14 +18775,15 @@ class CvNative { } late final _TrainData_GetTrainNormCatResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTrainNormCatResponses'); late final _TrainData_GetTrainNormCatResponses = _TrainData_GetTrainNormCatResponsesPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetTrainResponses( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTrainResponses( @@ -18889,13 +18793,14 @@ class CvNative { } late final _TrainData_GetTrainResponsesPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTrainResponses'); late final _TrainData_GetTrainResponses = _TrainData_GetTrainResponsesPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetTrainSampleIdx( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTrainSampleIdx( @@ -18905,13 +18810,14 @@ class CvNative { } late final _TrainData_GetTrainSampleIdxPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTrainSampleIdx'); late final _TrainData_GetTrainSampleIdx = _TrainData_GetTrainSampleIdxPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetTrainSampleWeights( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetTrainSampleWeights( @@ -18921,14 +18827,15 @@ class CvNative { } late final _TrainData_GetTrainSampleWeightsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetTrainSampleWeights'); late final _TrainData_GetTrainSampleWeights = _TrainData_GetTrainSampleWeightsPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetTrainSamples( - TrainData self, + PtrTrainData self, int layout, bool compressSamples, bool compressVars, @@ -18945,17 +18852,17 @@ class CvNative { late final _TrainData_GetTrainSamplesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(TrainData, ffi.Int, ffi.Bool, ffi.Bool, + CvStatus Function(PtrTrainData, ffi.Int, ffi.Bool, ffi.Bool, ffi.Pointer)>>('TrainData_GetTrainSamples'); late final _TrainData_GetTrainSamples = _TrainData_GetTrainSamplesPtr.asFunction< - CvStatus Function(TrainData, int, bool, bool, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, int, bool, bool, ffi.Pointer)>(); CvStatus TrainData_GetValues( - TrainData self, + PtrTrainData self, int vi, Mat sidx, - ffi.Pointer values, + ffi.Pointer values, ) { return _TrainData_GetValues( self, @@ -18967,13 +18874,13 @@ class CvNative { late final _TrainData_GetValuesPtr = _lookup< ffi.NativeFunction< - CvStatus Function(TrainData, ffi.Int, Mat, - ffi.Pointer)>>('TrainData_GetValues'); + CvStatus Function(PtrTrainData, ffi.Int, Mat, + ffi.Pointer)>>('TrainData_GetValues'); late final _TrainData_GetValues = _TrainData_GetValuesPtr.asFunction< - CvStatus Function(TrainData, int, Mat, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, int, Mat, ffi.Pointer)>(); CvStatus TrainData_GetVarIdx( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetVarIdx( @@ -18983,13 +18890,14 @@ class CvNative { } late final _TrainData_GetVarIdxPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetVarIdx'); late final _TrainData_GetVarIdx = _TrainData_GetVarIdxPtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_GetVarSymbolFlags( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetVarSymbolFlags( @@ -18999,13 +18907,14 @@ class CvNative { } late final _TrainData_GetVarSymbolFlagsPtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetVarSymbolFlags'); late final _TrainData_GetVarSymbolFlags = _TrainData_GetVarSymbolFlagsPtr - .asFunction)>(); + .asFunction)>(); CvStatus TrainData_GetVarType( - TrainData self, + PtrTrainData self, ffi.Pointer rval, ) { return _TrainData_GetVarType( @@ -19015,10 +18924,11 @@ class CvNative { } late final _TrainData_GetVarTypePtr = _lookup< - ffi.NativeFunction)>>( + ffi + .NativeFunction)>>( 'TrainData_GetVarType'); late final _TrainData_GetVarType = _TrainData_GetVarTypePtr.asFunction< - CvStatus Function(TrainData, ffi.Pointer)>(); + CvStatus Function(PtrTrainData, ffi.Pointer)>(); CvStatus TrainData_LoadFromCSV( ffi.Pointer filename, @@ -19072,7 +18982,7 @@ class CvNative { CvStatus Function(ffi.Pointer)>(); CvStatus TrainData_SetTrainTestSplit( - TrainData self, + PtrTrainData self, int count, bool shuffle, ) { @@ -19084,13 +18994,14 @@ class CvNative { } late final _TrainData_SetTrainTestSplitPtr = _lookup< - ffi.NativeFunction>( + ffi + .NativeFunction>( 'TrainData_SetTrainTestSplit'); late final _TrainData_SetTrainTestSplit = _TrainData_SetTrainTestSplitPtr - .asFunction(); + .asFunction(); CvStatus TrainData_SetTrainTestSplitRatio( - TrainData self, + PtrTrainData self, double ratio, bool shuffle, ) { @@ -19102,15 +19013,15 @@ class CvNative { } late final _TrainData_SetTrainTestSplitRatioPtr = _lookup< - ffi - .NativeFunction>( - 'TrainData_SetTrainTestSplitRatio'); + ffi.NativeFunction< + CvStatus Function(PtrTrainData, ffi.Double, + ffi.Bool)>>('TrainData_SetTrainTestSplitRatio'); late final _TrainData_SetTrainTestSplitRatio = _TrainData_SetTrainTestSplitRatioPtr.asFunction< - CvStatus Function(TrainData, double, bool)>(); + CvStatus Function(PtrTrainData, double, bool)>(); CvStatus TrainData_ShuffleTrainTest( - TrainData self, + PtrTrainData self, ) { return _TrainData_ShuffleTrainTest( self, @@ -19118,10 +19029,10 @@ class CvNative { } late final _TrainData_ShuffleTrainTestPtr = - _lookup>( + _lookup>( 'TrainData_ShuffleTrainTest'); - late final _TrainData_ShuffleTrainTest = - _TrainData_ShuffleTrainTestPtr.asFunction(); + late final _TrainData_ShuffleTrainTest = _TrainData_ShuffleTrainTestPtr + .asFunction(); CvStatus Undistort( Mat src, @@ -22495,8 +22406,6 @@ class _SymbolAddresses { get Stitcher_Close => _library._Stitcher_ClosePtr; ffi.Pointer)>> get Subdiv2D_Close => _library._Subdiv2D_ClosePtr; - ffi.Pointer)>> - get TermCriteria_Close => _library._TermCriteria_ClosePtr; ffi.Pointer)>> get TrackerMIL_Close => _library._TrackerMIL_ClosePtr; ffi.Pointer)>> @@ -22551,12 +22460,6 @@ final class AKAZE extends ffi.Struct { typedef AKAZEPtr = ffi.Pointer; -final class ANN_MLP extends ffi.Struct { - external ffi.Pointer ptr; -} - -typedef ANN_MLPPtr = ffi.Pointer; - final class AgastFeatureDetector extends ffi.Struct { external ffi.Pointer ptr; } @@ -22883,13 +22786,6 @@ final class NO_USE_AKAZEPtr extends ffi.Struct { external ffi.Pointer p; } -/// \ -/// Dart ffigen will not generate typedefs if not referred \ -/// so here we confirm they are included \ -final class NO_USE_ANN_MLPPtr extends ffi.Struct { - external ffi.Pointer p; -} - /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23114,13 +23010,6 @@ final class NO_USE_ORBPtr extends ffi.Struct { external ffi.Pointer p; } -/// \ -/// Dart ffigen will not generate typedefs if not referred \ -/// so here we confirm they are included \ -final class NO_USE_ParamGridPtr extends ffi.Struct { - external ffi.Pointer p; -} - /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23170,6 +23059,13 @@ final class NO_USE_PtrNormalBayesClassifierPtr extends ffi.Struct { external ffi.Pointer p; } +/// \ +/// Dart ffigen will not generate typedefs if not referred \ +/// so here we confirm they are included \ +final class NO_USE_PtrParamGridPtr extends ffi.Struct { + external ffi.Pointer p; +} + /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23233,13 +23129,6 @@ final class NO_USE_SIFTPtr extends ffi.Struct { external ffi.Pointer p; } -/// \ -/// Dart ffigen will not generate typedefs if not referred \ -/// so here we confirm they are included \ -final class NO_USE_SVMPtr extends ffi.Struct { - external ffi.Pointer p; -} - /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23254,13 +23143,6 @@ final class NO_USE_SimpleBlobDetectorPtr extends ffi.Struct { external ffi.Pointer p; } -/// \ -/// Dart ffigen will not generate typedefs if not referred \ -/// so here we confirm they are included \ -final class NO_USE_StitcherPtr extends ffi.Struct { - external ffi.Pointer p; -} - /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23268,13 +23150,6 @@ final class NO_USE_Subdiv2DPtr extends ffi.Struct { external ffi.Pointer p; } -/// \ -/// Dart ffigen will not generate typedefs if not referred \ -/// so here we confirm they are included \ -final class NO_USE_TermCriteriaPtr extends ffi.Struct { - external ffi.Pointer p; -} - /// \ /// Dart ffigen will not generate typedefs if not referred \ /// so here we confirm they are included \ @@ -23461,12 +23336,6 @@ final class ORB extends ffi.Struct { typedef ORBPtr = ffi.Pointer; -final class ParamGrid extends ffi.Struct { - external ffi.Pointer ptr; -} - -typedef ParamGridPtr = ffi.Pointer; - final class Point extends ffi.Struct { @ffi.Int() external int x; @@ -23540,6 +23409,8 @@ final class PtrParamGrid extends ffi.Struct { external ffi.Pointer> ptr; } +typedef PtrParamGridPtr = ffi.Pointer; + final class PtrRTrees extends ffi.Struct { external ffi.Pointer> ptr; } @@ -23643,12 +23514,6 @@ const int STITCHING_PANORAMA = 0; const int STITCHING_SCANS = 1; -final class SVM extends ffi.Struct { - external ffi.Pointer ptr; -} - -typedef SVMPtr = ffi.Pointer; - final class SVMSGD extends ffi.Struct { external ffi.Pointer ptr; } @@ -23750,12 +23615,6 @@ final class Size2f extends ffi.Struct { external double height; } -final class Stitcher extends ffi.Struct { - external ffi.Pointer ptr; -} - -typedef StitcherPtr = ffi.Pointer; - final class Subdiv2D extends ffi.Struct { external ffi.Pointer ptr; } @@ -23763,10 +23622,15 @@ final class Subdiv2D extends ffi.Struct { typedef Subdiv2DPtr = ffi.Pointer; final class TermCriteria extends ffi.Struct { - external ffi.Pointer ptr; -} + @ffi.Int() + external int type; + + @ffi.Int() + external int maxCount; -typedef TermCriteriaPtr = ffi.Pointer; + @ffi.Double() + external double epsilon; +} final class Tracker extends ffi.Struct { external ffi.Pointer ptr; diff --git a/lib/src/stitching/stitching.dart b/lib/src/stitching/stitching.dart index 22187281..0ee59667 100644 --- a/lib/src/stitching/stitching.dart +++ b/lib/src/stitching/stitching.dart @@ -23,12 +23,6 @@ class Stitcher extends CvStruct { finalizer.attach(this, ptr.cast()); } - cvg.Stitcher get stitcher { - final s = calloc(); - cvRun(() => CFFI.Stitcher_Get(ptr.ref, s)); - return s.ref; - } - /// Creates a Stitcher configured in one of the stitching modes. /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a308a47865a1f381e4429c8ec5e99549f factory Stitcher.create({StitcherMode mode = StitcherMode.PANORAMA}) { @@ -41,98 +35,98 @@ class Stitcher extends CvStruct { double get registrationResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetRegistrationResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetRegistrationResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a9912fe8c095b8385267908e5ef707439 set registrationResol(double value) { - cvRun(() => CFFI.Stitcher_SetRegistrationResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetRegistrationResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ac559c3eb228614f9402ff3eba23a08f5 double get seamEstimationResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetSeamEstimationResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetSeamEstimationResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad0fcef52b2fedda1dbb90ea780cd7979 set seamEstimationResol(double value) { - cvRun(() => CFFI.Stitcher_SetSeamEstimationResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetSeamEstimationResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad13d2d50b253e471fbaf041b9a044571 double get compositingResol { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetCompositingResol(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetCompositingResol(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#afe927e80fcb2ca2061630ddd98eebba8 set compositingResol(double value) { - cvRun(() => CFFI.Stitcher_SetCompositingResol(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetCompositingResol(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a3755bbeca7f4c80dc42af034f7621568 double get panoConfidenceThresh { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetPanoConfidenceThresh(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetPanoConfidenceThresh(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a6f5e62bc1dd5d7bdb5f9313a2c21c558 set panoConfidenceThresh(double value) { - cvRun(() => CFFI.Stitcher_SetPanoConfidenceThresh(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetPanoConfidenceThresh(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#af6a51e0b23dac119a3612d57345f9a7f bool get waveCorrection { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetWaveCorrection(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetWaveCorrection(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a968a2f4a1faddfdacbcfce54b44bab70 set waveCorrection(bool value) { - cvRun(() => CFFI.Stitcher_SetWaveCorrection(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetWaveCorrection(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#abc0c8f54a1d223a1098206654813d973 int get interpolationFlags { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetInterpolationFlags(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetInterpolationFlags(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a253d04b8dcd3c674321b29139c769873 set interpolationFlags(int value) { - cvRun(() => CFFI.Stitcher_SetInterpolationFlags(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetInterpolationFlags(ref, value)); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#ad9c9c9b8a97b686ad3b93f7918c4c6de int get waveCorrectKind { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_GetWaveCorrectKind(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_GetWaveCorrectKind(ref, rptr)); return rptr.value; }); } /// https://docs.opencv.org/4.x/d2/d8d/classcv_1_1Stitcher.html#a17413f5c06e4e569bfd45e01d4e8ff4a set waveCorrectKind(int value) { - cvRun(() => CFFI.Stitcher_SetWaveCorrectKind(stitcher, value)); + cvRun(() => CFFI.Stitcher_SetWaveCorrectKind(ref, value)); } /// These functions try to match the given images and to estimate rotations of each camera. @@ -141,7 +135,7 @@ class Stitcher extends CvStruct { return using((arena) { final rptr = arena(); masks ??= VecMat.fromList([]); - cvRun(() => CFFI.Stitcher_EstimateTransform(stitcher, images.ref, masks!.ref, rptr)); + cvRun(() => CFFI.Stitcher_EstimateTransform(ref, images.ref, masks!.ref, rptr)); return StitcherStatus.fromInt(rptr.value); }); } @@ -155,8 +149,8 @@ class Stitcher extends CvStruct { final rptr = arena(); final rpano = Mat.empty(); images == null - ? cvRun(() => CFFI.Stitcher_ComposePanorama(stitcher, rpano.ref, rptr)) - : cvRun(() => CFFI.Stitcher_ComposePanorama_1(stitcher, images.ref, rpano.ref, rptr)); + ? cvRun(() => CFFI.Stitcher_ComposePanorama(ref, rpano.ref, rptr)) + : cvRun(() => CFFI.Stitcher_ComposePanorama_1(ref, images.ref, rpano.ref, rptr)); return (StitcherStatus.fromInt(rptr.value), rpano); }); } @@ -169,8 +163,8 @@ class Stitcher extends CvStruct { final rptr = arena(); final rpano = Mat.empty(); masks == null - ? cvRun(() => CFFI.Stitcher_Stitch(stitcher, images.ref, rpano.ref, rptr)) - : cvRun(() => CFFI.Stitcher_Stitch_1(stitcher, images.ref, masks.ref, rpano.ref, rptr)); + ? cvRun(() => CFFI.Stitcher_Stitch(ref, images.ref, rpano.ref, rptr)) + : cvRun(() => CFFI.Stitcher_Stitch_1(ref, images.ref, masks.ref, rpano.ref, rptr)); return (StitcherStatus.fromInt(rptr.value), rpano); }); } @@ -179,7 +173,7 @@ class Stitcher extends CvStruct { VecInt get component { return using((arena) { final rptr = arena(); - cvRun(() => CFFI.Stitcher_Component(stitcher, rptr)); + cvRun(() => CFFI.Stitcher_Component(ref, rptr)); return VecInt.fromVec(rptr.ref); }); } diff --git a/lib/src/video/video.dart b/lib/src/video/video.dart index b257ad0d..d43c2754 100644 --- a/lib/src/video/video.dart +++ b/lib/src/video/video.dart @@ -193,7 +193,7 @@ Mat calcOpticalFlowFarneback( err!.ref, winSize.toSize(arena).ref, maxLevel, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, flags, minEigThreshold, ), @@ -223,7 +223,7 @@ Mat calcOpticalFlowFarneback( inputImage.ref, warpMatrix.ref, motionType, - criteria.toTermCriteria(arena).ref, + criteria.toNativePtr(arena).ref, inputMask.ref, gaussFiltSize, p, diff --git a/src/calib3d/calib3d.cpp b/src/calib3d/calib3d.cpp index 8263a7cb..c4d7eec6 100644 --- a/src/calib3d/calib3d.cpp +++ b/src/calib3d/calib3d.cpp @@ -7,6 +7,7 @@ */ #include "calib3d.h" +#include "opencv2/core/types.hpp" CvStatus Fisheye_UndistortImage(Mat distorted, Mat undistorted, Mat k, Mat d) { @@ -66,7 +67,8 @@ CvStatus GetOptimalNewCameraMatrixWithParams(Mat cameraMatrix, Mat distCoeffs, S CvStatus CalibrateCamera(VecVecPoint3f objectPoints, VecVecPoint2f imagePoints, Size imageSize, Mat cameraMatrix, Mat distCoeffs, Mat rvecs, Mat tvecs, int flag, TermCriteria criteria, double *rval) { BEGIN_WRAP - *rval = cv::calibrateCamera(*objectPoints.ptr, *imagePoints.ptr, cv::Size(imageSize.width, imageSize.height), *cameraMatrix.ptr, *distCoeffs.ptr, *rvecs.ptr, *tvecs.ptr, flag, *criteria.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::calibrateCamera(*objectPoints.ptr, *imagePoints.ptr, cv::Size(imageSize.width, imageSize.height), *cameraMatrix.ptr, *distCoeffs.ptr, *rvecs.ptr, *tvecs.ptr, flag, tc); END_WRAP } @@ -80,7 +82,8 @@ CvStatus Undistort(Mat src, Mat dst, Mat cameraMatrix, Mat distCoeffs, Mat newCa CvStatus UndistortPoints(Mat distorted, Mat undistorted, Mat k, Mat d, Mat r, Mat p, TermCriteria criteria) { BEGIN_WRAP - cv::undistortPoints(*distorted.ptr, *undistorted.ptr, *k.ptr, *d.ptr, *r.ptr, *p.ptr, *criteria.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + cv::undistortPoints(*distorted.ptr, *undistorted.ptr, *k.ptr, *d.ptr, *r.ptr, *p.ptr, tc); END_WRAP } diff --git a/src/core/constants.h b/src/core/constants.h index 7d4081d0..3671b953 100644 --- a/src/core/constants.h +++ b/src/core/constants.h @@ -3,8 +3,8 @@ Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. */ -#ifndef OPENCV_DART_LIBRARY_ENUMS_H -#define OPENCV_DART_LIBRARY_ENUMS_H +#ifndef OCV_ENUMS_H +#define OCV_ENUMS_H /** the color conversion codes @see @ref imgproc_color_conversions @@ -2020,4 +2020,20 @@ enum CALIB_USE_EXTRINSIC_GUESS = (1 << 22) //!< for stereoCalibrate }; -#endif // OPENCV_DART_LIBRARY_ENUMS_H +/** @brief Variable types */ +enum { + VAR_NUMERICAL = 0, //!< same as VAR_ORDERED + VAR_ORDERED = 0, //!< ordered variables + VAR_CATEGORICAL = 1 //!< categorical variables +}; + +/** @brief %Error types */ +enum { TEST_ERROR = 0, TRAIN_ERROR = 1 }; + +/** @brief Sample types */ +enum { + ROW_SAMPLE = 0, //!< each training sample is a row of samples + COL_SAMPLE = 1 //!< each training sample occupies a column of samples +}; + +#endif // OCV_ENUMS_H diff --git a/src/core/core.cpp b/src/core/core.cpp index b245e4e2..b961de8c 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -1,6 +1,5 @@ #include "core.h" #include "lut.hpp" -#include #include CvStatus RotatedRect_Points(RotatedRect rect, VecPoint2f *pts) @@ -33,32 +32,6 @@ CvStatus RotatedRect_BoundingRect2f(RotatedRect rect, Rect2f *rval) END_WRAP } -CvStatus TermCriteria_New(int typ, int maxCount, double epsilon, TermCriteria *rval) -{ - BEGIN_WRAP - *rval = {new cv::TermCriteria(typ, maxCount, epsilon)}; - END_WRAP -} -CvStatus TermCriteria_Type(TermCriteria tc, int *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->type; - END_WRAP -} -CvStatus TermCriteria_MaxCount(TermCriteria tc, int *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->maxCount; - END_WRAP -} -CvStatus TermCriteria_Epsilon(TermCriteria tc, double *rval) -{ - BEGIN_WRAP - *rval = tc.ptr->epsilon; - END_WRAP -} -void TermCriteria_Close(TermCriteria *tc){CVD_FREE(tc)} - CvStatus Mat_New(Mat *rval) { BEGIN_WRAP @@ -1778,14 +1751,16 @@ CvStatus KMeans(Mat data, int k, Mat bestLabels, TermCriteria criteria, int atte double *rval) { BEGIN_WRAP - *rval = cv::kmeans(*data.ptr, k, *bestLabels.ptr, *criteria.ptr, attempts, flags, *centers.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::kmeans(*data.ptr, k, *bestLabels.ptr, tc, attempts, flags, *centers.ptr); END_WRAP } CvStatus KMeansPoints(VecPoint2f pts, int k, Mat bestLabels, TermCriteria criteria, int attempts, int flags, Mat centers, double *rval) { BEGIN_WRAP - *rval = cv::kmeans(*pts.ptr, k, *bestLabels.ptr, *criteria.ptr, attempts, flags, *centers.ptr); + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); + *rval = cv::kmeans(*pts.ptr, k, *bestLabels.ptr, tc, attempts, flags, *centers.ptr); END_WRAP } CvStatus Rotate(Mat src, Mat dst, int rotateCode) diff --git a/src/core/core.h b/src/core/core.h index 6056061a..f9492115 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -92,7 +92,6 @@ extern "C" { CVD_TYPEDEF(cv::Mat, Mat) CVD_TYPEDEF(cv::_InputOutputArray, InputOutputArray) -CVD_TYPEDEF(cv::TermCriteria, TermCriteria) CVD_TYPEDEF(cv::RNG, RNG) CVD_TYPEDEF(std::vector, VecPoint) CVD_TYPEDEF(std::vector>, VecVecPoint) @@ -122,7 +121,6 @@ typedef unsigned short ushort; CVD_TYPEDEF(void, Mat) CVD_TYPEDEF(void, InputOutputArray) -CVD_TYPEDEF(void, TermCriteria) CVD_TYPEDEF(void, RNG) CVD_TYPEDEF(void, VecPoint) CVD_TYPEDEF(void, VecVecPoint) @@ -145,7 +143,6 @@ CVD_TYPEDEF(void, VecVecDMatch) CVD_TYPEDEF_PTR(Mat) CVD_TYPEDEF_PTR(InputOutputArray) -CVD_TYPEDEF_PTR(TermCriteria) CVD_TYPEDEF_PTR(RNG) // Wrapper for an individual cv::cvPoint @@ -405,12 +402,11 @@ CvStatus RotatedRect_BoundingRect2f(RotatedRect rect, Rect2f *rval); // internal use // VecPoint2f vecPointToVecPoint2f(VecPoint src); - -CvStatus TermCriteria_New(int typ, int maxCount, double epsilon, TermCriteria *rval); -CvStatus TermCriteria_Type(TermCriteria tc, int *rval); -CvStatus TermCriteria_MaxCount(TermCriteria tc, int *rval); -CvStatus TermCriteria_Epsilon(TermCriteria tc, double *rval); -void TermCriteria_Close(TermCriteria *tc); +typedef struct TermCriteria { + int type; + int maxCount; + double epsilon; +} TermCriteria; /** * @brief Create empty Mat diff --git a/src/imgproc/imgproc.cpp b/src/imgproc/imgproc.cpp index 7b2624c4..c6d7c1f8 100644 --- a/src/imgproc/imgproc.cpp +++ b/src/imgproc/imgproc.cpp @@ -7,7 +7,6 @@ */ #include "imgproc.h" -#include #include CvStatus ArcLength(VecPoint curve, bool is_closed, double *rval) @@ -303,9 +302,10 @@ CvStatus Canny(Mat src, Mat edges, double t1, double t2, int apertureSize, bool CvStatus CornerSubPix(Mat img, VecPoint2f corners, Size winSize, Size zeroZone, TermCriteria criteria) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); auto size = cv::Size(winSize.width, winSize.height); auto zone = cv::Size(zeroZone.width, zeroZone.height); - cv::cornerSubPix(*img.ptr, *corners.ptr, size, zone, *criteria.ptr); + cv::cornerSubPix(*img.ptr, *corners.ptr, size, zone, tc); // std::cout << *corners.ptr << std::endl; END_WRAP } diff --git a/src/ml/ann_mlp.cpp b/src/ml/ann_mlp.cpp index cfab71a7..964fec0c 100644 --- a/src/ml/ann_mlp.cpp +++ b/src/ml/ann_mlp.cpp @@ -4,278 +4,274 @@ */ #include "ann_mlp.h" +#include "opencv2/ml.hpp" // ANN_MLP CvStatus ANN_MLP_Create(PtrANN_MLP *rval) { BEGIN_WRAP auto p = cv::ml::ANN_MLP::create(); - *rval = {new cv::Ptr(p)}; + rval->ptr = new cv::Ptr(p); END_WRAP } void ANN_MLP_Close(PtrANN_MLP *self) { - *self->ptr = nullptr; + self->ptr = nullptr; CVD_FREE(self) } -CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval) +CvStatus ANN_MLP_SetTrainMethod(PtrANN_MLP self, int method, double param1, double param2) { BEGIN_WRAP - *rval = {self.ptr->get()}; + (*self.ptr)->setTrainMethod(method, param1, param2); END_WRAP } -CvStatus ANN_MLP_SetTrainMethod(ANN_MLP self, int method, double param1, double param2) +CvStatus ANN_MLP_GetTrainMethod(PtrANN_MLP self, int *rval) { BEGIN_WRAP - self.ptr->setTrainMethod(method, param1, param2); + *rval = (*self.ptr)->getTrainMethod(); END_WRAP } -CvStatus ANN_MLP_GetTrainMethod(ANN_MLP self, int *rval) +CvStatus ANN_MLP_SetActivationFunction(PtrANN_MLP self, int type, double param1, double param2) { BEGIN_WRAP - *rval = self.ptr->getTrainMethod(); + (*self.ptr)->setActivationFunction(type, param1, param2); END_WRAP } -CvStatus ANN_MLP_SetActivationFunction(ANN_MLP self, int type, double param1, double param2) +CvStatus ANN_MLP_SetLayerSizes(PtrANN_MLP self, Mat _layer_sizes) { BEGIN_WRAP - self.ptr->setActivationFunction(type, param1, param2); + (*self.ptr)->setLayerSizes(*_layer_sizes.ptr); END_WRAP } -CvStatus ANN_MLP_SetLayerSizes(ANN_MLP self, Mat _layer_sizes) +CvStatus ANN_MLP_GetLayerSizes(PtrANN_MLP self, Mat *rval) { BEGIN_WRAP - self.ptr->setLayerSizes(*_layer_sizes.ptr); + *rval = {new cv::Mat((*self.ptr)->getLayerSizes())}; END_WRAP } -CvStatus ANN_MLP_GetLayerSizes(ANN_MLP self, Mat *rval) +CvStatus ANN_MLP_SetTermCriteria(PtrANN_MLP self, TermCriteria val) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getLayerSizes())}; + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + (*self.ptr)->setTermCriteria(tc); END_WRAP } -CvStatus ANN_MLP_SetTermCriteria(ANN_MLP self, TermCriteria val) +CvStatus ANN_MLP_GetTermCriteria(PtrANN_MLP self, TermCriteria *rval) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = (*self.ptr)->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } -CvStatus ANN_MLP_GetTermCriteria(ANN_MLP self, TermCriteria *rval) +CvStatus ANN_MLP_SetBackpropWeightScale(PtrANN_MLP self, double val) { BEGIN_WRAP - auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + (*self.ptr)->setBackpropWeightScale(val); END_WRAP } -CvStatus ANN_MLP_SetBackpropWeightScale(ANN_MLP self, double val) +CvStatus ANN_MLP_GetBackpropWeightScale(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setBackpropWeightScale(val); + *rval = (*self.ptr)->getBackpropWeightScale(); END_WRAP } -CvStatus ANN_MLP_GetBackpropWeightScale(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetBackpropMomentumScale(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getBackpropWeightScale(); + (*self.ptr)->setBackpropMomentumScale(val); END_WRAP } -CvStatus ANN_MLP_SetBackpropMomentumScale(ANN_MLP self, double val) +CvStatus ANN_MLP_GetBackpropMomentumScale(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setBackpropMomentumScale(val); + *rval = (*self.ptr)->getBackpropMomentumScale(); END_WRAP } -CvStatus ANN_MLP_GetBackpropMomentumScale(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetRpropDW0(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getBackpropMomentumScale(); + (*self.ptr)->setRpropDW0(val); END_WRAP } -CvStatus ANN_MLP_SetRpropDW0(ANN_MLP self, double val) +CvStatus ANN_MLP_GetRpropDW0(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setRpropDW0(val); + *rval = (*self.ptr)->getRpropDW0(); END_WRAP } -CvStatus ANN_MLP_GetRpropDW0(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetRpropDWPlus(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getRpropDW0(); + (*self.ptr)->setRpropDWPlus(val); END_WRAP } -CvStatus ANN_MLP_SetRpropDWPlus(ANN_MLP self, double val) +CvStatus ANN_MLP_GetRpropDWPlus(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setRpropDWPlus(val); + *rval = (*self.ptr)->getRpropDWPlus(); END_WRAP } -CvStatus ANN_MLP_GetRpropDWPlus(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetRpropDWMinus(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getRpropDWPlus(); + (*self.ptr)->setRpropDWMinus(val); END_WRAP } -CvStatus ANN_MLP_SetRpropDWMinus(ANN_MLP self, double val) +CvStatus ANN_MLP_GetRpropDWMinus(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setRpropDWMinus(val); + *rval = (*self.ptr)->getRpropDWMinus(); END_WRAP } -CvStatus ANN_MLP_GetRpropDWMinus(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetRpropDWMin(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getRpropDWMinus(); + (*self.ptr)->setRpropDWMin(val); END_WRAP } -CvStatus ANN_MLP_SetRpropDWMin(ANN_MLP self, double val) +CvStatus ANN_MLP_GetRpropDWMin(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setRpropDWMin(val); + *rval = (*self.ptr)->getRpropDWMin(); END_WRAP } -CvStatus ANN_MLP_GetRpropDWMin(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetRpropDWMax(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getRpropDWMin(); + (*self.ptr)->setRpropDWMax(val); END_WRAP } -CvStatus ANN_MLP_SetRpropDWMax(ANN_MLP self, double val) +CvStatus ANN_MLP_GetRpropDWMax(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setRpropDWMax(val); + *rval = (*self.ptr)->getRpropDWMax(); END_WRAP } -CvStatus ANN_MLP_GetRpropDWMax(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetAnnealInitialT(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getRpropDWMax(); + (*self.ptr)->setAnnealInitialT(val); END_WRAP } -CvStatus ANN_MLP_SetAnnealInitialT(ANN_MLP self, double val) +CvStatus ANN_MLP_GetAnnealInitialT(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setAnnealInitialT(val); + *rval = (*self.ptr)->getAnnealInitialT(); END_WRAP } -CvStatus ANN_MLP_GetAnnealInitialT(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetAnnealFinalT(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getAnnealInitialT(); + (*self.ptr)->setAnnealFinalT(val); END_WRAP } -CvStatus ANN_MLP_SetAnnealFinalT(ANN_MLP self, double val) +CvStatus ANN_MLP_GetAnnealFinalT(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setAnnealFinalT(val); + *rval = (*self.ptr)->getAnnealFinalT(); END_WRAP } -CvStatus ANN_MLP_GetAnnealFinalT(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetAnnealCoolingRatio(PtrANN_MLP self, double val) { BEGIN_WRAP - *rval = self.ptr->getAnnealFinalT(); + (*self.ptr)->setAnnealCoolingRatio(val); END_WRAP } -CvStatus ANN_MLP_SetAnnealCoolingRatio(ANN_MLP self, double val) +CvStatus ANN_MLP_GetAnnealCoolingRatio(PtrANN_MLP self, double *rval) { BEGIN_WRAP - self.ptr->setAnnealCoolingRatio(val); + *rval = (*self.ptr)->getAnnealCoolingRatio(); END_WRAP } -CvStatus ANN_MLP_GetAnnealCoolingRatio(ANN_MLP self, double *rval) +CvStatus ANN_MLP_SetAnnealItePerStep(PtrANN_MLP self, int val) { BEGIN_WRAP - *rval = self.ptr->getAnnealCoolingRatio(); + (*self.ptr)->setAnnealItePerStep(val); END_WRAP } -CvStatus ANN_MLP_SetAnnealItePerStep(ANN_MLP self, int val) +CvStatus ANN_MLP_GetAnnealItePerStep(PtrANN_MLP self, int *rval) { BEGIN_WRAP - self.ptr->setAnnealItePerStep(val); + *rval = (*self.ptr)->getAnnealItePerStep(); END_WRAP } -CvStatus ANN_MLP_GetAnnealItePerStep(ANN_MLP self, int *rval) +CvStatus ANN_MLP_Predict(PtrANN_MLP self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->getAnnealItePerStep(); + *rval = (*self.ptr)->predict(*samples.ptr, *results.ptr, flags); END_WRAP } -CvStatus ANN_MLP_Predict(ANN_MLP self, Mat samples, Mat results, int flags, float *rval) +CvStatus ANN_MLP_Train(PtrANN_MLP self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + *rval = (*self.ptr)->train(*trainData.ptr, flags); END_WRAP } -CvStatus ANN_MLP_Train(ANN_MLP self, PtrTrainData trainData, int flags, bool *rval) +CvStatus ANN_MLP_Train_1(PtrANN_MLP self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(*trainData.ptr, flags); + *rval = (*self.ptr)->train(*samples.ptr, layout, *responses.ptr); END_WRAP } -CvStatus ANN_MLP_Train_1(ANN_MLP self, Mat samples, int layout, Mat responses, bool *rval) +CvStatus ANN_MLP_Clear(PtrANN_MLP self) { BEGIN_WRAP - *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + (*self.ptr)->clear(); END_WRAP } -CvStatus ANN_MLP_Clear(ANN_MLP self) +CvStatus ANN_MLP_Save(PtrANN_MLP self, char *filename) { BEGIN_WRAP - self.ptr->clear(); + (*self.ptr)->save(filename); END_WRAP } -CvStatus ANN_MLP_Save(ANN_MLP self, char *filename) +CvStatus ANN_MLP_Load(char *filepath, PtrANN_MLP *rval) { BEGIN_WRAP - self.ptr->save(filename); + cv::Ptr p = cv::ml::ANN_MLP::load(filepath); + (*rval->ptr) = p; END_WRAP } -CvStatus ANN_MLP_Load(ANN_MLP self, char *filepath) +CvStatus ANN_MLP_LoadFromString( const char *strModel, const char *objname, PtrANN_MLP *rval) { BEGIN_WRAP - self.ptr = cv::ml::ANN_MLP::load(filepath); - END_WRAP -} - -CvStatus ANN_MLP_LoadFromString(ANN_MLP self, const char *strModel, const char *objname) -{ - BEGIN_WRAP - self.ptr = cv::Algorithm::loadFromString(strModel, objname); + (*rval->ptr) = cv::Algorithm::loadFromString(strModel, objname); END_WRAP } diff --git a/src/ml/ann_mlp.h b/src/ml/ann_mlp.h index cee7ee3d..6aca3459 100644 --- a/src/ml/ann_mlp.h +++ b/src/ml/ann_mlp.h @@ -14,59 +14,58 @@ #include extern "C" { #endif - #ifdef __cplusplus CVD_TYPEDEF(cv::Ptr, PtrANN_MLP) -CVD_TYPEDEF(cv::ml::ANN_MLP, ANN_MLP) +// CVD_TYPEDEF(cv::ml::ANN_MLP, ANN_MLP) #else CVD_TYPEDEF(void *, PtrANN_MLP) -CVD_TYPEDEF(void, ANN_MLP) +// CVD_TYPEDEF(void, ANN_MLP) #endif CVD_TYPEDEF_PTR(PtrANN_MLP) -CVD_TYPEDEF_PTR(ANN_MLP) +// CVD_TYPEDEF_PTR(ANN_MLP) // ANN_MLP CvStatus ANN_MLP_Create(PtrANN_MLP *rval); void ANN_MLP_Close(PtrANN_MLP *self); -CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval); +// CvStatus ANN_MLP_Get(PtrANN_MLP self, ANN_MLP *rval); -CvStatus ANN_MLP_SetTrainMethod(ANN_MLP self, int method, double param1, double param2); -CvStatus ANN_MLP_GetTrainMethod(ANN_MLP self, int *rval); -CvStatus ANN_MLP_SetActivationFunction(ANN_MLP self, int type, double param1, double param2); -CvStatus ANN_MLP_SetLayerSizes(ANN_MLP self, Mat _layer_sizes); -CvStatus ANN_MLP_GetLayerSizes(ANN_MLP self, Mat *rval); -CvStatus ANN_MLP_SetTermCriteria(ANN_MLP self, TermCriteria val); -CvStatus ANN_MLP_GetTermCriteria(ANN_MLP self, TermCriteria *rval); -CvStatus ANN_MLP_SetBackpropWeightScale(ANN_MLP self, double val); -CvStatus ANN_MLP_GetBackpropWeightScale(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetBackpropMomentumScale(ANN_MLP self, double val); -CvStatus ANN_MLP_GetBackpropMomentumScale(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetRpropDW0(ANN_MLP self, double val); -CvStatus ANN_MLP_GetRpropDW0(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetRpropDWPlus(ANN_MLP self, double val); -CvStatus ANN_MLP_GetRpropDWPlus(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetRpropDWMinus(ANN_MLP self, double val); -CvStatus ANN_MLP_GetRpropDWMinus(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetRpropDWMin(ANN_MLP self, double val); -CvStatus ANN_MLP_GetRpropDWMin(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetRpropDWMax(ANN_MLP self, double val); -CvStatus ANN_MLP_GetRpropDWMax(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetAnnealInitialT(ANN_MLP self, double val); -CvStatus ANN_MLP_GetAnnealInitialT(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetAnnealFinalT(ANN_MLP self, double val); -CvStatus ANN_MLP_GetAnnealFinalT(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetAnnealCoolingRatio(ANN_MLP self, double val); -CvStatus ANN_MLP_GetAnnealCoolingRatio(ANN_MLP self, double *rval); -CvStatus ANN_MLP_SetAnnealItePerStep(ANN_MLP self, int val); -CvStatus ANN_MLP_GetAnnealItePerStep(ANN_MLP self, int *rval); -CvStatus ANN_MLP_Predict(ANN_MLP self, Mat samples, Mat results, int flags, float *rval); -CvStatus ANN_MLP_Train(ANN_MLP self, PtrTrainData trainData, int flags, bool *rval); -CvStatus ANN_MLP_Train_1(ANN_MLP self, Mat samples, int layout, Mat responses, bool *rval); -CvStatus ANN_MLP_Clear(ANN_MLP self); -CvStatus ANN_MLP_Save(ANN_MLP self, char *filename); -CvStatus ANN_MLP_Load(ANN_MLP self, char *filepath); -CvStatus ANN_MLP_LoadFromString(ANN_MLP self, const char *strModel, const char *objname); +CvStatus ANN_MLP_SetTrainMethod(PtrANN_MLP self, int method, double param1, double param2); +CvStatus ANN_MLP_GetTrainMethod(PtrANN_MLP self, int *rval); +CvStatus ANN_MLP_SetActivationFunction(PtrANN_MLP self, int type, double param1, double param2); +CvStatus ANN_MLP_SetLayerSizes(PtrANN_MLP self, Mat _layer_sizes); +CvStatus ANN_MLP_GetLayerSizes(PtrANN_MLP self, Mat *rval); +CvStatus ANN_MLP_SetTermCriteria(PtrANN_MLP self, TermCriteria val); +CvStatus ANN_MLP_GetTermCriteria(PtrANN_MLP self, TermCriteria *rval); +CvStatus ANN_MLP_SetBackpropWeightScale(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropWeightScale(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetBackpropMomentumScale(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetBackpropMomentumScale(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDW0(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDW0(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWPlus(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWPlus(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMinus(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMinus(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMin(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMin(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetRpropDWMax(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetRpropDWMax(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealInitialT(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealInitialT(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealFinalT(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealFinalT(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealCoolingRatio(PtrANN_MLP self, double val); +CvStatus ANN_MLP_GetAnnealCoolingRatio(PtrANN_MLP self, double *rval); +CvStatus ANN_MLP_SetAnnealItePerStep(PtrANN_MLP self, int val); +CvStatus ANN_MLP_GetAnnealItePerStep(PtrANN_MLP self, int *rval); +CvStatus ANN_MLP_Predict(PtrANN_MLP self, Mat samples, Mat results, int flags, float *rval); +CvStatus ANN_MLP_Train(PtrANN_MLP self, PtrTrainData trainData, int flags, bool *rval); +CvStatus ANN_MLP_Train_1(PtrANN_MLP self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus ANN_MLP_Clear(PtrANN_MLP self); +CvStatus ANN_MLP_Save(PtrANN_MLP self, char *filename); +CvStatus ANN_MLP_Load(char *filepath, PtrANN_MLP *rval); +CvStatus ANN_MLP_LoadFromString( const char *strModel, const char *objname, PtrANN_MLP *rval); #ifdef __cplusplus } diff --git a/src/ml/em.cpp b/src/ml/em.cpp index cf1cdb33..acf7fec9 100644 --- a/src/ml/em.cpp +++ b/src/ml/em.cpp @@ -58,14 +58,15 @@ CvStatus EM_GetTermCriteria(EM self, TermCriteria *rval) { BEGIN_WRAP auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } CvStatus EM_SetTermCriteria(EM self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); END_WRAP } diff --git a/src/ml/logistic_regression.cpp b/src/ml/logistic_regression.cpp index 9eddf562..b8173415 100644 --- a/src/ml/logistic_regression.cpp +++ b/src/ml/logistic_regression.cpp @@ -100,14 +100,15 @@ CvStatus LogisticRegression_GetTermCriteria(LogisticRegression self, TermCriteri { BEGIN_WRAP auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } CvStatus LogisticRegression_SetTermCriteria(LogisticRegression self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); END_WRAP } diff --git a/src/ml/rtrees.cpp b/src/ml/rtrees.cpp index ebcb3c4e..24e711c7 100644 --- a/src/ml/rtrees.cpp +++ b/src/ml/rtrees.cpp @@ -58,14 +58,15 @@ CvStatus RTrees_GetTermCriteria(RTrees self, TermCriteria *rval) { BEGIN_WRAP auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } CvStatus RTrees_SetTermCriteria(RTrees self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); END_WRAP } diff --git a/src/ml/svm.cpp b/src/ml/svm.cpp index 47e7363e..e6b52f0f 100644 --- a/src/ml/svm.cpp +++ b/src/ml/svm.cpp @@ -6,38 +6,40 @@ #include "svm.h" // ParamGrid -CvStatus ParamGrid_Empty(ParamGrid *rval) +CvStatus ParamGrid_Empty(PtrParamGrid *rval) { BEGIN_WRAP - *rval = {new cv::ml::ParamGrid()}; + auto p = cv::ml::ParamGrid::create(); + *rval = {new cv::Ptr(p)}; END_WRAP } -CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, ParamGrid *rval) +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, PtrParamGrid *rval) { BEGIN_WRAP - *rval = {new cv::ml::ParamGrid(minVal, maxVal, logstep)}; + auto p = cv::ml::ParamGrid::create(minVal, maxVal, logstep); + *rval = {new cv::Ptr(p)}; END_WRAP } -CvStatus ParamGrid_getMinVal(ParamGrid self, double *rval) +CvStatus ParamGrid_getMinVal(PtrParamGrid self, double *rval) { BEGIN_WRAP - *rval = self.ptr->minVal; + *rval = (*self.ptr)->minVal; END_WRAP } -CvStatus ParamGrid_GetMaxVal(ParamGrid self, double *rval) +CvStatus ParamGrid_GetMaxVal(PtrParamGrid self, double *rval) { BEGIN_WRAP - *rval = self.ptr->maxVal; + *rval = (*self.ptr)->maxVal; END_WRAP } -CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval) +CvStatus ParamGrid_GetLogStep(PtrParamGrid self, double *rval) { BEGIN_WRAP - *rval = self.ptr->logStep; + *rval = (*self.ptr)->logStep; END_WRAP } @@ -51,7 +53,8 @@ void ParamGrid_Close(PtrParamGrid *self) CvStatus SVM_Create(PtrSVM *rval) { BEGIN_WRAP - *rval = {new cv::Ptr()}; + cv::Ptr p = cv::ml::SVM::create(); + *rval = {new cv::Ptr(p)}; END_WRAP } @@ -61,297 +64,280 @@ void SVM_Close(PtrSVM *self) CVD_FREE(self) } -CvStatus SVM_Get(PtrSVM self, SVM *rval) -{ - BEGIN_WRAP - *rval = {self.ptr->get()}; - END_WRAP -} +// CvStatus SVM_Get(PtrSVM self, SVM *rval) +// { +// BEGIN_WRAP +// *rval = {self.ptr->get()}; +// END_WRAP +// } -CvStatus SVM_GetC(SVM self, double *rval) +CvStatus SVM_GetC(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getC(); + auto c = (*self.ptr)->getC(); + std::cout << c << std::endl; + *rval = (*self.ptr)->getC(); END_WRAP } -CvStatus SVM_GetClassWeights(SVM self, Mat *rval) +CvStatus SVM_GetClassWeights(PtrSVM self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getClassWeights())}; + *rval = {new cv::Mat((*self.ptr)->getClassWeights())}; END_WRAP } -CvStatus SVM_GetCoef0(SVM self, double *rval) +CvStatus SVM_GetCoef0(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getCoef0(); + *rval = (*self.ptr)->getCoef0(); END_WRAP } -CvStatus SVM_GetDecisionFunction(SVM self, int i, Mat alpha, Mat svidx, double *rval) +CvStatus SVM_GetDecisionFunction(PtrSVM self, int i, Mat alpha, Mat svidx, double *rval) { BEGIN_WRAP - *rval = self.ptr->getDecisionFunction(i, *alpha.ptr, *svidx.ptr); + *rval = (*self.ptr)->getDecisionFunction(i, *alpha.ptr, *svidx.ptr); END_WRAP } -CvStatus SVM_GetDegree(SVM self, double *rval) +CvStatus SVM_GetDegree(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getDegree(); + *rval = (*self.ptr)->getDegree(); END_WRAP } -CvStatus SVM_GetGamma(SVM self, double *rval) +CvStatus SVM_GetGamma(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getGamma(); + *rval = (*self.ptr)->getGamma(); END_WRAP } -CvStatus SVM_GetKernelType(SVM self, int *rval) +CvStatus SVM_GetKernelType(PtrSVM self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getKernelType(); + *rval = (*self.ptr)->getKernelType(); END_WRAP } -CvStatus SVM_GetNu(SVM self, double *rval) +CvStatus SVM_GetNu(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getNu(); + *rval = (*self.ptr)->getNu(); END_WRAP } -CvStatus SVM_GetP(SVM self, double *rval) +CvStatus SVM_GetP(PtrSVM self, double *rval) { BEGIN_WRAP - *rval = self.ptr->getP(); + *rval = (*self.ptr)->getP(); END_WRAP } -CvStatus SVM_GetSupportVectors(SVM self, Mat *rval) +CvStatus SVM_GetSupportVectors(PtrSVM self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getSupportVectors())}; + *rval = {new cv::Mat((*self.ptr)->getSupportVectors())}; END_WRAP } -CvStatus SVM_GetTermCriteria(SVM self, TermCriteria *rval) +CvStatus SVM_GetTermCriteria(PtrSVM self, TermCriteria *rval) { BEGIN_WRAP - auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + auto tc = (*self.ptr)->getTermCriteria(); + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } -CvStatus SVM_GetType(SVM self, int *rval) +CvStatus SVM_GetType(PtrSVM self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getType(); + *rval = (*self.ptr)->getType(); END_WRAP } -CvStatus SVM_GetUncompressedSupportVectors(SVM self, Mat *rval) +CvStatus SVM_GetUncompressedSupportVectors(PtrSVM self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getUncompressedSupportVectors())}; + *rval = {new cv::Mat((*self.ptr)->getUncompressedSupportVectors())}; END_WRAP } -CvStatus SVM_SetC(SVM self, double val) +CvStatus SVM_SetC(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setC(val); + BEGIN_WRAP(*self.ptr)->setC(val); END_WRAP } -CvStatus SVM_SetClassWeights(SVM self, Mat val) +CvStatus SVM_SetClassWeights(PtrSVM self, Mat val) { - BEGIN_WRAP - self.ptr->setClassWeights(*val.ptr); + BEGIN_WRAP(*self.ptr)->setClassWeights(*val.ptr); END_WRAP } -CvStatus SVM_SetCoef0(SVM self, double val) +CvStatus SVM_SetCoef0(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setCoef0(val); + BEGIN_WRAP(*self.ptr)->setCoef0(val); END_WRAP } -CvStatus SVM_SetDegree(SVM self, double val) +CvStatus SVM_SetDegree(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setDegree(val); + BEGIN_WRAP(*self.ptr)->setDegree(val); END_WRAP } -CvStatus SVM_SetGamma(SVM self, double val) +CvStatus SVM_SetGamma(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setGamma(val); + BEGIN_WRAP(*self.ptr)->setGamma(val); END_WRAP } -CvStatus SVM_SetKernel(SVM self, int kernelType) +CvStatus SVM_SetKernel(PtrSVM self, int kernelType) { - BEGIN_WRAP - self.ptr->setKernel(kernelType); + BEGIN_WRAP(*self.ptr)->setKernel(kernelType); END_WRAP } -CvStatus SVM_SetNu(SVM self, double val) +CvStatus SVM_SetNu(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setNu(val); + BEGIN_WRAP(*self.ptr)->setNu(val); END_WRAP } -CvStatus SVM_SetP(SVM self, double val) +CvStatus SVM_SetP(PtrSVM self, double val) { - BEGIN_WRAP - self.ptr->setP(val); + BEGIN_WRAP(*self.ptr)->setP(val); END_WRAP } -CvStatus SVM_SetTermCriteria(SVM self, TermCriteria val) +CvStatus SVM_SetTermCriteria(PtrSVM self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + (*self.ptr)->setTermCriteria(tc); END_WRAP } -CvStatus SVM_SetType(SVM self, int val) +CvStatus SVM_SetType(PtrSVM self, int val) { - BEGIN_WRAP - self.ptr->setType(val); + BEGIN_WRAP(*self.ptr)->setType(val); END_WRAP } -CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, ParamGrid gammaGrid, - ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, - bool balanced, bool *rval) +CvStatus SVM_TrainAuto(PtrSVM self, PtrTrainData data, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, + PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainAuto(*data.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, *pGrid.ptr, *nuGrid.ptr, - *coeffGrid.ptr, *degreeGrid.ptr, balanced); + *rval = (*self.ptr)->trainAuto(*data.ptr, kFold, **Cgrid.ptr, **gammaGrid.ptr, **pGrid.ptr, **nuGrid.ptr, + **coeffGrid.ptr, **degreeGrid.ptr, balanced); END_WRAP } -CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, +CvStatus SVM_TrainAuto_1(PtrSVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval) { BEGIN_WRAP - *rval = self.ptr->trainAuto(*samples.ptr, layout, *responses.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, - *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); + *rval = (*self.ptr)->trainAuto(*samples.ptr, layout, *responses.ptr, kFold, *Cgrid.ptr, *gammaGrid.ptr, + *pGrid.ptr, *nuGrid.ptr, *coeffGrid.ptr, *degreeGrid.ptr, balanced); END_WRAP } -CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval) +CvStatus SVM_CalcError(PtrSVM self, PtrTrainData data, bool test, Mat resp, float *rval) { BEGIN_WRAP - *rval = self.ptr->calcError(*data.ptr, test, *resp.ptr); + *rval = (*self.ptr)->calcError(*data.ptr, test, *resp.ptr); END_WRAP } -CvStatus SVM_Empty(SVM self, bool *rval) +CvStatus SVM_Empty(PtrSVM self, bool *rval) { BEGIN_WRAP - *rval = self.ptr->empty(); + *rval = (*self.ptr)->empty(); END_WRAP } -CvStatus SVM_GetVarCount(SVM self, int *rval) +CvStatus SVM_GetVarCount(PtrSVM self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getVarCount(); + *rval = (*self.ptr)->getVarCount(); END_WRAP } -CvStatus SVM_IsClassifier(SVM self, bool *rval) +CvStatus SVM_IsClassifier(PtrSVM self, bool *rval) { BEGIN_WRAP - *rval = self.ptr->isClassifier(); + *rval = (*self.ptr)->isClassifier(); END_WRAP } -CvStatus SVM_IsTrained(SVM self, bool *rval) +CvStatus SVM_IsTrained(PtrSVM self, bool *rval) { BEGIN_WRAP - *rval = self.ptr->isTrained(); + *rval = (*self.ptr)->isTrained(); END_WRAP } -CvStatus SVM_Predict(SVM self, Mat samples, Mat results, int flags, float *rval) +CvStatus SVM_Predict(PtrSVM self, Mat samples, Mat results, int flags, float *rval) { BEGIN_WRAP - *rval = self.ptr->predict(*samples.ptr, *results.ptr, flags); + *rval = (*self.ptr)->predict(*samples.ptr, *results.ptr, flags); END_WRAP } -CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval) +CvStatus SVM_Train(PtrSVM self, PtrTrainData trainData, int flags, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(*trainData.ptr, flags); + *rval = (*self.ptr)->train(*trainData.ptr, flags); END_WRAP } -CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval) +CvStatus SVM_Train_1(PtrSVM self, Mat samples, int layout, Mat responses, bool *rval) { BEGIN_WRAP - *rval = self.ptr->train(*samples.ptr, layout, *responses.ptr); + *rval = (*self.ptr)->train(*samples.ptr, layout, *responses.ptr); END_WRAP } -CvStatus SVM_Clear(SVM self) +CvStatus SVM_Clear(PtrSVM self) { - BEGIN_WRAP - self.ptr->clear(); + BEGIN_WRAP(*self.ptr)->clear(); END_WRAP } -CvStatus SVM_GetDefaultName(SVM self, char *rval) +CvStatus SVM_GetDefaultName(PtrSVM self, char *rval) { BEGIN_WRAP - std::string name = self.ptr->getDefaultName(); + std::string name = (*self.ptr)->getDefaultName(); std::strcpy(rval, name.c_str()); END_WRAP } -CvStatus SVM_GetDefaultGrid(SVM self, int param_id, ParamGrid *rval) +CvStatus SVM_GetDefaultGridPtr(PtrSVM self, int param_id, PtrParamGrid *rval) { BEGIN_WRAP - *rval = {new cv::ml::ParamGrid(self.ptr->getDefaultGrid(param_id))}; + *rval = {new cv::Ptr((*self.ptr)->getDefaultGridPtr(param_id))}; END_WRAP } -CvStatus SVM_GetDefaultGridPtr(SVM self, int param_id, PtrParamGrid *rval) +CvStatus SVM_Save(PtrSVM self, char *filename) { - BEGIN_WRAP - *rval = {new cv::Ptr(self.ptr->getDefaultGridPtr(param_id))}; + BEGIN_WRAP(*self.ptr)->save(filename); END_WRAP } -CvStatus SVM_Save(SVM self, char *filename) +CvStatus SVM_Load(char *filepath, PtrSVM *rval) { - BEGIN_WRAP - self.ptr->save(filename); + BEGIN_WRAP(*rval->ptr) = cv::ml::SVM::load(filepath); END_WRAP } -CvStatus SVM_Load(SVM self, char *filepath) +CvStatus SVM_LoadFromString(const char *strModel, const char *objname, PtrSVM *rval) { - BEGIN_WRAP - self.ptr = cv::ml::SVM::load(filepath); - END_WRAP -} - -CvStatus SVM_LoadFromString(SVM self, const char *strModel, const char *objname) -{ - BEGIN_WRAP - self.ptr = cv::Algorithm::loadFromString(strModel, objname); + BEGIN_WRAP(*rval->ptr) = cv::Algorithm::loadFromString(strModel, objname); END_WRAP } diff --git a/src/ml/svm.h b/src/ml/svm.h index 28b44a54..3d54c988 100644 --- a/src/ml/svm.h +++ b/src/ml/svm.h @@ -18,78 +18,71 @@ extern "C" { #ifdef __cplusplus // https://docs.opencv.org/4.x/d1/d2d/classcv_1_1ml_1_1SVM.html CVD_TYPEDEF(cv::Ptr, PtrSVM) -CVD_TYPEDEF(cv::ml::SVM, SVM) CVD_TYPEDEF(cv::Ptr, PtrParamGrid) -CVD_TYPEDEF(cv::ml::ParamGrid, ParamGrid) #else CVD_TYPEDEF(void *, PtrSVM) -CVD_TYPEDEF(void, SVM) CVD_TYPEDEF(void *, PtrParamGrid) -CVD_TYPEDEF(void, ParamGrid) #endif CVD_TYPEDEF_PTR(PtrSVM) -CVD_TYPEDEF_PTR(SVM) -CVD_TYPEDEF_PTR(ParamGrid) +CVD_TYPEDEF_PTR(PtrParamGrid) // ParamGrid -CvStatus ParamGrid_Empty(ParamGrid *rval); -CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, ParamGrid *rval); -CvStatus ParamGrid_getMinVal(ParamGrid self, double *rval); -CvStatus ParamGrid_GetMaxVal(ParamGrid self, double *rval); -CvStatus ParamGrid_GetLogStep(ParamGrid self, double *rval); +CvStatus ParamGrid_Empty(PtrParamGrid *rval); +CvStatus ParamGrid_New(double minVal, double maxVal, double logstep, PtrParamGrid *rval); +CvStatus ParamGrid_getMinVal(PtrParamGrid self, double *rval); +CvStatus ParamGrid_GetMaxVal(PtrParamGrid self, double *rval); +CvStatus ParamGrid_GetLogStep(PtrParamGrid self, double *rval); void ParamGrid_Close(PtrParamGrid *self); // SVM CvStatus SVM_Create(PtrSVM *rval); void SVM_Close(PtrSVM *self); -CvStatus SVM_Get(PtrSVM self, SVM *rval); -CvStatus SVM_GetC(SVM self, double *rval); -CvStatus SVM_GetClassWeights(SVM self, Mat *rval); -CvStatus SVM_GetCoef0(SVM self, double *rval); -CvStatus SVM_GetDecisionFunction(SVM self, int i, Mat alpha, Mat svidx, double *rval); -CvStatus SVM_GetDegree(SVM self, double *rval); -CvStatus SVM_GetGamma(SVM self, double *rval); -CvStatus SVM_GetKernelType(SVM self, int *rval); -CvStatus SVM_GetNu(SVM self, double *rval); -CvStatus SVM_GetP(SVM self, double *rval); -CvStatus SVM_GetSupportVectors(SVM self, Mat *rval); -CvStatus SVM_GetTermCriteria(SVM self, TermCriteria *rval); -CvStatus SVM_GetType(SVM self, int *rval); -CvStatus SVM_GetUncompressedSupportVectors(SVM self, Mat *rval); -CvStatus SVM_SetC(SVM self, double val); -CvStatus SVM_SetClassWeights(SVM self, Mat val); -CvStatus SVM_SetCoef0(SVM self, double val); -// CvStatus SVM_SetCustomKernel(SVM self, ); TODO -CvStatus SVM_SetDegree(SVM self, double val); -CvStatus SVM_SetGamma(SVM self, double val); -CvStatus SVM_SetKernel(SVM self, int kernelType); -CvStatus SVM_SetNu(SVM self, double val); -CvStatus SVM_SetP(SVM self, double val); -CvStatus SVM_SetTermCriteria(SVM self, TermCriteria val); -CvStatus SVM_SetType(SVM self, int val); -CvStatus SVM_TrainAuto(SVM self, PtrTrainData data, int kFold, ParamGrid Cgrid, ParamGrid gammaGrid, - ParamGrid pGrid, ParamGrid nuGrid, ParamGrid coeffGrid, ParamGrid degreeGrid, - bool balanced, bool *rval); -CvStatus SVM_TrainAuto_1(SVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, +CvStatus SVM_GetC(PtrSVM self, double *rval); +CvStatus SVM_GetClassWeights(PtrSVM self, Mat *rval); +CvStatus SVM_GetCoef0(PtrSVM self, double *rval); +CvStatus SVM_GetDecisionFunction(PtrSVM self, int i, Mat alpha, Mat svidx, double *rval); +CvStatus SVM_GetDegree(PtrSVM self, double *rval); +CvStatus SVM_GetGamma(PtrSVM self, double *rval); +CvStatus SVM_GetKernelType(PtrSVM self, int *rval); +CvStatus SVM_GetNu(PtrSVM self, double *rval); +CvStatus SVM_GetP(PtrSVM self, double *rval); +CvStatus SVM_GetSupportVectors(PtrSVM self, Mat *rval); +CvStatus SVM_GetTermCriteria(PtrSVM self, TermCriteria *rval); +CvStatus SVM_GetType(PtrSVM self, int *rval); +CvStatus SVM_GetUncompressedSupportVectors(PtrSVM self, Mat *rval); +CvStatus SVM_SetC(PtrSVM self, double val); +CvStatus SVM_SetClassWeights(PtrSVM self, Mat val); +CvStatus SVM_SetCoef0(PtrSVM self, double val); +// CvStatus SVM_SetCustomKernel(PtrSVM self, ); TODO +CvStatus SVM_SetDegree(PtrSVM self, double val); +CvStatus SVM_SetGamma(PtrSVM self, double val); +CvStatus SVM_SetKernel(PtrSVM self, int kernelType); +CvStatus SVM_SetNu(PtrSVM self, double val); +CvStatus SVM_SetP(PtrSVM self, double val); +CvStatus SVM_SetTermCriteria(PtrSVM self, TermCriteria val); +CvStatus SVM_SetType(PtrSVM self, int val); +CvStatus SVM_TrainAuto(PtrSVM self, PtrTrainData data, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, + PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, + PtrParamGrid degreeGrid, bool balanced, bool *rval); +CvStatus SVM_TrainAuto_1(PtrSVM self, Mat samples, int layout, Mat responses, int kFold, PtrParamGrid Cgrid, PtrParamGrid gammaGrid, PtrParamGrid pGrid, PtrParamGrid nuGrid, PtrParamGrid coeffGrid, PtrParamGrid degreeGrid, bool balanced, bool *rval); -CvStatus SVM_CalcError(SVM self, PtrTrainData data, bool test, Mat resp, float *rval); -CvStatus SVM_Empty(SVM self, bool *rval); -CvStatus SVM_GetVarCount(SVM self, int *rval); -CvStatus SVM_IsClassifier(SVM self, bool *rval); -CvStatus SVM_IsTrained(SVM self, bool *rval); -CvStatus SVM_Predict(SVM self, Mat samples, Mat results, int flags, float *rval); -CvStatus SVM_Train(SVM self, PtrTrainData trainData, int flags, bool *rval); -CvStatus SVM_Train_1(SVM self, Mat samples, int layout, Mat responses, bool *rval); -CvStatus SVM_Clear(SVM self); -CvStatus SVM_GetDefaultName(SVM self, char *rval); -CvStatus SVM_GetDefaultGrid(SVM self, int param_id, ParamGrid *rval); -CvStatus SVM_GetDefaultGridPtr(SVM self, int param_id, PtrParamGrid *rval); -CvStatus SVM_Save(SVM self, char *filename); -CvStatus SVM_Load(SVM self, char *filepath); -CvStatus SVM_LoadFromString(SVM self, const char *strModel, const char *objname); +CvStatus SVM_CalcError(PtrSVM self, PtrTrainData data, bool test, Mat resp, float *rval); +CvStatus SVM_Empty(PtrSVM self, bool *rval); +CvStatus SVM_GetVarCount(PtrSVM self, int *rval); +CvStatus SVM_IsClassifier(PtrSVM self, bool *rval); +CvStatus SVM_IsTrained(PtrSVM self, bool *rval); +CvStatus SVM_Predict(PtrSVM self, Mat samples, Mat results, int flags, float *rval); +CvStatus SVM_Train(PtrSVM self, PtrTrainData trainData, int flags, bool *rval); +CvStatus SVM_Train_1(PtrSVM self, Mat samples, int layout, Mat responses, bool *rval); +CvStatus SVM_Clear(PtrSVM self); +CvStatus SVM_GetDefaultName(PtrSVM self, char *rval); +CvStatus SVM_GetDefaultGridPtr(PtrSVM self, int param_id, PtrParamGrid *rval); +CvStatus SVM_Save(PtrSVM self, char *filename); +CvStatus SVM_Load(char *filepath, PtrSVM *rval); +CvStatus SVM_LoadFromString(const char *strModel, const char *objname, PtrSVM *rval); #ifdef __cplusplus } diff --git a/src/ml/svmsgd.cpp b/src/ml/svmsgd.cpp index 56de6fbe..b1fd5965 100644 --- a/src/ml/svmsgd.cpp +++ b/src/ml/svmsgd.cpp @@ -121,14 +121,15 @@ CvStatus SVMSGD_GetTermCriteria(SVMSGD self, TermCriteria *rval) { BEGIN_WRAP auto tc = self.ptr->getTermCriteria(); - *rval = {new cv::TermCriteria(tc.type, tc.maxCount, tc.epsilon)}; + *rval = {tc.type, tc.maxCount, tc.epsilon}; END_WRAP } CvStatus SVMSGD_SetTermCriteria(SVMSGD self, TermCriteria val) { BEGIN_WRAP - self.ptr->setTermCriteria(*val.ptr); + auto tc = cv::TermCriteria(val.type, val.maxCount, val.epsilon); + self.ptr->setTermCriteria(tc); END_WRAP } diff --git a/src/ml/train_data.cpp b/src/ml/train_data.cpp index 6fee7e64..b5ae862e 100644 --- a/src/ml/train_data.cpp +++ b/src/ml/train_data.cpp @@ -1,4 +1,5 @@ #include "train_data.h" +#include "core/core.h" #include CvStatus TrainData_Create(Mat samples, int layout, Mat responses, Mat varIdx, Mat sampleIdx, @@ -32,14 +33,14 @@ CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval) END_WRAP } -CvStatus TrainData_GetSubMatrix(const Mat &matrix, const Mat &idx, int layout, Mat *rval) +CvStatus TrainData_GetSubMatrix(Mat matrix, Mat idx, int layout, Mat *rval) { BEGIN_WRAP auto p = cv::ml::TrainData::getSubMatrix(*matrix.ptr, *idx.ptr, layout); *rval = {new cv::Mat(p)}; END_WRAP } -CvStatus TrainData_GetSubVector(const Mat &vec, const Mat &idx, Mat *rval) +CvStatus TrainData_GetSubVector(Mat vec, Mat idx, Mat *rval) { BEGIN_WRAP auto p = cv::ml::TrainData::getSubVector(*vec.ptr, *idx.ptr); @@ -53,60 +54,60 @@ CvStatus TrainData_MissingValue(float *rval) END_WRAP } -CvStatus TrainData_GetCatCount(TrainData self, int vi, int *rval) +CvStatus TrainData_GetCatCount(PtrTrainData self, int vi, int *rval) { BEGIN_WRAP - *rval = self.ptr->getCatCount(vi); + *rval = (*self.ptr)->getCatCount(vi); END_WRAP } -CvStatus TrainData_GetCatMap(TrainData self, Mat *rval) +CvStatus TrainData_GetCatMap(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getCatMap())}; + *rval = {new cv::Mat((*self.ptr)->getCatMap())}; END_WRAP } -CvStatus TrainData_GetCatOfs(TrainData self, Mat *rval) +CvStatus TrainData_GetCatOfs(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getCatOfs())}; + *rval = {new cv::Mat((*self.ptr)->getCatOfs())}; END_WRAP } -CvStatus TrainData_GetClassLabels(TrainData self, Mat *rval) +CvStatus TrainData_GetClassLabels(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getCatOfs())}; + *rval = {new cv::Mat((*self.ptr)->getCatOfs())}; END_WRAP } -CvStatus TrainData_GetDefaultSubstValues(TrainData self, Mat *rval) +CvStatus TrainData_GetDefaultSubstValues(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getDefaultSubstValues())}; + *rval = {new cv::Mat((*self.ptr)->getDefaultSubstValues())}; END_WRAP } -CvStatus TrainData_GetLayout(TrainData self, int *rval) +CvStatus TrainData_GetLayout(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getLayout(); + *rval = (*self.ptr)->getLayout(); END_WRAP } -CvStatus TrainData_GetMissing(TrainData self, Mat *rval) +CvStatus TrainData_GetMissing(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getMissing())}; + *rval = {new cv::Mat((*self.ptr)->getMissing())}; END_WRAP } -CvStatus TrainData_GetNAllVars(TrainData self, int *rval) +CvStatus TrainData_GetNAllVars(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getNAllVars(); + *rval = (*self.ptr)->getNAllVars(); END_WRAP } -CvStatus TrainData_GetNames(TrainData self, VecVecChar *names) +CvStatus TrainData_GetNames(PtrTrainData self, VecVecChar *names) { BEGIN_WRAP auto vec = new std::vector>(); std::vector cstrs; - self.ptr->getNames(cstrs); + (*self.ptr)->getNames(cstrs); for (size_t i = 0; i < cstrs.size(); i++) { std::vector cstr(cstrs[i].begin(), cstrs[i].end()); vec->push_back(cstr); @@ -114,166 +115,180 @@ CvStatus TrainData_GetNames(TrainData self, VecVecChar *names) *names = {vec}; END_WRAP } -CvStatus TrainData_GetNormCatResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetNormCatResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getNormCatResponses())}; + *rval = {new cv::Mat((*self.ptr)->getNormCatResponses())}; END_WRAP } -CvStatus TrainData_GetNSamples(TrainData self, int *rval) +CvStatus TrainData_GetNormCatValues(PtrTrainData self, int vi, Mat sidx, VecInt *values) { BEGIN_WRAP - *rval = self.ptr->getNSamples(); + // https://github.com/opencv/opencv/blob/05e48605a0aea00d3a89b9ab5e25cdf89568aa28/modules/ml/src/data.cpp#L888 + int n = sidx.ptr->checkVector(1, CV_32S); + int *buffer = new int[n]; + (*self.ptr)->getNormCatValues(vi, *sidx.ptr, buffer); + *values = {new std::vector(buffer, buffer + n)}; END_WRAP } -CvStatus TrainData_GetNTestSamples(TrainData self, int *rval) +CvStatus TrainData_GetNSamples(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getNTestSamples(); + *rval = (*self.ptr)->getNSamples(); END_WRAP } -CvStatus TrainData_GetNTrainSamples(TrainData self, int *rval) +CvStatus TrainData_GetNTestSamples(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getNTrainSamples(); + *rval = (*self.ptr)->getNTestSamples(); END_WRAP } -CvStatus TrainData_GetNVars(TrainData self, int *rval) +CvStatus TrainData_GetNTrainSamples(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = self.ptr->getNVars(); + *rval = (*self.ptr)->getNTrainSamples(); END_WRAP } -CvStatus TrainData_GetResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetNVars(PtrTrainData self, int *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getResponses())}; + *rval = (*self.ptr)->getNVars(); END_WRAP } -CvStatus TrainData_GetResponseType(TrainData self, int *rval) +CvStatus TrainData_GetResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = self.ptr->getResponseType(); + *rval = {new cv::Mat((*self.ptr)->getResponses())}; END_WRAP } -CvStatus TrainData_GetSample(TrainData self, Mat varIdx, int sidx, float *buf) +CvStatus TrainData_GetResponseType(PtrTrainData self, int *rval) { BEGIN_WRAP - self.ptr->getSample(*varIdx.ptr, sidx, buf); + *rval = (*self.ptr)->getResponseType(); END_WRAP } -CvStatus TrainData_GetSamples(TrainData self, Mat *rval) +CvStatus TrainData_GetSample(PtrTrainData self, Mat varIdx, int sidx, VecFloat *buf) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getSamples())}; + int n = varIdx.ptr->checkVector(1, CV_32S); + float *buffer = new float[n]; + (*self.ptr)->getSample(*varIdx.ptr, sidx, buffer); + *buf = {new std::vector(buffer, buffer + n)}; END_WRAP } -CvStatus TrainData_GetSampleWeights(TrainData self, Mat *rval) +CvStatus TrainData_GetSamples(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getSampleWeights())}; + *rval = {new cv::Mat((*self.ptr)->getSamples())}; END_WRAP } -CvStatus TrainData_GetTestNormCatResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetSampleWeights(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTestNormCatResponses())}; + *rval = {new cv::Mat((*self.ptr)->getSampleWeights())}; END_WRAP } -CvStatus TrainData_GetTestResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetTestNormCatResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTestResponses())}; + *rval = {new cv::Mat((*self.ptr)->getTestNormCatResponses())}; END_WRAP } -CvStatus TrainData_GetTestSampleIdx(TrainData self, Mat *rval) +CvStatus TrainData_GetTestResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTestSampleIdx())}; + *rval = {new cv::Mat((*self.ptr)->getTestResponses())}; END_WRAP } -CvStatus TrainData_GetTestSamples(TrainData self, Mat *rval) +CvStatus TrainData_GetTestSampleIdx(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTestSamples())}; + *rval = {new cv::Mat((*self.ptr)->getTestSampleIdx())}; END_WRAP } -CvStatus TrainData_GetTestSampleWeights(TrainData self, Mat *rval) +CvStatus TrainData_GetTestSamples(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTestSampleWeights())}; + *rval = {new cv::Mat((*self.ptr)->getTestSamples())}; END_WRAP } -CvStatus TrainData_GetTrainNormCatResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetTestSampleWeights(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTrainNormCatResponses())}; + *rval = {new cv::Mat((*self.ptr)->getTestSampleWeights())}; END_WRAP } -CvStatus TrainData_GetTrainResponses(TrainData self, Mat *rval) +CvStatus TrainData_GetTrainNormCatResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTrainResponses())}; + *rval = {new cv::Mat((*self.ptr)->getTrainNormCatResponses())}; END_WRAP } -CvStatus TrainData_GetTrainSampleIdx(TrainData self, Mat *rval) +CvStatus TrainData_GetTrainResponses(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTrainSampleIdx())}; + *rval = {new cv::Mat((*self.ptr)->getTrainResponses())}; END_WRAP } -CvStatus TrainData_GetTrainSamples(TrainData self, int layout, bool compressSamples, bool compressVars, - Mat *rval) +CvStatus TrainData_GetTrainSampleIdx(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTrainSamples(layout, compressSamples, compressVars))}; + *rval = {new cv::Mat((*self.ptr)->getTrainSampleIdx())}; END_WRAP } -CvStatus TrainData_GetTrainSampleWeights(TrainData self, Mat *rval) +CvStatus TrainData_GetTrainSamples(PtrTrainData self, int layout, bool compressSamples, bool compressVars, + Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getTrainSampleWeights())}; + *rval = {new cv::Mat((*self.ptr)->getTrainSamples(layout, compressSamples, compressVars))}; END_WRAP } -CvStatus TrainData_GetValues(TrainData self, int vi, Mat sidx, float *values) +CvStatus TrainData_GetTrainSampleWeights(PtrTrainData self, Mat *rval) { BEGIN_WRAP - self.ptr->getValues(vi, *sidx.ptr, values); + *rval = {new cv::Mat((*self.ptr)->getTrainSampleWeights())}; END_WRAP } -CvStatus TrainData_GetVarIdx(TrainData self, Mat *rval) +CvStatus TrainData_GetValues(PtrTrainData self, int vi, Mat sidx, VecFloat *values) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getVarIdx())}; + // https://github.com/opencv/opencv/blob/05e48605a0aea00d3a89b9ab5e25cdf89568aa28/modules/ml/src/data.cpp#L888 + int n = sidx.ptr->checkVector(1, CV_32S); + float *buffer = new float[n]; + (*self.ptr)->getValues(vi, *sidx.ptr, buffer); + *values = {new std::vector(buffer, buffer + n)}; END_WRAP } -CvStatus TrainData_GetVarSymbolFlags(TrainData self, Mat *rval) +CvStatus TrainData_GetVarIdx(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getVarSymbolFlags())}; + *rval = {new cv::Mat((*self.ptr)->getVarIdx())}; END_WRAP } -CvStatus TrainData_GetVarType(TrainData self, Mat *rval) +CvStatus TrainData_GetVarSymbolFlags(PtrTrainData self, Mat *rval) { BEGIN_WRAP - *rval = {new cv::Mat(self.ptr->getVarType())}; + *rval = {new cv::Mat((*self.ptr)->getVarSymbolFlags())}; END_WRAP } -CvStatus TrainData_SetTrainTestSplit(TrainData self, int count, bool shuffle) +CvStatus TrainData_GetVarType(PtrTrainData self, Mat *rval) { BEGIN_WRAP - self.ptr->setTrainTestSplit(count, shuffle); + *rval = {new cv::Mat((*self.ptr)->getVarType())}; END_WRAP } -CvStatus TrainData_SetTrainTestSplitRatio(TrainData self, double ratio, bool shuffle) +CvStatus TrainData_SetTrainTestSplit(PtrTrainData self, int count, bool shuffle) { - BEGIN_WRAP - self.ptr->setTrainTestSplitRatio(ratio, shuffle); + BEGIN_WRAP(*self.ptr)->setTrainTestSplit(count, shuffle); END_WRAP } -CvStatus TrainData_ShuffleTrainTest(TrainData self) +CvStatus TrainData_SetTrainTestSplitRatio(PtrTrainData self, double ratio, bool shuffle) { - BEGIN_WRAP - self.ptr->shuffleTrainTest(); + BEGIN_WRAP(*self.ptr)->setTrainTestSplitRatio(ratio, shuffle); + END_WRAP +} +CvStatus TrainData_ShuffleTrainTest(PtrTrainData self) +{ + BEGIN_WRAP(*self.ptr)->shuffleTrainTest(); END_WRAP } diff --git a/src/ml/train_data.h b/src/ml/train_data.h index 885654f3..92ca2d05 100644 --- a/src/ml/train_data.h +++ b/src/ml/train_data.h @@ -35,48 +35,49 @@ void TrainData_Close(PtrTrainData *self); CvStatus TrainData_Get(PtrTrainData *self, TrainData *rval); // static functions // input matrix (supported types: CV_32S, CV_32F, CV_64F) -CvStatus TrainData_GetSubMatrix(const Mat matrix, const Mat idx, int layout, Mat *rval); -CvStatus TrainData_GetSubVector(const Mat vec, const Mat idx, Mat *rval); +CvStatus TrainData_GetSubMatrix(Mat matrix, Mat idx, int layout, Mat *rval); +CvStatus TrainData_GetSubVector(Mat vec, Mat idx, Mat *rval); CvStatus TrainData_MissingValue(float *rval); // member functions -CvStatus TrainData_GetCatCount(TrainData self, int vi, int *rval); -CvStatus TrainData_GetCatMap(TrainData self, Mat *rval); -CvStatus TrainData_GetCatOfs(TrainData self, Mat *rval); -CvStatus TrainData_GetClassLabels(TrainData self, Mat *rval); -CvStatus TrainData_GetDefaultSubstValues(TrainData self, Mat *rval); -CvStatus TrainData_GetLayout(TrainData self, int *rval); -CvStatus TrainData_GetMissing(TrainData self, Mat *rval); -CvStatus TrainData_GetNAllVars(TrainData self, int *rval); -CvStatus TrainData_GetNames(TrainData self, VecVecChar *names); -CvStatus TrainData_GetNormCatResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetNSamples(TrainData self, int *rval); -CvStatus TrainData_GetNTestSamples(TrainData self, int *rval); -CvStatus TrainData_GetNTrainSamples(TrainData self, int *rval); -CvStatus TrainData_GetNVars(TrainData self, int *rval); -CvStatus TrainData_GetResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetResponseType(TrainData self, int *rval); -CvStatus TrainData_GetSample(TrainData self, Mat varIdx, int sidx, float *buf); -CvStatus TrainData_GetSamples(TrainData self, Mat *rval); -CvStatus TrainData_GetSampleWeights(TrainData self, Mat *rval); -CvStatus TrainData_GetTestNormCatResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetTestResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetTestSampleIdx(TrainData self, Mat *rval); -CvStatus TrainData_GetTestSamples(TrainData self, Mat *rval); -CvStatus TrainData_GetTestSampleWeights(TrainData self, Mat *rval); -CvStatus TrainData_GetTrainNormCatResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetTrainResponses(TrainData self, Mat *rval); -CvStatus TrainData_GetTrainSampleIdx(TrainData self, Mat *rval); -CvStatus TrainData_GetTrainSamples(TrainData self, int layout, bool compressSamples, bool compressVars, +CvStatus TrainData_GetCatCount(PtrTrainData self, int vi, int *rval); +CvStatus TrainData_GetCatMap(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetCatOfs(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetClassLabels(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetDefaultSubstValues(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetLayout(PtrTrainData self, int *rval); +CvStatus TrainData_GetMissing(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetNAllVars(PtrTrainData self, int *rval); +CvStatus TrainData_GetNames(PtrTrainData self, VecVecChar *names); +CvStatus TrainData_GetNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetNormCatValues(PtrTrainData self, int vi, Mat sidx, VecInt *values); +CvStatus TrainData_GetNSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNTestSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNTrainSamples(PtrTrainData self, int *rval); +CvStatus TrainData_GetNVars(PtrTrainData self, int *rval); +CvStatus TrainData_GetResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetResponseType(PtrTrainData self, int *rval); +CvStatus TrainData_GetSample(PtrTrainData self, Mat varIdx, int sidx, VecFloat *buf); +CvStatus TrainData_GetSamples(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSamples(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTestSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainNormCatResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainResponses(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainSampleIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetTrainSamples(PtrTrainData self, int layout, bool compressSamples, bool compressVars, Mat *rval); -CvStatus TrainData_GetTrainSampleWeights(TrainData self, Mat *rval); -CvStatus TrainData_GetValues(TrainData self, int vi, Mat sidx, float *values); -CvStatus TrainData_GetVarIdx(TrainData self, Mat *rval); -CvStatus TrainData_GetVarSymbolFlags(TrainData self, Mat *rval); -CvStatus TrainData_GetVarType(TrainData self, Mat *rval); -CvStatus TrainData_SetTrainTestSplit(TrainData self, int count, bool shuffle); -CvStatus TrainData_SetTrainTestSplitRatio(TrainData self, double ratio, bool shuffle); -CvStatus TrainData_ShuffleTrainTest(TrainData self); +CvStatus TrainData_GetTrainSampleWeights(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetValues(PtrTrainData self, int vi, Mat sidx, VecFloat *values); +CvStatus TrainData_GetVarIdx(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetVarSymbolFlags(PtrTrainData self, Mat *rval); +CvStatus TrainData_GetVarType(PtrTrainData self, Mat *rval); +CvStatus TrainData_SetTrainTestSplit(PtrTrainData self, int count, bool shuffle); +CvStatus TrainData_SetTrainTestSplitRatio(PtrTrainData self, double ratio, bool shuffle); +CvStatus TrainData_ShuffleTrainTest(PtrTrainData self); #ifdef __cplusplus } diff --git a/src/stitching/stitching.cpp b/src/stitching/stitching.cpp index ec6136e8..ae38f0ce 100644 --- a/src/stitching/stitching.cpp +++ b/src/stitching/stitching.cpp @@ -13,150 +13,137 @@ CvStatus Stitcher_Create(int mode, PtrStitcher *rval) END_WRAP } -void Stitcher_Close(PtrStitcher *stitcher){ +void Stitcher_Close(PtrStitcher *stitcher) +{ *stitcher->ptr = nullptr; CVD_FREE(stitcher) } -CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval) +CvStatus Stitcher_GetRegistrationResol(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = {self.ptr->get()}; + *rval = (*self.ptr)->registrationResol(); END_WRAP } -CvStatus Stitcher_GetRegistrationResol(Stitcher self, double *rval) +CvStatus Stitcher_SetRegistrationResol(PtrStitcher self, double inval) { - BEGIN_WRAP - *rval = self.ptr->registrationResol(); + BEGIN_WRAP(*self.ptr)->setRegistrationResol(inval); END_WRAP } -CvStatus Stitcher_SetRegistrationResol(Stitcher self, double inval) +CvStatus Stitcher_GetSeamEstimationResol(PtrStitcher self, double *rval) { BEGIN_WRAP - self.ptr->setRegistrationResol(inval); + *rval = (*self.ptr)->seamEstimationResol(); END_WRAP } - -CvStatus Stitcher_GetSeamEstimationResol(Stitcher self, double *rval) +CvStatus Stitcher_SetSeamEstimationResol(PtrStitcher self, double inval) { - BEGIN_WRAP - *rval = self.ptr->seamEstimationResol(); - END_WRAP -} -CvStatus Stitcher_SetSeamEstimationResol(Stitcher self, double inval) -{ - BEGIN_WRAP - self.ptr->setSeamEstimationResol(inval); + BEGIN_WRAP(*self.ptr)->setSeamEstimationResol(inval); END_WRAP } -CvStatus Stitcher_GetCompositingResol(Stitcher self, double *rval) +CvStatus Stitcher_GetCompositingResol(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->compositingResol(); + *rval = (*self.ptr)->compositingResol(); END_WRAP } -CvStatus Stitcher_SetCompositingResol(Stitcher self, double inval) +CvStatus Stitcher_SetCompositingResol(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setCompositingResol(inval); + BEGIN_WRAP(*self.ptr)->setCompositingResol(inval); END_WRAP } -CvStatus Stitcher_GetPanoConfidenceThresh(Stitcher self, double *rval) +CvStatus Stitcher_GetPanoConfidenceThresh(PtrStitcher self, double *rval) { BEGIN_WRAP - *rval = self.ptr->panoConfidenceThresh(); + *rval = (*self.ptr)->panoConfidenceThresh(); END_WRAP } -CvStatus Stitcher_SetPanoConfidenceThresh(Stitcher self, double inval) +CvStatus Stitcher_SetPanoConfidenceThresh(PtrStitcher self, double inval) { - BEGIN_WRAP - self.ptr->setPanoConfidenceThresh(inval); + BEGIN_WRAP(*self.ptr)->setPanoConfidenceThresh(inval); END_WRAP } -CvStatus Stitcher_GetWaveCorrection(Stitcher self, bool *rval) +CvStatus Stitcher_GetWaveCorrection(PtrStitcher self, bool *rval) { BEGIN_WRAP - *rval = self.ptr->waveCorrection(); + *rval = (*self.ptr)->waveCorrection(); END_WRAP } -CvStatus Stitcher_SetWaveCorrection(Stitcher self, bool inval) +CvStatus Stitcher_SetWaveCorrection(PtrStitcher self, bool inval) { - BEGIN_WRAP - self.ptr->setWaveCorrection(inval); + BEGIN_WRAP(*self.ptr)->setWaveCorrection(inval); END_WRAP } -CvStatus Stitcher_GetInterpolationFlags(Stitcher self, int *rval) +CvStatus Stitcher_GetInterpolationFlags(PtrStitcher self, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->interpolationFlags()); + *rval = static_cast((*self.ptr)->interpolationFlags()); END_WRAP } -CvStatus Stitcher_SetInterpolationFlags(Stitcher self, int inval) +CvStatus Stitcher_SetInterpolationFlags(PtrStitcher self, int inval) { - BEGIN_WRAP - self.ptr->setInterpolationFlags(static_cast(inval)); + BEGIN_WRAP(*self.ptr)->setInterpolationFlags(static_cast(inval)); END_WRAP } -CvStatus Stitcher_GetWaveCorrectKind(Stitcher self, int *rval) +CvStatus Stitcher_GetWaveCorrectKind(PtrStitcher self, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->waveCorrectKind()); + *rval = static_cast((*self.ptr)->waveCorrectKind()); END_WRAP } -CvStatus Stitcher_SetWaveCorrectKind(Stitcher self, int inval) +CvStatus Stitcher_SetWaveCorrectKind(PtrStitcher self, int inval) { - BEGIN_WRAP - self.ptr->setWaveCorrectKind(static_cast(inval)); + BEGIN_WRAP(*self.ptr)->setWaveCorrectKind(static_cast(inval)); END_WRAP } -CvStatus Stitcher_EstimateTransform(Stitcher self, VecMat mats, VecMat masks, int *rval) +CvStatus Stitcher_EstimateTransform(PtrStitcher self, VecMat mats, VecMat masks, int *rval) { BEGIN_WRAP if (masks.ptr->size() > 0) { - *rval = static_cast(self.ptr->estimateTransform(*mats.ptr, *masks.ptr)); + *rval = static_cast((*self.ptr)->estimateTransform(*mats.ptr, *masks.ptr)); } else - *rval = static_cast(self.ptr->estimateTransform(*mats.ptr)); + *rval = static_cast((*self.ptr)->estimateTransform(*mats.ptr)); END_WRAP } -CvStatus Stitcher_ComposePanorama(Stitcher self, Mat rpano, int *rval) +CvStatus Stitcher_ComposePanorama(PtrStitcher self, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->composePanorama(*rpano.ptr)); + *rval = static_cast((*self.ptr)->composePanorama(*rpano.ptr)); END_WRAP } -CvStatus Stitcher_ComposePanorama_1(Stitcher self, VecMat mats, Mat rpano, int *rval) +CvStatus Stitcher_ComposePanorama_1(PtrStitcher self, VecMat mats, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->composePanorama(*mats.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->composePanorama(*mats.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Stitch(Stitcher self, VecMat mats, Mat rpano, int *rval) +CvStatus Stitcher_Stitch(PtrStitcher self, VecMat mats, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->stitch(*mats.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->stitch(*mats.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Stitch_1(Stitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval) +CvStatus Stitcher_Stitch_1(PtrStitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval) { BEGIN_WRAP - *rval = static_cast(self.ptr->stitch(*mats.ptr, *masks.ptr, *rpano.ptr)); + *rval = static_cast((*self.ptr)->stitch(*mats.ptr, *masks.ptr, *rpano.ptr)); END_WRAP } -CvStatus Stitcher_Component(Stitcher self, VecInt *rval) +CvStatus Stitcher_Component(PtrStitcher self, VecInt *rval) { BEGIN_WRAP - std::vector _rval = self.ptr->component(); + std::vector _rval = (*self.ptr)->component(); *rval = {new std::vector(_rval)}; END_WRAP } diff --git a/src/stitching/stitching.h b/src/stitching/stitching.h index d245f5c0..9b9e7c1e 100644 --- a/src/stitching/stitching.h +++ b/src/stitching/stitching.h @@ -3,8 +3,8 @@ Licensed: Apache 2.0 license. Copyright (c) 2024 Rainyl. */ -#ifndef OPENCV_DART_LIBRARY_STITCHING_H -#define OPENCV_DART_LIBRARY_STITCHING_H +#ifndef OCV_STITCHING_H +#define OCV_STITCHING_H #include "core/core.h" #include "core/exception.h" @@ -24,58 +24,54 @@ enum { #ifdef __cplusplus CVD_TYPEDEF(cv::Ptr, PtrStitcher) -CVD_TYPEDEF(cv::Stitcher, Stitcher) #else CVD_TYPEDEF(void *, PtrStitcher) -CVD_TYPEDEF(void, Stitcher) #endif CVD_TYPEDEF_PTR(PtrStitcher) -CVD_TYPEDEF_PTR(Stitcher) CvStatus Stitcher_Create(int mode, PtrStitcher *rval); void Stitcher_Close(PtrStitcher *stitcher); -CvStatus Stitcher_Get(PtrStitcher self, Stitcher *rval); #pragma region getter/setter -CvStatus Stitcher_GetRegistrationResol(Stitcher self, double *rval); -CvStatus Stitcher_SetRegistrationResol(Stitcher self, double inval); +CvStatus Stitcher_GetRegistrationResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetRegistrationResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetSeamEstimationResol(Stitcher self, double *rval); -CvStatus Stitcher_SetSeamEstimationResol(Stitcher self, double inval); +CvStatus Stitcher_GetSeamEstimationResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetSeamEstimationResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetCompositingResol(Stitcher self, double *rval); -CvStatus Stitcher_SetCompositingResol(Stitcher self, double inval); +CvStatus Stitcher_GetCompositingResol(PtrStitcher self, double *rval); +CvStatus Stitcher_SetCompositingResol(PtrStitcher self, double inval); -CvStatus Stitcher_GetPanoConfidenceThresh(Stitcher self, double *rval); -CvStatus Stitcher_SetPanoConfidenceThresh(Stitcher self, double inval); +CvStatus Stitcher_GetPanoConfidenceThresh(PtrStitcher self, double *rval); +CvStatus Stitcher_SetPanoConfidenceThresh(PtrStitcher self, double inval); -CvStatus Stitcher_GetWaveCorrection(Stitcher self, bool *rval); -CvStatus Stitcher_SetWaveCorrection(Stitcher self, bool inval); +CvStatus Stitcher_GetWaveCorrection(PtrStitcher self, bool *rval); +CvStatus Stitcher_SetWaveCorrection(PtrStitcher self, bool inval); -CvStatus Stitcher_GetInterpolationFlags(Stitcher self, int *rval); -CvStatus Stitcher_SetInterpolationFlags(Stitcher self, int inval); +CvStatus Stitcher_GetInterpolationFlags(PtrStitcher self, int *rval); +CvStatus Stitcher_SetInterpolationFlags(PtrStitcher self, int inval); -CvStatus Stitcher_GetWaveCorrectKind(Stitcher self, int *rval); -CvStatus Stitcher_SetWaveCorrectKind(Stitcher self, int inval); +CvStatus Stitcher_GetWaveCorrectKind(PtrStitcher self, int *rval); +CvStatus Stitcher_SetWaveCorrectKind(PtrStitcher self, int inval); #pragma endregion #pragma region functions -CvStatus Stitcher_EstimateTransform(Stitcher self, VecMat mats, VecMat masks, int *rval); +CvStatus Stitcher_EstimateTransform(PtrStitcher self, VecMat mats, VecMat masks, int *rval); -CvStatus Stitcher_ComposePanorama(Stitcher self, Mat rpano, int *rval); -CvStatus Stitcher_ComposePanorama_1(Stitcher self, VecMat mats, Mat rpano, int *rval); +CvStatus Stitcher_ComposePanorama(PtrStitcher self, Mat rpano, int *rval); +CvStatus Stitcher_ComposePanorama_1(PtrStitcher self, VecMat mats, Mat rpano, int *rval); -CvStatus Stitcher_Stitch(Stitcher self, VecMat mats, Mat rpano, int *rval); -CvStatus Stitcher_Stitch_1(Stitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval); +CvStatus Stitcher_Stitch(PtrStitcher self, VecMat mats, Mat rpano, int *rval); +CvStatus Stitcher_Stitch_1(PtrStitcher self, VecMat mats, VecMat masks, Mat rpano, int *rval); -CvStatus Stitcher_Component(Stitcher self, VecInt *rval); +CvStatus Stitcher_Component(PtrStitcher self, VecInt *rval); #pragma endregion #ifdef __cplusplus } #endif -#endif // OPENCV_DART_LIBRARY_STITCHING_H \ No newline at end of file +#endif // OCV_STITCHING_H diff --git a/src/test/core.cc b/src/test/core.cc index 6fd6f14b..da1b7d94 100644 --- a/src/test/core.cc +++ b/src/test/core.cc @@ -5,31 +5,6 @@ #include #include -TEST(TermCriteria, New_Close) -{ - int typ = cv::TermCriteria::COUNT; - int maxCount = 10; - double epsilon = 0.001; - - CvStatus s; - TermCriteria tc; - s = TermCriteria_New(typ, maxCount, epsilon, &tc); - ASSERT_EQ(s.code, 0); - ASSERT_NE(tc.ptr, nullptr); - - int type, max_count; - double eps; - s = TermCriteria_Type(tc, &type); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(type, typ); - s = TermCriteria_MaxCount(tc, &max_count); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(maxCount, maxCount); - s = TermCriteria_Epsilon(tc, &eps); - EXPECT_EQ(s.code, 0); - EXPECT_EQ(eps, epsilon); -} - TEST(Mat, New_Close) { Mat *mat = (Mat *)malloc(sizeof(Mat)); @@ -426,4 +401,4 @@ TEST(Mat, Getter_Vec) EXPECT_EQ(pix.val3, expectedVec.val[2]); Mat_Close(&mat); -} \ No newline at end of file +} diff --git a/src/test/imgproc.cc b/src/test/imgproc.cc index e3a398ff..f4cdf2d0 100644 --- a/src/test/imgproc.cc +++ b/src/test/imgproc.cc @@ -17,7 +17,7 @@ TEST(ImgProc, cornerSubPix) ASSERT_EQ(img.ptr->empty(), false); Mat mask = {new cv::Mat()}; VecPoint2f corners = {new std::vector()}; - TermCriteria criteria = {new cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1)}; + TermCriteria criteria = {cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 30, 0.1}; status = GoodFeaturesToTrack(img, corners, 10, 0.01, 10, mask, 3, false, 0.04); ASSERT_EQ(status.code, 0); status = CornerSubPix(img, corners, {10, 10}, {-1, -1}, criteria); @@ -25,4 +25,4 @@ TEST(ImgProc, cornerSubPix) status = CornerSubPix(img, corners, {10, 10}, {-1, -1}, criteria); ASSERT_EQ(status.code, 0); std::cout << *corners.ptr << std::endl; -} \ No newline at end of file +} diff --git a/src/video/video.cpp b/src/video/video.cpp index e9f36396..a26ea0c5 100644 --- a/src/video/video.cpp +++ b/src/video/video.cpp @@ -64,8 +64,9 @@ CvStatus CalcOpticalFlowPyrLKWithParams(Mat prevImg, Mat nextImg, VecPoint2f pre TermCriteria criteria, int flags, double minEigThreshold) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); cv::calcOpticalFlowPyrLK(*prevImg.ptr, *nextImg.ptr, *prevPts.ptr, *nextPts.ptr, *status.ptr, *err.ptr, - cv::Size(winSize.width, winSize.height), maxLevel, *criteria.ptr, flags, + cv::Size(winSize.width, winSize.height), maxLevel, tc, flags, minEigThreshold); END_WRAP } @@ -82,8 +83,9 @@ CvStatus FindTransformECC(Mat templateImage, Mat inputImage, Mat warpMatrix, int TermCriteria criteria, Mat inputMask, int gaussFiltSize, double *rval) { BEGIN_WRAP + auto tc = cv::TermCriteria(criteria.type, criteria.maxCount, criteria.epsilon); *rval = cv::findTransformECC(*templateImage.ptr, *inputImage.ptr, *warpMatrix.ptr, motionType, - *criteria.ptr, *inputMask.ptr, gaussFiltSize); + tc, *inputMask.ptr, gaussFiltSize); END_WRAP } diff --git a/test/data/agaricus-lepiota.data b/test/data/agaricus-lepiota.data new file mode 100644 index 00000000..14fe8bbe --- /dev/null +++ b/test/data/agaricus-lepiota.data @@ -0,0 +1,8124 @@ +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,s,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,n,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,y,u +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,s,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,s,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,s,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,s,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,s,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,y,n,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,b,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,g +e,b,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,y,u +e,b,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +p,x,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m +e,f,s,w,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,b,s,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,y,t,l,f,w,n,w,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,y,u +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,p +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,y,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,y,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,y,u +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,b,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,g +e,s,f,n,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,y,u +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,y,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +p,x,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,b,y,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,p +p,x,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,b,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,m +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,g,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +e,b,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,f,f,n,f,n,f,c,n,g,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,y,n,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,x,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,p +e,x,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,k,y,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +p,x,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,b,y,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,s,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,g +e,b,s,w,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,s,p +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,b,y,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,b,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,b,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,p +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,s,y,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,y,g +p,x,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,f,w,t,a,f,w,n,p,t,b,s,s,w,w,p,w,o,p,u,v,d +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,w,e,r,s,y,w,w,p,w,o,p,k,y,g +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,b,s,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,y,y,t,a,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,b,y,w,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,p +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,s,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,y,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +p,x,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,y,y,t,l,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,y,n,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,b,s,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,n,g +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,y,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,s,m +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,w,t,l,f,c,b,w,e,c,s,s,w,w,p,w,o,p,k,n,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,m +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,b,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,n,m +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,k,s,g +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,l,f,c,b,w,e,r,s,y,w,w,p,w,o,p,n,y,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,y,u +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,y,y,t,a,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,y,p +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,f,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +e,x,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,g,f,n,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,s,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,a,g +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,b,s,y,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +p,f,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,y,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,n,g +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,y,t,a,f,w,n,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,w,t,l,f,w,n,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,f,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,y,y,t,l,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,y,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,u +e,b,s,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,s,w,t,l,f,w,n,n,t,b,s,s,w,w,p,w,o,p,u,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,s,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,s,n,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,s,w,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,a,g +e,f,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,f,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +p,x,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,u +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +p,f,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u +p,f,y,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,n,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,s,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,y,y,t,l,f,c,b,n,e,r,s,y,w,w,p,w,o,p,n,s,g +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,a,g +p,f,s,n,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,s,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,f,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,a,g +e,f,f,w,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,s,y,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,w,t,a,f,w,n,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,a,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,s,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,a,g +e,b,y,w,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,s,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,f,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,s,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,s,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,y,t,a,f,c,b,p,e,r,s,y,w,w,p,w,o,p,n,s,p +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,y,w,t,a,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,s,m +e,x,s,n,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,s,w,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,m +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +p,f,y,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,f,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,w,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,u +e,f,s,g,f,n,f,w,b,p,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,s,y,t,l,f,c,b,k,e,c,s,s,w,w,p,w,o,p,k,n,m +e,x,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,s,g +e,f,s,w,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,f,f,n,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,f,y,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,n,s,m +e,x,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,p,t,e,f,s,w,w,p,w,o,e,k,s,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,s,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,s,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,s,n,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,s,g +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,s,w,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,w,f,n,f,w,b,k,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,g,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,a,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,f,n,f,w,b,n,t,e,s,f,w,w,p,w,o,e,k,s,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,n,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,s,w,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,n,s,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,n,s,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,s,u +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,s,w,t,p,f,c,n,w,e,e,s,s,w,w,p,w,o,p,n,v,u +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,s,g +e,x,s,g,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,n,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,k,a,g +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,n,v,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,v,g +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,g,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,f,y,n,t,p,f,c,n,k,e,e,s,s,w,w,p,w,o,p,k,s,u +e,x,s,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,s,g +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +p,f,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,n,v,u +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,s,w,f,n,f,w,b,h,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,n,f,n,f,w,b,k,t,e,f,s,w,w,p,w,o,e,n,a,g +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,s,w,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,n,f,n,f,w,b,p,t,e,s,f,w,w,p,w,o,e,k,a,g +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,w,f,n,f,w,b,h,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,s,n,f,n,f,w,b,n,t,e,s,s,w,w,p,w,o,e,n,a,g +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,s,g,f,n,f,w,b,h,t,e,f,s,w,w,p,w,o,e,k,s,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,s,g,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,w,f,n,f,w,b,h,t,e,s,s,w,w,p,w,o,e,n,s,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,f,n,f,w,b,n,t,e,f,f,w,w,p,w,o,e,k,s,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,s,n,f,n,f,w,b,p,t,e,f,f,w,w,p,w,o,e,n,s,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,s,w,f,n,f,w,b,k,t,e,s,f,w,w,p,w,o,e,k,s,g +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,n,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,k,a,g +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +e,x,f,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,f,n,f,w,b,n,t,e,f,s,w,w,p,w,o,e,n,s,g +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,s,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,f,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,f,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +e,x,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,x,f,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,x,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,g,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,w,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,x,f,g,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,f,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,y,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,g,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,y,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,s,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,f,y,g,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,y,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,s,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,w,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,s,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,x,y,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +e,x,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,s,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,g,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,f,g,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,s,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,f,g,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,k,v,d +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +e,f,y,n,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,w,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,x,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,s,p,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,f,p,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +e,x,y,g,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,s,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,s,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,f,e,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +e,x,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,w,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,f,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,s,d +p,x,s,p,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +e,x,f,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,f,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,k,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,n,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,x,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +e,x,f,e,t,n,f,c,b,w,t,b,s,s,p,p,p,w,o,p,k,v,d +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,n,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,b,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,k,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,n,t,n,f,c,b,u,t,b,s,s,w,p,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,g,g,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,s,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,w,t,b,s,s,p,g,p,w,o,p,k,v,d +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,v,d +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,u,t,b,s,s,g,p,p,w,o,p,k,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,k,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,p,w,p,w,o,p,n,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,f,e,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,y,g,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,v,d +p,x,f,g,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,p,f,c,f,w,n,n,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,p,t,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,y,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,f,p,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +e,k,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +e,f,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +e,k,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,n,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,k,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,w,t,b,s,s,g,p,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,b,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,g,t,n,f,c,b,n,t,b,s,s,g,p,p,w,o,p,n,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,v,d +e,x,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +e,x,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,u,t,b,s,s,g,w,p,w,o,p,n,y,d +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +e,f,y,n,t,n,f,c,b,u,t,b,s,s,w,g,p,w,o,p,k,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,k,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,g,t,n,f,c,b,u,t,b,s,s,p,g,p,w,o,p,k,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,g,g,p,w,o,p,n,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +e,k,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,p,t,b,s,s,w,p,p,w,o,p,k,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +e,f,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +e,f,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,g,f,c,f,w,n,u,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +e,x,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +e,f,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,g,g,p,w,o,p,n,v,d +e,x,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,g,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,k,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +e,f,y,u,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,n,t,b,s,s,w,g,p,w,o,p,n,y,d +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,w,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,s,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,f,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,g,w,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,f,f,e,t,n,f,c,b,w,t,b,s,s,w,w,p,w,o,p,k,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,f,p,f,c,f,w,n,p,e,b,s,s,w,w,p,w,o,p,k,s,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +e,x,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +p,x,s,p,f,c,f,w,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,f,f,g,t,n,f,c,b,u,t,b,s,s,w,w,p,w,o,p,n,y,d +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +e,f,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,k,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,d +p,b,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +e,k,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +e,k,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,w,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,b,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +e,f,y,e,t,n,f,c,b,n,t,b,s,s,w,p,p,w,o,p,n,y,d +p,b,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +e,k,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +e,f,f,g,t,n,f,c,b,u,t,b,s,s,p,p,p,w,o,p,n,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +e,f,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,f,y,e,t,n,f,c,b,p,t,b,s,s,g,p,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,p,w,p,w,o,p,n,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,b,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,f,g,f,c,f,c,n,g,e,b,s,s,w,w,p,w,o,p,k,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +e,x,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +e,f,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,p +e,f,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,s,w,f,c,f,c,n,n,e,b,s,s,w,w,p,w,o,p,k,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +e,f,y,e,t,n,f,c,b,u,t,b,s,s,p,w,p,w,o,p,n,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,k,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,x,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +e,x,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,k,s,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +e,k,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,p +e,f,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +e,f,s,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +e,x,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,b,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +e,f,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +e,k,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,s,g,f,c,f,c,n,p,e,b,s,s,w,w,p,w,o,p,n,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,d +e,f,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,k,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,f,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,p +e,x,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,d +e,f,f,e,t,n,f,c,b,n,t,b,s,s,g,w,p,w,o,p,n,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,k,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g +e,k,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +p,b,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +e,k,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +e,f,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +e,f,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,k,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,c,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,b,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,b,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,k,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,f,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,p +p,f,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +e,x,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +p,x,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,x,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,d +e,x,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,f,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +e,f,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,p +p,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,k,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,k,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,f,y,f,f,f,c,b,h,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,k,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +e,k,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,d +e,x,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +e,x,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,k,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,k,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,k,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +e,k,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,k,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +e,k,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,p +p,b,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,b,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,f,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,k,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,k,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +e,k,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,k,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +e,k,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +e,f,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,s,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,p +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +e,f,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,d +e,x,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +e,x,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +e,x,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +e,k,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,f,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,b,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,f,y,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +e,x,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,f,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,d +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,k,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,x,y,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p +e,x,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +e,f,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,x,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,x,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,p +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,g +e,k,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,b,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,b,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,f,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,f,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,f,s,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +e,k,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,k,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +e,k,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,b,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,b,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,b,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,s,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,v,g +e,f,s,b,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +e,f,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,s,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,d +e,f,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,b,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,x,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,v,p +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,b,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,x,y,g,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,v,g +p,f,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,k,y,p,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +e,k,s,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,d +p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +e,x,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,d +e,k,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +e,f,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,c,y,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,x,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,f,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,f,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,p +e,x,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,p +e,f,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,y,e,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +e,x,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,y,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,k,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +e,k,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,b,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +e,x,s,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,p,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,p +e,x,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,g +p,f,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +e,f,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,b,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,d +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,b,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,f,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,x,y,r,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,b,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +e,x,s,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,f,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +e,x,y,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +e,x,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,g +e,k,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,f,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,g +e,f,s,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,g +p,b,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +e,f,y,b,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +e,x,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,u +e,k,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,p +e,x,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +e,x,y,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,d +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,d +p,b,y,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,p +p,f,f,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,n,p,w,o,l,h,v,p +e,k,s,n,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,f,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +e,f,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,g +p,x,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +e,f,y,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,g +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,u +e,k,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,g +e,k,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,y,p +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,f,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,n,p,w,o,l,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,f,y,r,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,g +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,s,b,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,f,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +e,f,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,v,d +e,f,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,k,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,f,y,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,k,y,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,f,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,y,p +e,f,f,c,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,b,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,e,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,p,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,f,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,y,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,k,g,w,t,n,f,w,n,w,e,b,s,s,w,w,p,w,o,p,w,c,l +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,s,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,b,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,f,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,u +p,x,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,g +e,x,s,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +e,k,s,b,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,x,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +e,k,y,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,u +e,k,f,c,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,g +p,b,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,b,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +e,x,s,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,u +e,f,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,w,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,w,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,y,b,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,u +e,f,y,r,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,b,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,y,c,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +e,x,y,u,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,u +e,x,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,x,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,p,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,y,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,g,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,v,g +e,f,y,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,b,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,v,u +p,x,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,y,p +p,b,y,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +e,f,y,n,f,n,f,w,n,w,e,b,s,f,w,n,p,w,o,e,w,v,l +p,f,f,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,g +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,y,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +e,f,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,d +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +e,f,f,c,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,k,y,e,t,n,f,c,b,e,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,w,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,p +p,x,s,w,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,v,d +e,f,y,e,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,g +e,k,s,n,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,g +p,f,y,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,f,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +e,x,y,w,f,n,f,c,n,h,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,y,u,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,y,f,f,f,c,b,g,e,b,k,k,p,b,p,w,o,l,h,v,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,y,d +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,s,g +e,f,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,w,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,s,g +e,k,s,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,s,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,p,p,p,w,o,l,h,y,g +p,b,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,b,s,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,m +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,g,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,d +e,x,y,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,k,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,x,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,m +e,f,s,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,f,y,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,h,e,b,k,k,b,b,p,w,o,l,h,y,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,g,t,f,f,c,b,w,t,b,f,s,w,w,p,w,o,p,h,v,u +e,x,y,p,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,x,y,u,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,y,p +p,x,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,b,p,p,w,o,l,h,y,g +p,b,s,w,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,k,y,n,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,x,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,p +e,x,y,b,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +p,x,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,b,p,w,o,l,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,w,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +e,k,y,n,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,v,d +p,f,s,b,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +p,f,s,g,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,s,u +e,f,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,y,g +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,w,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +e,x,f,n,f,n,f,w,n,w,e,b,s,s,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,y,d +p,x,s,w,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,u +e,x,s,b,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,s,p,t,n,f,c,b,w,e,?,s,s,w,e,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,g +p,f,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,p +p,x,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,v,p +p,f,s,w,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,u +e,k,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +e,x,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,y,g +e,f,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,s,e,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,s,g,t,f,f,c,b,p,t,b,f,f,w,w,p,w,o,p,h,v,u +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,p +p,x,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,s,w,t,f,f,c,b,h,t,b,s,s,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,n,p,p,w,o,l,h,y,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,n,p,p,w,o,l,h,y,p +p,f,f,g,f,f,f,c,b,g,e,b,k,k,b,n,p,w,o,l,h,v,p +p,b,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,b,s,w,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +e,x,y,n,t,n,f,c,b,w,e,?,s,s,w,w,p,w,t,e,w,c,w +p,x,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,g +p,b,y,y,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,s,g,t,f,f,c,b,w,t,b,f,f,w,w,p,w,o,p,h,v,u +e,f,y,p,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,k,s,p,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +e,f,y,n,t,n,f,c,b,w,e,?,s,s,e,e,p,w,t,e,w,c,w +p,b,y,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,s,g,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,v,g +p,x,s,g,t,f,f,c,b,p,t,b,s,s,w,w,p,w,o,p,h,s,g +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,b,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,r,v,g +p,x,s,b,t,f,f,c,b,h,t,b,f,f,w,w,p,w,o,p,h,v,u +p,b,s,b,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +e,f,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +e,x,y,n,f,n,f,w,n,w,e,b,f,s,w,n,p,w,o,e,w,v,l +p,x,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p +p,f,s,b,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,v,g +e,k,s,e,t,n,f,c,b,e,e,?,s,s,e,e,p,w,t,e,w,c,w +p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,p +p,b,f,n,f,n,f,c,n,w,e,?,k,y,w,n,p,w,o,e,w,v,d +p,x,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,d +p,x,y,y,f,f,f,c,b,g,e,b,k,k,n,b,p,w,o,l,h,y,g +p,x,s,g,t,f,f,c,b,p,t,b,f,s,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,y,n,t,n,f,c,b,w,e,?,s,s,e,w,p,w,t,e,w,c,w +e,f,y,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,k,f,n,f,n,f,c,n,w,e,?,k,y,w,y,p,w,o,e,w,v,d +p,f,y,g,f,f,f,c,b,h,e,b,k,k,p,n,p,w,o,l,h,v,g +p,x,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,f,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,d +p,f,f,g,f,f,f,c,b,p,e,b,k,k,b,p,p,w,o,l,h,v,d +p,x,s,g,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,y,r,f,n,f,c,n,u,e,?,s,f,w,w,p,w,o,f,h,y,d +p,x,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,p,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,m +p,x,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,g +p,x,s,b,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,v,u +e,k,s,e,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +p,f,s,b,t,f,f,c,b,w,t,b,s,f,w,w,p,w,o,p,h,s,g +e,x,f,n,f,n,f,w,n,w,e,b,f,f,w,n,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,v,d +e,f,y,w,f,n,f,c,n,w,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,w,t,f,f,c,b,w,t,b,s,s,w,w,p,w,o,p,h,s,u +p,f,s,p,t,n,f,c,b,r,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,d +p,f,s,g,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,g +p,x,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,b,p,w,o,l,h,v,g +p,f,s,g,t,f,f,c,b,h,t,b,f,s,w,w,p,w,o,p,h,s,g +p,f,s,w,t,f,f,c,b,h,t,b,s,f,w,w,p,w,o,p,h,s,u +p,x,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,f,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,y,d +p,x,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,b,y,b,t,n,f,c,b,g,e,b,s,s,w,w,p,w,t,p,r,v,g +p,f,y,y,f,f,f,c,b,g,e,b,k,k,b,p,p,w,o,l,h,v,g +p,x,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,k,y,b,t,n,f,c,b,e,e,?,s,s,w,w,p,w,t,e,w,c,w +e,x,y,w,f,n,f,c,n,p,e,?,s,f,w,w,p,w,o,f,h,y,d +p,f,s,b,t,f,f,c,b,p,t,b,s,f,w,w,p,w,o,p,h,v,u +p,f,y,y,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,x,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,x,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,x,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +e,k,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,b,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,x,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,f,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,b,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,x,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,b,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +e,k,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,f,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,x,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,f,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,f,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +p,f,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,f,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +e,x,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,f,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,f,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,x,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,x,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,f,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,x,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +e,b,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,x,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,k,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,x,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +e,b,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +e,b,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,f,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,n,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,k,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,x,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,f,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +e,k,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,x,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,x,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,b,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,f,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,k,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,c,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,x,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +p,x,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +p,f,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,f,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,x,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,x,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +p,f,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +e,x,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +e,b,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,x,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,f,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,y,f,n,f,w,n,y,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,f,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,f,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +e,b,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,x,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,k,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +e,f,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,k,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +e,x,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,x,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,k,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,b,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,b,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,b,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,x,y,e,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,b,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,f,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,f,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,k,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,f,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,x,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +e,k,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,x,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,x,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +e,f,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,f,s,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,x,s,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,c,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,x,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,c,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +e,b,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,b,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,x,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,f,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,b,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,x,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,x,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,y,y,f,n,f,w,n,w,e,c,y,y,y,y,p,y,o,e,w,c,l +e,k,s,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,f,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,c,l +e,x,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +e,x,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +e,b,s,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,x,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +e,b,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +p,f,y,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,f,y,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,f,y,c,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +e,k,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,x,y,n,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,f,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +e,x,s,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,p +e,x,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,b,s,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +p,k,y,e,f,m,f,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +e,k,s,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +e,b,f,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,l +e,x,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,c,l +p,k,y,e,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,x,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,s,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,x,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +e,b,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,y,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,x,y,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,x,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +e,k,s,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,n,g +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,x,s,n,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,x,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,f,s,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,v,l +e,x,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +p,k,y,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,c,l +e,x,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +e,x,s,g,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,f,y,n,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +e,f,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,k,s,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +p,x,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,x,y,e,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,s,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,s,g +p,f,y,n,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +e,b,s,g,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +e,x,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +p,k,s,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,x,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,y,p,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,c,l +p,k,s,n,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,y,n,f,s,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +e,k,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,f,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,k,s,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +e,f,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,y,e,f,m,a,c,b,w,e,c,k,y,c,c,p,w,n,n,w,c,d +p,x,y,e,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,y,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,o,c,l +e,x,y,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,f,s,c,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,c,l +e,b,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,n,g +e,k,f,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,f,w,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +p,k,y,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,l +e,b,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +e,x,y,n,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +e,b,s,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,n,g +p,f,y,n,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +p,x,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,b,f,w,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,e,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,d +p,k,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +p,k,s,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +e,x,s,g,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +e,b,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +p,x,s,n,f,f,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +p,f,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,k,s,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,k,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,s,g +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,v,l +p,k,s,n,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,c,l +e,x,y,n,f,n,f,c,b,w,e,b,y,y,n,n,p,w,t,p,w,y,p +e,x,s,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,f,s,n,f,f,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,x,y,e,f,s,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,d +p,k,y,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,e,f,f,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,n,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,v,l +e,k,s,g,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +p,k,s,e,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,p +e,b,f,w,f,n,f,w,b,g,e,?,k,k,w,w,p,w,t,p,w,n,g +e,x,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,b,f,w,f,n,f,w,b,p,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,n,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,d +p,f,s,n,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +p,f,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,s,e,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,p +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,x,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,k,p,p,p,w,o,e,w,v,p +p,x,s,n,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,b,f,w,f,n,f,w,b,p,e,?,k,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,w,p,w,o,e,w,v,d +e,x,y,g,t,n,f,c,b,w,e,b,s,s,w,w,p,w,t,p,w,y,p +p,k,s,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,b,f,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,s,e,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,s,n,f,y,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,d +e,x,f,w,f,n,f,w,b,w,e,?,s,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,y,n,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,x,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,y,v,l +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,k,w,p,p,w,o,e,w,v,l +p,k,s,n,f,f,f,c,n,b,t,?,s,s,w,p,p,w,o,e,w,v,p +p,k,s,n,f,s,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,s,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +e,k,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,v,l +p,k,s,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,b,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,b,c,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,n,c,l +p,k,y,e,f,s,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,l +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,y,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,y,v,l +e,b,f,g,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,n,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,o,c,l +e,b,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,y,c,l +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,o,v,l +e,b,f,g,f,n,f,w,b,g,e,?,s,s,w,w,p,w,t,p,w,s,g +p,k,y,e,f,f,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +p,k,s,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,w,w,p,w,o,e,w,v,p +p,k,s,e,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,p +p,k,y,n,f,y,f,c,n,b,t,?,s,s,w,w,p,w,o,e,w,v,l +e,b,f,g,f,n,f,w,b,p,e,?,k,k,w,w,p,w,t,p,w,s,g +e,k,f,w,f,n,f,w,b,g,e,?,s,k,w,w,p,w,t,p,w,s,g +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,n,o,p,o,v,l +p,x,s,e,f,f,f,c,n,b,t,?,k,s,w,p,p,w,o,e,w,v,p +e,k,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,n,v,l +p,k,y,e,f,f,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +p,k,s,n,f,f,f,c,n,b,t,?,k,s,p,p,p,w,o,e,w,v,d +p,k,y,e,f,f,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,p +p,k,y,e,f,y,f,c,n,b,t,?,s,s,p,p,p,w,o,e,w,v,p +p,x,s,n,f,y,f,c,n,b,t,?,k,k,w,w,p,w,o,e,w,v,d +e,b,s,g,f,n,f,w,b,g,e,?,k,s,w,w,p,w,t,p,w,n,g +p,x,y,c,f,m,f,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,k,f,w,f,n,f,w,b,w,e,?,k,s,w,w,p,w,t,p,w,n,g +p,k,y,n,f,s,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,k,w,p,p,w,o,e,w,v,d +e,k,f,w,f,n,f,w,b,w,e,?,k,k,w,w,p,w,t,p,w,s,g +e,f,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,s,e,f,s,f,c,n,b,t,?,s,s,p,w,p,w,o,e,w,v,p +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,n,c,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,o,c,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,v,l +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,y,v,l +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,n,c,l +p,k,y,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,l +e,b,s,w,f,n,f,w,b,w,e,?,s,s,w,w,p,w,t,p,w,n,g +e,x,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,o,o,p,n,v,l +e,k,s,w,f,n,f,w,b,p,e,?,s,s,w,w,p,w,t,p,w,n,g +e,k,s,n,f,n,a,c,b,o,e,?,s,s,o,o,p,n,o,p,b,v,l +p,k,y,e,f,y,f,c,n,b,t,?,k,k,p,p,p,w,o,e,w,v,d +p,f,y,c,f,m,a,c,b,y,e,c,k,y,c,c,p,w,n,n,w,c,d +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,v,l +p,k,y,n,f,s,f,c,n,b,t,?,s,k,p,w,p,w,o,e,w,v,l +p,k,s,e,f,y,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +p,k,y,n,f,f,f,c,n,b,t,?,k,s,p,w,p,w,o,e,w,v,d +e,k,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,b,c,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,n,o,p,b,v,l +e,f,s,n,f,n,a,c,b,n,e,?,s,s,o,o,p,o,o,p,b,c,l +p,k,y,n,f,y,f,c,n,b,t,?,s,k,w,w,p,w,o,e,w,v,l +e,x,s,n,f,n,a,c,b,y,e,?,s,s,o,o,p,o,o,p,o,c,l diff --git a/test/data/agaricus-lepiota.names b/test/data/agaricus-lepiota.names new file mode 100644 index 00000000..4f1f3b53 --- /dev/null +++ b/test/data/agaricus-lepiota.names @@ -0,0 +1,148 @@ +1. Title: Mushroom Database + +2. Sources: + (a) Mushroom records drawn from The Audubon Society Field Guide to North + American Mushrooms (1981). G. H. Lincoff (Pres.), New York: Alfred + A. Knopf + (b) Donor: Jeff Schlimmer (Jeffrey.Schlimmer@a.gp.cs.cmu.edu) + (c) Date: 27 April 1987 + +3. Past Usage: + 1. Schlimmer,J.S. (1987). Concept Acquisition Through Representational + Adjustment (Technical Report 87-19). Doctoral disseration, Department + of Information and Computer Science, University of California, Irvine. + --- STAGGER: asymptoted to 95% classification accuracy after reviewing + 1000 instances. + 2. Iba,W., Wogulis,J., & Langley,P. (1988). Trading off Simplicity + and Coverage in Incremental Concept Learning. In Proceedings of + the 5th International Conference on Machine Learning, 73-79. + Ann Arbor, Michigan: Morgan Kaufmann. + -- approximately the same results with their HILLARY algorithm + 3. In the following references a set of rules (given below) were + learned for this data set which may serve as a point of + comparison for other researchers. + + Duch W, Adamczak R, Grabczewski K (1996) Extraction of logical rules + from training data using backpropagation networks, in: Proc. of the + The 1st Online Workshop on Soft Computing, 19-30.Aug.1996, pp. 25-30, + available on-line at: http://www.bioele.nuee.nagoya-u.ac.jp/wsc1/ + + Duch W, Adamczak R, Grabczewski K, Ishikawa M, Ueda H, Extraction of + crisp logical rules using constrained backpropagation networks - + comparison of two new approaches, in: Proc. of the European Symposium + on Artificial Neural Networks (ESANN'97), Bruge, Belgium 16-18.4.1997, + pp. xx-xx + + Wlodzislaw Duch, Department of Computer Methods, Nicholas Copernicus + University, 87-100 Torun, Grudziadzka 5, Poland + e-mail: duch@phys.uni.torun.pl + WWW http://www.phys.uni.torun.pl/kmk/ + + Date: Mon, 17 Feb 1997 13:47:40 +0100 + From: Wlodzislaw Duch + Organization: Dept. of Computer Methods, UMK + + I have attached a file containing logical rules for mushrooms. + It should be helpful for other people since only in the last year I + have seen about 10 papers analyzing this dataset and obtaining quite + complex rules. We will try to contribute other results later. + + With best regards, Wlodek Duch + ________________________________________________________________ + + Logical rules for the mushroom data sets. + + Logical rules given below seem to be the simplest possible for the + mushroom dataset and therefore should be treated as benchmark results. + + Disjunctive rules for poisonous mushrooms, from most general + to most specific: + + P_1) odor=NOT(almond.OR.anise.OR.none) + 120 poisonous cases missed, 98.52% accuracy + + P_2) spore-print-color=green + 48 cases missed, 99.41% accuracy + + P_3) odor=none.AND.stalk-surface-below-ring=scaly.AND. + (stalk-color-above-ring=NOT.brown) + 8 cases missed, 99.90% accuracy + + P_4) habitat=leaves.AND.cap-color=white + 100% accuracy + + Rule P_4) may also be + + P_4') population=clustered.AND.cap_color=white + + These rule involve 6 attributes (out of 22). Rules for edible + mushrooms are obtained as negation of the rules given above, for + example the rule: + + odor=(almond.OR.anise.OR.none).AND.spore-print-color=NOT.green + + gives 48 errors, or 99.41% accuracy on the whole dataset. + + Several slightly more complex variations on these rules exist, + involving other attributes, such as gill_size, gill_spacing, + stalk_surface_above_ring, but the rules given above are the simplest + we have found. + + +4. Relevant Information: + This data set includes descriptions of hypothetical samples + corresponding to 23 species of gilled mushrooms in the Agaricus and + Lepiota Family (pp. 500-525). Each species is identified as + definitely edible, definitely poisonous, or of unknown edibility and + not recommended. This latter class was combined with the poisonous + one. The Guide clearly states that there is no simple rule for + determining the edibility of a mushroom; no rule like ``leaflets + three, let it be'' for Poisonous Oak and Ivy. + +5. Number of Instances: 8124 + +6. Number of Attributes: 22 (all nominally valued) + +7. Attribute Information: (classes: edible=e, poisonous=p) + 1. cap-shape: bell=b,conical=c,convex=x,flat=f, + knobbed=k,sunken=s + 2. cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s + 3. cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r, + pink=p,purple=u,red=e,white=w,yellow=y + 4. bruises?: bruises=t,no=f + 5. odor: almond=a,anise=l,creosote=c,fishy=y,foul=f, + musty=m,none=n,pungent=p,spicy=s + 6. gill-attachment: attached=a,descending=d,free=f,notched=n + 7. gill-spacing: close=c,crowded=w,distant=d + 8. gill-size: broad=b,narrow=n + 9. gill-color: black=k,brown=n,buff=b,chocolate=h,gray=g, + green=r,orange=o,pink=p,purple=u,red=e, + white=w,yellow=y + 10. stalk-shape: enlarging=e,tapering=t + 11. stalk-root: bulbous=b,club=c,cup=u,equal=e, + rhizomorphs=z,rooted=r,missing=? + 12. stalk-surface-above-ring: fibrous=f,scaly=y,silky=k,smooth=s + 13. stalk-surface-below-ring: fibrous=f,scaly=y,silky=k,smooth=s + 14. stalk-color-above-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, + pink=p,red=e,white=w,yellow=y + 15. stalk-color-below-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, + pink=p,red=e,white=w,yellow=y + 16. veil-type: partial=p,universal=u + 17. veil-color: brown=n,orange=o,white=w,yellow=y + 18. ring-number: none=n,one=o,two=t + 19. ring-type: cobwebby=c,evanescent=e,flaring=f,large=l, + none=n,pendant=p,sheathing=s,zone=z + 20. spore-print-color: black=k,brown=n,buff=b,chocolate=h,green=r, + orange=o,purple=u,white=w,yellow=y + 21. population: abundant=a,clustered=c,numerous=n, + scattered=s,several=v,solitary=y + 22. habitat: grasses=g,leaves=l,meadows=m,paths=p, + urban=u,waste=w,woods=d + +8. Missing Attribute Values: 2480 of them (denoted by "?"), all for + attribute #11. + +9. Class Distribution: + -- edible: 4208 (51.8%) + -- poisonous: 3916 (48.2%) + -- total: 8124 instances diff --git a/test/haarcascade_frontalface_default.xml b/test/data/haarcascade_frontalface_default.xml similarity index 100% rename from test/haarcascade_frontalface_default.xml rename to test/data/haarcascade_frontalface_default.xml diff --git a/test/ml/ann_mlp_test.dart b/test/ml/ann_mlp_test.dart new file mode 100644 index 00000000..f063eec9 --- /dev/null +++ b/test/ml/ann_mlp_test.dart @@ -0,0 +1,12 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.ANN_MLP', () { + final model = cv.ANN_MLP.create(); + expect(model.getTrainMethod(), cv.ANN_MLP.TRAIN_METHODS_RPROP); + model.setTrainMethod(cv.ANN_MLP.TRAIN_METHODS_BACKPROP); + expect(model.getTrainMethod(), cv.ANN_MLP.TRAIN_METHODS_BACKPROP); + }); +} diff --git a/test/ml/svm_test.dart b/test/ml/svm_test.dart new file mode 100644 index 00000000..7463333d --- /dev/null +++ b/test/ml/svm_test.dart @@ -0,0 +1,15 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.SVM', () { + final model = cv.SVM.create(); + expect(model.getC(), closeTo(1.0, 1e-6)); + + model.setC(2.0); + expect(model.getC(), closeTo(2.0, 1e-6)); + + // model.save("svm.xml"); + }); +} diff --git a/test/ml/train_data_test.dart b/test/ml/train_data_test.dart new file mode 100644 index 00000000..198f9576 --- /dev/null +++ b/test/ml/train_data_test.dart @@ -0,0 +1,65 @@ +import 'package:test/test.dart'; + +import 'package:opencv_dart/opencv_dart.dart' as cv; + +void main() { + test('cv.TrainData static methods', () { + expect(cv.TrainData.missingValue(), greaterThan(0)); + final mat = cv.Mat.eye(3, 3, cv.MatType.CV_32FC1); + final idx = cv.Mat.zeros(1, 2, cv.MatType.CV_32SC1); + expect(cv.TrainData.getSubVector(mat, idx).shape, [2, 3, 1]); + expect(cv.TrainData.getSubMatrix(mat, idx, cv.COL_SAMPLE).shape, [3, 2, 1]); + }); + + test('cv.TrainData', () { + final data = cv.TrainData.loadFromCSV( + "test/data/agaricus-lepiota.data", + 0, + responseStartIdx: 0, + responseEndIdx: 1, + varTypeSpec: "cat[0-22]", + ); + expect(data.getCatCount(0), 6); + expect(data.getCatOfs().isEmpty, false); + expect(data.getClassLabels().isEmpty, false); + expect(data.getDefaultSubstValues().isEmpty, false); + expect(data.getLayout(), cv.ROW_SAMPLE); + expect(data.getMissing().isEmpty, false); + expect(data.getNAllVars(), 22); + expect(data.getNames().length, greaterThan(0)); + expect(data.getNormCatResponses().isEmpty, false); + expect(data.getNSamples(), 8124); + + data.setTrainTestSplit(5410); + expect(data.getNTestSamples(), 8124 - 5410); + expect(data.getNTrainSamples(), 5410); + + data.setTrainTestSplitRatio(0.8); + data.shuffleTrainTest(); + expect(data.getNTestSamples(), 8124 - (8124 * 0.8).toInt()); + expect(data.getNTrainSamples(), (8124 * 0.8).toInt()); + + expect(data.getNVars(), 22); + expect(data.getResponses().isEmpty, false); + expect(data.getResponseType(), 1); + // TODO: how to use? + // expect(data.getSample(cv.Mat.zeros(1, 3, cv.MatType.CV_32SC1), 0), false); + expect(data.getSamples().isEmpty, false); + expect(data.getSampleWeights().isEmpty, false); + expect(data.getTestNormCatResponses().isEmpty, false); + expect(data.getTestResponses().isEmpty, false); + expect(data.getTestSampleIdx().isEmpty, false); + expect(data.getTestSamples().isEmpty, false); + expect(data.getTestSampleWeights().isEmpty, false); + expect(data.getTrainNormCatResponses().isEmpty, false); + expect(data.getTrainResponses().isEmpty, false); + expect(data.getTrainSampleIdx().isEmpty, false); + expect(data.getTrainSamples().isEmpty, false); + expect(data.getTrainSampleWeights().isEmpty, false); + // TODO: how to use? + // expect(data.getValues().isEmpty, false); + expect(data.getVarIdx().isEmpty, true); + expect(data.getVarSymbolFlags().isEmpty, false); + expect(data.getVarType().isEmpty, false); + }); +} From 4633325a62f6d38a18cfadb8fcee4fd0b75ab8ed Mon Sep 17 00:00:00 2001 From: rainy liu Date: Tue, 28 May 2024 19:15:19 +0800 Subject: [PATCH 10/10] fix test for objdetect --- test/objdetect_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/objdetect_test.dart b/test/objdetect_test.dart index b5a2a421..49c42abe 100644 --- a/test/objdetect_test.dart +++ b/test/objdetect_test.dart @@ -8,7 +8,7 @@ void main() async { expect(img.isEmpty, false); final classifier = cv.CascadeClassifier.empty(); - classifier.load("test/haarcascade_frontalface_default.xml"); + classifier.load("test/data/haarcascade_frontalface_default.xml"); final rects = classifier.detectMultiScale(img); expect(rects.length, 1); });