2023-12-17 13:54:01 +00:00

655 lines
196 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitmap ;import (_gg "encoding/binary";_g "github.com/stretchr/testify/require";_dc "github.com/unidoc/unipdf/v3/common";_e "github.com/unidoc/unipdf/v3/internal/bitwise";_ca "github.com/unidoc/unipdf/v3/internal/imageutil";_c "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_a "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_fg "image";_cf "math";_d "sort";_ad "strings";_f "testing";);func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bgcc (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _gfgb (_edb int )int {if _edb < 0{return -_edb ;};return _edb ;};func (_dcdf *ClassedPoints )Swap (i ,j int ){_dcdf .IntSlice [i ],_dcdf .IntSlice [j ]=_dcdf .IntSlice [j ],_dcdf .IntSlice [i ];
};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _fgdc ()(_gage [256]uint32 ){for _deb :=0;_deb < 256;_deb ++{if _deb &0x01!=0{_gage [_deb ]|=0xf;};if _deb &0x02!=0{_gage [_deb ]|=0xf0;};if _deb &0x04!=0{_gage [_deb ]|=0xf00;
};if _deb &0x08!=0{_gage [_deb ]|=0xf000;};if _deb &0x10!=0{_gage [_deb ]|=0xf0000;};if _deb &0x20!=0{_gage [_deb ]|=0xf00000;};if _deb &0x40!=0{_gage [_deb ]|=0xf000000;};if _deb &0x80!=0{_gage [_deb ]|=0xf0000000;};};return _gage ;};func (_afgg *Bitmap )addBorderGeneral (_bcgb ,_fgbb ,_bad ,_fcc int ,_cbca int )(*Bitmap ,error ){const _effe ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _bcgb < 0||_fgbb < 0||_bad < 0||_fcc < 0{return nil ,_a .Error (_effe ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_abgfe ,_ggge :=_afgg .Width ,_afgg .Height ;_cgge :=_abgfe +_bcgb +_fgbb ;
_edaf :=_ggge +_bad +_fcc ;_gaa :=New (_cgge ,_edaf );_gaa .Color =_afgg .Color ;_edc :=PixClr ;if _cbca > 0{_edc =PixSet ;};_bdc :=_gaa .RasterOperation (0,0,_bcgb ,_edaf ,_edc ,nil ,0,0);if _bdc !=nil {return nil ,_a .Wrap (_bdc ,_effe ,"\u006c\u0065\u0066\u0074");
};_bdc =_gaa .RasterOperation (_cgge -_fgbb ,0,_fgbb ,_edaf ,_edc ,nil ,0,0);if _bdc !=nil {return nil ,_a .Wrap (_bdc ,_effe ,"\u0072\u0069\u0067h\u0074");};_bdc =_gaa .RasterOperation (0,0,_cgge ,_bad ,_edc ,nil ,0,0);if _bdc !=nil {return nil ,_a .Wrap (_bdc ,_effe ,"\u0074\u006f\u0070");
};_bdc =_gaa .RasterOperation (0,_edaf -_fcc ,_cgge ,_fcc ,_edc ,nil ,0,0);if _bdc !=nil {return nil ,_a .Wrap (_bdc ,_effe ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_bdc =_gaa .RasterOperation (_bcgb ,_bad ,_abgfe ,_ggge ,PixSrc ,_afgg ,0,0);if _bdc !=nil {return nil ,_a .Wrap (_bdc ,_effe ,"\u0063\u006f\u0070\u0079");
};return _gaa ,nil ;};func TstWordBitmapWithSpaces (t *_f .T ,scale ...int )*Bitmap {_ebbd :=1;if len (scale )> 0{_ebbd =scale [0];};_agbc :=3;_dfecg :=9+7+15+2*_agbc +2*_agbc ;_faaf :=5+_agbc +5+2*_agbc ;_ebfdg :=New (_dfecg *_ebbd ,_faaf *_ebbd );_dgaaf :=&Bitmaps {};
var _aeae *int ;_agbc *=_ebbd ;_ebgga :=_agbc ;_aeae =&_ebgga ;_gege :=_agbc ;_eegf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,_agbc );
_eegf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,_agbc );_eegf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );
_eegf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,0);*_aeae =_agbc ;_gege =5*_ebbd +_agbc ;_eegf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );
_eegf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,_agbc );_eegf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );
_eegf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,1*_ebbd );_eegf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dgaaf ,_eegf ,_aeae ,_gege ,0);
TstWriteSymbols (t ,_dgaaf ,_ebfdg );return _ebfdg ;};func _bgfb (_fegc *Bitmap )(_fcg *Bitmap ,_cdag int ,_dafa error ){const _feeeg ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _fegc ==nil {return nil ,0,_a .Errorf (_feeeg ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _eedb ,_cgfg *Bitmap ;if _eedb ,_dafa =_agbb (nil ,_fegc );_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_afff [13]int ;_ceccb ,_dcacg int ;);_afgf :=12;_acce :=_c .NewNumSlice (_afgf +1);_eggb :=_c .NewNumSlice (_afgf +1);var _gedf *Boxes ;for _fbfe :=0;_fbfe <=_afgf ;_fbfe ++{if _fbfe ==0{if _cgfg ,_dafa =_agbb (nil ,_eedb );_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _cgfg ,_dafa =_eeaaf (_eedb ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _gedf ,_dafa =_cgfg .connComponentsBB (4);
_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"");};_afff [_fbfe ]=len (*_gedf );_acce .AddInt (_afff [_fbfe ]);switch _fbfe {case 0:_ceccb =_afff [0];default:_dcacg =_afff [_fbfe -1]-_afff [_fbfe ];_eggb .AddInt (_dcacg );};_eedb =_cgfg ;};_eegd :=true ;
_bdbf :=2;var _adfa ,_daaa int ;for _aeg :=1;_aeg < len (*_eggb );_aeg ++{if _adfa ,_dafa =_acce .GetInt (_aeg );_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _eegd &&_adfa < int (0.3*float32 (_ceccb )){_bdbf =_aeg +1;_eegd =false ;};if _dcacg ,_dafa =_eggb .GetInt (_aeg );_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _dcacg > _daaa {_daaa =_dcacg ;};};_ddf :=_fegc .XResolution ;if _ddf ==0{_ddf =150;};if _ddf > 110{_bdbf ++;};if _bdbf < 2{_dc .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065");
_bdbf =2;};_cdag =_bdbf +1;if _fcg ,_dafa =_ffag (nil ,_fegc ,_bdbf +1,1);_dafa !=nil {return nil ,0,_a .Wrap (_dafa ,_feeeg ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _fcg ,_cdag ,nil ;
};type MorphOperation int ;func _acb ()(_gae [256]uint16 ){for _aca :=0;_aca < 256;_aca ++{if _aca &0x01!=0{_gae [_aca ]|=0x3;};if _aca &0x02!=0{_gae [_aca ]|=0xc;};if _aca &0x04!=0{_gae [_aca ]|=0x30;};if _aca &0x08!=0{_gae [_aca ]|=0xc0;};if _aca &0x10!=0{_gae [_aca ]|=0x300;
};if _aca &0x20!=0{_gae [_aca ]|=0xc00;};if _aca &0x40!=0{_gae [_aca ]|=0x3000;};if _aca &0x80!=0{_gae [_aca ]|=0xc000;};};return _gae ;};func _geae (_eca ,_effeg ,_gaed *Bitmap ,_cebde int )(*Bitmap ,error ){const _geaae ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
if _effeg ==nil {return nil ,_a .Error (_geaae ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gaed ==nil {return nil ,_a .Error (_geaae ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _cebde !=4&&_cebde !=8{return nil ,_a .Error (_geaae ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d");};var _cbcac error ;
_eca ,_cbcac =_agbb (_eca ,_effeg );if _cbcac !=nil {return nil ,_a .Wrap (_cbcac ,_geaae ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_fdce :=_effeg .createTemplate ();_gaed .setPadBits (0);for _acbg :=0;
_acbg < _faee ;_acbg ++{_fdce ,_cbcac =_agbb (_fdce ,_eca );if _cbcac !=nil {return nil ,_a .Wrapf (_cbcac ,_geaae ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_acbg );};if _cbcac =_bgae (_eca ,_gaed ,_cebde );_cbcac !=nil {return nil ,_a .Wrapf (_cbcac ,_geaae ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_acbg );
};if _fdce .Equals (_eca ){break ;};};return _eca ,nil ;};func _egag (_gfb ,_fffa int )int {if _gfb < _fffa {return _gfb ;};return _fffa ;};func (_cgga Points )GetGeometry (i int )(_gaabg ,_ffcf float32 ,_cagd error ){if i > len (_cgga )-1{return 0,0,_a .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};_aega :=_cgga [i ];return _aega .X ,_aega .Y ,nil ;};func (_babf *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_fdcc *Bitmaps ,_ecdf *Boxes ,_gacf error ){const _bbb ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _babf ==nil {return nil ,nil ,_a .Error (_bbb ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_a .Error (_bbb ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072");
};if _babf .Zero (){_ecdf =&Boxes {};_fdcc =&Bitmaps {};return _fdcc ,_ecdf ,nil ;};switch components {case ComponentConn :_fdcc =&Bitmaps {};if _ecdf ,_gacf =_babf .ConnComponents (_fdcc ,8);_gacf !=nil {return nil ,nil ,_a .Wrap (_gacf ,_bbb ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_fccc ,_feag :=MorphSequence (_babf ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _feag !=nil {return nil ,nil ,_a .Wrap (_feag ,_bbb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _dc .Log .IsLogLevel (_dc .LogLevelTrace ){_dc .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_fccc .String ());
};_geaa :=&Bitmaps {};_ecdf ,_feag =_fccc .ConnComponents (_geaa ,8);if _feag !=nil {return nil ,nil ,_a .Wrap (_feag ,_bbb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _dc .Log .IsLogLevel (_dc .LogLevelTrace ){_dc .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_geaa .String ());
};if _fdcc ,_feag =_geaa .ClipToBitmap (_babf );_feag !=nil {return nil ,nil ,_a .Wrap (_feag ,_bbb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_adbd :=1;
var _bca *Bitmap ;switch {case _babf .XResolution <=200:_bca =_babf ;case _babf .XResolution <=400:_adbd =2;_bca ,_gacf =_ddd (_babf ,1,0,0,0);if _gacf !=nil {return nil ,nil ,_a .Wrap (_gacf ,_bbb ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_adbd =4;_bca ,_gacf =_ddd (_babf ,1,1,0,0);if _gacf !=nil {return nil ,nil ,_a .Wrap (_gacf ,_bbb ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_egfbb ,_ ,_befee :=_bgfb (_bca );if _befee !=nil {return nil ,nil ,_a .Wrap (_befee ,_bbb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_edgd ,_befee :=_dcda (_egfbb ,_adbd );if _befee !=nil {return nil ,nil ,_a .Wrap (_befee ,_bbb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_bgg :=&Bitmaps {};if _ecdf ,_befee =_edgd .ConnComponents (_bgg ,4);_befee !=nil {return nil ,nil ,_a .Wrap (_befee ,_bbb ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064");
};if _fdcc ,_befee =_bgg .ClipToBitmap (_babf );_befee !=nil {return nil ,nil ,_a .Wrap (_befee ,_bbb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_fdcc ,_gacf =_fdcc .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _gacf !=nil {return nil ,nil ,_a .Wrap (_gacf ,_bbb ,"");};_ecdf ,_gacf =_ecdf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _gacf !=nil {return nil ,nil ,_a .Wrap (_gacf ,_bbb ,"");};return _fdcc ,_ecdf ,nil ;};func TstDSymbol (t *_f .T ,scale ...int )*Bitmap {_gcccbc ,_deba :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
_g .NoError (t ,_deba );return TstGetScaledSymbol (t ,_gcccbc ,scale ...);};func (_fabf *byHeight )Len ()int {return len (_fabf .Values )};func init (){for _gcfa :=0;_gcfa < 256;_gcfa ++{_eab [_gcfa ]=uint8 (_gcfa &0x1)+(uint8 (_gcfa >>1)&0x1)+(uint8 (_gcfa >>2)&0x1)+(uint8 (_gcfa >>3)&0x1)+(uint8 (_gcfa >>4)&0x1)+(uint8 (_gcfa >>5)&0x1)+(uint8 (_gcfa >>6)&0x1)+(uint8 (_gcfa >>7)&0x1);
};};func (_ggaf *Bitmap )thresholdPixelSum (_ffa int )bool {var (_edce int ;_febc uint8 ;_fgff byte ;_fagg int ;);_baec :=_ggaf .RowStride ;_bdac :=uint (_ggaf .Width &0x07);if _bdac !=0{_febc =uint8 ((0xff<<(8-_bdac ))&0xff);_baec --;};for _dcgf :=0;_dcgf < _ggaf .Height ;
_dcgf ++{for _fagg =0;_fagg < _baec ;_fagg ++{_fgff =_ggaf .Data [_dcgf *_ggaf .RowStride +_fagg ];_edce +=int (_eab [_fgff ]);};if _bdac !=0{_fgff =_ggaf .Data [_dcgf *_ggaf .RowStride +_fagg ]&_febc ;_edce +=int (_eab [_fgff ]);};if _edce > _ffa {return true ;
};};return false ;};func _cac (_gag *Bitmap ,_dca ,_cg int )(*Bitmap ,error ){const _cge ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _gag ==nil {return nil ,_a .Error (_cge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _dca <=0||_cg <=0{return nil ,_a .Error (_cge ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030");};if _dca ==_cg {if _dca ==1{_daef ,_efe :=_agbb (nil ,_gag );
if _efe !=nil {return nil ,_a .Wrap (_efe ,_cge ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _daef ,nil ;};if _dca ==2||_dca ==4||_dca ==8{_dag ,_acg :=_abf (_gag ,_dca );if _acg !=nil {return nil ,_a .Wrap (_acg ,_cge ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};return _dag ,nil ;};};_bff :=_dca *_gag .Width ;_gac :=_cg *_gag .Height ;_fgd :=New (_bff ,_gac );_ded :=_fgd .RowStride ;var (_gfg ,_gdg ,_bfc ,_cef ,_abg int ;_afg byte ;_bbc error ;);for _gdg =0;_gdg < _gag .Height ;_gdg ++{_gfg =_cg *_gdg *_ded ;
for _bfc =0;_bfc < _gag .Width ;_bfc ++{if _db :=_gag .GetPixel (_bfc ,_gdg );_db {_abg =_dca *_bfc ;for _cef =0;_cef < _dca ;_cef ++{_fgd .setBit (_gfg *8+_abg +_cef );};};};for _cef =1;_cef < _cg ;_cef ++{_gcc :=_gfg +_cef *_ded ;for _afc :=0;_afc < _ded ;
_afc ++{if _afg ,_bbc =_fgd .GetByte (_gfg +_afc );_bbc !=nil {return nil ,_a .Wrapf (_bbc ,_cge ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_cef );};if _bbc =_fgd .SetByte (_gcc +_afc ,_afg );
_bbc !=nil {return nil ,_a .Wrap (_bbc ,_cge ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _fgd ,nil ;};func (_bgdf *Bitmap )CreateTemplate ()*Bitmap {return _bgdf .createTemplate ()};
func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gcee ,_fdbg int ;_fcbb :=src .RowStride -1;if x < 0{_fdbg =-x ;x =0;}else if x +src .Width > dst .Width {_fcbb -=src .Width +x -dst .Width ;};if y < 0{_gcee =-y ;y =0;_fdbg +=src .RowStride ;
_fcbb +=src .RowStride ;}else if y +src .Height > dst .Height {_gcee =src .Height +y -dst .Height ;};var (_ddeb int ;_eba error ;);_bffa :=x &0x07;_deec :=8-_bffa ;_gfaf :=src .Width &0x07;_fcfg :=_deec -_gfaf ;_feafc :=_deec &0x07!=0;_bafc :=src .Width <=((_fcbb -_fdbg )<<3)+_deec ;
_bgf :=dst .GetByteIndex (x ,y );_dfg :=_gcee +dst .Height ;if src .Height > _dfg {_ddeb =_dfg ;}else {_ddeb =src .Height ;};switch {case !_feafc :_eba =_dda (src ,dst ,_gcee ,_ddeb ,_bgf ,_fdbg ,_fcbb ,op );case _bafc :_eba =_bdda (src ,dst ,_gcee ,_ddeb ,_bgf ,_fdbg ,_fcbb ,_fcfg ,_bffa ,_deec ,op );
default:_eba =_dcgb (src ,dst ,_gcee ,_ddeb ,_bgf ,_fdbg ,_fcbb ,_fcfg ,_bffa ,_deec ,op ,_gfaf );};return _eba ;};func (_gdec *Bitmap )centroid (_ebda ,_fcba []int )(Point ,error ){_badbd :=Point {};_gdec .setPadBits (0);if len (_ebda )==0{_ebda =_feeb ();
};if len (_fcba )==0{_fcba =_acea ();};var _ageg ,_ggfa ,_ddebc ,_fcccf ,_dccad ,_edbc int ;var _ggcd byte ;for _dccad =0;_dccad < _gdec .Height ;_dccad ++{_dfeg :=_gdec .RowStride *_dccad ;_fcccf =0;for _edbc =0;_edbc < _gdec .RowStride ;_edbc ++{_ggcd =_gdec .Data [_dfeg +_edbc ];
if _ggcd !=0{_fcccf +=_fcba [_ggcd ];_ageg +=_ebda [_ggcd ]+_edbc *8*_fcba [_ggcd ];};};_ddebc +=_fcccf ;_ggfa +=_fcccf *_dccad ;};if _ddebc !=0{_badbd .X =float32 (_ageg )/float32 (_ddebc );_badbd .Y =float32 (_ggfa )/float32 (_ddebc );};return _badbd ,nil ;
};func _gcaf (_cdga ,_accg *Bitmap ,_aceb *Selection )(*Bitmap ,error ){const _dded ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _afeg ,_ggeb int ;if _accg ==nil {return nil ,_a .Error (_dded ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _aceb ==nil {return nil ,_a .Error (_dded ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_afeg =_aceb .Width ;_ggeb =_aceb .Height ;if _afeg ==0||_ggeb ==0{return nil ,_a .Error (_dded ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _cdga ==nil {return _accg .createTemplate (),nil ;};if _ecdfb :=_cdga .resizeImageData (_accg );_ecdfb !=nil {return nil ,_ecdfb ;};return _cdga ,nil ;};func _gbaa (_fefg ,_edff *Bitmap ,_cdff ,_bcaed int )(*Bitmap ,error ){const _cccdef ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _edff ==nil {return nil ,_a .Error (_cccdef ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cdff < 1||_bcaed < 1{return nil ,_a .Error (_cccdef ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
};if _cdff ==1&&_bcaed ==1{_gaf ,_bdbc :=_agbb (_fefg ,_edff );if _bdbc !=nil {return nil ,_a .Wrap (_bdbc ,_cccdef ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gaf ,nil ;};if _cdff ==1||_bcaed ==1{_dgaade :=SelCreateBrick (_bcaed ,_cdff ,_bcaed /2,_cdff /2,SelHit );_efcb ,_dafaa :=_bbbb (_fefg ,_edff ,_dgaade );if _dafaa !=nil {return nil ,_a .Wrap (_dafaa ,_cccdef ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _efcb ,nil ;};_gfge :=SelCreateBrick (1,_cdff ,0,_cdff /2,SelHit );_fade :=SelCreateBrick (_bcaed ,1,_bcaed /2,0,SelHit );_deea ,_cfab :=_bbbb (nil ,_edff ,_gfge );if _cfab !=nil {return nil ,_a .Wrap (_cfab ,_cccdef ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_fefg ,_cfab =_bbbb (_fefg ,_deea ,_fade );if _cfab !=nil {return nil ,_a .Wrap (_cfab ,_cccdef ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _fefg ,nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;
LocSelectIfEither ;LocSelectIfBoth ;);func TstISymbol (t *_f .T ,scale ...int )*Bitmap {_egacg ,_eeaea :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_g .NoError (t ,_eeaea );return TstGetScaledSymbol (t ,_egacg ,scale ...);};type LocationFilter int ;
func (_fagcb *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _adbga ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_adaf ,_dbca :=_fagcb .selectByIndexes (idx );
if _dbca !=nil {return nil ,_a .Wrap (_dbca ,_adbga ,"");};return _adaf ,nil ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _bbea (d ,s ,sel )};func _dggg (_fgc *Bitmap ,_gdda ,_gefb int ,_deegc ,_dbed int ,_ddec RasterOperator ,_ebfa *Bitmap ,_afaab ,_gagf int )error {var _gcdg ,_fcda ,_fbddg ,_gefgbf int ;
if _gdda < 0{_afaab -=_gdda ;_deegc +=_gdda ;_gdda =0;};if _afaab < 0{_gdda -=_afaab ;_deegc +=_afaab ;_afaab =0;};_gcdg =_gdda +_deegc -_fgc .Width ;if _gcdg > 0{_deegc -=_gcdg ;};_fcda =_afaab +_deegc -_ebfa .Width ;if _fcda > 0{_deegc -=_fcda ;};if _gefb < 0{_gagf -=_gefb ;
_dbed +=_gefb ;_gefb =0;};if _gagf < 0{_gefb -=_gagf ;_dbed +=_gagf ;_gagf =0;};_fbddg =_gefb +_dbed -_fgc .Height ;if _fbddg > 0{_dbed -=_fbddg ;};_gefgbf =_gagf +_dbed -_ebfa .Height ;if _gefgbf > 0{_dbed -=_gefgbf ;};if _deegc <=0||_dbed <=0{return nil ;
};var _acfbd error ;switch {case _gdda &7==0&&_afaab &7==0:_acfbd =_gfbb (_fgc ,_gdda ,_gefb ,_deegc ,_dbed ,_ddec ,_ebfa ,_afaab ,_gagf );case _gdda &7==_afaab &7:_acfbd =_fcdf (_fgc ,_gdda ,_gefb ,_deegc ,_dbed ,_ddec ,_ebfa ,_afaab ,_gagf );default:_acfbd =_bcdab (_fgc ,_gdda ,_gefb ,_deegc ,_dbed ,_ddec ,_ebfa ,_afaab ,_gagf );
};if _acfbd !=nil {return _a .Wrap (_acfbd ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_deg *Bitmap )SizesEqual (s *Bitmap )bool {if _deg ==s {return true ;};if _deg .Width !=s .Width ||_deg .Height !=s .Height {return false ;
};return true ;};type RasterOperator int ;func (_fgabd *Bitmaps )WidthSorter ()func (_ebfg ,_bcdgg int )bool {return func (_fdbf ,_bgcb int )bool {return _fgabd .Values [_fdbf ].Width < _fgabd .Values [_bgcb ].Width };};func (_gaec *Bitmap )resizeImageData (_fdab *Bitmap )error {if _fdab ==nil {return _a .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _gaec .SizesEqual (_fdab ){return nil ;};_gaec .Data =make ([]byte ,len (_fdab .Data ));_gaec .Width =_fdab .Width ;_gaec .Height =_fdab .Height ;_gaec .RowStride =_fdab .RowStride ;return nil ;};func (_cfcf *ClassedPoints )SortByY (){_cfcf ._effdc =_cfcf .ySortFunction ();
_d .Sort (_cfcf )};func (_ggcg *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _becd ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _aaac :=_ggcg .validateIntSlice ();
_aaac !=nil {return nil ,_a .Wrap (_aaac ,_becd ,"");};if _ggcg .IntSlice .Size ()==0{return nil ,_a .Error (_becd ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_ggcg .SortByY ();var (_fcec []*ClassedPoints ;
_bdbgg int ;);_aggc :=-1;var _fcab *ClassedPoints ;for _dbcga :=0;_dbcga < len (_ggcg .IntSlice );_dbcga ++{_bdbgg =int (_ggcg .YAtIndex (_dbcga ));if _bdbgg !=_aggc {_fcab =&ClassedPoints {Points :_ggcg .Points };_aggc =_bdbgg ;_fcec =append (_fcec ,_fcab );
};_fcab .IntSlice =append (_fcab .IntSlice ,_ggcg .IntSlice [_dbcga ]);};for _ ,_fbfad :=range _fcec {_fbfad .SortByX ();};return _fcec ,nil ;};func (_cggef *ClassedPoints )XAtIndex (i int )float32 {return (*_cggef .Points )[_cggef .IntSlice [i ]].X };
func (_dcb *Bitmap )GetByte (index int )(byte ,error ){if index > len (_dcb .Data )-1||index < 0{return 0,_a .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
};return _dcb .Data [index ],nil ;};func (_dbfa *Bitmaps )GetBox (i int )(*_fg .Rectangle ,error ){const _fbbdc ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dbfa ==nil {return nil ,_a .Error (_fbbdc ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_dbfa .Boxes )-1{return nil ,_a .Errorf (_fbbdc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dbfa .Boxes [i ],nil ;};func _bbea (_ffae *Bitmap ,_cbg *Bitmap ,_gaba *Selection )(*Bitmap ,error ){var (_cffba *Bitmap ;
_eddeg error ;);_ffae ,_eddeg =_cefb (_ffae ,_cbg ,_gaba ,&_cffba );if _eddeg !=nil {return nil ,_eddeg ;};if _eddeg =_ffae .clearAll ();_eddeg !=nil {return nil ,_eddeg ;};var _bfdf SelectionValue ;for _fbde :=0;_fbde < _gaba .Height ;_fbde ++{for _gada :=0;
_gada < _gaba .Width ;_gada ++{_bfdf =_gaba .Data [_fbde ][_gada ];if _bfdf ==SelHit {if _eddeg =_ffae .RasterOperation (_gada -_gaba .Cx ,_fbde -_gaba .Cy ,_cbg .Width ,_cbg .Height ,PixSrcOrDst ,_cffba ,0,0);_eddeg !=nil {return nil ,_eddeg ;};};};};
return _ffae ,nil ;};func (_baac *Bitmap )addPadBits ()(_cfa error ){const _adbc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_dde :=_baac .Width %8;if _dde ==0{return nil ;};_ccc :=_baac .Width /8;
_beg :=_e .NewReader (_baac .Data );_afgb :=make ([]byte ,_baac .Height *_baac .RowStride );_gaga :=_e .NewWriterMSB (_afgb );_afae :=make ([]byte ,_ccc );var (_ccd int ;_gagg uint64 ;);for _ccd =0;_ccd < _baac .Height ;_ccd ++{if _ ,_cfa =_beg .Read (_afae );
_cfa !=nil {return _a .Wrap (_cfa ,_adbc ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_cfa =_gaga .Write (_afae );_cfa !=nil {return _a .Wrap (_cfa ,_adbc ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _gagg ,_cfa =_beg .ReadBits (byte (_dde ));
_cfa !=nil {return _a .Wrap (_cfa ,_adbc ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _cfa =_gaga .WriteByte (byte (_gagg )<<uint (8-_dde ));_cfa !=nil {return _a .Wrap (_cfa ,_adbc ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_baac .Data =_gaga .Data ();return nil ;};func (_efbg *Bitmap )equivalent (_febb *Bitmap )bool {if _efbg ==_febb {return true ;};if !_efbg .SizesEqual (_febb ){return false ;};_ege :=_bebe (_efbg ,_febb ,CmbOpXor );_ggea :=_efbg .countPixels ();_eddg :=int (0.25*float32 (_ggea ));
if _ege .thresholdPixelSum (_eddg ){return false ;};var (_ffg [9][9]int ;_abe [18][9]int ;_dcg [9][18]int ;_agec int ;_ddgc int ;);_abgb :=9;_bcf :=_efbg .Height /_abgb ;_gfee :=_efbg .Width /_abgb ;_cee ,_bbdc :=_bcf /2,_gfee /2;if _bcf < _gfee {_cee =_gfee /2;
_bbdc =_bcf /2;};_cecc :=float64 (_cee )*float64 (_bbdc )*_cf .Pi ;_dbba :=int (float64 (_bcf *_gfee /2)*0.9);_caba :=int (float64 (_gfee *_bcf /2)*0.9);for _egcg :=0;_egcg < _abgb ;_egcg ++{_gbad :=_gfee *_egcg +_agec ;var _afd int ;if _egcg ==_abgb -1{_agec =0;
_afd =_efbg .Width ;}else {_afd =_gbad +_gfee ;if ((_efbg .Width -_agec )%_abgb )> 0{_agec ++;_afd ++;};};for _bfa :=0;_bfa < _abgb ;_bfa ++{_efg :=_bcf *_bfa +_ddgc ;var _gffgf int ;if _bfa ==_abgb -1{_ddgc =0;_gffgf =_efbg .Height ;}else {_gffgf =_efg +_bcf ;
if (_efbg .Height -_ddgc )%_abgb > 0{_ddgc ++;_gffgf ++;};};var _bdg ,_cdf ,_aae ,_daad int ;_ggde :=(_gbad +_afd )/2;_fdc :=(_efg +_gffgf )/2;for _gbc :=_gbad ;_gbc < _afd ;_gbc ++{for _ddea :=_efg ;_ddea < _gffgf ;_ddea ++{if _ege .GetPixel (_gbc ,_ddea ){if _gbc < _ggde {_bdg ++;
}else {_cdf ++;};if _ddea < _fdc {_daad ++;}else {_aae ++;};};};};_ffg [_egcg ][_bfa ]=_bdg +_cdf ;_abe [_egcg *2][_bfa ]=_bdg ;_abe [_egcg *2+1][_bfa ]=_cdf ;_dcg [_egcg ][_bfa *2]=_daad ;_dcg [_egcg ][_bfa *2+1]=_aae ;};};for _cgfa :=0;_cgfa < _abgb *2-1;
_cgfa ++{for _ecd :=0;_ecd < (_abgb -1);_ecd ++{var _fdad int ;for _gggb :=0;_gggb < 2;_gggb ++{for _eaac :=0;_eaac < 2;_eaac ++{_fdad +=_abe [_cgfa +_gggb ][_ecd +_eaac ];};};if _fdad > _caba {return false ;};};};for _fgg :=0;_fgg < (_abgb -1);_fgg ++{for _bgdd :=0;
_bgdd < ((_abgb *2)-1);_bgdd ++{var _bace int ;for _bgddf :=0;_bgddf < 2;_bgddf ++{for _egbd :=0;_egbd < 2;_egbd ++{_bace +=_dcg [_fgg +_bgddf ][_bgdd +_egbd ];};};if _bace > _dbba {return false ;};};};for _gef :=0;_gef < (_abgb -2);_gef ++{for _feee :=0;
_feee < (_abgb -2);_feee ++{var _bddb ,_gee int ;for _dfb :=0;_dfb < 3;_dfb ++{for _aecc :=0;_aecc < 3;_aecc ++{if _dfb ==_aecc {_bddb +=_ffg [_gef +_dfb ][_feee +_aecc ];};if (2-_dfb )==_aecc {_gee +=_ffg [_gef +_dfb ][_feee +_aecc ];};};};if _bddb > _caba ||_gee > _caba {return false ;
};};};for _fdag :=0;_fdag < (_abgb -1);_fdag ++{for _gbcg :=0;_gbcg < (_abgb -1);_gbcg ++{var _ddgd int ;for _dfee :=0;_dfee < 2;_dfee ++{for _fead :=0;_fead < 2;_fead ++{_ddgd +=_ffg [_fdag +_dfee ][_gbcg +_fead ];};};if float64 (_ddgd )> _cecc {return false ;
};};};return true ;};func _bdca (_gdac ,_bbgd *Bitmap ,_cffc *Selection )(*Bitmap ,error ){const _eccbc ="\u006f\u0070\u0065\u006e";var _gdgc error ;_gdac ,_gdgc =_gcaf (_gdac ,_bbgd ,_cffc );if _gdgc !=nil {return nil ,_a .Wrap (_gdgc ,_eccbc ,"");};_adbb ,_gdgc :=_bbbb (nil ,_bbgd ,_cffc );
if _gdgc !=nil {return nil ,_a .Wrap (_gdgc ,_eccbc ,"");};_ ,_gdgc =_bbea (_gdac ,_adbb ,_cffc );if _gdgc !=nil {return nil ,_a .Wrap (_gdgc ,_eccbc ,"");};return _gdac ,nil ;};func _bcdab (_fdbe *Bitmap ,_eecb ,_cbfg ,_ddba ,_effg int ,_fdbc RasterOperator ,_fbfb *Bitmap ,_fcfa ,_gdgf int )error {var (_dfdc bool ;
_becg bool ;_fbeee byte ;_gbba int ;_fgfeg int ;_fcdb int ;_dbga int ;_bcdaa bool ;_ecca int ;_eaeeg int ;_abfbge int ;_aede bool ;_befa byte ;_fggae int ;_deda int ;_bbag int ;_ecfbg byte ;_ebbf int ;_gfag int ;_efeg uint ;_acdae uint ;_cbddg byte ;_gcccb shift ;
_feac bool ;_aebf bool ;_degc ,_agegb int ;);if _fcfa &7!=0{_gfag =8-(_fcfa &7);};if _eecb &7!=0{_fgfeg =8-(_eecb &7);};if _gfag ==0&&_fgfeg ==0{_cbddg =_gafa [0];}else {if _fgfeg > _gfag {_efeg =uint (_fgfeg -_gfag );}else {_efeg =uint (8-(_gfag -_fgfeg ));
};_acdae =8-_efeg ;_cbddg =_gafa [_efeg ];};if (_eecb &7)!=0{_dfdc =true ;_gbba =8-(_eecb &7);_fbeee =_gafa [_gbba ];_fcdb =_fdbe .RowStride *_cbfg +(_eecb >>3);_dbga =_fbfb .RowStride *_gdgf +(_fcfa >>3);_ebbf =8-(_fcfa &7);if _gbba > _ebbf {_gcccb =_deaa ;
if _ddba >=_gfag {_feac =true ;};}else {_gcccb =_cgacd ;};};if _ddba < _gbba {_becg =true ;_fbeee &=_bbef [8-_gbba +_ddba ];};if !_becg {_ecca =(_ddba -_gbba )>>3;if _ecca !=0{_bcdaa =true ;_eaeeg =_fdbe .RowStride *_cbfg +((_eecb +_fgfeg )>>3);_abfbge =_fbfb .RowStride *_gdgf +((_fcfa +_fgfeg )>>3);
};};_fggae =(_eecb +_ddba )&7;if !(_becg ||_fggae ==0){_aede =true ;_befa =_bbef [_fggae ];_deda =_fdbe .RowStride *_cbfg +((_eecb +_fgfeg )>>3)+_ecca ;_bbag =_fbfb .RowStride *_gdgf +((_fcfa +_fgfeg )>>3)+_ecca ;if _fggae > int (_acdae ){_aebf =true ;
};};switch _fdbc {case PixSrc :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;
};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg ,_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );
_fdbe .Data [_eaeeg +_agegb ]=_ecfbg ;};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );
};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg ,_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixNotSrc :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^_ecfbg ,_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );
_fdbe .Data [_eaeeg +_agegb ]=^_ecfbg ;};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );
};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^_ecfbg ,_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixSrcOrDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg |_fdbe .Data [_fcdb ],_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;
_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]|=_ecfbg ;};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;
_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg |_fdbe .Data [_deda ],_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;
};};case PixSrcAndDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg &_fdbe .Data [_fcdb ],_fbeee );
_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]&=_ecfbg ;
};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg &_fdbe .Data [_deda ],_befa );
_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixSrcXorDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg ^_fdbe .Data [_fcdb ],_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;
_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]^=_ecfbg ;};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;
_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg ^_fdbe .Data [_deda ],_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;
};};case PixNotSrcOrDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^_ecfbg |_fdbe .Data [_fcdb ],_fbeee );
_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]|=^_ecfbg ;
};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^_ecfbg |_fdbe .Data [_deda ],_befa );
_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixNotSrcAndDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^_ecfbg &_fdbe .Data [_fcdb ],_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;
_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]&=^_ecfbg ;};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;
_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^_ecfbg &_fdbe .Data [_deda ],_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;
};};case PixSrcOrNotDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg |^_fdbe .Data [_fcdb ],_fbeee );
_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]=_ecfbg |^_fdbe .Data [_eaeeg +_agegb ];
};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg |^_fdbe .Data [_deda ],_befa );
_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixSrcAndNotDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],_ecfbg &^_fdbe .Data [_fcdb ],_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;
_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]=_ecfbg &^_fdbe .Data [_eaeeg +_agegb ];};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;
};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],_ecfbg &^_fdbe .Data [_deda ],_befa );_deda +=_fdbe .RowStride ;
_bbag +=_fbfb .RowStride ;};};case PixNotPixSrcOrDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;
};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^(_ecfbg |_fdbe .Data [_fcdb ]),_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );
_fdbe .Data [_eaeeg +_agegb ]=^(_ecfbg |_fdbe .Data [_eaeeg +_agegb ]);};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );
};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^(_ecfbg |_fdbe .Data [_deda ]),_befa );_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixNotPixSrcAndDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;
if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^(_ecfbg &_fdbe .Data [_fcdb ]),_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;
};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]=^(_ecfbg &_fdbe .Data [_eaeeg +_agegb ]);
};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^(_ecfbg &_fdbe .Data [_deda ]),_befa );
_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};case PixNotPixSrcXorDst :if _dfdc {for _degc =0;_degc < _effg ;_degc ++{if _gcccb ==_deaa {_ecfbg =_fbfb .Data [_dbga ]<<_efeg ;if _feac {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_dbga +1]>>_acdae ,_cbddg );
};}else {_ecfbg =_fbfb .Data [_dbga ]>>_acdae ;};_fdbe .Data [_fcdb ]=_efgd (_fdbe .Data [_fcdb ],^(_ecfbg ^_fdbe .Data [_fcdb ]),_fbeee );_fcdb +=_fdbe .RowStride ;_dbga +=_fbfb .RowStride ;};};if _bcdaa {for _degc =0;_degc < _effg ;_degc ++{for _agegb =0;
_agegb < _ecca ;_agegb ++{_ecfbg =_efgd (_fbfb .Data [_abfbge +_agegb ]<<_efeg ,_fbfb .Data [_abfbge +_agegb +1]>>_acdae ,_cbddg );_fdbe .Data [_eaeeg +_agegb ]=^(_ecfbg ^_fdbe .Data [_eaeeg +_agegb ]);};_eaeeg +=_fdbe .RowStride ;_abfbge +=_fbfb .RowStride ;
};};if _aede {for _degc =0;_degc < _effg ;_degc ++{_ecfbg =_fbfb .Data [_bbag ]<<_efeg ;if _aebf {_ecfbg =_efgd (_ecfbg ,_fbfb .Data [_bbag +1]>>_acdae ,_cbddg );};_fdbe .Data [_deda ]=_efgd (_fdbe .Data [_deda ],^(_ecfbg ^_fdbe .Data [_deda ]),_befa );
_deda +=_fdbe .RowStride ;_bbag +=_fbfb .RowStride ;};};default:_dc .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_fdbc );return _a .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
};return nil ;};func (_aeed *Bitmap )SetDefaultPixel (){for _ddcg :=range _aeed .Data {_aeed .Data [_ddcg ]=byte (0xff);};};func (_bcd *Bitmap )setEightPartlyBytes (_cfaa ,_debba int ,_bgddc uint64 )(_fed error ){var (_cfc byte ;_bbad int ;);const _dcbg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
for _dgcg :=1;_dgcg <=_debba ;_dgcg ++{_bbad =64-_dgcg *8;_cfc =byte (_bgddc >>uint (_bbad )&0xff);_dc .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_cfc ,_cfaa ,_cfaa +_dgcg -1,_debba ,_bbad );
if _fed =_bcd .SetByte (_cfaa +_dgcg -1,_cfc );_fed !=nil {return _a .Wrap (_fed ,_dcbg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_ebec :=_bcd .RowStride *8-_bcd .Width ;if _ebec ==0{return nil ;};_bbad -=8;_cfc =byte (_bgddc >>uint (_bbad )&0xff)<<uint (_ebec );
if _fed =_bcd .SetByte (_cfaa +_debba ,_cfc );_fed !=nil {return _a .Wrap (_fed ,_dcbg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _gfff ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
_dce :=_aac (width ,height );_dce .Data =data ;if _baf :=((width *height )+7)>>3;len (data )< _baf {return nil ,_a .Errorf (_gfff ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_baf );
};if _afe :=_dce .addPadBits ();_afe !=nil {return nil ,_a .Wrap (_afe ,_gfff ,"");};return _dce ,nil ;};func (_gddg *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _effeb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
if _gddg ==nil {return nil ,_a .Error (_effeb ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_a .Error (_effeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};_bfdb :=len (_gddg .Values );_bcadg :=&Bitmaps {Values :make ([]*Bitmap ,_bfdb ),Boxes :make ([]*_fg .Rectangle ,_bfdb )};var (_cggc ,_cdbc *Bitmap ;_dcdac *_fg .Rectangle ;_baacf error ;);for _cgdc :=0;_cgdc < _bfdb ;_cgdc ++{if _cggc ,_baacf =_gddg .GetBitmap (_cgdc );
_baacf !=nil {return nil ,_a .Wrap (_baacf ,_effeb ,"");};if _dcdac ,_baacf =_gddg .GetBox (_cgdc );_baacf !=nil {return nil ,_a .Wrap (_baacf ,_effeb ,"");};if _cdbc ,_baacf =s .clipRectangle (_dcdac ,nil );_baacf !=nil {return nil ,_a .Wrap (_baacf ,_effeb ,"");
};if _cdbc ,_baacf =_cdbc .And (_cggc );_baacf !=nil {return nil ,_a .Wrap (_baacf ,_effeb ,"");};_bcadg .Values [_cgdc ]=_cdbc ;_bcadg .Boxes [_cgdc ]=_dcdac ;};return _bcadg ,nil ;};func (_cbcacc *Bitmaps )AddBox (box *_fg .Rectangle ){_cbcacc .Boxes =append (_cbcacc .Boxes ,box )};
type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _fcdf (_cbbcd *Bitmap ,_cgefga ,_ddef ,_badbe ,_adag int ,_affg RasterOperator ,_adg *Bitmap ,_acdaa ,_acbb int )error {var (_bgaf bool ;_cgfb bool ;_aefc int ;
_fcfgd int ;_bgef int ;_eacec bool ;_fdg byte ;_ceegd int ;_dea int ;_beecb int ;_ecbd ,_acag int ;);_dgca :=8-(_cgefga &7);_dccab :=_gafa [_dgca ];_cae :=_cbbcd .RowStride *_ddef +(_cgefga >>3);_adecd :=_adg .RowStride *_acbb +(_acdaa >>3);if _badbe < _dgca {_bgaf =true ;
_dccab &=_bbef [8-_dgca +_badbe ];};if !_bgaf {_aefc =(_badbe -_dgca )>>3;if _aefc > 0{_cgfb =true ;_fcfgd =_cae +1;_bgef =_adecd +1;};};_ceegd =(_cgefga +_badbe )&7;if !(_bgaf ||_ceegd ==0){_eacec =true ;_fdg =_bbef [_ceegd ];_dea =_cae +1+_aefc ;_beecb =_adecd +1+_aefc ;
};switch _affg {case PixSrc :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;
_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotSrc :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^_adg .Data [_adecd ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;};if _cgfb {for _ecbd =0;
_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=^_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^_adg .Data [_beecb ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixSrcOrDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ]|_cbbcd .Data [_cae ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]|=_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ]|_cbbcd .Data [_dea ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixSrcAndDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ]&_cbbcd .Data [_cae ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]&=_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ]&_cbbcd .Data [_dea ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixSrcXorDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ]^_cbbcd .Data [_cae ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]^=_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ]^_cbbcd .Data [_dea ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotSrcOrDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^(_adg .Data [_adecd ])|_cbbcd .Data [_cae ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]|=^(_adg .Data [_bgef +_acag ]);};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^(_adg .Data [_beecb ])|_cbbcd .Data [_dea ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotSrcAndDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^(_adg .Data [_adecd ])&_cbbcd .Data [_cae ],_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]&=^_adg .Data [_bgef +_acag ];};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^(_adg .Data [_beecb ])&_cbbcd .Data [_dea ],_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixSrcOrNotDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ]|^(_cbbcd .Data [_cae ]),_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=_adg .Data [_bgef +_acag ]|^(_cbbcd .Data [_fcfgd +_acag ]);};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;
_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ]|^(_cbbcd .Data [_dea ]),_fdg );_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixSrcAndNotDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],_adg .Data [_adecd ]&^(_cbbcd .Data [_cae ]),_dccab );
_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=_adg .Data [_bgef +_acag ]&^(_cbbcd .Data [_fcfgd +_acag ]);};_fcfgd +=_cbbcd .RowStride ;
_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],_adg .Data [_beecb ]&^(_cbbcd .Data [_dea ]),_fdg );_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotPixSrcOrDst :for _ecbd =0;
_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^(_adg .Data [_adecd ]|_cbbcd .Data [_cae ]),_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;
_acag ++{_cbbcd .Data [_fcfgd +_acag ]=^(_adg .Data [_bgef +_acag ]|_cbbcd .Data [_fcfgd +_acag ]);};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^(_adg .Data [_beecb ]|_cbbcd .Data [_dea ]),_fdg );
_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotPixSrcAndDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^(_adg .Data [_adecd ]&_cbbcd .Data [_cae ]),_dccab );_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;
};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=^(_adg .Data [_bgef +_acag ]&_cbbcd .Data [_fcfgd +_acag ]);};_fcfgd +=_cbbcd .RowStride ;_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;
_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^(_adg .Data [_beecb ]&_cbbcd .Data [_dea ]),_fdg );_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};case PixNotPixSrcXorDst :for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_cae ]=_efgd (_cbbcd .Data [_cae ],^(_adg .Data [_adecd ]^_cbbcd .Data [_cae ]),_dccab );
_cae +=_cbbcd .RowStride ;_adecd +=_adg .RowStride ;};if _cgfb {for _ecbd =0;_ecbd < _adag ;_ecbd ++{for _acag =0;_acag < _aefc ;_acag ++{_cbbcd .Data [_fcfgd +_acag ]=^(_adg .Data [_bgef +_acag ]^_cbbcd .Data [_fcfgd +_acag ]);};_fcfgd +=_cbbcd .RowStride ;
_bgef +=_adg .RowStride ;};};if _eacec {for _ecbd =0;_ecbd < _adag ;_ecbd ++{_cbbcd .Data [_dea ]=_efgd (_cbbcd .Data [_dea ],^(_adg .Data [_beecb ]^_cbbcd .Data [_dea ]),_fdg );_dea +=_cbbcd .RowStride ;_beecb +=_adg .RowStride ;};};default:_dc .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_affg );
return _a .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _agbb (d ,s )};func _ddd (_ffb *Bitmap ,_gfga ...int )(_gge *Bitmap ,_fcd error ){const _dbc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _ffb ==nil {return nil ,_a .Error (_dbc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_gfga )==0||len (_gfga )> 4{return nil ,_a .Error (_dbc ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073");
};if _gfga [0]<=0{_dc .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_gge ,_fcd =_agbb (nil ,_ffb );if _fcd !=nil {return nil ,_a .Wrap (_fcd ,_dbc ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _gge ,nil ;};_cff :=_fbc ();_gge =_ffb ;for _gcg ,_fb :=range _gfga {if _fb <=0{break ;};_gge ,_fcd =_bda (_gge ,_fb ,_cff );if _fcd !=nil {return nil ,_a .Wrapf (_fcd ,_dbc ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_gcg );
};};return _gge ,nil ;};func TstVSymbol (t *_f .T ,scale ...int )*Bitmap {_ffeg ,_dcefe :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_g .NoError (t ,_dcefe );return TstGetScaledSymbol (t ,_ffeg ,scale ...);};var _eab [256]uint8 ;func (_edgbf *Bitmap )Copy ()*Bitmap {_gce :=make ([]byte ,len (_edgbf .Data ));
copy (_gce ,_edgbf .Data );return &Bitmap {Width :_edgbf .Width ,Height :_edgbf .Height ,RowStride :_edgbf .RowStride ,Data :_gce ,Color :_edgbf .Color ,Text :_edgbf .Text ,BitmapNumber :_edgbf .BitmapNumber ,Special :_edgbf .Special };};func (_gagb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_agece *Boxes ,_fgga error ){const _gcb ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _gagb ==nil {return nil ,_a .Error (_gcb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gagb )==0{return _gagb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_gcb ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_a .Errorf (_gcb ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_edafc :=_gagb .makeSizeIndicator (width ,height ,tp ,relation );_cde ,_fgga :=_gagb .selectWithIndicator (_edafc );if _fgga !=nil {return nil ,_a .Wrap (_fgga ,_gcb ,"");};return _cde ,nil ;};func _bebe (_agdc ,_agge *Bitmap ,_bce CombinationOperator )*Bitmap {_bfag :=New (_agdc .Width ,_agdc .Height );
for _ddaf :=0;_ddaf < len (_bfag .Data );_ddaf ++{_bfag .Data [_ddaf ]=_agf (_agdc .Data [_ddaf ],_agge .Data [_ddaf ],_bce );};return _bfag ;};func ClipBoxToRectangle (box *_fg .Rectangle ,wi ,hi int )(_dcfd *_fg .Rectangle ,_eeaa error ){const _ebc ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_a .Error (_ebc ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_a .Error (_ebc ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_faad :=*box ;_dcfd =&_faad ;if _dcfd .Min .X < 0{_dcfd .Max .X +=_dcfd .Min .X ;_dcfd .Min .X =0;};if _dcfd .Min .Y < 0{_dcfd .Max .Y +=_dcfd .Min .Y ;_dcfd .Min .Y =0;};if _dcfd .Max .X > wi {_dcfd .Max .X =wi ;};if _dcfd .Max .Y > hi {_dcfd .Max .Y =hi ;
};return _dcfd ,nil ;};func (_bbde *ClassedPoints )xSortFunction ()func (_gegb int ,_abgbb int )bool {return func (_aegad ,_fgaa int )bool {return _bbde .XAtIndex (_aegad )< _bbde .XAtIndex (_fgaa )};};func _gdca (_eaee ...MorphProcess )(_daae error ){const _cbef ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _bdgc ,_geeg int ;for _fgac ,_cfcb :=range _eaee {if _daae =_cfcb .verify (_fgac ,&_bdgc ,&_geeg );_daae !=nil {return _a .Wrap (_daae ,_cbef ,"");};};if _geeg !=0&&_bdgc !=0{return _a .Error (_cbef ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");
};return nil ;};func _ggd (_eb ,_de *Bitmap )(_eg error ){const _fc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_af :=_de .RowStride ;_dd :=_eb .RowStride ;var (_afa byte ;_ac uint16 ;_ff ,_da ,_cd ,_ce ,_bf int ;
);for _cd =0;_cd < _de .Height ;_cd ++{_ff =_cd *_af ;_da =2*_cd *_dd ;for _ce =0;_ce < _af ;_ce ++{_afa =_de .Data [_ff +_ce ];_ac =_dfce [_afa ];_bf =_da +_ce *2;if _eb .RowStride !=_de .RowStride *2&&(_ce +1)*2> _eb .RowStride {_eg =_eb .SetByte (_bf ,byte (_ac >>8));
}else {_eg =_eb .setTwoBytes (_bf ,_ac );};if _eg !=nil {return _a .Wrap (_eg ,_fc ,"");};};for _ce =0;_ce < _dd ;_ce ++{_bf =_da +_dd +_ce ;_afa =_eb .Data [_da +_ce ];if _eg =_eb .SetByte (_bf ,_afa );_eg !=nil {return _a .Wrapf (_eg ,_fc ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_da +_ce ,_da +_dd +_ce );
};};};return nil ;};func (_eccac *byWidth )Len ()int {return len (_eccac .Values )};func _cebd (_gcgg *Bitmap ,_dgfg ,_eced int ,_ffcaa ,_bddcg int ,_bgda RasterOperator ){var (_baad int ;_fgcc byte ;_bfeg ,_aedg int ;_dbcbc int ;);_edbg :=_ffcaa >>3;_bggb :=_ffcaa &7;
if _bggb > 0{_fgcc =_bbef [_bggb ];};_baad =_gcgg .RowStride *_eced +(_dgfg >>3);switch _bgda {case PixClr :for _bfeg =0;_bfeg < _bddcg ;_bfeg ++{_dbcbc =_baad +_bfeg *_gcgg .RowStride ;for _aedg =0;_aedg < _edbg ;_aedg ++{_gcgg .Data [_dbcbc ]=0x0;_dbcbc ++;
};if _bggb > 0{_gcgg .Data [_dbcbc ]=_efgd (_gcgg .Data [_dbcbc ],0x0,_fgcc );};};case PixSet :for _bfeg =0;_bfeg < _bddcg ;_bfeg ++{_dbcbc =_baad +_bfeg *_gcgg .RowStride ;for _aedg =0;_aedg < _edbg ;_aedg ++{_gcgg .Data [_dbcbc ]=0xff;_dbcbc ++;};if _bggb > 0{_gcgg .Data [_dbcbc ]=_efgd (_gcgg .Data [_dbcbc ],0xff,_fgcc );
};};case PixNotDst :for _bfeg =0;_bfeg < _bddcg ;_bfeg ++{_dbcbc =_baad +_bfeg *_gcgg .RowStride ;for _aedg =0;_aedg < _edbg ;_aedg ++{_gcgg .Data [_dbcbc ]=^_gcgg .Data [_dbcbc ];_dbcbc ++;};if _bggb > 0{_gcgg .Data [_dbcbc ]=_efgd (_gcgg .Data [_dbcbc ],^_gcgg .Data [_dbcbc ],_fgcc );
};};};};func New (width ,height int )*Bitmap {_fda :=_aac (width ,height );_fda .Data =make ([]byte ,height *_fda .RowStride );return _fda ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;
MopAddBorder ;);func (_ecdb Points )Size ()int {return len (_ecdb )};type fillSegment struct{_aebdc int ;_bcag int ;_fegcf int ;_aggbd int ;};func TstASymbol (t *_f .T )*Bitmap {t .Helper ();_eaca :=New (6,6);_g .NoError (t ,_eaca .SetPixel (1,0,1));_g .NoError (t ,_eaca .SetPixel (2,0,1));
_g .NoError (t ,_eaca .SetPixel (3,0,1));_g .NoError (t ,_eaca .SetPixel (4,0,1));_g .NoError (t ,_eaca .SetPixel (5,1,1));_g .NoError (t ,_eaca .SetPixel (1,2,1));_g .NoError (t ,_eaca .SetPixel (2,2,1));_g .NoError (t ,_eaca .SetPixel (3,2,1));_g .NoError (t ,_eaca .SetPixel (4,2,1));
_g .NoError (t ,_eaca .SetPixel (5,2,1));_g .NoError (t ,_eaca .SetPixel (0,3,1));_g .NoError (t ,_eaca .SetPixel (5,3,1));_g .NoError (t ,_eaca .SetPixel (0,4,1));_g .NoError (t ,_eaca .SetPixel (5,4,1));_g .NoError (t ,_eaca .SetPixel (1,5,1));_g .NoError (t ,_eaca .SetPixel (2,5,1));
_g .NoError (t ,_eaca .SetPixel (3,5,1));_g .NoError (t ,_eaca .SetPixel (4,5,1));_g .NoError (t ,_eaca .SetPixel (5,5,1));return _eaca ;};func _cefb (_acefb *Bitmap ,_faea *Bitmap ,_cefgd *Selection ,_eabeb **Bitmap )(*Bitmap ,error ){const _adcf ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _faea ==nil {return nil ,_a .Error (_adcf ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");};if _cefgd ==nil {return nil ,_a .Error (_adcf ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_faege ,_fgffg :=_cefgd .Height ,_cefgd .Width ;if _faege ==0||_fgffg ==0{return nil ,_a .Error (_adcf ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _acefb ==nil {_acefb =_faea .createTemplate ();
*_eabeb =_faea ;return _acefb ,nil ;};_acefb .Width =_faea .Width ;_acefb .Height =_faea .Height ;_acefb .RowStride =_faea .RowStride ;_acefb .Color =_faea .Color ;_acefb .Data =make ([]byte ,_faea .RowStride *_faea .Height );if _acefb ==_faea {*_eabeb =_faea .Copy ();
}else {*_eabeb =_faea ;};return _acefb ,nil ;};func _gf (_gc ,_cb *Bitmap )(_ggb error ){const _fd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_ec :=_cb .RowStride ;_ab :=_gc .RowStride ;_ed :=_cb .RowStride *4-_gc .RowStride ;
var (_fe ,_fa byte ;_feb uint32 ;_ge ,_ga ,_bd ,_dec ,_gd ,_ae ,_bc int ;);for _bd =0;_bd < _cb .Height ;_bd ++{_ge =_bd *_ec ;_ga =4*_bd *_ab ;for _dec =0;_dec < _ec ;_dec ++{_fe =_cb .Data [_ge +_dec ];_feb =_cbff [_fe ];_ae =_ga +_dec *4;if _ed !=0&&(_dec +1)*4> _gc .RowStride {for _gd =_ed ;
_gd > 0;_gd --{_fa =byte ((_feb >>uint (_gd *8))&0xff);_bc =_ae +(_ed -_gd );if _ggb =_gc .SetByte (_bc ,_fa );_ggb !=nil {return _a .Wrapf (_ggb ,_fd ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_gd );
};};}else if _ggb =_gc .setFourBytes (_ae ,_feb );_ggb !=nil {return _a .Wrap (_ggb ,_fd ,"");};if _ggb =_gc .setFourBytes (_ga +_dec *4,_cbff [_cb .Data [_ge +_dec ]]);_ggb !=nil {return _a .Wrap (_ggb ,_fd ,"");};};for _gd =1;_gd < 4;_gd ++{for _dec =0;
_dec < _ab ;_dec ++{if _ggb =_gc .SetByte (_ga +_gd *_ab +_dec ,_gc .Data [_ga +_dec ]);_ggb !=nil {return _a .Wrapf (_ggb ,_fd ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_gd ,_dec );
};};};};return nil ;};func (_agbe *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bgcc (_agbe ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _feeb ()[]int {_aggba :=make ([]int ,256);_aggba [0]=0;_aggba [1]=7;
var _baeg int ;for _baeg =2;_baeg < 4;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -2]+6;};for _baeg =4;_baeg < 8;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -4]+5;};for _baeg =8;_baeg < 16;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -8]+4;};for _baeg =16;_baeg < 32;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -16]+3;
};for _baeg =32;_baeg < 64;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -32]+2;};for _baeg =64;_baeg < 128;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -64]+1;};for _baeg =128;_baeg < 256;_baeg ++{_aggba [_baeg ]=_aggba [_baeg -128];};return _aggba ;};func (_dbgg Points )GetIntY (i int )(int ,error ){if i >=len (_dbgg ){return 0,_a .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_dbgg [i ].Y ),nil ;};func MakePixelSumTab8 ()[]int {return _acea ()};type Points []Point ;func (_geda *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _geda .removeBorderGeneral (left ,right ,top ,bot );};
func (_caa *Bitmap )CountPixels ()int {return _caa .countPixels ()};func (_faeg *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _faeg .Copy (),nil ;};_dcag ,_ceb :=_faeg .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
if _ceb !=nil {return nil ,_a .Wrap (_ceb ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _dcag ,nil ;};func _efgd (_bgdb ,_geee ,_bgea byte )byte {return (_bgdb &^(_bgea ))|(_geee &_bgea )};func _abfb (_bag *Bitmap ,_efc *Bitmap ,_acf int )(_edf error ){const _bde ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
switch _acf {case 2:_edf =_ggd (_bag ,_efc );case 4:_edf =_gf (_bag ,_efc );case 8:_edf =_bb (_bag ,_efc );default:return _a .Error (_bde ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");
};if _edf !=nil {_edf =_a .Wrap (_edf ,_bde ,"");};return _edf ;};type Color int ;func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dgf (d ,s ,hSize ,vSize )};func _fgbbg (_gegag *Bitmap ,_gbdgc ,_bgce int ,_eebd ,_abgef int ,_egaa RasterOperator ){var (_dfafa bool ;
_edfd bool ;_bgbg int ;_fcbe int ;_fdabg int ;_bccf int ;_dcacef bool ;_eecbe byte ;);_afbe :=8-(_gbdgc &7);_aebd :=_gafa [_afbe ];_fdcd :=_gegag .RowStride *_bgce +(_gbdgc >>3);if _eebd < _afbe {_dfafa =true ;_aebd &=_bbef [8-_afbe +_eebd ];};if !_dfafa {_bgbg =(_eebd -_afbe )>>3;
if _bgbg !=0{_edfd =true ;_fcbe =_fdcd +1;};};_fdabg =(_gbdgc +_eebd )&7;if !(_dfafa ||_fdabg ==0){_dcacef =true ;_eecbe =_bbef [_fdabg ];_bccf =_fdcd +1+_bgbg ;};var _eaage ,_efge int ;switch _egaa {case PixClr :for _eaage =0;_eaage < _abgef ;_eaage ++{_gegag .Data [_fdcd ]=_efgd (_gegag .Data [_fdcd ],0x0,_aebd );
_fdcd +=_gegag .RowStride ;};if _edfd {for _eaage =0;_eaage < _abgef ;_eaage ++{for _efge =0;_efge < _bgbg ;_efge ++{_gegag .Data [_fcbe +_efge ]=0x0;};_fcbe +=_gegag .RowStride ;};};if _dcacef {for _eaage =0;_eaage < _abgef ;_eaage ++{_gegag .Data [_bccf ]=_efgd (_gegag .Data [_bccf ],0x0,_eecbe );
_bccf +=_gegag .RowStride ;};};case PixSet :for _eaage =0;_eaage < _abgef ;_eaage ++{_gegag .Data [_fdcd ]=_efgd (_gegag .Data [_fdcd ],0xff,_aebd );_fdcd +=_gegag .RowStride ;};if _edfd {for _eaage =0;_eaage < _abgef ;_eaage ++{for _efge =0;_efge < _bgbg ;
_efge ++{_gegag .Data [_fcbe +_efge ]=0xff;};_fcbe +=_gegag .RowStride ;};};if _dcacef {for _eaage =0;_eaage < _abgef ;_eaage ++{_gegag .Data [_bccf ]=_efgd (_gegag .Data [_bccf ],0xff,_eecbe );_bccf +=_gegag .RowStride ;};};case PixNotDst :for _eaage =0;
_eaage < _abgef ;_eaage ++{_gegag .Data [_fdcd ]=_efgd (_gegag .Data [_fdcd ],^_gegag .Data [_fdcd ],_aebd );_fdcd +=_gegag .RowStride ;};if _edfd {for _eaage =0;_eaage < _abgef ;_eaage ++{for _efge =0;_efge < _bgbg ;_efge ++{_gegag .Data [_fcbe +_efge ]=^(_gegag .Data [_fcbe +_efge ]);
};_fcbe +=_gegag .RowStride ;};};if _dcacef {for _eaage =0;_eaage < _abgef ;_eaage ++{_gegag .Data [_bccf ]=_efgd (_gegag .Data [_bccf ],^_gegag .Data [_bccf ],_eecbe );_bccf +=_gegag .RowStride ;};};};};func (_fced Points )Get (i int )(Point ,error ){if i > len (_fced )-1{return Point {},_a .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _fced [i ],nil ;};func (_dafb *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bgeb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _dafb ==nil {return nil ,_a .Error (_bgeb ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");
};if i > len (_dafb .Values )-1{return nil ,_a .Errorf (_bgeb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dafb .Values [i ],nil ;};func Rect (x ,y ,w ,h int )(*_fg .Rectangle ,error ){const _gdbb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
if x < 0{w +=x ;x =0;if w <=0{return nil ,_a .Errorf (_gdbb ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_a .Error (_gdbb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
};};_baea :=_fg .Rect (x ,y ,x +w ,y +h );return &_baea ,nil ;};func (_fbb *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_gfgad bool ,_cbf error ){const _adda ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d";
if tab8 ==nil {tab8 =_acea ();};_cca :=_fbb .Width >>3;_aab :=_fbb .Width &7;_ead :=byte (0xff<<uint (8-_aab ));var (_dcc ,_bdfg ,_efec ,_fbe int ;_fab byte ;);for _dcc =0;_dcc < _fbb .Height ;_dcc ++{_efec =_fbb .RowStride *_dcc ;for _bdfg =0;_bdfg < _cca ;
_bdfg ++{_fab ,_cbf =_fbb .GetByte (_efec +_bdfg );if _cbf !=nil {return false ,_a .Wrap (_cbf ,_adda ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_fbe +=tab8 [_fab ];};if _aab !=0{_fab ,_cbf =_fbb .GetByte (_efec +_bdfg );if _cbf !=nil {return false ,_a .Wrap (_cbf ,_adda ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_fab &=_ead ;_fbe +=tab8 [_fab ];};if _fbe > thresh {return true ,nil ;};};return _gfgad ,nil ;};func (_ebe *Bitmap )setTwoBytes (_gcfe int ,_cbdf uint16 )error {if _gcfe +1> len (_ebe .Data )-1{return _a .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_gcfe );
};_ebe .Data [_gcfe ]=byte ((_cbdf &0xff00)>>8);_ebe .Data [_gcfe +1]=byte (_cbdf &0xff);return nil ;};func (_gdef *Bitmaps )HeightSorter ()func (_caga ,_deaf int )bool {return func (_cddeb ,_fgfbd int )bool {_fgdcde :=_gdef .Values [_cddeb ].Height < _gdef .Values [_fgfbd ].Height ;
_dc .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_gdef .Values [_cddeb ].Height ,_gdef .Values [_fgfbd ].Height ,_fgdcde );return _fgdcde ;};};func (_afaa *Bitmap )And (s *Bitmap )(_eabg *Bitmap ,_bbae error ){const _fecg ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";
if _afaa ==nil {return nil ,_a .Error (_fecg ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_a .Error (_fecg ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");
};if !_afaa .SizesEqual (s ){_dc .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_fecg );
};if _eabg ,_bbae =_agbb (_eabg ,_afaa );_bbae !=nil {return nil ,_a .Wrap (_bbae ,_fecg ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bbae =_eabg .RasterOperation (0,0,_eabg .Width ,_eabg .Height ,PixSrcAndDst ,s ,0,0);
_bbae !=nil {return nil ,_a .Wrap (_bbae ,_fecg ,"");};return _eabg ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _fadc ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
if bm1 ==nil {return false ,_a .Error (_fadc ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
};if bm2 ==nil {return false ,_a .Error (_fadc ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
};if area1 <=0||area2 <=0{return false ,_a .Error (_fadc ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
};if downcount ==nil {return false ,_a .Error (_fadc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_a .Error (_fadc ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_eedc ,_gbge :=bm1 .Width ,bm1 .Height ;_gbdc ,_abfbg :=bm2 .Width ,bm2 .Height ;if _c .Abs (_eedc -_gbdc )> maxDiffW {return false ,nil ;};if _c .Abs (_gbge -_abfbg )> maxDiffH {return false ,nil ;};_ace :=int (delX +_c .Sign (delX )*0.5);_dbcf :=int (delY +_c .Sign (delY )*0.5);
_baacc :=int (_cf .Ceil (_cf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_bddad :=bm2 .RowStride ;_dcgad :=_cgcc (_dbcf ,0);_bccc :=_egag (_abfbg +_dbcf ,_gbge );_agfg :=bm1 .RowStride *_dcgad ;_ccge :=bm2 .RowStride *(_dcgad -_dbcf );
var _cgbf int ;if _bccc <=_gbge {_cgbf =downcount [_bccc -1];};_dfc :=_cgcc (_ace ,0);_addc :=_egag (_gbdc +_ace ,_eedc );var _fgbba ,_bgcf int ;if _ace >=8{_fgbba =_ace >>3;_agfg +=_fgbba ;_dfc -=_fgbba <<3;_addc -=_fgbba <<3;_ace &=7;}else if _ace <=-8{_bgcf =-((_ace +7)>>3);
_ccge +=_bgcf ;_bddad -=_bgcf ;_ace +=_bgcf <<3;};var (_ddde ,_ebbb ,_bdea int ;_ggbf ,_egae ,_dcbd byte ;);if _dfc >=_addc ||_dcgad >=_bccc {return false ,nil ;};_dgbb :=(_addc +7)>>3;switch {case _ace ==0:for _ebbb =_dcgad ;_ebbb < _bccc ;_ebbb ,_agfg ,_ccge =_ebbb +1,_agfg +bm1 .RowStride ,_ccge +bm2 .RowStride {for _bdea =0;
_bdea < _dgbb ;_bdea ++{_ggbf =bm1 .Data [_agfg +_bdea ]&bm2 .Data [_ccge +_bdea ];_ddde +=tab [_ggbf ];};if _ddde >=_baacc {return true ,nil ;};if _bdaf :=_ddde +downcount [_ebbb ]-_cgbf ;_bdaf < _baacc {return false ,nil ;};};case _ace > 0&&_bddad < _dgbb :for _ebbb =_dcgad ;
_ebbb < _bccc ;_ebbb ,_agfg ,_ccge =_ebbb +1,_agfg +bm1 .RowStride ,_ccge +bm2 .RowStride {_egae =bm1 .Data [_agfg ];_dcbd =bm2 .Data [_ccge ]>>uint (_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];for _bdea =1;_bdea < _bddad ;_bdea ++{_egae =bm1 .Data [_agfg +_bdea ];
_dcbd =bm2 .Data [_ccge +_bdea ]>>uint (_ace )|bm2 .Data [_ccge +_bdea -1]<<uint (8-_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];};_egae =bm1 .Data [_agfg +_bdea ];_dcbd =bm2 .Data [_ccge +_bdea -1]<<uint (8-_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];
if _ddde >=_baacc {return true ,nil ;}else if _ddde +downcount [_ebbb ]-_cgbf < _baacc {return false ,nil ;};};case _ace > 0&&_bddad >=_dgbb :for _ebbb =_dcgad ;_ebbb < _bccc ;_ebbb ,_agfg ,_ccge =_ebbb +1,_agfg +bm1 .RowStride ,_ccge +bm2 .RowStride {_egae =bm1 .Data [_agfg ];
_dcbd =bm2 .Data [_ccge ]>>uint (_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];for _bdea =1;_bdea < _dgbb ;_bdea ++{_egae =bm1 .Data [_agfg +_bdea ];_dcbd =bm2 .Data [_ccge +_bdea ]>>uint (_ace );_dcbd |=bm2 .Data [_ccge +_bdea -1]<<uint (8-_ace );_ggbf =_egae &_dcbd ;
_ddde +=tab [_ggbf ];};if _ddde >=_baacc {return true ,nil ;}else if _ddde +downcount [_ebbb ]-_cgbf < _baacc {return false ,nil ;};};case _dgbb < _bddad :for _ebbb =_dcgad ;_ebbb < _bccc ;_ebbb ,_agfg ,_ccge =_ebbb +1,_agfg +bm1 .RowStride ,_ccge +bm2 .RowStride {for _bdea =0;
_bdea < _dgbb ;_bdea ++{_egae =bm1 .Data [_agfg +_bdea ];_dcbd =bm2 .Data [_ccge +_bdea ]<<uint (-_ace );_dcbd |=bm2 .Data [_ccge +_bdea +1]>>uint (8+_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];};if _ddde >=_baacc {return true ,nil ;}else if _aeb :=_ddde +downcount [_ebbb ]-_cgbf ;
_aeb < _baacc {return false ,nil ;};};case _bddad >=_dgbb :for _ebbb =_dcgad ;_ebbb < _bccc ;_ebbb ,_agfg ,_ccge =_ebbb +1,_agfg +bm1 .RowStride ,_ccge +bm2 .RowStride {for _bdea =0;_bdea < _dgbb ;_bdea ++{_egae =bm1 .Data [_agfg +_bdea ];_dcbd =bm2 .Data [_ccge +_bdea ]<<uint (-_ace );
_dcbd |=bm2 .Data [_ccge +_bdea +1]>>uint (8+_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];};_egae =bm1 .Data [_agfg +_bdea ];_dcbd =bm2 .Data [_ccge +_bdea ]<<uint (-_ace );_ggbf =_egae &_dcbd ;_ddde +=tab [_ggbf ];if _ddde >=_baacc {return true ,nil ;
}else if _ddde +downcount [_ebbb ]-_cgbf < _baacc {return false ,nil ;};};};_edbb :=float32 (_ddde )*float32 (_ddde )/(float32 (area1 )*float32 (area2 ));if _edbb >=scoreThreshold {_dc .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_ddde ,_baacc ,_edbb ,scoreThreshold );
};return false ,nil ;};func _fbg (_gcda ,_ccgg *Bitmap ,_bddf ,_gbgc int )(*Bitmap ,error ){const _cbbca ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _ccgg ==nil {return nil ,_a .Error (_cbbca ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bddf < 1&&_gbgc < 1{return nil ,_a .Error (_cbbca ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _bddf ==1&&_gbgc ==1{return _ccgg .Copy (),nil ;};if _bddf ==1||_gbgc ==1{var _gead error ;
_feea :=SelCreateBrick (_gbgc ,_bddf ,_gbgc /2,_bddf /2,SelHit );_gcda ,_gead =_bdca (_gcda ,_ccgg ,_feea );if _gead !=nil {return nil ,_a .Wrap (_gead ,_cbbca ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gcda ,nil ;};_egbb :=SelCreateBrick (1,_bddf ,0,_bddf /2,SelHit );_dbdd :=SelCreateBrick (_gbgc ,1,_gbgc /2,0,SelHit );_cbfe ,_cdagg :=_bbbb (nil ,_ccgg ,_egbb );if _cdagg !=nil {return nil ,_a .Wrap (_cdagg ,_cbbca ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_gcda ,_cdagg =_bbbb (_gcda ,_cbfe ,_dbdd );if _cdagg !=nil {return nil ,_a .Wrap (_cdagg ,_cbbca ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_cdagg =_bbea (_cbfe ,_gcda ,_egbb );if _cdagg !=nil {return nil ,_a .Wrap (_cdagg ,_cbbca ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_cdagg =_bbea (_gcda ,_cbfe ,_dbdd );if _cdagg !=nil {return nil ,_a .Wrap (_cdagg ,_cbbca ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _gcda ,nil ;};type Component int ;func (_gdab *Bitmap )clipRectangle (_gfe ,_gebd *_fg .Rectangle )(_agg *Bitmap ,_fdba error ){const _edaa ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _gfe ==nil {return nil ,_a .Error (_edaa ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_cccc ,_fbfa :=_gdab .Width ,_gdab .Height ;_aggf ,_fdba :=ClipBoxToRectangle (_gfe ,_cccc ,_fbfa );if _fdba !=nil {_dc .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_fdba );
return nil ,nil ;};_ggcf ,_efece :=_aggf .Min .X ,_aggf .Min .Y ;_gbe ,_dggc :=_aggf .Max .X -_aggf .Min .X ,_aggf .Max .Y -_aggf .Min .Y ;_agg =New (_gbe ,_dggc );_agg .Text =_gdab .Text ;if _fdba =_agg .RasterOperation (0,0,_gbe ,_dggc ,PixSrc ,_gdab ,_ggcf ,_efece );
_fdba !=nil {return nil ,_a .Wrap (_fdba ,_edaa ,"");};if _gebd !=nil {*_gebd =*_aggf ;};return _agg ,nil ;};func (_dcga *Bitmap )connComponentsBB (_fefcc int )(_dabd *Boxes ,_cdba error ){const _efac ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _fefcc !=4&&_fefcc !=8{return nil ,_a .Error (_efac ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _dcga .Zero (){return &Boxes {},nil ;
};_dcga .setPadBits (0);_aggd ,_cdba :=_agbb (nil ,_dcga );if _cdba !=nil {return nil ,_a .Wrap (_cdba ,_efac ,"\u0062\u006d\u0031");};_gbaf :=&_c .Stack {};_gbaf .Aux =&_c .Stack {};_dabd =&Boxes {};var (_bbcbb ,_agca int ;_cfgb _fg .Point ;_cccd bool ;
_cbdg *_fg .Rectangle ;);for {if _cfgb ,_cccd ,_cdba =_aggd .nextOnPixel (_agca ,_bbcbb );_cdba !=nil {return nil ,_a .Wrap (_cdba ,_efac ,"");};if !_cccd {break ;};if _cbdg ,_cdba =_egfgg (_aggd ,_gbaf ,_cfgb .X ,_cfgb .Y ,_fefcc );_cdba !=nil {return nil ,_a .Wrap (_cdba ,_efac ,"");
};if _cdba =_dabd .Add (_cbdg );_cdba !=nil {return nil ,_a .Wrap (_cdba ,_efac ,"");};_agca =_cfgb .X ;_bbcbb =_cfgb .Y ;};return _dabd ,nil ;};func (_agad *Bitmaps )Size ()int {return len (_agad .Values )};func (_gceed *Bitmap )connComponentsBitmapsBB (_dbcde *Bitmaps ,_eafgc int )(_eebe *Boxes ,_gbg error ){const _aaag ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _eafgc !=4&&_eafgc !=8{return nil ,_a .Error (_aaag ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _dbcde ==nil {return nil ,_a .Error (_aaag ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_dbcde .Values )> 0{return nil ,_a .Error (_aaag ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _gceed .Zero (){return &Boxes {},nil ;
};var (_cecf ,_fggb ,_gefg ,_fga *Bitmap ;);_gceed .setPadBits (0);if _cecf ,_gbg =_agbb (nil ,_gceed );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062\u006d\u0031");};if _fggb ,_gbg =_agbb (nil ,_gceed );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062\u006d\u0032");
};_acbc :=&_c .Stack {};_acbc .Aux =&_c .Stack {};_eebe =&Boxes {};var (_fbce ,_cbdd int ;_ggbd _fg .Point ;_aed bool ;_afab *_fg .Rectangle ;);for {if _ggbd ,_aed ,_gbg =_cecf .nextOnPixel (_fbce ,_cbdd );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"");
};if !_aed {break ;};if _afab ,_gbg =_egfgg (_cecf ,_acbc ,_ggbd .X ,_ggbd .Y ,_eafgc );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"");};if _gbg =_eebe .Add (_afab );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"");};if _gefg ,_gbg =_cecf .clipRectangle (_afab ,nil );
_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062\u006d\u0033");};if _fga ,_gbg =_fggb .clipRectangle (_afab ,nil );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062\u006d\u0034");};if _ ,_gbg =_ede (_gefg ,_gefg ,_fga );_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _gbg =_fggb .RasterOperation (_afab .Min .X ,_afab .Min .Y ,_afab .Dx (),_afab .Dy (),PixSrcXorDst ,_gefg ,0,0);_gbg !=nil {return nil ,_a .Wrap (_gbg ,_aaag ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_dbcde .AddBitmap (_gefg );
_fbce =_ggbd .X ;_cbdd =_ggbd .Y ;};_dbcde .Boxes =*_eebe ;return _eebe ,nil ;};func _cgbg (_cdaf ,_ece *Bitmap ,_ggacg ,_cffb ,_dceg uint ,_dcca ,_faef int ,_cfbd bool ,_dbcg ,_afgd int )error {for _cfe :=_dcca ;_cfe < _faef ;_cfe ++{if _dbcg +1< len (_cdaf .Data ){_daf :=_cfe +1==_faef ;
_dcad ,_ggba :=_cdaf .GetByte (_dbcg );if _ggba !=nil {return _ggba ;};_dbcg ++;_dcad <<=_ggacg ;_fgba ,_ggba :=_cdaf .GetByte (_dbcg );if _ggba !=nil {return _ggba ;};_fgba >>=_cffb ;_dagc :=_dcad |_fgba ;if _daf &&!_cfbd {_dagc =_bfe (_dceg ,_dagc );
};_ggba =_ece .SetByte (_afgd ,_dagc );if _ggba !=nil {return _ggba ;};_afgd ++;if _daf &&_cfbd {_fbcf ,_geff :=_cdaf .GetByte (_dbcg );if _geff !=nil {return _geff ;};_fbcf <<=_ggacg ;_dagc =_bfe (_dceg ,_fbcf );if _geff =_ece .SetByte (_afgd ,_dagc );
_geff !=nil {return _geff ;};};continue ;};_bcgga ,_eef :=_cdaf .GetByte (_dbcg );if _eef !=nil {_dc .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_dbcg ,_eef );
return _eef ;};_bcgga <<=_ggacg ;_dbcg ++;_eef =_ece .SetByte (_afgd ,_bcgga );if _eef !=nil {return _eef ;};_afgd ++;};return nil ;};func (_ggc *Bitmap )SetPadBits (value int ){_ggc .setPadBits (value )};var (_dfce =_acb ();_cbff =_fgdc ();_eeae =_gbf ();
);func _deffc (_fdaf ,_fce *Bitmap ,_bbac *Selection )(*Bitmap ,error ){const _adecb ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _gfac error ;if _fdaf ,_gfac =_gcaf (_fdaf ,_fce ,_bbac );_gfac !=nil {return nil ,_gfac ;};_dgbbg ,_gfac :=_bbea (nil ,_fce ,_bbac );
if _gfac !=nil {return nil ,_a .Wrap (_gfac ,_adecb ,"");};if _ ,_gfac =_bbbb (_fdaf ,_dgbbg ,_bbac );_gfac !=nil {return nil ,_a .Wrap (_gfac ,_adecb ,"");};return _fdaf ,nil ;};func (_gec *Bitmap )setEightBytes (_cddg int ,_cgfe uint64 )error {_ecdg :=_gec .RowStride -(_cddg %_gec .RowStride );
if _gec .RowStride !=_gec .Width >>3{_ecdg --;};if _ecdg >=8{return _gec .setEightFullBytes (_cddg ,_cgfe );};return _gec .setEightPartlyBytes (_cddg ,_ecdg ,_cgfe );};type ClassedPoints struct{*Points ;_c .IntSlice ;_effdc func (_gabb ,_gaaf int )bool ;
};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_gaeeg *Bitmap )nextOnPixelLow (_fabb ,_dfa ,_cgaa ,_ega ,_ebb int )(_ecb _fg .Point ,_eac bool ,_abga error ){const _egfb ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_dceb int ;_gcfg byte ;);_fcb :=_ebb *_cgaa ;_fag :=_fcb +(_ega /8);if _gcfg ,_abga =_gaeeg .GetByte (_fag );_abga !=nil {return _ecb ,false ,_a .Wrap (_abga ,_egfb ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065");
};if _gcfg !=0{_bagc :=_ega -(_ega %8)+7;for _dceb =_ega ;_dceb <=_bagc &&_dceb < _fabb ;_dceb ++{if _gaeeg .GetPixel (_dceb ,_ebb ){_ecb .X =_dceb ;_ecb .Y =_ebb ;return _ecb ,true ,nil ;};};};_caaf :=(_ega /8)+1;_dceb =8*_caaf ;var _cgag int ;for _fag =_fcb +_caaf ;
_dceb < _fabb ;_fag ,_dceb =_fag +1,_dceb +8{if _gcfg ,_abga =_gaeeg .GetByte (_fag );_abga !=nil {return _ecb ,false ,_a .Wrap (_abga ,_egfb ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _gcfg ==0{continue ;
};for _cgag =0;_cgag < 8&&_dceb < _fabb ;_cgag ,_dceb =_cgag +1,_dceb +1{if _gaeeg .GetPixel (_dceb ,_ebb ){_ecb .X =_dceb ;_ecb .Y =_ebb ;return _ecb ,true ,nil ;};};};for _bee :=_ebb +1;_bee < _dfa ;_bee ++{_fcb =_bee *_cgaa ;for _fag ,_dceb =_fcb ,0;
_dceb < _fabb ;_fag ,_dceb =_fag +1,_dceb +8{if _gcfg ,_abga =_gaeeg .GetByte (_fag );_abga !=nil {return _ecb ,false ,_a .Wrap (_abga ,_egfb ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _gcfg ==0{continue ;
};for _cgag =0;_cgag < 8&&_dceb < _fabb ;_cgag ,_dceb =_cgag +1,_dceb +1{if _gaeeg .GetPixel (_dceb ,_bee ){_ecb .X =_dceb ;_ecb .Y =_bee ;return _ecb ,true ,nil ;};};};};return _ecb ,false ,nil ;};func _adcc (_gcdb *_c .Stack ,_gdge ,_bded ,_acfe ,_bdgf ,_fcbab int ,_dcba *_fg .Rectangle )(_gfed error ){const _ebdbb ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078";
if _gcdb ==nil {return _a .Error (_ebdbb ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _dcba ==nil {return _a .Error (_ebdbb ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_dcba .Min .X =_c .Min (_dcba .Min .X ,_gdge );_dcba .Max .X =_c .Max (_dcba .Max .X ,_bded );_dcba .Min .Y =_c .Min (_dcba .Min .Y ,_acfe );_dcba .Max .Y =_c .Max (_dcba .Max .Y ,_acfe );if !(_acfe +_bdgf >=0&&_acfe +_bdgf <=_fcbab ){return nil ;};if _gcdb .Aux ==nil {return _a .Error (_ebdbb ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};var _edfc *fillSegment ;_adbg ,_bcff :=_gcdb .Aux .Pop ();if _bcff {if _edfc ,_bcff =_adbg .(*fillSegment );!_bcff {return _a .Error (_ebdbb ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");
};}else {_edfc =&fillSegment {};};_edfc ._aebdc =_gdge ;_edfc ._bcag =_bded ;_edfc ._fegcf =_acfe ;_edfc ._aggbd =_bdgf ;_gcdb .Push (_edfc );return nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dfaf float64 ,_dgb error ){const _fcfe ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065";
if bm1 ==nil ||bm2 ==nil {return _dfaf ,_a .Error (_fcfe ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _dfaf ,_a .Error (_fcfe ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _dfaf ,_a .Error (_fcfe ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_bcdc ,_defa :=bm1 .Width ,bm1 .Height ;_efad ,_fgdde :=bm2 .Width ,bm2 .Height ;
if _gfgb (_bcdc -_efad )> maxDiffW {return 0,nil ;};if _gfgb (_defa -_fgdde )> maxDiffH {return 0,nil ;};var _dcfc ,_bfec int ;if delX >=0{_dcfc =int (delX +0.5);}else {_dcfc =int (delX -0.5);};if delY >=0{_bfec =int (delY +0.5);}else {_bfec =int (delY -0.5);
};_acfb :=bm1 .createTemplate ();if _dgb =_acfb .RasterOperation (_dcfc ,_bfec ,_efad ,_fgdde ,PixSrc ,bm2 ,0,0);_dgb !=nil {return _dfaf ,_a .Wrap (_dgb ,_fcfe ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _dgb =_acfb .RasterOperation (0,0,_bcdc ,_defa ,PixSrcAndDst ,bm1 ,0,0);
_dgb !=nil {return _dfaf ,_a .Wrap (_dgb ,_fcfe ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_ggdf :=_acfb .countPixels ();_dfaf =float64 (_ggdf )*float64 (_ggdf )/(float64 (area1 )*float64 (area2 ));return _dfaf ,nil ;};func _fbc ()(_agdg []byte ){_agdg =make ([]byte ,256);
for _ebgf :=0;_ebgf < 256;_ebgf ++{_fdd :=byte (_ebgf );_agdg [_fdd ]=(_fdd &0x01)|((_fdd &0x04)>>1)|((_fdd &0x10)>>2)|((_fdd &0x40)>>3)|((_fdd &0x02)<<3)|((_fdd &0x08)<<2)|((_fdd &0x20)<<1)|(_fdd &0x80);};return _agdg ;};func (_eacg *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_bab *Boxes ,_bddbg error ){const _bbgc ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _eacg ==nil {return nil ,_a .Error (_bbgc ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_a .Error (_bbgc ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038");
};if bms ==nil {if _bab ,_bddbg =_eacg .connComponentsBB (connectivity );_bddbg !=nil {return nil ,_a .Wrap (_bddbg ,_bbgc ,"");};}else {if _bab ,_bddbg =_eacg .connComponentsBitmapsBB (bms ,connectivity );_bddbg !=nil {return nil ,_a .Wrap (_bddbg ,_bbgc ,"");
};};return _bab ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_fg .Rectangle ;};func TstOSymbol (t *_f .T ,scale ...int )*Bitmap {_cbgf ,_eabga :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_g .NoError (t ,_eabga );return TstGetScaledSymbol (t ,_cbgf ,scale ...);
};func _dbd (_gdbe ,_cgd ,_fgge *Bitmap )(*Bitmap ,error ){const _bbed ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _cgd ==nil {return nil ,_a .Error (_bbed ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fgge ==nil {return nil ,_a .Error (_bbed ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};var _cag error ;switch {case _gdbe ==_cgd :if _cag =_gdbe .RasterOperation (0,0,_cgd .Width ,_cgd .Height ,PixNotSrcAndDst ,_fgge ,0,0);_cag !=nil {return nil ,_a .Wrap (_cag ,_bbed ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _gdbe ==_fgge :if _cag =_gdbe .RasterOperation (0,0,_cgd .Width ,_cgd .Height ,PixNotSrcAndDst ,_cgd ,0,0);
_cag !=nil {return nil ,_a .Wrap (_cag ,_bbed ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_gdbe ,_cag =_agbb (_gdbe ,_cgd );if _cag !=nil {return nil ,_a .Wrap (_cag ,_bbed ,"");};if _cag =_gdbe .RasterOperation (0,0,_cgd .Width ,_cgd .Height ,PixNotSrcAndDst ,_fgge ,0,0);
_cag !=nil {return nil ,_a .Wrap (_cag ,_bbed ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _gdbe ,nil ;};func (_cfbf *Bitmap )removeBorderGeneral (_cfg ,_dbcd ,_fafc ,_ceea int )(*Bitmap ,error ){const _eeg ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _cfg < 0||_dbcd < 0||_fafc < 0||_ceea < 0{return nil ,_a .Error (_eeg ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073");};_gacb ,_ceeg :=_cfbf .Width ,_cfbf .Height ;
_gaeea :=_gacb -_cfg -_dbcd ;_adec :=_ceeg -_fafc -_ceea ;if _gaeea <=0{return nil ,_a .Errorf (_eeg ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gaeea );};if _adec <=0{return nil ,_a .Errorf (_eeg ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_adec );
};_agea :=New (_gaeea ,_adec );_agea .Color =_cfbf .Color ;_cdbf :=_agea .RasterOperation (0,0,_gaeea ,_adec ,PixSrc ,_cfbf ,_cfg ,_fafc );if _cdbf !=nil {return nil ,_a .Wrap (_cdbf ,_eeg ,"");};return _agea ,nil ;};func _ede (_cfaec ,_eaaf ,_bacd *Bitmap )(*Bitmap ,error ){const _cgcg ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _eaaf ==nil {return nil ,_a .Error (_cgcg ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bacd ==nil {return nil ,_a .Error (_cgcg ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cfaec ==_bacd {return nil ,_a .Error (_cgcg ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_eaaf .SizesEqual (_bacd ){_dc .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_cgcg );
};var _fggf error ;if _cfaec ,_fggf =_agbb (_cfaec ,_eaaf );_fggf !=nil {return nil ,_a .Wrap (_fggf ,_cgcg ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fggf =_cfaec .RasterOperation (0,0,_cfaec .Width ,_cfaec .Height ,PixSrcXorDst ,_bacd ,0,0);
_fggf !=nil {return nil ,_a .Wrap (_fggf ,_cgcg ,"");};return _cfaec ,nil ;};func _acea ()[]int {_fagc :=make ([]int ,256);for _effbd :=0;_effbd <=0xff;_effbd ++{_fba :=byte (_effbd );_fagc [_fba ]=int (_fba &0x1)+(int (_fba >>1)&0x1)+(int (_fba >>2)&0x1)+(int (_fba >>3)&0x1)+(int (_fba >>4)&0x1)+(int (_fba >>5)&0x1)+(int (_fba >>6)&0x1)+(int (_fba >>7)&0x1);
};return _fagc ;};func _aac (_fde ,_dffe int )*Bitmap {return &Bitmap {Width :_fde ,Height :_dffe ,RowStride :(_fde +7)>>3};};func (_dcage *Boxes )Add (box *_fg .Rectangle )error {if _dcage ==nil {return _a .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};*_dcage =append (*_dcage ,box );return nil ;};func _egfgg (_ffaea *Bitmap ,_edfa *_c .Stack ,_caae ,_dafg ,_aeeb int )(_ccf *_fg .Rectangle ,_gagge error ){const _fggbd ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _ffaea ==nil {return nil ,_a .Error (_fggbd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _edfa ==nil {return nil ,_a .Error (_fggbd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _aeeb {case 4:if _ccf ,_gagge =_bfega (_ffaea ,_edfa ,_caae ,_dafg );_gagge !=nil {return nil ,_a .Wrap (_gagge ,_fggbd ,"");};return _ccf ,nil ;case 8:if _ccf ,_gagge =_acbf (_ffaea ,_edfa ,_caae ,_dafg );_gagge !=nil {return nil ,_a .Wrap (_gagge ,_fggbd ,"");
};return _ccf ,nil ;default:return nil ,_a .Errorf (_fggbd ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_aeeb );
};};func (_bedbe *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _aabd ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _bedbe ==nil {return nil ,_a .Error (_aabd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if i > len (_bedbe .Values )-1{return nil ,_a .Errorf (_aabd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _bedbe .Values [i ],nil ;};func TstRSymbol (t *_f .T ,scale ...int )*Bitmap {_eee ,_cgee :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_g .NoError (t ,_cgee );return TstGetScaledSymbol (t ,_eee ,scale ...);};func (_fggc *ClassedPoints )Len ()int {return _fggc .IntSlice .Size ()};func Extract (roi _fg .Rectangle ,src *Bitmap )(*Bitmap ,error ){_aea :=New (roi .Dx (),roi .Dy ());_egbdc :=roi .Min .X &0x07;
_afcb :=8-_egbdc ;_cfaed :=uint (8-_aea .Width &0x07);_deff :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_bga :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_deeg :=_aea .RowStride ==_bga +1-_deff ;var _dagg int ;for _bcfe :=roi .Min .Y ;_bcfe < roi .Max .Y ;
_bcfe ++{_bgc :=_deff ;_cefgb :=_dagg ;switch {case _deff ==_bga :_beec ,_egfg :=src .GetByte (_bgc );if _egfg !=nil {return nil ,_egfg ;};_beec <<=uint (_egbdc );_egfg =_aea .SetByte (_cefgb ,_bfe (_cfaed ,_beec ));if _egfg !=nil {return nil ,_egfg ;};
case _egbdc ==0:for _befc :=_deff ;_befc <=_bga ;_befc ++{_ddcf ,_eafg :=src .GetByte (_bgc );if _eafg !=nil {return nil ,_eafg ;};_bgc ++;if _befc ==_bga &&_deeg {_ddcf =_bfe (_cfaed ,_ddcf );};_eafg =_aea .SetByte (_cefgb ,_ddcf );if _eafg !=nil {return nil ,_eafg ;
};_cefgb ++;};default:_befe :=_cgbg (src ,_aea ,uint (_egbdc ),uint (_afcb ),_cfaed ,_deff ,_bga ,_deeg ,_bgc ,_cefgb );if _befe !=nil {return nil ,_befe ;};};_deff +=src .RowStride ;_bga +=src .RowStride ;_dagg +=_aea .RowStride ;};return _aea ,nil ;};
func _gaeed (_eegdf ,_debbf int ,_gdgb string )*Selection {_ffbb :=&Selection {Height :_eegdf ,Width :_debbf ,Name :_gdgb };_ffbb .Data =make ([][]SelectionValue ,_eegdf );for _gebc :=0;_gebc < _eegdf ;_gebc ++{_ffbb .Data [_gebc ]=make ([]SelectionValue ,_debbf );
};return _ffbb ;};func (_dega *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_dega .Width ,Height :_dega .Height ,RowStride :_dega .RowStride ,Color :_dega .Color ,Text :_dega .Text ,BitmapNumber :_dega .BitmapNumber ,Special :_dega .Special ,Data :make ([]byte ,len (_dega .Data ))};
};func (_caad *Bitmap )Equivalent (s *Bitmap )bool {return _caad .equivalent (s )};func (_dffg *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bcda ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";
if i >=_dffg .IntSlice .Size (){return 0,_a .Errorf (_bcda ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
};return int (_dffg .YAtIndex (i )),nil ;};func (_aegc *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _fbcc ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_aegc .Values )==0{return nil ,_a .Error (_fbcc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_fgbga :=&BitmapsArray {};_aegc .SortByHeight ();_caag :=-1;_bcafa :=-1;for _gfec :=0;_gfec < len (_aegc .Values );_gfec ++{_efca :=_aegc .Values [_gfec ].Height ;if _efca > _caag {_caag =_efca ;_bcafa ++;_fgbga .Values =append (_fgbga .Values ,&Bitmaps {});
};_fgbga .Values [_bcafa ].AddBitmap (_aegc .Values [_gfec ]);};return _fgbga ,nil ;};func (_fgdd *Bitmap )Zero ()bool {_cgf :=_fgdd .Width /8;_decg :=_fgdd .Width &7;var _gfab byte ;if _decg !=0{_gfab =byte (0xff<<uint (8-_decg ));};var _febe ,_agba ,_ggdgg int ;
for _agba =0;_agba < _fgdd .Height ;_agba ++{_febe =_fgdd .RowStride *_agba ;for _ggdgg =0;_ggdgg < _cgf ;_ggdgg ,_febe =_ggdgg +1,_febe +1{if _fgdd .Data [_febe ]!=0{return false ;};};if _decg > 0{if _fgdd .Data [_febe ]&_gfab !=0{return false ;};};};
return true ;};func (_bdfga *Bitmap )setFourBytes (_cfbc int ,_gbdg uint32 )error {if _cfbc +3> len (_bdfga .Data )-1{return _a .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_cfbc );
};_bdfga .Data [_cfbc ]=byte ((_gbdg &0xff000000)>>24);_bdfga .Data [_cfbc +1]=byte ((_gbdg &0xff0000)>>16);_bdfga .Data [_cfbc +2]=byte ((_gbdg &0xff00)>>8);_bdfga .Data [_cfbc +3]=byte (_gbdg &0xff);return nil ;};const (_deaa shift =iota ;_cgacd ;);func (_fgbg *ClassedPoints )validateIntSlice ()error {const _fege ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_abec :=range _fgbg .IntSlice {if _abec >=(_fgbg .Points .Size ()){return _a .Errorf (_fege ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_abec ,_fgbg .Points .Size ());
};};return nil ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_cbbg :=_gaeed (h ,w ,"");_cbbg .setOrigin (cy ,cx );var _cfbdf ,_gbab int ;for _cfbdf =0;_cfbdf < h ;_cfbdf ++{for _gbab =0;_gbab < w ;_gbab ++{_cbbg .Data [_cfbdf ][_gbab ]=tp ;
};};return _cbbg ;};func (_ccdf *Bitmap )setPadBits (_gffd int ){_bdcg :=8-_ccdf .Width %8;if _bdcg ==8{return ;};_afgba :=_ccdf .Width /8;_fac :=_gafa [_bdcg ];if _gffd ==0{_fac ^=_fac ;};var _cgca int ;for _cabg :=0;_cabg < _ccdf .Height ;_cabg ++{_cgca =_cabg *_ccdf .RowStride +_afgba ;
if _gffd ==0{_ccdf .Data [_cgca ]&=_fac ;}else {_ccdf .Data [_cgca ]|=_fac ;};};};func _dda (_gade ,_dge *Bitmap ,_edgba ,_ecfa ,_eag ,_dedb ,_baff int ,_aaed CombinationOperator )error {var _egcf int ;_cgefg :=func (){_egcf ++;_eag +=_dge .RowStride ;
_dedb +=_gade .RowStride ;_baff +=_gade .RowStride };for _egcf =_edgba ;_egcf < _ecfa ;_cgefg (){_dcec :=_eag ;for _feca :=_dedb ;_feca <=_baff ;_feca ++{_ebd ,_dgdb :=_dge .GetByte (_dcec );if _dgdb !=nil {return _dgdb ;};_ecc ,_dgdb :=_gade .GetByte (_feca );
if _dgdb !=nil {return _dgdb ;};if _dgdb =_dge .SetByte (_dcec ,_agf (_ebd ,_ecc ,_aaed ));_dgdb !=nil {return _dgdb ;};_dcec ++;};};return nil ;};func TstGetScaledSymbol (t *_f .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;
};_gdcb ,_fdgf :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_g .NoError (t ,_fdgf );return _gdcb ;};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;
PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;
PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;);func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fbee float64 ,_baag error ){const _caf ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_a .Error (_caf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_a .Error (_caf ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_a .Error (_caf ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_bgb ,_abed :=bm1 .Width ,bm1 .Height ;_afge ,_eegc :=bm2 .Width ,bm2 .Height ;
_egfgf :=_gfgb (_bgb -_afge );if _egfgf > maxDiffW {return 0,nil ;};_adac :=_gfgb (_abed -_eegc );if _adac > maxDiffH {return 0,nil ;};var _effb ,_cfd int ;if delX >=0{_effb =int (delX +0.5);}else {_effb =int (delX -0.5);};if delY >=0{_cfd =int (delY +0.5);
}else {_cfd =int (delY -0.5);};_gfde :=_cgcc (_cfd ,0);_dfac :=_egag (_eegc +_cfd ,_abed );_dcgbb :=bm1 .RowStride *_gfde ;_ccea :=bm2 .RowStride *(_gfde -_cfd );_eedg :=_cgcc (_effb ,0);_gbb :=_egag (_afge +_effb ,_bgb );_aeccc :=bm2 .RowStride ;var _fgab ,_dggd int ;
if _effb >=8{_fgab =_effb >>3;_dcgbb +=_fgab ;_eedg -=_fgab <<3;_gbb -=_fgab <<3;_effb &=7;}else if _effb <=-8{_dggd =-((_effb +7)>>3);_ccea +=_dggd ;_aeccc -=_dggd ;_effb +=_dggd <<3;};if _eedg >=_gbb ||_gfde >=_dfac {return 0,nil ;};_bcaf :=(_gbb +7)>>3;
var (_efbc ,_gdaba ,_ceg byte ;_ffac ,_feda ,_cfbcc int ;);switch {case _effb ==0:for _cfbcc =_gfde ;_cfbcc < _dfac ;_cfbcc ,_dcgbb ,_ccea =_cfbcc +1,_dcgbb +bm1 .RowStride ,_ccea +bm2 .RowStride {for _feda =0;_feda < _bcaf ;_feda ++{_ceg =bm1 .Data [_dcgbb +_feda ]&bm2 .Data [_ccea +_feda ];
_ffac +=tab [_ceg ];};};case _effb > 0:if _aeccc < _bcaf {for _cfbcc =_gfde ;_cfbcc < _dfac ;_cfbcc ,_dcgbb ,_ccea =_cfbcc +1,_dcgbb +bm1 .RowStride ,_ccea +bm2 .RowStride {_efbc ,_gdaba =bm1 .Data [_dcgbb ],bm2 .Data [_ccea ]>>uint (_effb );_ceg =_efbc &_gdaba ;
_ffac +=tab [_ceg ];for _feda =1;_feda < _aeccc ;_feda ++{_efbc ,_gdaba =bm1 .Data [_dcgbb +_feda ],(bm2 .Data [_ccea +_feda ]>>uint (_effb ))|(bm2 .Data [_ccea +_feda -1]<<uint (8-_effb ));_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];};_efbc =bm1 .Data [_dcgbb +_feda ];
_gdaba =bm2 .Data [_ccea +_feda -1]<<uint (8-_effb );_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];};}else {for _cfbcc =_gfde ;_cfbcc < _dfac ;_cfbcc ,_dcgbb ,_ccea =_cfbcc +1,_dcgbb +bm1 .RowStride ,_ccea +bm2 .RowStride {_efbc ,_gdaba =bm1 .Data [_dcgbb ],bm2 .Data [_ccea ]>>uint (_effb );
_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];for _feda =1;_feda < _bcaf ;_feda ++{_efbc =bm1 .Data [_dcgbb +_feda ];_gdaba =(bm2 .Data [_ccea +_feda ]>>uint (_effb ))|(bm2 .Data [_ccea +_feda -1]<<uint (8-_effb ));_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];};
};};default:if _bcaf < _aeccc {for _cfbcc =_gfde ;_cfbcc < _dfac ;_cfbcc ,_dcgbb ,_ccea =_cfbcc +1,_dcgbb +bm1 .RowStride ,_ccea +bm2 .RowStride {for _feda =0;_feda < _bcaf ;_feda ++{_efbc =bm1 .Data [_dcgbb +_feda ];_gdaba =bm2 .Data [_ccea +_feda ]<<uint (-_effb );
_gdaba |=bm2 .Data [_ccea +_feda +1]>>uint (8+_effb );_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];};};}else {for _cfbcc =_gfde ;_cfbcc < _dfac ;_cfbcc ,_dcgbb ,_ccea =_cfbcc +1,_dcgbb +bm1 .RowStride ,_ccea +bm2 .RowStride {for _feda =0;_feda < _bcaf -1;_feda ++{_efbc =bm1 .Data [_dcgbb +_feda ];
_gdaba =bm2 .Data [_ccea +_feda ]<<uint (-_effb );_gdaba |=bm2 .Data [_ccea +_feda +1]>>uint (8+_effb );_ceg =_efbc &_gdaba ;_ffac +=tab [_ceg ];};_efbc =bm1 .Data [_dcgbb +_feda ];_gdaba =bm2 .Data [_ccea +_feda ]<<uint (-_effb );_ceg =_efbc &_gdaba ;
_ffac +=tab [_ceg ];};};};_fbee =float64 (_ffac )*float64 (_ffac )/(float64 (area1 )*float64 (area2 ));return _fbee ,nil ;};func (_ecfc *Bitmap )setEightFullBytes (_eace int ,_adae uint64 )error {if _eace +7> len (_ecfc .Data )-1{return _a .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_ecfc .Data [_eace ]=byte ((_adae &0xff00000000000000)>>56);_ecfc .Data [_eace +1]=byte ((_adae &0xff000000000000)>>48);_ecfc .Data [_eace +2]=byte ((_adae &0xff0000000000)>>40);_ecfc .Data [_eace +3]=byte ((_adae &0xff00000000)>>32);_ecfc .Data [_eace +4]=byte ((_adae &0xff000000)>>24);
_ecfc .Data [_eace +5]=byte ((_adae &0xff0000)>>16);_ecfc .Data [_eace +6]=byte ((_adae &0xff00)>>8);_ecfc .Data [_eace +7]=byte (_adae &0xff);return nil ;};func (_ggdd MorphProcess )verify (_dddef int ,_aggb ,_cgdd *int )error {const _aaedb ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _ggdd .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_ggdd .Arguments )!=2{return _a .Error (_aaedb ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073");
};_cbab ,_eefg :=_ggdd .getWidthHeight ();if _cbab <=0||_eefg <=0{return _a .Error (_aaedb ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030");
};case MopRankBinaryReduction :_daaf :=len (_ggdd .Arguments );*_aggb +=_daaf ;if _daaf < 1||_daaf > 4{return _a .Error (_aaedb ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073");
};for _cccde :=0;_cccde < _daaf ;_cccde ++{if _ggdd .Arguments [_cccde ]< 1||_ggdd .Arguments [_cccde ]> 4{return _a .Error (_aaedb ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e");
};};case MopReplicativeBinaryExpansion :if len (_ggdd .Arguments )==0{return _a .Error (_aaedb ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074");
};_cbbe :=_ggdd .Arguments [0];if _cbbe !=2&&_cbbe !=4&&_cbbe !=8{return _a .Error (_aaedb ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};*_aggb -=_bdcf [_cbbe /4];case MopAddBorder :if len (_ggdd .Arguments )==0{return _a .Error (_aaedb ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074");
};_edde :=_ggdd .Arguments [0];if _dddef > 0{return _a .Error (_aaedb ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073");
};if _edde < 1{return _a .Error (_aaedb ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_cgdd =_edde ;};return nil ;};func (_dcdb *byHeight )Swap (i ,j int ){_dcdb .Values [i ],_dcdb .Values [j ]=_dcdb .Values [j ],_dcdb .Values [i ];
if _dcdb .Boxes !=nil {_dcdb .Boxes [i ],_dcdb .Boxes [j ]=_dcdb .Boxes [j ],_dcdb .Boxes [i ];};};func (_dafe MorphProcess )getWidthHeight ()(_gabc ,_cgac int ){return _dafe .Arguments [0],_dafe .Arguments [1];};func (_gaca *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cdgg *Bitmaps ,_cdgde error ){const _gcfb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _gaca ==nil {return nil ,_a .Error (_gcfb ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_gcfb ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_a .Errorf (_gcfb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_bafb ,_cdgde :=_gaca .makeSizeIndicator (width ,height ,tp ,relation );if _cdgde !=nil {return nil ,_a .Wrap (_cdgde ,_gcfb ,"");};_cdgg ,_cdgde =_gaca .selectByIndicator (_bafb );if _cdgde !=nil {return nil ,_a .Wrap (_cdgde ,_gcfb ,"");};return _cdgg ,nil ;
};type Getter interface{GetBitmap ()*Bitmap ;};func MakePixelCentroidTab8 ()[]int {return _feeb ()};func (_fbff Points )GetIntX (i int )(int ,error ){if i >=len (_fbff ){return 0,_a .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_fbff [i ].X ),nil ;};func TstWriteSymbols (t *_f .T ,bms *Bitmaps ,src *Bitmap ){for _eebde :=0;_eebde < bms .Size ();_eebde ++{_gggga :=bms .Values [_eebde ];_ggga :=bms .Boxes [_eebde ];_eccf :=src .RasterOperation (_ggga .Min .X ,_ggga .Min .Y ,_gggga .Width ,_gggga .Height ,PixSrc ,_gggga ,0,0);
_g .NoError (t ,_eccf );};};func (_dgaf *Selection )setOrigin (_bcdd ,_gaded int ){_dgaf .Cy ,_dgaf .Cx =_bcdd ,_gaded };func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _daag ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_feeef ,_dgaad :=p1 .Width ,p1 .Height ;_cbb ,_ebcf :=p3 .Width ,p3 .Height ;if _c .Abs (_feeef -_cbb )> maxDiffW {return false ,nil ;};if _c .Abs (_dgaad -_ebcf )> maxDiffH {return false ,nil ;};_cbaf :=int (delX +_c .Sign (delX )*0.5);_egef :=int (delY +_c .Sign (delY )*0.5);
var _gfbc error ;_effd :=p1 .CreateTemplate ();if _gfbc =_effd .RasterOperation (0,0,_feeef ,_dgaad ,PixSrc ,p1 ,0,0);_gfbc !=nil {return false ,_a .Wrap (_gfbc ,_daag ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gfbc =_effd .RasterOperation (_cbaf ,_egef ,_feeef ,_dgaad ,PixNotSrcAndDst ,p4 ,0,0);
_gfbc !=nil {return false ,_a .Wrap (_gfbc ,_daag ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _effd .Zero (){return false ,nil ;};if _gfbc =_effd .RasterOperation (_cbaf ,_egef ,_cbb ,_ebcf ,PixSrc ,p3 ,0,0);_gfbc !=nil {return false ,_a .Wrap (_gfbc ,_daag ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _gfbc =_effd .RasterOperation (0,0,_cbb ,_ebcf ,PixNotSrcAndDst ,p2 ,0,0);_gfbc !=nil {return false ,_a .Wrap (_gfbc ,_daag ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _effd .Zero (),nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_bfcd :=make ([]Point ,len (bms ));
_agde :=_feeb ();_acgb :=_acea ();var _gcgf error ;for _ebae ,_acef :=range bms {_bfcd [_ebae ],_gcgf =_acef .centroid (_agde ,_acgb );if _gcgf !=nil {return nil ,_gcgf ;};};_ffc :=Points (_bfcd );return &_ffc ,nil ;};func (_bcaec *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bcaec .Values =append (_bcaec .Values ,bm )};
func (_bfcgc *Points )Add (pt *Points )error {const _abce ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _bfcgc ==nil {return _a .Error (_abce ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if pt ==nil {return _a .Error (_abce ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_bfcgc =append (*_bfcgc ,*pt ...);return nil ;};func _gceab (_fdbcd ,_gfagc *Bitmap ,_fbec ,_ggbe int )(_abgd error ){const _aegfd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_cgbfd ,_gcce ,_bdcd ,_ddda int ;_fgae ,_bcdg ,_eega ,_cgaac ,_cfdg ,_beca ,_cggagg byte ;);for _cgbfd =0;_cgbfd < _fbec ;_cgbfd ++{_bdcd =_cgbfd *_fdbcd .RowStride ;_ddda =_cgbfd *_gfagc .RowStride ;for _gcce =0;_gcce < _ggbe ;_gcce ++{_fgae ,_abgd =_fdbcd .GetByte (_bdcd +_gcce );
if _abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_bcdg ,_abgd =_gfagc .GetByte (_ddda +_gcce );if _abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _cgbfd > 0{_eega ,_abgd =_fdbcd .GetByte (_bdcd -_fdbcd .RowStride +_gcce );if _abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0069\u0020\u003e \u0030");};_fgae |=_eega ;};if _gcce > 0{_cgaac ,_abgd =_fdbcd .GetByte (_bdcd +_gcce -1);if _abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u006a\u0020\u003e \u0030");
};_fgae |=_cgaac <<7;};_fgae &=_bcdg ;if _fgae ==0||(^_fgae )==0{if _abgd =_fdbcd .SetByte (_bdcd +_gcce ,_fgae );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_cggagg =_fgae ;_fgae =(_fgae |(_fgae >>1)|(_fgae <<1))&_bcdg ;if (_fgae ^_cggagg )==0{if _abgd =_fdbcd .SetByte (_bdcd +_gcce ,_fgae );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _cgbfd =_fbec -1;_cgbfd >=0;_cgbfd --{_bdcd =_cgbfd *_fdbcd .RowStride ;_ddda =_cgbfd *_gfagc .RowStride ;for _gcce =_ggbe -1;_gcce >=0;_gcce --{if _fgae ,_abgd =_fdbcd .GetByte (_bdcd +_gcce );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _bcdg ,_abgd =_gfagc .GetByte (_ddda +_gcce );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cgbfd < _fbec -1{if _cfdg ,_abgd =_fdbcd .GetByte (_bdcd +_fdbcd .RowStride +_gcce );
_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_fgae |=_cfdg ;};if _gcce < _ggbe -1{if _beca ,_abgd =_fdbcd .GetByte (_bdcd +_gcce +1);_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_fgae |=_beca >>7;};_fgae &=_bcdg ;if _fgae ==0||(^_fgae )==0{if _abgd =_fdbcd .SetByte (_bdcd +_gcce ,_fgae );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064");
};continue ;};for {_cggagg =_fgae ;_fgae =(_fgae |(_fgae >>1)|(_fgae <<1))&_bcdg ;if (_fgae ^_cggagg )==0{if _abgd =_fdbcd .SetByte (_bdcd +_gcce ,_fgae );_abgd !=nil {return _a .Wrap (_abgd ,_aegfd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func (_fff *Bitmap )GetVanillaData ()[]byte {if _fff .Color ==Chocolate {_fff .inverseData ();};return _fff .Data ;};func _gfdee (_cgdg *Bitmap ,_cfaag ,_gfdb ,_fbbb ,_ecda int ,_ceddc RasterOperator ){if _cfaag < 0{_fbbb +=_cfaag ;
_cfaag =0;};_gega :=_cfaag +_fbbb -_cgdg .Width ;if _gega > 0{_fbbb -=_gega ;};if _gfdb < 0{_ecda +=_gfdb ;_gfdb =0;};_gbcb :=_gfdb +_ecda -_cgdg .Height ;if _gbcb > 0{_ecda -=_gbcb ;};if _fbbb <=0||_ecda <=0{return ;};if (_cfaag &7)==0{_cebd (_cgdg ,_cfaag ,_gfdb ,_fbbb ,_ecda ,_ceddc );
}else {_fgbbg (_cgdg ,_cfaag ,_gfdb ,_fbbb ,_ecda ,_ceddc );};};func (_bcb *Bitmap )Equals (s *Bitmap )bool {if len (_bcb .Data )!=len (s .Data )||_bcb .Width !=s .Width ||_bcb .Height !=s .Height {return false ;};for _eaf :=0;_eaf < _bcb .Height ;_eaf ++{_gea :=_eaf *_bcb .RowStride ;
for _age :=0;_age < _bcb .RowStride ;_age ++{if _bcb .Data [_gea +_age ]!=s .Data [_gea +_age ]{return false ;};};};return true ;};var _bdcf =[5]int {1,2,3,0,4};const (Vanilla Color =iota ;Chocolate ;);type byWidth Bitmaps ;func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};
const _faee =5000;func _acbf (_defc *Bitmap ,_efcg *_c .Stack ,_bggbf ,_fbbe int )(_fgfc *_fg .Rectangle ,_gccb error ){const _gabf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _defc ==nil {return nil ,_a .Error (_gabf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _efcg ==nil {return nil ,_a .Error (_gabf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_fgdcd ,_gbcc :=_defc .Width ,_defc .Height ;_ggcc :=_fgdcd -1;_efbe :=_gbcc -1;if _bggbf < 0||_bggbf > _ggcc ||_fbbe < 0||_fbbe > _efbe ||!_defc .GetPixel (_bggbf ,_fbbe ){return nil ,nil ;
};_cfde :=_fg .Rect (100000,100000,0,0);if _gccb =_adcc (_efcg ,_bggbf ,_bggbf ,_fbbe ,1,_efbe ,&_cfde );_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gccb =_adcc (_efcg ,_bggbf ,_bggbf ,_fbbe +1,-1,_efbe ,&_cfde );
_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cfde .Min .X ,_cfde .Max .X =_bggbf ,_bggbf ;_cfde .Min .Y ,_cfde .Max .Y =_fbbe ,_fbbe ;var (_bcad *fillSegment ;
_ggbb int ;);for _efcg .Len ()> 0{if _bcad ,_gccb =_feae (_efcg );_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"");};_fbbe =_bcad ._fegcf ;for _bggbf =_bcad ._aebdc -1;_bggbf >=0&&_defc .GetPixel (_bggbf ,_fbbe );_bggbf --{if _gccb =_defc .SetPixel (_bggbf ,_fbbe ,0);
_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _bggbf >=_bcad ._aebdc -1{for {for _bggbf ++;_bggbf <=_bcad ._bcag +1&&_bggbf <=_ggcc &&!_defc .GetPixel (_bggbf ,_fbbe );_bggbf ++{};_ggbb =_bggbf ;if !(_bggbf <=_bcad ._bcag +1&&_bggbf <=_ggcc ){break ;
};for ;_bggbf <=_ggcc &&_defc .GetPixel (_bggbf ,_fbbe );_bggbf ++{if _gccb =_defc .SetPixel (_bggbf ,_fbbe ,0);_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gccb =_adcc (_efcg ,_ggbb ,_bggbf -1,_bcad ._fegcf ,_bcad ._aggbd ,_efbe ,&_cfde );
_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bggbf > _bcad ._bcag {if _gccb =_adcc (_efcg ,_bcad ._bcag +1,_bggbf -1,_bcad ._fegcf ,-_bcad ._aggbd ,_efbe ,&_cfde );_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_ggbb =_bggbf +1;if _ggbb < _bcad ._aebdc {if _gccb =_adcc (_efcg ,_ggbb ,_bcad ._aebdc -1,_bcad ._fegcf ,-_bcad ._aggbd ,_efbe ,&_cfde );_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_bggbf =_bcad ._aebdc ;for {for ;_bggbf <=_ggcc &&_defc .GetPixel (_bggbf ,_fbbe );_bggbf ++{if _gccb =_defc .SetPixel (_bggbf ,_fbbe ,0);_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gccb =_adcc (_efcg ,_ggbb ,_bggbf -1,_bcad ._fegcf ,_bcad ._aggbd ,_efbe ,&_cfde );
_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bggbf > _bcad ._bcag {if _gccb =_adcc (_efcg ,_bcad ._bcag +1,_bggbf -1,_bcad ._fegcf ,-_bcad ._aggbd ,_efbe ,&_cfde );_gccb !=nil {return nil ,_a .Wrap (_gccb ,_gabf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _bggbf ++;_bggbf <=_bcad ._bcag +1&&_bggbf <=_ggcc &&!_defc .GetPixel (_bggbf ,_fbbe );_bggbf ++{};_ggbb =_bggbf ;if !(_bggbf <=_bcad ._bcag +1&&_bggbf <=_ggcc ){break ;};};};_cfde .Max .X ++;_cfde .Max .Y ++;return &_cfde ,nil ;};type Bitmap struct{Width ,Height int ;
BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_aec *Bitmap )ClipRectangle (box *_fg .Rectangle )(_ddggf *Bitmap ,_gadd *_fg .Rectangle ,_fdeb error ){const _dab ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_a .Error (_dab ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_fgf ,_gba :=_aec .Width ,_aec .Height ;_cbc :=_fg .Rect (0,0,_fgf ,_gba );if !box .Overlaps (_cbc ){return nil ,nil ,_a .Error (_dab ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_abc :=box .Intersect (_cbc );_fbdd ,_abcc :=_abc .Min .X ,_abc .Min .Y ;_dcf ,_cab :=_abc .Dx (),_abc .Dy ();_ddggf =New (_dcf ,_cab );_ddggf .Text =_aec .Text ;if _fdeb =_ddggf .RasterOperation (0,0,_dcf ,_cab ,PixSrc ,_aec ,_fbdd ,_abcc );_fdeb !=nil {return nil ,nil ,_a .Wrap (_fdeb ,_dab ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_gadd =&_abc ;return _ddggf ,_gadd ,nil ;};func (_gccc *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _gccc .Copy (),nil ;};_egf ,_gbfa :=_gccc .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );
if _gbfa !=nil {return nil ,_a .Wrap (_gbfa ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _egf ,nil ;};func (_edgc *Boxes )Get (i int )(*_fg .Rectangle ,error ){const _gfgc ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _edgc ==nil {return nil ,_a .Error (_gfgc ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_edgc )-1{return nil ,_a .Errorf (_gfgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_edgc )[i ],nil ;};func (_fbeg *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _dfec ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_fbeg .Values )==0{return nil ,_a .Error (_dfec ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gbag :=&BitmapsArray {};_fbeg .SortByWidth ();_eaff :=-1;_feebg :=-1;for _bdaa :=0;_bdaa < len (_fbeg .Values );
_bdaa ++{_deae :=_fbeg .Values [_bdaa ].Width ;if _deae > _eaff {_eaff =_deae ;_feebg ++;_gbag .Values =append (_gbag .Values ,&Bitmaps {});};_gbag .Values [_feebg ].AddBitmap (_fbeg .Values [_bdaa ]);};return _gbag ,nil ;};func (_egc *Bitmap )GetUnpaddedData ()([]byte ,error ){_bdfd :=uint (_egc .Width &0x07);
if _bdfd ==0{return _egc .Data ,nil ;};_dad :=_egc .Width *_egc .Height ;if _dad %8!=0{_dad >>=3;_dad ++;}else {_dad >>=3;};_dgag :=make ([]byte ,_dad );_gaee :=_e .NewWriterMSB (_dgag );const _cdc ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _fad :=0;_fad < _egc .Height ;_fad ++{for _fbfg :=0;_fbfg < _egc .RowStride ;_fbfg ++{_faa :=_egc .Data [_fad *_egc .RowStride +_fbfg ];if _fbfg !=_egc .RowStride -1{_ged :=_gaee .WriteByte (_faa );if _ged !=nil {return nil ,_a .Wrap (_ged ,_cdc ,"");
};continue ;};for _dcab :=uint (0);_dcab < _bdfd ;_dcab ++{_bfg :=_gaee .WriteBit (int (_faa >>(7-_dcab )&0x01));if _bfg !=nil {return nil ,_a .Wrap (_bfg ,_cdc ,"");};};};};return _dgag ,nil ;};type CombinationOperator int ;func _bb (_dae ,_ba *Bitmap )(_ebf error ){const _fec ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
_gfd :=_ba .RowStride ;_cbd :=_dae .RowStride ;var _gcd ,_bcg ,_gad ,_add ,_ddb int ;for _gad =0;_gad < _ba .Height ;_gad ++{_gcd =_gad *_gfd ;_bcg =8*_gad *_cbd ;for _add =0;_add < _gfd ;_add ++{if _ebf =_dae .setEightBytes (_bcg +_add *8,_eeae [_ba .Data [_gcd +_add ]]);
_ebf !=nil {return _a .Wrap (_ebf ,_fec ,"");};};for _ddb =1;_ddb < 8;_ddb ++{for _add =0;_add < _cbd ;_add ++{if _ebf =_dae .SetByte (_bcg +_ddb *_cbd +_add ,_dae .Data [_bcg +_add ]);_ebf !=nil {return _a .Wrap (_ebf ,_fec ,"");};};};};return nil ;};
func _bbbb (_acdea ,_dddb *Bitmap ,_ebfc *Selection )(*Bitmap ,error ){const _aegf ="\u0065\u0072\u006fd\u0065";var (_daec error ;_cgagc *Bitmap ;);_acdea ,_daec =_cefb (_acdea ,_dddb ,_ebfc ,&_cgagc );if _daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"");
};if _daec =_acdea .setAll ();_daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"");};var _bfdg SelectionValue ;for _badd :=0;_badd < _ebfc .Height ;_badd ++{for _bed :=0;_bed < _ebfc .Width ;_bed ++{_bfdg =_ebfc .Data [_badd ][_bed ];if _bfdg ==SelHit {_daec =_bgcc (_acdea ,_ebfc .Cx -_bed ,_ebfc .Cy -_badd ,_dddb .Width ,_dddb .Height ,PixSrcAndDst ,_cgagc ,0,0);
if _daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"");};};};};if MorphBC ==SymmetricMorphBC {return _acdea ,nil ;};_dbbe ,_ceeaf ,_aacc ,_bacee :=_ebfc .findMaxTranslations ();if _dbbe > 0{if _daec =_acdea .RasterOperation (0,0,_dbbe ,_dddb .Height ,PixClr ,nil ,0,0);
_daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _aacc > 0{if _daec =_acdea .RasterOperation (_dddb .Width -_aacc ,0,_aacc ,_dddb .Height ,PixClr ,nil ,0,0);_daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _ceeaf > 0{if _daec =_acdea .RasterOperation (0,0,_dddb .Width ,_ceeaf ,PixClr ,nil ,0,0);_daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _bacee > 0{if _daec =_acdea .RasterOperation (0,_dddb .Height -_bacee ,_dddb .Width ,_bacee ,PixClr ,nil ,0,0);
_daec !=nil {return nil ,_a .Wrap (_daec ,_aegf ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _acdea ,nil ;};func (_ecga *Bitmap )ToImage ()_fg .Image {_cec ,_cedfd :=_ca .NewImage (_ecga .Width ,_ecga .Height ,1,1,_ecga .Data ,nil ,nil );if _cedfd !=nil {_dc .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_cedfd );
};return _cec ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func _bfe (_addd uint ,_ecfb byte )byte {return _ecfb >>_addd <<_addd };type byHeight Bitmaps ;type BoundaryCondition int ;
func TstTSymbol (t *_f .T ,scale ...int )*Bitmap {_dcede ,_gcdaa :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_g .NoError (t ,_gcdaa );return TstGetScaledSymbol (t ,_dcede ,scale ...);};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _agf (oldByte ,newByte ,op );
};func _gfbb (_fbdc *Bitmap ,_fgfe ,_gcea ,_gegc ,_dac int ,_dcfa RasterOperator ,_dccc *Bitmap ,_eaae ,_ddgb int )error {var (_gbfgd byte ;_ffd int ;_eaea int ;_egca ,_bedb int ;_bddc ,_gafc int ;);_cgec :=_gegc >>3;_abdb :=_gegc &7;if _abdb > 0{_gbfgd =_bbef [_abdb ];
};_ffd =_dccc .RowStride *_ddgb +(_eaae >>3);_eaea =_fbdc .RowStride *_gcea +(_fgfe >>3);switch _dcfa {case PixSrc :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;
_gafc ++{_fbdc .Data [_bedb ]=_dccc .Data [_egca ];_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ],_gbfgd );};};case PixNotSrc :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;
_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=^(_dccc .Data [_egca ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^_dccc .Data [_egca ],_gbfgd );};};case PixSrcOrDst :for _bddc =0;
_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]|=_dccc .Data [_egca ];_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ]|_fbdc .Data [_bedb ],_gbfgd );
};};case PixSrcAndDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]&=_dccc .Data [_egca ];_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ]&_fbdc .Data [_bedb ],_gbfgd );
};};case PixSrcXorDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]^=_dccc .Data [_egca ];_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ]^_fbdc .Data [_bedb ],_gbfgd );
};};case PixNotSrcOrDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]|=^(_dccc .Data [_egca ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^(_dccc .Data [_egca ])|_fbdc .Data [_bedb ],_gbfgd );
};};case PixNotSrcAndDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]&=^(_dccc .Data [_egca ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^(_dccc .Data [_egca ])&_fbdc .Data [_bedb ],_gbfgd );
};};case PixSrcOrNotDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=_dccc .Data [_egca ]|^(_fbdc .Data [_bedb ]);_bedb ++;_egca ++;
};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ]|^(_fbdc .Data [_bedb ]),_gbfgd );};};case PixSrcAndNotDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;
for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=_dccc .Data [_egca ]&^(_fbdc .Data [_bedb ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],_dccc .Data [_egca ]&^(_fbdc .Data [_bedb ]),_gbfgd );};};case PixNotPixSrcOrDst :for _bddc =0;
_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=^(_dccc .Data [_egca ]|_fbdc .Data [_bedb ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^(_dccc .Data [_egca ]|_fbdc .Data [_bedb ]),_gbfgd );
};};case PixNotPixSrcAndDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=^(_dccc .Data [_egca ]&_fbdc .Data [_bedb ]);_bedb ++;
_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^(_dccc .Data [_egca ]&_fbdc .Data [_bedb ]),_gbfgd );};};case PixNotPixSrcXorDst :for _bddc =0;_bddc < _dac ;_bddc ++{_egca =_ffd +_bddc *_dccc .RowStride ;_bedb =_eaea +_bddc *_fbdc .RowStride ;
for _gafc =0;_gafc < _cgec ;_gafc ++{_fbdc .Data [_bedb ]=^(_dccc .Data [_egca ]^_fbdc .Data [_bedb ]);_bedb ++;_egca ++;};if _abdb > 0{_fbdc .Data [_bedb ]=_efgd (_fbdc .Data [_bedb ],^(_dccc .Data [_egca ]^_fbdc .Data [_bedb ]),_gbfgd );};};default:_dc .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_dcfa );
return _a .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func _abf (_gdd *Bitmap ,_be int )(*Bitmap ,error ){const _ef ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gdd ==nil {return nil ,_a .Error (_ef ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _be ==1{return _agbb (nil ,_gdd );};if _be !=2&&_be !=4&&_be !=8{return nil ,_a .Error (_ef ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065");
};_ebg :=_be *_gdd .Width ;_bbg :=_be *_gdd .Height ;_fecd :=New (_ebg ,_bbg );var _gb error ;switch _be {case 2:_gb =_ggd (_fecd ,_gdd );case 4:_gb =_gf (_fecd ,_gdd );case 8:_gb =_bb (_fecd ,_gdd );};if _gb !=nil {return nil ,_a .Wrap (_gb ,_ef ,"");
};return _fecd ,nil ;};func (_dfe *Bitmap )String ()string {var _edd ="\u000a";for _acde :=0;_acde < _dfe .Height ;_acde ++{var _ddcc string ;for _fgdg :=0;_fgdg < _dfe .Width ;_fgdg ++{_fgb :=_dfe .GetPixel (_fgdg ,_acde );if _fgb {_ddcc +="\u0031";}else {_ddcc +="\u0030";
};};_edd +=_ddcc +"\u000a";};return _edd ;};func _bgae (_gfaca *Bitmap ,_gacd *Bitmap ,_cggag int )(_ccad error ){const _abbg ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_ccga :=_egag (_gfaca .Height ,_gacd .Height );
_dbec :=_egag (_gfaca .RowStride ,_gacd .RowStride );switch _cggag {case 4:_ccad =_gceab (_gfaca ,_gacd ,_ccga ,_dbec );case 8:_ccad =_bcde (_gfaca ,_gacd ,_ccga ,_dbec );default:return _a .Errorf (_abbg ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_cggag );
};if _ccad !=nil {return _a .Wrap (_ccad ,_abbg ,"");};return nil ;};func (_abcf CombinationOperator )String ()string {var _edafa string ;switch _abcf {case CmbOpOr :_edafa ="\u004f\u0052";case CmbOpAnd :_edafa ="\u0041\u004e\u0044";case CmbOpXor :_edafa ="\u0058\u004f\u0052";
case CmbOpXNor :_edafa ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_edafa ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_edafa ="\u004e\u004f\u0054";};return _edafa ;};func (_ebega *Selection )findMaxTranslations ()(_abfg ,_efagb ,_agbg ,_dfbd int ){for _fbffg :=0;
_fbffg < _ebega .Height ;_fbffg ++{for _efgc :=0;_efgc < _ebega .Width ;_efgc ++{if _ebega .Data [_fbffg ][_efgc ]==SelHit {_abfg =_cgcc (_abfg ,_ebega .Cx -_efgc );_efagb =_cgcc (_efagb ,_ebega .Cy -_fbffg );_agbg =_cgcc (_agbg ,_efgc -_ebega .Cx );_dfbd =_cgcc (_dfbd ,_fbffg -_ebega .Cy );
};};};return _abfg ,_efagb ,_agbg ,_dfbd ;};func (_ddaa *byWidth )Less (i ,j int )bool {return _ddaa .Values [i ].Width < _ddaa .Values [j ].Width };func TstImageBitmapInverseData ()[]byte {_baba :=_cddd .Copy ();_baba .InverseData ();return _baba .Data ;
};func (_fddd *ClassedPoints )ySortFunction ()func (_cdca int ,_cggec int )bool {return func (_dbbd ,_ggcdd int )bool {return _fddd .YAtIndex (_dbbd )< _fddd .YAtIndex (_ggcdd )};};func TstPSymbol (t *_f .T )*Bitmap {t .Helper ();_bdef :=New (5,8);_g .NoError (t ,_bdef .SetPixel (0,0,1));
_g .NoError (t ,_bdef .SetPixel (1,0,1));_g .NoError (t ,_bdef .SetPixel (2,0,1));_g .NoError (t ,_bdef .SetPixel (3,0,1));_g .NoError (t ,_bdef .SetPixel (4,1,1));_g .NoError (t ,_bdef .SetPixel (0,1,1));_g .NoError (t ,_bdef .SetPixel (4,2,1));_g .NoError (t ,_bdef .SetPixel (0,2,1));
_g .NoError (t ,_bdef .SetPixel (4,3,1));_g .NoError (t ,_bdef .SetPixel (0,3,1));_g .NoError (t ,_bdef .SetPixel (0,4,1));_g .NoError (t ,_bdef .SetPixel (1,4,1));_g .NoError (t ,_bdef .SetPixel (2,4,1));_g .NoError (t ,_bdef .SetPixel (3,4,1));_g .NoError (t ,_bdef .SetPixel (0,5,1));
_g .NoError (t ,_bdef .SetPixel (0,6,1));_g .NoError (t ,_bdef .SetPixel (0,7,1));return _bdef ;};func (_fdebb Points )YSorter ()func (_eggc ,_egge int )bool {return func (_ecgc ,_bea int )bool {return _fdebb [_ecgc ].Y < _fdebb [_bea ].Y };};type shift int ;
func _bgcc (_gcfag *Bitmap ,_bbaf ,_cfce ,_aeda ,_addg int ,_afee RasterOperator ,_gcac *Bitmap ,_agaa ,_ebegd int )error {const _dbe ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _gcfag ==nil {return _a .Error (_dbe ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
};if _afee ==PixDst {return nil ;};switch _afee {case PixClr ,PixSet ,PixNotDst :_gfdee (_gcfag ,_bbaf ,_cfce ,_aeda ,_addg ,_afee );return nil ;};if _gcac ==nil {_dc .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _a .Error (_dbe ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ebad :=_dggg (_gcfag ,_bbaf ,_cfce ,_aeda ,_addg ,_afee ,_gcac ,_agaa ,_ebegd );_ebad !=nil {return _a .Wrap (_ebad ,_dbe ,"");};return nil ;
};func (_dcef *Bitmap )countPixels ()int {var (_daa int ;_bbd uint8 ;_bbcb byte ;_eea int ;);_dadg :=_dcef .RowStride ;_cgb :=uint (_dcef .Width &0x07);if _cgb !=0{_bbd =uint8 ((0xff<<(8-_cgb ))&0xff);_dadg --;};for _cfae :=0;_cfae < _dcef .Height ;_cfae ++{for _eea =0;
_eea < _dadg ;_eea ++{_bbcb =_dcef .Data [_cfae *_dcef .RowStride +_eea ];_daa +=int (_eab [_bbcb ]);};if _cgb !=0{_daa +=int (_eab [_dcef .Data [_cfae *_dcef .RowStride +_eea ]&_bbd ]);};};return _daa ;};func (_cdce *Bitmap )SetPixel (x ,y int ,pixel byte )error {_abgf :=_cdce .GetByteIndex (x ,y );
if _abgf > len (_cdce .Data )-1{return _a .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_abgf );};_adff :=_cdce .GetBitOffset (x );
_dcd :=uint (7-_adff );_fee :=_cdce .Data [_abgf ];var _ecf byte ;if pixel ==1{_ecf =_fee |(pixel &0x01<<_dcd );}else {_ecf =_fee &^(1<<_dcd );};_cdce .Data [_abgf ]=_ecf ;return nil ;};func TstNSymbol (t *_f .T ,scale ...int )*Bitmap {_fcag ,_baeaa :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
_g .NoError (t ,_baeaa );return TstGetScaledSymbol (t ,_fcag ,scale ...);};var (_cgde *Bitmap ;_cddd *Bitmap ;);var MorphBC BoundaryCondition ;func (_agfc *Bitmaps )selectByIndexes (_ecec []int )(*Bitmaps ,error ){_degce :=&Bitmaps {};for _ ,_ecbe :=range _ecec {_aefa ,_gcbf :=_agfc .GetBitmap (_ecbe );
if _gcbf !=nil {return nil ,_a .Wrap (_gcbf ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_degce .AddBitmap (_aefa );};return _degce ,nil ;};func (_aga *Points )AddPoint (x ,y float32 ){*_aga =append (*_aga ,Point {x ,y })};
func (_cgae *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _dccf ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_cgae .IntSlice .Size (){return 0,_a .Errorf (_dccf ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
};return int (_cgae .XAtIndex (i )),nil ;};func (_degg *Bitmaps )makeSizeIndicator (_dagba ,_bafd int ,_badc LocationFilter ,_bcdfa SizeComparison )(_cbec *_c .NumSlice ,_gcbd error ){const _dcacc ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _degg ==nil {return nil ,_a .Error (_dcacc ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _badc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_a .Errorf (_dcacc ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_badc );
};switch _bcdfa {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_a .Errorf (_dcacc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_bcdfa );
};_cbec =&_c .NumSlice {};var (_ffgb ,_gggg ,_bgag int ;_gfgg *Bitmap ;);for _ ,_gfgg =range _degg .Values {_ffgb =0;_gggg ,_bgag =_gfgg .Width ,_gfgg .Height ;switch _badc {case LocSelectWidth :if (_bcdfa ==SizeSelectIfLT &&_gggg < _dagba )||(_bcdfa ==SizeSelectIfGT &&_gggg > _dagba )||(_bcdfa ==SizeSelectIfLTE &&_gggg <=_dagba )||(_bcdfa ==SizeSelectIfGTE &&_gggg >=_dagba )||(_bcdfa ==SizeSelectIfEQ &&_gggg ==_dagba ){_ffgb =1;
};case LocSelectHeight :if (_bcdfa ==SizeSelectIfLT &&_bgag < _bafd )||(_bcdfa ==SizeSelectIfGT &&_bgag > _bafd )||(_bcdfa ==SizeSelectIfLTE &&_bgag <=_bafd )||(_bcdfa ==SizeSelectIfGTE &&_bgag >=_bafd )||(_bcdfa ==SizeSelectIfEQ &&_bgag ==_bafd ){_ffgb =1;
};case LocSelectIfEither :if (_bcdfa ==SizeSelectIfLT &&(_gggg < _dagba ||_bgag < _bafd ))||(_bcdfa ==SizeSelectIfGT &&(_gggg > _dagba ||_bgag > _bafd ))||(_bcdfa ==SizeSelectIfLTE &&(_gggg <=_dagba ||_bgag <=_bafd ))||(_bcdfa ==SizeSelectIfGTE &&(_gggg >=_dagba ||_bgag >=_bafd ))||(_bcdfa ==SizeSelectIfEQ &&(_gggg ==_dagba ||_bgag ==_bafd )){_ffgb =1;
};case LocSelectIfBoth :if (_bcdfa ==SizeSelectIfLT &&(_gggg < _dagba &&_bgag < _bafd ))||(_bcdfa ==SizeSelectIfGT &&(_gggg > _dagba &&_bgag > _bafd ))||(_bcdfa ==SizeSelectIfLTE &&(_gggg <=_dagba &&_bgag <=_bafd ))||(_bcdfa ==SizeSelectIfGTE &&(_gggg >=_dagba &&_bgag >=_bafd ))||(_bcdfa ==SizeSelectIfEQ &&(_gggg ==_dagba &&_bgag ==_bafd )){_ffgb =1;
};};_cbec .AddInt (_ffgb );};return _cbec ,nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_fg .Rectangle ;};func (_dee *Bitmap )clearAll ()error {return _dee .RasterOperation (0,0,_dee .Width ,_dee .Height ,PixClr ,nil ,0,0);};func (_agef Points )XSorter ()func (_dfedc ,_acca int )bool {return func (_cfgg ,_bgaa int )bool {return _agef [_cfgg ].X < _agef [_bgaa ].X };
};func TstImageBitmapData ()[]byte {return _cddd .Data };func _bcde (_ffdb ,_deac *Bitmap ,_gbeg ,_fegb int )(_bcdf error ){const _dfgf ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_cgea ,_accad ,_ffgf ,_ffacc int ;
_dced ,_dfadd ,_fagcd ,_bcced ,_aaad ,_dadc ,_afad ,_dcgaa byte ;);for _cgea =0;_cgea < _gbeg ;_cgea ++{_ffgf =_cgea *_ffdb .RowStride ;_ffacc =_cgea *_deac .RowStride ;for _accad =0;_accad < _fegb ;_accad ++{if _dced ,_bcdf =_ffdb .GetByte (_ffgf +_accad );
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dfadd ,_bcdf =_deac .GetByte (_ffacc +_accad );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
};if _cgea > 0{if _fagcd ,_bcdf =_ffdb .GetByte (_ffgf -_ffdb .RowStride +_accad );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_dced |=_fagcd |(_fagcd <<1)|(_fagcd >>1);if _accad > 0{if _dcgaa ,_bcdf =_ffdb .GetByte (_ffgf -_ffdb .RowStride +_accad -1);
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_dced |=_dcgaa <<7;};if _accad < _fegb -1{if _dcgaa ,_bcdf =_ffdb .GetByte (_ffgf -_ffdb .RowStride +_accad +1);
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_dced |=_dcgaa >>7;};};if _accad > 0{if _bcced ,_bcdf =_ffdb .GetByte (_ffgf +_accad -1);_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u006a\u0020\u003e \u0030");
};_dced |=_bcced <<7;};_dced &=_dfadd ;if _dced ==0||^_dced ==0{if _bcdf =_ffdb .SetByte (_ffgf +_accad ,_dced );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};
for {_afad =_dced ;_dced =(_dced |(_dced >>1)|(_dced <<1))&_dfadd ;if (_dced ^_afad )==0{if _bcdf =_ffdb .SetByte (_ffgf +_accad ,_dced );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _cgea =_gbeg -1;_cgea >=0;_cgea --{_ffgf =_cgea *_ffdb .RowStride ;_ffacc =_cgea *_deac .RowStride ;for _accad =_fegb -1;_accad >=0;_accad --{if _dced ,_bcdf =_ffdb .GetByte (_ffgf +_accad );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _dfadd ,_bcdf =_deac .GetByte (_ffacc +_accad );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cgea < _gbeg -1{if _aaad ,_bcdf =_ffdb .GetByte (_ffgf +_ffdb .RowStride +_accad );
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_dced |=_aaad |(_aaad <<1)|_aaad >>1;if _accad > 0{if _dcgaa ,_bcdf =_ffdb .GetByte (_ffgf +_ffdb .RowStride +_accad -1);
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_dced |=_dcgaa <<7;};if _accad < _fegb -1{if _dcgaa ,_bcdf =_ffdb .GetByte (_ffgf +_ffdb .RowStride +_accad +1);
_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065");
};_dced |=_dcgaa >>7;};};if _accad < _fegb -1{if _dadc ,_bcdf =_ffdb .GetByte (_ffgf +_accad +1);_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065");
};_dced |=_dadc >>7;};_dced &=_dfadd ;if _dced ==0||(^_dced )==0{if _bcdf =_ffdb .SetByte (_ffgf +_accad ,_dced );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_afad =_dced ;
_dced =(_dced |(_dced >>1)|(_dced <<1))&_dfadd ;if (_dced ^_afad )==0{if _bcdf =_ffdb .SetByte (_ffgf +_accad ,_dced );_bcdf !=nil {return _a .Wrap (_bcdf ,_dfgf ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func (_cbafa *Bitmaps )String ()string {_aegadc :=_ad .Builder {};for _ ,_fbbg :=range _cbafa .Values {_aegadc .WriteString (_fbbg .String ());_aegadc .WriteRune ('\n');};return _aegadc .String ();};func _dgf (_abfe ,_dfed *Bitmap ,_beecg ,_defe int )(*Bitmap ,error ){const _geed ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _dfed ==nil {_dc .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_a .Error (_geed ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _beecg < 1||_defe < 1{return nil ,_a .Error (_geed ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
};if _beecg ==1&&_defe ==1{_bdfb ,_eefd :=_agbb (_abfe ,_dfed );if _eefd !=nil {return nil ,_a .Wrap (_eefd ,_geed ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bdfb ,nil ;};if _beecg ==1||_defe ==1{_bbgb :=SelCreateBrick (_defe ,_beecg ,_defe /2,_beecg /2,SelHit );_dgda ,_cfaeb :=_bbea (_abfe ,_dfed ,_bbgb );if _cfaeb !=nil {return nil ,_a .Wrap (_cfaeb ,_geed ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dgda ,nil ;};_caade :=SelCreateBrick (1,_beecg ,0,_beecg /2,SelHit );_fbea :=SelCreateBrick (_defe ,1,_defe /2,0,SelHit );_daed ,_efag :=_bbea (nil ,_dfed ,_caade );if _efag !=nil {return nil ,_a .Wrap (_efag ,_geed ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_abfe ,_efag =_bbea (_abfe ,_daed ,_fbea );if _efag !=nil {return nil ,_a .Wrap (_efag ,_geed ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _abfe ,nil ;};type SizeComparison int ;func _agbb (_fffc ,_cefg *Bitmap )(*Bitmap ,error ){if _cefg ==nil {return nil ,_a .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _cefg ==_fffc {return _fffc ,nil ;};if _fffc ==nil {_fffc =_cefg .createTemplate ();copy (_fffc .Data ,_cefg .Data );return _fffc ,nil ;};_afb :=_fffc .resizeImageData (_cefg );if _afb !=nil {return nil ,_a .Wrap (_afb ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_fffc .Text =_cefg .Text ;copy (_fffc .Data ,_cefg .Data );return _fffc ,nil ;};func TstImageBitmap ()*Bitmap {return _cddd .Copy ()};type SelectionValue int ;func _agf (_ddcb ,_abdd byte ,_bdee CombinationOperator )byte {switch _bdee {case CmbOpOr :return _abdd |_ddcb ;
case CmbOpAnd :return _abdd &_ddcb ;case CmbOpXor :return _abdd ^_ddcb ;case CmbOpXNor :return ^(_abdd ^_ddcb );case CmbOpNot :return ^(_abdd );default:return _abdd ;};};func (_ebdc *ClassedPoints )YAtIndex (i int )float32 {return (*_ebdc .Points )[_ebdc .IntSlice [i ]].Y };
func _gbf ()(_dg [256]uint64 ){for _adc :=0;_adc < 256;_adc ++{if _adc &0x01!=0{_dg [_adc ]|=0xff;};if _adc &0x02!=0{_dg [_adc ]|=0xff00;};if _adc &0x04!=0{_dg [_adc ]|=0xff0000;};if _adc &0x08!=0{_dg [_adc ]|=0xff000000;};if _adc &0x10!=0{_dg [_adc ]|=0xff00000000;
};if _adc &0x20!=0{_dg [_adc ]|=0xff0000000000;};if _adc &0x40!=0{_dg [_adc ]|=0xff000000000000;};if _adc &0x80!=0{_dg [_adc ]|=0xff00000000000000;};};return _dg ;};func TstESymbol (t *_f .T ,scale ...int )*Bitmap {_efd ,_dgcad :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
_g .NoError (t ,_dgcad );return TstGetScaledSymbol (t ,_efd ,scale ...);};type SizeSelection int ;var _ccfd =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
func (_dba *Bitmap )GetPixel (x ,y int )bool {_cedb :=_dba .GetByteIndex (x ,y );_eaa :=_dba .GetBitOffset (x );_abca :=uint (7-_eaa );if _cedb > len (_dba .Data )-1{_dc .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_dba );
return false ;};if (_dba .Data [_cedb ]>>_abca )&0x01>=1{return true ;};return false ;};type Point struct{X ,Y float32 ;};func (_gfda *Bitmaps )selectByIndicator (_caaed *_c .NumSlice )(_gfacg *Bitmaps ,_dfafb error ){const _febcc ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gfda ==nil {return nil ,_a .Error (_febcc ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _caaed ==nil {return nil ,_a .Error (_febcc ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_gfda .Values )==0{return _gfda ,nil ;};if len (*_caaed )!=len (_gfda .Values ){return nil ,_a .Errorf (_febcc ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_caaed ),len (_gfda .Values ));
};var _dfbdg ,_dbcgf ,_caea int ;for _dbcgf =0;_dbcgf < len (*_caaed );_dbcgf ++{if _dfbdg ,_dfafb =_caaed .GetInt (_dbcgf );_dfafb !=nil {return nil ,_a .Wrap (_dfafb ,_febcc ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _dfbdg ==1{_caea ++;
};};if _caea ==len (_gfda .Values ){return _gfda ,nil ;};_gfacg =&Bitmaps {};_gaea :=len (_gfda .Values )==len (_gfda .Boxes );for _dbcgf =0;_dbcgf < len (*_caaed );_dbcgf ++{if _dfbdg =int ((*_caaed )[_dbcgf ]);_dfbdg ==0{continue ;};_gfacg .Values =append (_gfacg .Values ,_gfda .Values [_dbcgf ]);
if _gaea {_gfacg .Boxes =append (_gfacg .Boxes ,_gfda .Boxes [_dbcgf ]);};};return _gfacg ,nil ;};func _bdda (_gddd ,_gab *Bitmap ,_eagg ,_dcac ,_addad ,_gdff ,_ebfd ,_ebdg ,_beb ,_ccg int ,_cce CombinationOperator )error {var _bfcg int ;_bcce :=func (){_bfcg ++;
_addad +=_gab .RowStride ;_gdff +=_gddd .RowStride ;_ebfd +=_gddd .RowStride };for _bfcg =_eagg ;_bfcg < _dcac ;_bcce (){var _gdag uint16 ;_dfgb :=_addad ;for _feffd :=_gdff ;_feffd <=_ebfd ;_feffd ++{_badb ,_eaag :=_gab .GetByte (_dfgb );if _eaag !=nil {return _eaag ;
};_defb ,_eaag :=_gddd .GetByte (_feffd );if _eaag !=nil {return _eaag ;};_gdag =(_gdag |uint16 (_defb ))<<uint (_ccg );_defb =byte (_gdag >>8);if _feffd ==_ebfd {_defb =_bfe (uint (_ebdg ),_defb );};if _eaag =_gab .SetByte (_dfgb ,_agf (_badb ,_defb ,_cce ));
_eaag !=nil {return _eaag ;};_dfgb ++;_gdag <<=uint (_beb );};};return nil ;};func (_ebba *Boxes )selectWithIndicator (_eabe *_c .NumSlice )(_bgddcd *Boxes ,_ddca error ){const _ddcd ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _ebba ==nil {return nil ,_a .Error (_ddcd ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _eabe ==nil {return nil ,_a .Error (_ddcd ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_eabe )!=len (*_ebba ){return nil ,_a .Error (_ddcd ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027");
};var _acdg ,_ceddd int ;for _ceag :=0;_ceag < len (*_eabe );_ceag ++{if _acdg ,_ddca =_eabe .GetInt (_ceag );_ddca !=nil {return nil ,_a .Wrap (_ddca ,_ddcd ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _acdg ==1{_ceddd ++;
};};if _ceddd ==len (*_ebba ){return _ebba ,nil ;};_fdcf :=Boxes {};for _ebeg :=0;_ebeg < len (*_eabe );_ebeg ++{_acdg =int ((*_eabe )[_ebeg ]);if _acdg ==0{continue ;};_fdcf =append (_fdcf ,(*_ebba )[_ebeg ]);};_bgddcd =&_fdcf ;return _bgddcd ,nil ;};
func _bef (_cfb ,_gdde *Bitmap ,_dff int ,_gdb []byte ,_cga int )(_cgg error ){const _ecg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_efa ,_agd ,_gdf ,_feg ,_cgc ,_eec ,_cedf ,_gdc int ;
_ggf ,_aaa uint32 ;_bdb ,_bdf byte ;_cea uint16 ;);_bbe :=make ([]byte ,4);_cbac :=make ([]byte ,4);for _gdf =0;_gdf < _cfb .Height -1;_gdf ,_feg =_gdf +2,_feg +1{_efa =_gdf *_cfb .RowStride ;_agd =_feg *_gdde .RowStride ;for _cgc ,_eec =0,0;_cgc < _cga ;
_cgc ,_eec =_cgc +4,_eec +1{for _cedf =0;_cedf < 4;_cedf ++{_gdc =_efa +_cgc +_cedf ;if _gdc <=len (_cfb .Data )-1&&_gdc < _efa +_cfb .RowStride {_bbe [_cedf ]=_cfb .Data [_gdc ];}else {_bbe [_cedf ]=0x00;};_gdc =_efa +_cfb .RowStride +_cgc +_cedf ;if _gdc <=len (_cfb .Data )-1&&_gdc < _efa +(2*_cfb .RowStride ){_cbac [_cedf ]=_cfb .Data [_gdc ];
}else {_cbac [_cedf ]=0x00;};};_ggf =_gg .BigEndian .Uint32 (_bbe );_aaa =_gg .BigEndian .Uint32 (_cbac );_aaa &=_ggf ;_aaa &=_aaa <<1;_aaa &=0xaaaaaaaa;_ggf =_aaa |(_aaa <<7);_bdb =byte (_ggf >>24);_bdf =byte ((_ggf >>8)&0xff);_gdc =_agd +_eec ;if _gdc +1==len (_gdde .Data )-1||_gdc +1>=_agd +_gdde .RowStride {_gdde .Data [_gdc ]=_gdb [_bdb ];
if _cgg =_gdde .SetByte (_gdc ,_gdb [_bdb ]);_cgg !=nil {return _a .Wrapf (_cgg ,_ecg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gdc );};}else {_cea =(uint16 (_gdb [_bdb ])<<8)|uint16 (_gdb [_bdf ]);if _cgg =_gdde .setTwoBytes (_gdc ,_cea );_cgg !=nil {return _a .Wrapf (_cgg ,_ecg ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_gdc );
};_eec ++;};};};return nil ;};func TstWordBitmap (t *_f .T ,scale ...int )*Bitmap {_fbge :=1;if len (scale )> 0{_fbge =scale [0];};_feed :=3;_adgf :=9+7+15+2*_feed ;_aceff :=5+_feed +5;_afgc :=New (_adgf *_fbge ,_aceff *_fbge );_geaed :=&Bitmaps {};var _gbfd *int ;
_feed *=_fbge ;_ecgf :=0;_gbfd =&_ecgf ;_beeg :=0;_fgcg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,_feed );_fgcg =TstISymbol (t ,scale ...);
TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,_feed );_fgcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,0);*_gbfd =0;_beeg =5*_fbge +_feed ;_fgcg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );
_fgcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,_feed );_fgcg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );
_fgcg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,1*_fbge );_fgcg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_geaed ,_fgcg ,_gbfd ,_beeg ,0);
TstWriteSymbols (t ,_geaed ,_afgc );return _afgc ;};type Boxes []*_fg .Rectangle ;func TstCSymbol (t *_f .T )*Bitmap {t .Helper ();_ffdf :=New (6,6);_g .NoError (t ,_ffdf .SetPixel (1,0,1));_g .NoError (t ,_ffdf .SetPixel (2,0,1));_g .NoError (t ,_ffdf .SetPixel (3,0,1));
_g .NoError (t ,_ffdf .SetPixel (4,0,1));_g .NoError (t ,_ffdf .SetPixel (0,1,1));_g .NoError (t ,_ffdf .SetPixel (5,1,1));_g .NoError (t ,_ffdf .SetPixel (0,2,1));_g .NoError (t ,_ffdf .SetPixel (0,3,1));_g .NoError (t ,_ffdf .SetPixel (0,4,1));_g .NoError (t ,_ffdf .SetPixel (5,4,1));
_g .NoError (t ,_ffdf .SetPixel (1,5,1));_g .NoError (t ,_ffdf .SetPixel (2,5,1));_g .NoError (t ,_ffdf .SetPixel (3,5,1));_g .NoError (t ,_ffdf .SetPixel (4,5,1));return _ffdf ;};func _bfega (_fdea *Bitmap ,_cfac *_c .Stack ,_fgbd ,_adaa int )(_dbfg *_fg .Rectangle ,_fcgg error ){const _eaab ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _fdea ==nil {return nil ,_a .Error (_eaab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cfac ==nil {return nil ,_a .Error (_eaab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_fecab ,_abeg :=_fdea .Width ,_fdea .Height ;_gafd :=_fecab -1;_egac :=_abeg -1;if _fgbd < 0||_fgbd > _gafd ||_adaa < 0||_adaa > _egac ||!_fdea .GetPixel (_fgbd ,_adaa ){return nil ,nil ;};var _bfcc *_fg .Rectangle ;_bfcc ,_fcgg =Rect (100000,100000,0,0);
if _fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"");};if _fcgg =_adcc (_cfac ,_fgbd ,_fgbd ,_adaa ,1,_egac ,_bfcc );_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fcgg =_adcc (_cfac ,_fgbd ,_fgbd ,_adaa +1,-1,_egac ,_bfcc );
_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bfcc .Min .X ,_bfcc .Max .X =_fgbd ,_fgbd ;_bfcc .Min .Y ,_bfcc .Max .Y =_adaa ,_adaa ;var (_ggeaa *fillSegment ;
_bbgbg int ;);for _cfac .Len ()> 0{if _ggeaa ,_fcgg =_feae (_cfac );_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"");};_adaa =_ggeaa ._fegcf ;for _fgbd =_ggeaa ._aebdc ;_fgbd >=0&&_fdea .GetPixel (_fgbd ,_adaa );_fgbd --{if _fcgg =_fdea .SetPixel (_fgbd ,_adaa ,0);
_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"");};};if _fgbd >=_ggeaa ._aebdc {for _fgbd ++;_fgbd <=_ggeaa ._bcag &&_fgbd <=_gafd &&!_fdea .GetPixel (_fgbd ,_adaa );_fgbd ++{};_bbgbg =_fgbd ;if !(_fgbd <=_ggeaa ._bcag &&_fgbd <=_gafd ){continue ;};
}else {_bbgbg =_fgbd +1;if _bbgbg < _ggeaa ._aebdc -1{if _fcgg =_adcc (_cfac ,_bbgbg ,_ggeaa ._aebdc -1,_ggeaa ._fegcf ,-_ggeaa ._aggbd ,_egac ,_bfcc );_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_fgbd =_ggeaa ._aebdc +1;};for {for ;_fgbd <=_gafd &&_fdea .GetPixel (_fgbd ,_adaa );_fgbd ++{if _fcgg =_fdea .SetPixel (_fgbd ,_adaa ,0);_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fcgg =_adcc (_cfac ,_bbgbg ,_fgbd -1,_ggeaa ._fegcf ,_ggeaa ._aggbd ,_egac ,_bfcc );
_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fgbd > _ggeaa ._bcag +1{if _fcgg =_adcc (_cfac ,_ggeaa ._bcag +1,_fgbd -1,_ggeaa ._fegcf ,-_ggeaa ._aggbd ,_egac ,_bfcc );_fcgg !=nil {return nil ,_a .Wrap (_fcgg ,_eaab ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _fgbd ++;_fgbd <=_ggeaa ._bcag &&_fgbd <=_gafd &&!_fdea .GetPixel (_fgbd ,_adaa );_fgbd ++{};_bbgbg =_fgbd ;if !(_fgbd <=_ggeaa ._bcag &&_fgbd <=_gafd ){break ;};};};_bfcc .Max .X ++;_bfcc .Max .Y ++;return _bfcc ,nil ;};func _dcda (_ffge *Bitmap ,_geab int )(*Bitmap ,error ){const _dcea ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _ffge ==nil {return nil ,_a .Error (_dcea ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _geab <=0{return nil ,_a .Error (_dcea ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _geab ==1{_bfdc ,_aeeg :=_agbb (nil ,_ffge );if _aeeg !=nil {return nil ,_a .Wrap (_aeeg ,_dcea ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _bfdc ,nil ;};_deead ,_fabg :=_cac (_ffge ,_geab ,_geab );if _fabg !=nil {return nil ,_a .Wrap (_fabg ,_dcea ,"");
};return _deead ,nil ;};func (_gfc *Bitmap )SetByte (index int ,v byte )error {if index > len (_gfc .Data )-1||index < 0{return _a .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
};_gfc .Data [index ]=v ;return nil ;};func (_fegea *byWidth )Swap (i ,j int ){_fegea .Values [i ],_fegea .Values [j ]=_fegea .Values [j ],_fegea .Values [i ];if _fegea .Boxes !=nil {_fegea .Boxes [i ],_fegea .Boxes [j ]=_fegea .Boxes [j ],_fegea .Boxes [i ];
};};func (_dgdc *ClassedPoints )Less (i ,j int )bool {return _dgdc ._effdc (i ,j )};func TstFrameBitmapData ()[]byte {return _cgde .Data };func (_cfcef *BitmapsArray )AddBox (box *_fg .Rectangle ){_cfcef .Boxes =append (_cfcef .Boxes ,box )};func _dbg (_bac ,_gda *Bitmap ,_fbd int ,_egg []byte ,_aa int )(_cffa error ){const _dfd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_dbb ,_feaf ,_fbfd ,_geb ,_fdb ,_baa ,_bbgf ,_ddc int ;_acd ,_dbgd uint32 ;_eda ,_cc byte ;_bg uint16 ;);_cffd :=make ([]byte ,4);_edg :=make ([]byte ,4);for _fbfd =0;_fbfd < _bac .Height -1;_fbfd ,_geb =_fbfd +2,_geb +1{_dbb =_fbfd *_bac .RowStride ;
_feaf =_geb *_gda .RowStride ;for _fdb ,_baa =0,0;_fdb < _aa ;_fdb ,_baa =_fdb +4,_baa +1{for _bbgf =0;_bbgf < 4;_bbgf ++{_ddc =_dbb +_fdb +_bbgf ;if _ddc <=len (_bac .Data )-1&&_ddc < _dbb +_bac .RowStride {_cffd [_bbgf ]=_bac .Data [_ddc ];}else {_cffd [_bbgf ]=0x00;
};_ddc =_dbb +_bac .RowStride +_fdb +_bbgf ;if _ddc <=len (_bac .Data )-1&&_ddc < _dbb +(2*_bac .RowStride ){_edg [_bbgf ]=_bac .Data [_ddc ];}else {_edg [_bbgf ]=0x00;};};_acd =_gg .BigEndian .Uint32 (_cffd );_dbgd =_gg .BigEndian .Uint32 (_edg );_dbgd |=_acd ;
_dbgd |=_dbgd <<1;_dbgd &=0xaaaaaaaa;_acd =_dbgd |(_dbgd <<7);_eda =byte (_acd >>24);_cc =byte ((_acd >>8)&0xff);_ddc =_feaf +_baa ;if _ddc +1==len (_gda .Data )-1||_ddc +1>=_feaf +_gda .RowStride {_gda .Data [_ddc ]=_egg [_eda ];}else {_bg =(uint16 (_egg [_eda ])<<8)|uint16 (_egg [_cc ]);
if _cffa =_gda .setTwoBytes (_ddc ,_bg );_cffa !=nil {return _a .Wrapf (_cffa ,_dfd ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_ddc );
};_baa ++;};};};return nil ;};func TstAddSymbol (t *_f .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_edceg :=_fg .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_edceg );*x +=sym .Width +space ;};func (_fcf *Bitmap )nextOnPixel (_acdc ,_degb int )(_cda _fg .Point ,_faf bool ,_gbfaf error ){const _gbfg ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
_cda ,_faf ,_gbfaf =_fcf .nextOnPixelLow (_fcf .Width ,_fcf .Height ,_fcf .RowStride ,_acdc ,_degb );if _gbfaf !=nil {return _cda ,false ,_a .Wrap (_gbfaf ,_gbfg ,"");};return _cda ,_faf ,nil ;};func (_eecg *Boxes )makeSizeIndicator (_cfgd ,_eccb int ,_cedd LocationFilter ,_gbac SizeComparison )*_c .NumSlice {_abb :=&_c .NumSlice {};
var _ageb ,_afeb ,_agc int ;for _ ,_aaedc :=range *_eecg {_ageb =0;_afeb ,_agc =_aaedc .Dx (),_aaedc .Dy ();switch _cedd {case LocSelectWidth :if (_gbac ==SizeSelectIfLT &&_afeb < _cfgd )||(_gbac ==SizeSelectIfGT &&_afeb > _cfgd )||(_gbac ==SizeSelectIfLTE &&_afeb <=_cfgd )||(_gbac ==SizeSelectIfGTE &&_afeb >=_cfgd ){_ageb =1;
};case LocSelectHeight :if (_gbac ==SizeSelectIfLT &&_agc < _eccb )||(_gbac ==SizeSelectIfGT &&_agc > _eccb )||(_gbac ==SizeSelectIfLTE &&_agc <=_eccb )||(_gbac ==SizeSelectIfGTE &&_agc >=_eccb ){_ageb =1;};case LocSelectIfEither :if (_gbac ==SizeSelectIfLT &&(_agc < _eccb ||_afeb < _cfgd ))||(_gbac ==SizeSelectIfGT &&(_agc > _eccb ||_afeb > _cfgd ))||(_gbac ==SizeSelectIfLTE &&(_agc <=_eccb ||_afeb <=_cfgd ))||(_gbac ==SizeSelectIfGTE &&(_agc >=_eccb ||_afeb >=_cfgd )){_ageb =1;
};case LocSelectIfBoth :if (_gbac ==SizeSelectIfLT &&(_agc < _eccb &&_afeb < _cfgd ))||(_gbac ==SizeSelectIfGT &&(_agc > _eccb &&_afeb > _cfgd ))||(_gbac ==SizeSelectIfLTE &&(_agc <=_eccb &&_afeb <=_cfgd ))||(_gbac ==SizeSelectIfGTE &&(_agc >=_eccb &&_afeb >=_cfgd )){_ageb =1;
};};_abb .AddInt (_ageb );};return _abb ;};func _cgcc (_beeb ,_fdf int )int {if _beeb > _fdf {return _beeb ;};return _fdf ;};func (_bdab *BitmapsArray )GetBox (i int )(*_fg .Rectangle ,error ){const _cafg ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _bdab ==nil {return nil ,_a .Error (_cafg ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_bdab .Boxes )-1{return nil ,_a .Errorf (_cafg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _bdab .Boxes [i ],nil ;};func TstWSymbol (t *_f .T ,scale ...int )*Bitmap {_eaec ,_fcdg :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_g .NoError (t ,_fcdg );return TstGetScaledSymbol (t ,_eaec ,scale ...);};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _bgee ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
_bba :=_aac (width ,height );_bba .Data =data ;if len (data )< height *_bba .RowStride {return nil ,_a .Errorf (_bgee ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_bba .RowStride );
};return _bba ,nil ;};func _eeaaf (_abff *Bitmap ,_adcb ...MorphProcess )(_dgdaf *Bitmap ,_caadf error ){const _ggdea ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _abff ==nil {return nil ,_a .Error (_ggdea ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if len (_adcb )==0{return nil ,_a .Error (_ggdea ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _caadf =_gdca (_adcb ...);
_caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};var _dcace ,_gefgb ,_bfcb int ;_dgdaf =_abff .Copy ();for _ ,_eefge :=range _adcb {switch _eefge .Operation {case MopDilation :_dcace ,_gefgb =_eefge .getWidthHeight ();_dgdaf ,_caadf =DilateBrick (nil ,_dgdaf ,_dcace ,_gefgb );
if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};case MopErosion :_dcace ,_gefgb =_eefge .getWidthHeight ();_dgdaf ,_caadf =_gbaa (nil ,_dgdaf ,_dcace ,_gefgb );if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};case MopOpening :_dcace ,_gefgb =_eefge .getWidthHeight ();
_dgdaf ,_caadf =_fbg (nil ,_dgdaf ,_dcace ,_gefgb );if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};case MopClosing :_dcace ,_gefgb =_eefge .getWidthHeight ();_dgdaf ,_caadf =_cddc (nil ,_dgdaf ,_dcace ,_gefgb );if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");
};case MopRankBinaryReduction :_dgdaf ,_caadf =_ddd (_dgdaf ,_eefge .Arguments ...);if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};case MopReplicativeBinaryExpansion :_dgdaf ,_caadf =_dcda (_dgdaf ,_eefge .Arguments [0]);if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");
};case MopAddBorder :_bfcb =_eefge .Arguments [0];_dgdaf ,_caadf =_dgdaf .AddBorder (_bfcb ,0);if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"");};default:return nil ,_a .Error (_ggdea ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065");
};};if _bfcb > 0{_dgdaf ,_caadf =_dgdaf .RemoveBorder (_bfcb );if _caadf !=nil {return nil ,_a .Wrap (_caadf ,_ggdea ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _dgdaf ,nil ;};func (_dgd *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dgd .addBorderGeneral (left ,right ,top ,bot ,val );
};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _eeaaf (src ,sequence ...);};func (_befdc *Bitmaps )SortByHeight (){_bdgd :=(*byHeight )(_befdc );_d .Sort (_bdgd )};var _ _d .Interface =&ClassedPoints {};func _dcgb (_edge ,_abd *Bitmap ,_ceba ,_bade ,_eed ,_dbgb ,_ggac ,_edeb ,_daea ,_eae int ,_cbe CombinationOperator ,_gca int )error {var _adbf int ;
_bcc :=func (){_adbf ++;_eed +=_abd .RowStride ;_dbgb +=_edge .RowStride ;_ggac +=_edge .RowStride };for _adbf =_ceba ;_adbf < _bade ;_bcc (){var _egbe uint16 ;_geac :=_eed ;for _ggca :=_dbgb ;_ggca <=_ggac ;_ggca ++{_dbf ,_cebc :=_abd .GetByte (_geac );
if _cebc !=nil {return _cebc ;};_ecgg ,_cebc :=_edge .GetByte (_ggca );if _cebc !=nil {return _cebc ;};_egbe =(_egbe |(uint16 (_ecgg )&0xff))<<uint (_eae );_ecgg =byte (_egbe >>8);if _cebc =_abd .SetByte (_geac ,_agf (_dbf ,_ecgg ,_cbe ));_cebc !=nil {return _cebc ;
};_geac ++;_egbe <<=uint (_daea );if _ggca ==_ggac {_ecgg =byte (_egbe >>(8-uint8 (_eae )));if _gca !=0{_ecgg =_bfe (uint (8+_edeb ),_ecgg );};_dbf ,_cebc =_abd .GetByte (_geac );if _cebc !=nil {return _cebc ;};if _cebc =_abd .SetByte (_geac ,_agf (_dbf ,_ecgg ,_cbe ));
_cebc !=nil {return _cebc ;};};};};return nil ;};func (_egfa *Bitmaps )CountPixels ()*_c .NumSlice {_edgdd :=&_c .NumSlice {};for _ ,_fadg :=range _egfa .Values {_edgdd .AddInt (_fadg .CountPixels ());};return _edgdd ;};func _cddc (_cbbc ,_gbfe *Bitmap ,_dfca ,_bfd int )(*Bitmap ,error ){const _gcbc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _gbfe ==nil {return nil ,_a .Error (_gcbc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfca < 1||_bfd < 1{return nil ,_a .Error (_gcbc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _dfca ==1&&_bfd ==1{return _agbb (_cbbc ,_gbfe );};if MorphBC ==SymmetricMorphBC {_baed ,_dgbf :=_ffag (_cbbc ,_gbfe ,_dfca ,_bfd );if _dgbf !=nil {return nil ,_a .Wrap (_dgbf ,_gcbc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _baed ,nil ;};_ebff :=_cgcc (_dfca /2,_bfd /2);_fcgc :=8*((_ebff +7)/8);_fbbd ,_dfad :=_gbfe .AddBorder (_fcgc ,0);if _dfad !=nil {return nil ,_a .Wrapf (_dfad ,_gcbc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_fcgc );
};var _bcae ,_ebdb *Bitmap ;if _dfca ==1||_bfd ==1{_edfe :=SelCreateBrick (_bfd ,_dfca ,_bfd /2,_dfca /2,SelHit );_bcae ,_dfad =_deffc (nil ,_fbbd ,_edfe );if _dfad !=nil {return nil ,_a .Wrap (_dfad ,_gcbc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_acbca :=SelCreateBrick (1,_dfca ,0,_dfca /2,SelHit );_agded ,_efga :=_bbea (nil ,_fbbd ,_acbca );if _efga !=nil {return nil ,_a .Wrap (_efga ,_gcbc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_aef :=SelCreateBrick (_bfd ,1,_bfd /2,0,SelHit );_bcae ,_efga =_bbea (nil ,_agded ,_aef );if _efga !=nil {return nil ,_a .Wrap (_efga ,_gcbc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_efga =_bbbb (_agded ,_bcae ,_acbca );_efga !=nil {return nil ,_a .Wrap (_efga ,_gcbc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_efga =_bbbb (_bcae ,_agded ,_aef );_efga !=nil {return nil ,_a .Wrap (_efga ,_gcbc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _ebdb ,_dfad =_bcae .RemoveBorder (_fcgc );_dfad !=nil {return nil ,_a .Wrap (_dfad ,_gcbc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _cbbc ==nil {return _ebdb ,nil ;};if _ ,_dfad =_agbb (_cbbc ,_ebdb );_dfad !=nil {return nil ,_dfad ;};return _cbbc ,nil ;
};func (_geg *Bitmap )GetBitOffset (x int )int {return x &0x07};func init (){const _dffc ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_cgde =New (50,40);var _cecfb error ;_cgde ,_cecfb =_cgde .AddBorder (2,1);
if _cecfb !=nil {panic (_a .Wrap (_cecfb ,_dffc ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cddd ,_cecfb =NewWithData (50,22,_ccfd );if _cecfb !=nil {panic (_a .Wrap (_cecfb ,_dffc ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_dgfc *ClassedPoints )SortByX (){_dgfc ._effdc =_dgfc .xSortFunction ();_d .Sort (_dgfc )};
func (_gdgd *Bitmap )setBit (_bbeb int ){_gdgd .Data [(_bbeb >>3)]|=0x80>>uint (_bbeb &7)};func _agb (_bgd ,_ced *Bitmap ,_adca int ,_dga []byte ,_bdd int )(_aee error ){const _cdde ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_def ,_efb ,_acc ,_dgaa ,_edfg ,_fge ,_fefa ,_acac int ;_ada ,_gfa ,_gff ,_gde uint32 ;_bge ,_bae byte ;_bec uint16 ;);_edgb :=make ([]byte ,4);_fae :=make ([]byte ,4);for _acc =0;_acc < _bgd .Height -1;_acc ,_dgaa =_acc +2,_dgaa +1{_def =_acc *_bgd .RowStride ;
_efb =_dgaa *_ced .RowStride ;for _edfg ,_fge =0,0;_edfg < _bdd ;_edfg ,_fge =_edfg +4,_fge +1{for _fefa =0;_fefa < 4;_fefa ++{_acac =_def +_edfg +_fefa ;if _acac <=len (_bgd .Data )-1&&_acac < _def +_bgd .RowStride {_edgb [_fefa ]=_bgd .Data [_acac ];
}else {_edgb [_fefa ]=0x00;};_acac =_def +_bgd .RowStride +_edfg +_fefa ;if _acac <=len (_bgd .Data )-1&&_acac < _def +(2*_bgd .RowStride ){_fae [_fefa ]=_bgd .Data [_acac ];}else {_fae [_fefa ]=0x00;};};_ada =_gg .BigEndian .Uint32 (_edgb );_gfa =_gg .BigEndian .Uint32 (_fae );
_gff =_ada &_gfa ;_gff |=_gff <<1;_gde =_ada |_gfa ;_gde &=_gde <<1;_gfa =_gff &_gde ;_gfa &=0xaaaaaaaa;_ada =_gfa |(_gfa <<7);_bge =byte (_ada >>24);_bae =byte ((_ada >>8)&0xff);_acac =_efb +_fge ;if _acac +1==len (_ced .Data )-1||_acac +1>=_efb +_ced .RowStride {if _aee =_ced .SetByte (_acac ,_dga [_bge ]);
_aee !=nil {return _a .Wrapf (_aee ,_cdde ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_acac );};}else {_bec =(uint16 (_dga [_bge ])<<8)|uint16 (_dga [_bae ]);if _aee =_ced .setTwoBytes (_acac ,_bec );_aee !=nil {return _a .Wrapf (_aee ,_cdde ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_acac );
};_fge ++;};};};return nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_eacc bool ,_dcgc error ){const _adba ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_bbcf ,_fca :=p1 .Width ,p1 .Height ;_abfd ,_ggdc :=p3 .Width ,p3 .Height ;if _c .Abs (_bbcf -_abfd )> maxDiffW {return false ,nil ;};if _c .Abs (_fca -_ggdc )> maxDiffH {return false ,nil ;};_ffe :=int (float32 (area1 )*(1.0-rank )+0.5);_dfcf :=int (float32 (area3 )*(1.0-rank )+0.5);
var _gaab ,_decgf int ;if delX >=0{_gaab =int (delX +0.5);}else {_gaab =int (delX -0.5);};if delY >=0{_decgf =int (delY +0.5);}else {_decgf =int (delY -0.5);};_eddb :=p1 .CreateTemplate ();if _dcgc =_eddb .RasterOperation (0,0,_bbcf ,_fca ,PixSrc ,p1 ,0,0);
_dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcgc =_eddb .RasterOperation (_gaab ,_decgf ,_bbcf ,_fca ,PixNotSrcAndDst ,p4 ,0,0);_dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_eacc ,_dcgc =_eddb .ThresholdPixelSum (_ffe ,tab8 );if _dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _eacc {return false ,nil ;};if _dcgc =_eddb .RasterOperation (_gaab ,_decgf ,_abfd ,_ggdc ,PixSrc ,p3 ,0,0);
_dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _dcgc =_eddb .RasterOperation (0,0,_abfd ,_ggdc ,PixNotSrcAndDst ,p2 ,0,0);_dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_eacc ,_dcgc =_eddb .ThresholdPixelSum (_dfcf ,tab8 );if _dcgc !=nil {return false ,_a .Wrap (_dcgc ,_adba ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_eacc ,nil ;};func NewClassedPoints (points *Points ,classes _c .IntSlice )(*ClassedPoints ,error ){const _dabc ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_a .Error (_dabc ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_a .Error (_dabc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_dfbe :=&ClassedPoints {Points :points ,IntSlice :classes };if _bfgb :=_dfbe .validateIntSlice ();_bfgb !=nil {return nil ,_a .Wrap (_bfgb ,_dabc ,"");};return _dfbe ,nil ;};func (_fefc *Bitmap )setAll ()error {_ceff :=_bgcc (_fefc ,0,0,_fefc .Width ,_fefc .Height ,PixSet ,nil ,0,0);
if _ceff !=nil {return _a .Wrap (_ceff ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_ggfe *Bitmap )GetByteIndex (x ,y int )int {return y *_ggfe .RowStride +(x >>3)};func (_egbf *Bitmap )GetChocolateData ()[]byte {if _egbf .Color ==Vanilla {_egbf .inverseData ();
};return _egbf .Data ;};func TstFrameBitmap ()*Bitmap {return _cgde .Copy ()};func _ag (_ee ,_ggdg *Bitmap ,_gcf int ,_cdg []byte ,_gga int )(_bcgg error ){const _cgef ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_aff ,_cdd ,_adf ,_dgg ,_ea ,_dgc ,_egb ,_cdb int ;_ggg ,_adb ,_cefa ,_ade uint32 ;_cdgd ,_acda byte ;_ddgg uint16 ;);_cba :=make ([]byte ,4);_debb :=make ([]byte ,4);for _adf =0;_adf < _ee .Height -1;_adf ,_dgg =_adf +2,_dgg +1{_aff =_adf *_ee .RowStride ;
_cdd =_dgg *_ggdg .RowStride ;for _ea ,_dgc =0,0;_ea < _gga ;_ea ,_dgc =_ea +4,_dgc +1{for _egb =0;_egb < 4;_egb ++{_cdb =_aff +_ea +_egb ;if _cdb <=len (_ee .Data )-1&&_cdb < _aff +_ee .RowStride {_cba [_egb ]=_ee .Data [_cdb ];}else {_cba [_egb ]=0x00;
};_cdb =_aff +_ee .RowStride +_ea +_egb ;if _cdb <=len (_ee .Data )-1&&_cdb < _aff +(2*_ee .RowStride ){_debb [_egb ]=_ee .Data [_cdb ];}else {_debb [_egb ]=0x00;};};_ggg =_gg .BigEndian .Uint32 (_cba );_adb =_gg .BigEndian .Uint32 (_debb );_cefa =_ggg &_adb ;
_cefa |=_cefa <<1;_ade =_ggg |_adb ;_ade &=_ade <<1;_adb =_cefa |_ade ;_adb &=0xaaaaaaaa;_ggg =_adb |(_adb <<7);_cdgd =byte (_ggg >>24);_acda =byte ((_ggg >>8)&0xff);_cdb =_cdd +_dgc ;if _cdb +1==len (_ggdg .Data )-1||_cdb +1>=_cdd +_ggdg .RowStride {if _bcgg =_ggdg .SetByte (_cdb ,_cdg [_cdgd ]);
_bcgg !=nil {return _a .Wrapf (_bcgg ,_cgef ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cdb );};}else {_ddgg =(uint16 (_cdg [_cdgd ])<<8)|uint16 (_cdg [_acda ]);if _bcgg =_ggdg .setTwoBytes (_cdb ,_ddgg );_bcgg !=nil {return _a .Wrapf (_bcgg ,_cgef ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_cdb );
};_dgc ++;};};};return nil ;};func (_eff *Bitmap )InverseData (){_eff .inverseData ()};var (_bbef =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gafa =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_gggbd *Bitmap )inverseData (){if _bbdcd :=_gggbd .RasterOperation (0,0,_gggbd .Width ,_gggbd .Height ,PixNotDst ,nil ,0,0);
_bbdcd !=nil {_dc .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_bbdcd );};if _gggbd .Color ==Chocolate {_gggbd .Color =Vanilla ;}else {_gggbd .Color =Chocolate ;
};};func (_fegf *Bitmaps )SortByWidth (){_bafa :=(*byWidth )(_fegf );_d .Sort (_bafa )};func _ffag (_abccd ,_ffca *Bitmap ,_feaa ,_dffd int )(*Bitmap ,error ){const _egd ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _ffca ==nil {return nil ,_a .Error (_egd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _feaa < 1||_dffd < 1{return nil ,_a .Error (_egd ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _feaa ==1&&_dffd ==1{return _ffca .Copy (),nil ;};if _feaa ==1||_dffd ==1{_dbda :=SelCreateBrick (_dffd ,_feaa ,_dffd /2,_feaa /2,SelHit );
var _gfbf error ;_abccd ,_gfbf =_deffc (_abccd ,_ffca ,_dbda );if _gfbf !=nil {return nil ,_a .Wrap (_gfbf ,_egd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _abccd ,nil ;};_fadb :=SelCreateBrick (1,_feaa ,0,_feaa /2,SelHit );_fafd :=SelCreateBrick (_dffd ,1,_dffd /2,0,SelHit );_eaed ,_bdgg :=_bbea (nil ,_ffca ,_fadb );if _bdgg !=nil {return nil ,_a .Wrap (_bdgg ,_egd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _abccd ,_bdgg =_bbea (_abccd ,_eaed ,_fafd );_bdgg !=nil {return nil ,_a .Wrap (_bdgg ,_egd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bdgg =_bbbb (_eaed ,_abccd ,_fadb );_bdgg !=nil {return nil ,_a .Wrap (_bdgg ,_egd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_bdgg =_bbbb (_abccd ,_eaed ,_fafd );_bdgg !=nil {return nil ,_a .Wrap (_bdgg ,_egd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _abccd ,nil ;};func (_fggaed *byHeight )Less (i ,j int )bool {return _fggaed .Values [i ].Height < _fggaed .Values [j ].Height ;
};func _feae (_fgfb *_c .Stack )(_ebfaa *fillSegment ,_ecdbc error ){const _befd ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _fgfb ==nil {return nil ,_a .Error (_befd ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _fgfb .Aux ==nil {return nil ,_a .Error (_befd ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_dgeg ,_ebgg :=_fgfb .Pop ();if !_ebgg {return nil ,nil ;};_cbdc ,_ebgg :=_dgeg .(*fillSegment );if !_ebgg {return nil ,_a .Error (_befd ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");
};_ebfaa =&fillSegment {_cbdc ._aebdc ,_cbdc ._bcag ,_cbdc ._fegcf +_cbdc ._aggbd ,_cbdc ._aggbd };_fgfb .Aux .Push (_cbdc );return _ebfaa ,nil ;};func _bda (_fbf *Bitmap ,_gbd int ,_fef []byte )(_feff *Bitmap ,_fea error ){const _ddg ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _fbf ==nil {return nil ,_a .Error (_ddg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gbd < 1||_gbd > 4{return nil ,_a .Error (_ddg ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d");
};if _fbf .Height <=1{return nil ,_a .Errorf (_ddg ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_fbf .Height );
};_feff =New (_fbf .Width /2,_fbf .Height /2);if _fef ==nil {_fef =_fbc ();};_df :=_egag (_fbf .RowStride ,2*_feff .RowStride );switch _gbd {case 1:_fea =_dbg (_fbf ,_feff ,_gbd ,_fef ,_df );case 2:_fea =_ag (_fbf ,_feff ,_gbd ,_fef ,_df );case 3:_fea =_agb (_fbf ,_feff ,_gbd ,_fef ,_df );
case 4:_fea =_bef (_fbf ,_feff ,_gbd ,_fef ,_df );};if _fea !=nil {return nil ,_fea ;};return _feff ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_dgfa *Bitmaps )AddBitmap (bm *Bitmap ){_dgfa .Values =append (_dgfa .Values ,bm )};