2020-12-06 13:03:03 +00:00

12 lines
195 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 (_dc "encoding/binary";_g "github.com/stretchr/testify/require";_fge "github.com/unidoc/unipdf/v3/common";_b "github.com/unidoc/unipdf/v3/internal/bitwise";_d "github.com/unidoc/unipdf/v3/internal/imageutil";_ff "github.com/unidoc/unipdf/v3/internal/jbig2/basic";_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_dd "image";_ffg "math";_e "sort";_fg "strings";_gg "testing";);func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _gbc ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bcffc :=_gbaf (width ,height );_bcffc .Data =data ;if len (data )< height *_bcffc .RowStride {return nil ,_c .Errorf (_gbc ,"\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 *_bcffc .RowStride );};return _bcffc ,nil ;};func _bacc (_ffdbe int )int {if _ffdbe < 0{return -_ffdbe ;};return _ffdbe ;};func _bgbfd (_feda ,_aggf *Bitmap ,_fcad ,_gcf ,_fgca uint ,_cage ,_fcfa int ,_aebbg bool ,_cedb ,_ebad int )error {for _cfgc :=_cage ;_cfgc < _fcfa ;_cfgc ++{if _cedb +1< len (_feda .Data ){_cddfd :=_cfgc +1==_fcfa ;_afca ,_gfeg :=_feda .GetByte (_cedb );if _gfeg !=nil {return _gfeg ;};_cedb ++;_afca <<=_fcad ;_gaec ,_gfeg :=_feda .GetByte (_cedb );if _gfeg !=nil {return _gfeg ;};_gaec >>=_gcf ;_egce :=_afca |_gaec ;if _cddfd &&!_aebbg {_egce =_fbfc (_fgca ,_egce );};_gfeg =_aggf .SetByte (_ebad ,_egce );if _gfeg !=nil {return _gfeg ;};_ebad ++;if _cddfd &&_aebbg {_ccbd ,_ffcg :=_feda .GetByte (_cedb );if _ffcg !=nil {return _ffcg ;};_ccbd <<=_fcad ;_egce =_fbfc (_fgca ,_ccbd );if _ffcg =_aggf .SetByte (_ebad ,_egce );_ffcg !=nil {return _ffcg ;};};continue ;};_agfe ,_agef :=_feda .GetByte (_cedb );if _agef !=nil {_fge .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",_cedb ,_agef );return _agef ;};_agfe <<=_fcad ;_cedb ++;_agef =_aggf .SetByte (_ebad ,_agfe );if _agef !=nil {return _agef ;};_ebad ++;};return nil ;};func (_bfefc *ClassedPoints )Len ()int {return _bfefc .IntSlice .Size ()};type Color int ;func _df ()(_eae [256]uint64 ){for _efg :=0;_efg < 256;_efg ++{if _efg &0x01!=0{_eae [_efg ]|=0xff;};if _efg &0x02!=0{_eae [_efg ]|=0xff00;};if _efg &0x04!=0{_eae [_efg ]|=0xff0000;};if _efg &0x08!=0{_eae [_efg ]|=0xff000000;};if _efg &0x10!=0{_eae [_efg ]|=0xff00000000;};if _efg &0x20!=0{_eae [_efg ]|=0xff0000000000;};if _efg &0x40!=0{_eae [_efg ]|=0xff000000000000;};if _efg &0x80!=0{_eae [_efg ]|=0xff00000000000000;};};return _eae ;};type byWidth Bitmaps ;func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_cegf float64 ,_eeafg error ){const _eeab ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_eeab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_eeab ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if area1 <=0||area2 <=0{return 0,_c .Error (_eeab ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_ccbff ,_efdc :=bm1 .Width ,bm1 .Height ;_bbdgg ,_gegbd :=bm2 .Width ,bm2 .Height ;_gcbb :=_bacc (_ccbff -_bbdgg );if _gcbb > maxDiffW {return 0,nil ;};_adga :=_bacc (_efdc -_gegbd );if _adga > maxDiffH {return 0,nil ;};var _dfd ,_ffcga int ;if delX >=0{_dfd =int (delX +0.5);}else {_dfd =int (delX -0.5);};if delY >=0{_ffcga =int (delY +0.5);}else {_ffcga =int (delY -0.5);};_ffbeb :=_dgea (_ffcga ,0);_egag :=_fdb (_gegbd +_ffcga ,_efdc );_cgad :=bm1 .RowStride *_ffbeb ;_dgcd :=bm2 .RowStride *(_ffbeb -_ffcga );_ceeg :=_dgea (_dfd ,0);_dada :=_fdb (_bbdgg +_dfd ,_ccbff );_ebfc :=bm2 .RowStride ;var _cgge ,_dcbfa int ;if _dfd >=8{_cgge =_dfd >>3;_cgad +=_cgge ;_ceeg -=_cgge <<3;_dada -=_cgge <<3;_dfd &=7;}else if _dfd <=-8{_dcbfa =-((_dfd +7)>>3);_dgcd +=_dcbfa ;_ebfc -=_dcbfa ;_dfd +=_dcbfa <<3;};if _ceeg >=_dada ||_ffbeb >=_egag {return 0,nil ;};_adcf :=(_dada +7)>>3;var (_cdbde ,_babf ,_gbea byte ;_dagd ,_fgg ,_bcga int ;);switch {case _dfd ==0:for _bcga =_ffbeb ;_bcga < _egag ;_bcga ,_cgad ,_dgcd =_bcga +1,_cgad +bm1 .RowStride ,_dgcd +bm2 .RowStride {for _fgg =0;_fgg < _adcf ;_fgg ++{_gbea =bm1 .Data [_cgad +_fgg ]&bm2 .Data [_dgcd +_fgg ];_dagd +=tab [_gbea ];};};case _dfd > 0:if _ebfc < _adcf {for _bcga =_ffbeb ;_bcga < _egag ;_bcga ,_cgad ,_dgcd =_bcga +1,_cgad +bm1 .RowStride ,_dgcd +bm2 .RowStride {_cdbde ,_babf =bm1 .Data [_cgad ],bm2 .Data [_dgcd ]>>uint (_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];for _fgg =1;_fgg < _ebfc ;_fgg ++{_cdbde ,_babf =bm1 .Data [_cgad +_fgg ],(bm2 .Data [_dgcd +_fgg ]>>uint (_dfd ))|(bm2 .Data [_dgcd +_fgg -1]<<uint (8-_dfd ));_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};_cdbde =bm1 .Data [_cgad +_fgg ];_babf =bm2 .Data [_dgcd +_fgg -1]<<uint (8-_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};}else {for _bcga =_ffbeb ;_bcga < _egag ;_bcga ,_cgad ,_dgcd =_bcga +1,_cgad +bm1 .RowStride ,_dgcd +bm2 .RowStride {_cdbde ,_babf =bm1 .Data [_cgad ],bm2 .Data [_dgcd ]>>uint (_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];for _fgg =1;_fgg < _adcf ;_fgg ++{_cdbde =bm1 .Data [_cgad +_fgg ];_babf =(bm2 .Data [_dgcd +_fgg ]>>uint (_dfd ))|(bm2 .Data [_dgcd +_fgg -1]<<uint (8-_dfd ));_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};};};default:if _adcf < _ebfc {for _bcga =_ffbeb ;_bcga < _egag ;_bcga ,_cgad ,_dgcd =_bcga +1,_cgad +bm1 .RowStride ,_dgcd +bm2 .RowStride {for _fgg =0;_fgg < _adcf ;_fgg ++{_cdbde =bm1 .Data [_cgad +_fgg ];_babf =bm2 .Data [_dgcd +_fgg ]<<uint (-_dfd );_babf |=bm2 .Data [_dgcd +_fgg +1]>>uint (8+_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};};}else {for _bcga =_ffbeb ;_bcga < _egag ;_bcga ,_cgad ,_dgcd =_bcga +1,_cgad +bm1 .RowStride ,_dgcd +bm2 .RowStride {for _fgg =0;_fgg < _adcf -1;_fgg ++{_cdbde =bm1 .Data [_cgad +_fgg ];_babf =bm2 .Data [_dgcd +_fgg ]<<uint (-_dfd );_babf |=bm2 .Data [_dgcd +_fgg +1]>>uint (8+_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};_cdbde =bm1 .Data [_cgad +_fgg ];_babf =bm2 .Data [_dgcd +_fgg ]<<uint (-_dfd );_gbea =_cdbde &_babf ;_dagd +=tab [_gbea ];};};};_cegf =float64 (_dagd )*float64 (_dagd )/(float64 (area1 )*float64 (area2 ));return _cegf ,nil ;};func _dgea (_egb ,_fade int )int {if _egb > _fade {return _egb ;};return _fade ;};var _fdee [256]uint8 ;type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_dd .Rectangle ;};func TstASymbol (t *_gg .T )*Bitmap {t .Helper ();_fbea :=New (6,6);_g .NoError (t ,_fbea .SetPixel (1,0,1));_g .NoError (t ,_fbea .SetPixel (2,0,1));_g .NoError (t ,_fbea .SetPixel (3,0,1));_g .NoError (t ,_fbea .SetPixel (4,0,1));_g .NoError (t ,_fbea .SetPixel (5,1,1));_g .NoError (t ,_fbea .SetPixel (1,2,1));_g .NoError (t ,_fbea .SetPixel (2,2,1));_g .NoError (t ,_fbea .SetPixel (3,2,1));_g .NoError (t ,_fbea .SetPixel (4,2,1));_g .NoError (t ,_fbea .SetPixel (5,2,1));_g .NoError (t ,_fbea .SetPixel (0,3,1));_g .NoError (t ,_fbea .SetPixel (5,3,1));_g .NoError (t ,_fbea .SetPixel (0,4,1));_g .NoError (t ,_fbea .SetPixel (5,4,1));_g .NoError (t ,_fbea .SetPixel (1,5,1));_g .NoError (t ,_fbea .SetPixel (2,5,1));_g .NoError (t ,_fbea .SetPixel (3,5,1));_g .NoError (t ,_fbea .SetPixel (4,5,1));_g .NoError (t ,_fbea .SetPixel (5,5,1));return _fbea ;};func _aec (_bfff *Bitmap ,_gbab ,_bcec ,_aeae ,_dgcce int ,_efgb RasterOperator ){if _gbab < 0{_aeae +=_gbab ;_gbab =0;};_ccbc :=_gbab +_aeae -_bfff .Width ;if _ccbc > 0{_aeae -=_ccbc ;};if _bcec < 0{_dgcce +=_bcec ;_bcec =0;};_babda :=_bcec +_dgcce -_bfff .Height ;if _babda > 0{_dgcce -=_babda ;};if _aeae <=0||_dgcce <=0{return ;};if (_gbab &7)==0{_fegd (_bfff ,_gbab ,_bcec ,_aeae ,_dgcce ,_efgb );}else {_dfcc (_bfff ,_gbab ,_bcec ,_aeae ,_dgcce ,_efgb );};};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);type MorphOperation int ;func init (){for _cbd :=0;_cbd < 256;_cbd ++{_fdee [_cbd ]=uint8 (_cbd &0x1)+(uint8 (_cbd >>1)&0x1)+(uint8 (_cbd >>2)&0x1)+(uint8 (_cbd >>3)&0x1)+(uint8 (_cbd >>4)&0x1)+(uint8 (_cbd >>5)&0x1)+(uint8 (_cbd >>6)&0x1)+(uint8 (_cbd >>7)&0x1);};};func _bagff (_efdaf ,_aaaa *Bitmap ,_bbcc *Selection )(*Bitmap ,error ){const _cade ="\u0065\u0072\u006fd\u0065";var (_aeaa error ;_adab *Bitmap ;);_efdaf ,_aeaa =_degd (_efdaf ,_aaaa ,_bbcc ,&_adab );if _aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"");};if _aeaa =_efdaf .setAll ();_aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"");};var _cafg SelectionValue ;for _bcgc :=0;_bcgc < _bbcc .Height ;_bcgc ++{for _gfcbg :=0;_gfcbg < _bbcc .Width ;_gfcbg ++{_cafg =_bbcc .Data [_bcgc ][_gfcbg ];if _cafg ==SelHit {_aeaa =_dacd (_efdaf ,_bbcc .Cx -_gfcbg ,_bbcc .Cy -_bcgc ,_aaaa .Width ,_aaaa .Height ,PixSrcAndDst ,_adab ,0,0);if _aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"");};};};};if MorphBC ==SymmetricMorphBC {return _efdaf ,nil ;};_eaab ,_aace ,_bbdf ,_cebdg :=_bbcc .findMaxTranslations ();if _eaab > 0{if _aeaa =_efdaf .RasterOperation (0,0,_eaab ,_aaaa .Height ,PixClr ,nil ,0,0);_aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _bbdf > 0{if _aeaa =_efdaf .RasterOperation (_aaaa .Width -_bbdf ,0,_bbdf ,_aaaa .Height ,PixClr ,nil ,0,0);_aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _aace > 0{if _aeaa =_efdaf .RasterOperation (0,0,_aaaa .Width ,_aace ,PixClr ,nil ,0,0);_aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _cebdg > 0{if _aeaa =_efdaf .RasterOperation (0,_aaaa .Height -_cebdg ,_aaaa .Width ,_cebdg ,PixClr ,nil ,0,0);_aeaa !=nil {return nil ,_c .Wrap (_aeaa ,_cade ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _efdaf ,nil ;};func (_eeec *Bitmap )setEightBytes (_aebb int ,_ffa uint64 )error {_gadg :=_eeec .RowStride -(_aebb %_eeec .RowStride );if _eeec .RowStride !=_eeec .Width >>3{_gadg --;};if _gadg >=8{return _eeec .setEightFullBytes (_aebb ,_ffa );};return _eeec .setEightPartlyBytes (_aebb ,_gadg ,_ffa );};type fillSegment struct{_acda int ;_egaba int ;_bggb int ;_dafe int ;};func (_eedga *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _abgfc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_eedga .Values )==0{return nil ,_c .Error (_abgfc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fafe :=&BitmapsArray {};_eedga .SortByWidth ();_bccde :=-1;_gbdcd :=-1;for _cega :=0;_cega < len (_eedga .Values );_cega ++{_dffd :=_eedga .Values [_cega ].Width ;if _dffd > _bccde {_bccde =_dffd ;_gbdcd ++;_fafe .Values =append (_fafe .Values ,&Bitmaps {});};_fafe .Values [_gbdcd ].AddBitmap (_eedga .Values [_cega ]);};return _fafe ,nil ;};func (_afbd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_afbd .Data )-1||index < 0{return 0,_c .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 _afbd .Data [index ],nil ;};func _cfedf (_acfa *Bitmap ,_daga int )(*Bitmap ,error ){const _bda ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _acfa ==nil {return nil ,_c .Error (_bda ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _daga <=0{return nil ,_c .Error (_bda ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _daga ==1{_aeec ,_bcfb :=_fada (nil ,_acfa );if _bcfb !=nil {return nil ,_c .Wrap (_bcfb ,_bda ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _aeec ,nil ;};_dgeb ,_ddcc :=_bbf (_acfa ,_daga ,_daga );if _ddcc !=nil {return nil ,_c .Wrap (_ddcc ,_bda ,"");};return _dgeb ,nil ;};func (_cagg *Bitmap )inverseData (){if _cgca :=_cagg .RasterOperation (0,0,_cagg .Width ,_cagg .Height ,PixNotDst ,nil ,0,0);_cgca !=nil {_fge .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cgca );};if _cagg .Color ==Chocolate {_cagg .Color =Vanilla ;}else {_cagg .Color =Chocolate ;};};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gbcdd bool ,_bgda error ){const _ffgf ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_edff ,_gegbe :=p1 .Width ,p1 .Height ;_adbf ,_fddcc :=p3 .Width ,p3 .Height ;if _ff .Abs (_edff -_adbf )> maxDiffW {return false ,nil ;};if _ff .Abs (_gegbe -_fddcc )> maxDiffH {return false ,nil ;};_gcd :=int (float32 (area1 )*(1.0-rank )+0.5);_adbb :=int (float32 (area3 )*(1.0-rank )+0.5);var _cafb ,_bgba int ;if delX >=0{_cafb =int (delX +0.5);}else {_cafb =int (delX -0.5);};if delY >=0{_bgba =int (delY +0.5);}else {_bgba =int (delY -0.5);};_eead :=p1 .CreateTemplate ();if _bgda =_eead .RasterOperation (0,0,_edff ,_gegbe ,PixSrc ,p1 ,0,0);_bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bgda =_eead .RasterOperation (_cafb ,_bgba ,_edff ,_gegbe ,PixNotSrcAndDst ,p4 ,0,0);_bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"\u0074 \u0026\u0020\u0021\u0070\u0034");};_gbcdd ,_bgda =_eead .ThresholdPixelSum (_gcd ,tab8 );if _bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gbcdd {return false ,nil ;};if _bgda =_eead .RasterOperation (_cafb ,_bgba ,_adbf ,_fddcc ,PixSrc ,p3 ,0,0);_bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bgda =_eead .RasterOperation (0,0,_adbf ,_fddcc ,PixNotSrcAndDst ,p2 ,0,0);_bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"\u0074 \u0026\u0020\u0021\u0070\u0032");};_gbcdd ,_bgda =_eead .ThresholdPixelSum (_adbb ,tab8 );if _bgda !=nil {return false ,_c .Wrap (_bgda ,_ffgf ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gbcdd ,nil ;};type BoundaryCondition int ;func (_dcbc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ffb *Boxes ,_cee error ){const _bcgf ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";if _dcbc ==nil {return nil ,_c .Error (_bcgf ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_dcbc )==0{return _dcbc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_bcgf ,"\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 ,_c .Errorf (_bcgf ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );};_bgdc :=_dcbc .makeSizeIndicator (width ,height ,tp ,relation );_edfb ,_cee :=_dcbc .selectWithIndicator (_bgdc );if _cee !=nil {return nil ,_c .Wrap (_cee ,_bcgf ,"");};return _edfb ,nil ;};func _badc (_fcfg *Bitmap ,_bdeee *_ff .Stack ,_dfdd ,_daae ,_ebbb int )(_ccfc *_dd .Rectangle ,_cdgd error ){const _abdc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fcfg ==nil {return nil ,_c .Error (_abdc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bdeee ==nil {return nil ,_c .Error (_abdc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _ebbb {case 4:if _ccfc ,_cdgd =_fcae (_fcfg ,_bdeee ,_dfdd ,_daae );_cdgd !=nil {return nil ,_c .Wrap (_cdgd ,_abdc ,"");};return _ccfc ,nil ;case 8:if _ccfc ,_cdgd =_accbb (_fcfg ,_bdeee ,_dfdd ,_daae );_cdgd !=nil {return nil ,_c .Wrap (_cdgd ,_abdc ,"");};return _ccfc ,nil ;default:return nil ,_c .Errorf (_abdc ,"\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",_ebbb );};};var (_bcbg *Bitmap ;_dggg *Bitmap ;);func _accbb (_fede *Bitmap ,_daagb *_ff .Stack ,_acbe ,_fecd int )(_cdec *_dd .Rectangle ,_ceed error ){const _ccbac ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fede ==nil {return nil ,_c .Error (_ccbac ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _daagb ==nil {return nil ,_c .Error (_ccbac ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_aeee ,_gfcce :=_fede .Width ,_fede .Height ;_ccfce :=_aeee -1;_fbabb :=_gfcce -1;if _acbe < 0||_acbe > _ccfce ||_fecd < 0||_fecd > _fbabb ||!_fede .GetPixel (_acbe ,_fecd ){return nil ,nil ;};_egab :=_dd .Rect (100000,100000,0,0);if _ceed =_aacf (_daagb ,_acbe ,_acbe ,_fecd ,1,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ceed =_aacf (_daagb ,_acbe ,_acbe ,_fecd +1,-1,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_egab .Min .X ,_egab .Max .X =_acbe ,_acbe ;_egab .Min .Y ,_egab .Max .Y =_fecd ,_fecd ;var (_dage *fillSegment ;_acbfa int ;);for _daagb .Len ()> 0{if _dage ,_ceed =_gcfga (_daagb );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"");};_fecd =_dage ._bggb ;for _acbe =_dage ._acda -1;_acbe >=0&&_fede .GetPixel (_acbe ,_fecd );_acbe --{if _ceed =_fede .SetPixel (_acbe ,_fecd ,0);_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _acbe >=_dage ._acda -1{for {for _acbe ++;_acbe <=_dage ._egaba +1&&_acbe <=_ccfce &&!_fede .GetPixel (_acbe ,_fecd );_acbe ++{};_acbfa =_acbe ;if !(_acbe <=_dage ._egaba +1&&_acbe <=_ccfce ){break ;};for ;_acbe <=_ccfce &&_fede .GetPixel (_acbe ,_fecd );_acbe ++{if _ceed =_fede .SetPixel (_acbe ,_fecd ,0);_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ceed =_aacf (_daagb ,_acbfa ,_acbe -1,_dage ._bggb ,_dage ._dafe ,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _acbe > _dage ._egaba {if _ceed =_aacf (_daagb ,_dage ._egaba +1,_acbe -1,_dage ._bggb ,-_dage ._dafe ,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};};continue ;};_acbfa =_acbe +1;if _acbfa < _dage ._acda {if _ceed =_aacf (_daagb ,_acbfa ,_dage ._acda -1,_dage ._bggb ,-_dage ._dafe ,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_acbe =_dage ._acda ;for {for ;_acbe <=_ccfce &&_fede .GetPixel (_acbe ,_fecd );_acbe ++{if _ceed =_fede .SetPixel (_acbe ,_fecd ,0);_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ceed =_aacf (_daagb ,_acbfa ,_acbe -1,_dage ._bggb ,_dage ._dafe ,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _acbe > _dage ._egaba {if _ceed =_aacf (_daagb ,_dage ._egaba +1,_acbe -1,_dage ._bggb ,-_dage ._dafe ,_fbabb ,&_egab );_ceed !=nil {return nil ,_c .Wrap (_ceed ,_ccbac ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _acbe ++;_acbe <=_dage ._egaba +1&&_acbe <=_ccfce &&!_fede .GetPixel (_acbe ,_fecd );_acbe ++{};_acbfa =_acbe ;if !(_acbe <=_dage ._egaba +1&&_acbe <=_ccfce ){break ;};};};_egab .Max .X ++;_egab .Max .Y ++;return &_egab ,nil ;};func (_ggcg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bedd ="\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 >=_ggcg .IntSlice .Size (){return 0,_c .Errorf (_bedd ,"\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 (_ggcg .XAtIndex (i )),nil ;};func _fad (_deg ,_dbbd *Bitmap ,_gec int ,_dfb []byte ,_edd int )(_aed error ){const _gbga ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";var (_eaca ,_ged ,_bd ,_efa ,_efc ,_agb ,_agfb ,_ebdf int ;_bee ,_gebd uint32 ;_fce ,_bdc byte ;_gggf uint16 ;);_cgc :=make ([]byte ,4);_fcc :=make ([]byte ,4);for _bd =0;_bd < _deg .Height -1;_bd ,_efa =_bd +2,_efa +1{_eaca =_bd *_deg .RowStride ;_ged =_efa *_dbbd .RowStride ;for _efc ,_agb =0,0;_efc < _edd ;_efc ,_agb =_efc +4,_agb +1{for _agfb =0;_agfb < 4;_agfb ++{_ebdf =_eaca +_efc +_agfb ;if _ebdf <=len (_deg .Data )-1&&_ebdf < _eaca +_deg .RowStride {_cgc [_agfb ]=_deg .Data [_ebdf ];}else {_cgc [_agfb ]=0x00;};_ebdf =_eaca +_deg .RowStride +_efc +_agfb ;if _ebdf <=len (_deg .Data )-1&&_ebdf < _eaca +(2*_deg .RowStride ){_fcc [_agfb ]=_deg .Data [_ebdf ];}else {_fcc [_agfb ]=0x00;};};_bee =_dc .BigEndian .Uint32 (_cgc );_gebd =_dc .BigEndian .Uint32 (_fcc );_gebd &=_bee ;_gebd &=_gebd <<1;_gebd &=0xaaaaaaaa;_bee =_gebd |(_gebd <<7);_fce =byte (_bee >>24);_bdc =byte ((_bee >>8)&0xff);_ebdf =_ged +_agb ;if _ebdf +1==len (_dbbd .Data )-1||_ebdf +1>=_ged +_dbbd .RowStride {_dbbd .Data [_ebdf ]=_dfb [_fce ];if _aed =_dbbd .SetByte (_ebdf ,_dfb [_fce ]);_aed !=nil {return _c .Wrapf (_aed ,_gbga ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ebdf );};}else {_gggf =(uint16 (_dfb [_fce ])<<8)|uint16 (_dfb [_bdc ]);if _aed =_dbbd .setTwoBytes (_ebdf ,_gggf );_aed !=nil {return _c .Wrapf (_aed ,_gbga ,"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",_ebdf );};_agb ++;};};};return nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _cfaff ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_edfe ,_cge :=p1 .Width ,p1 .Height ;_dfad ,_dfba :=p3 .Width ,p3 .Height ;if _ff .Abs (_edfe -_dfad )> maxDiffW {return false ,nil ;};if _ff .Abs (_cge -_dfba )> maxDiffH {return false ,nil ;};_bgcef :=int (delX +_ff .Sign (delX )*0.5);_eefa :=int (delY +_ff .Sign (delY )*0.5);var _cfdg error ;_gfbe :=p1 .CreateTemplate ();if _cfdg =_gfbe .RasterOperation (0,0,_edfe ,_cge ,PixSrc ,p1 ,0,0);_cfdg !=nil {return false ,_c .Wrap (_cfdg ,_cfaff ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cfdg =_gfbe .RasterOperation (_bgcef ,_eefa ,_edfe ,_cge ,PixNotSrcAndDst ,p4 ,0,0);_cfdg !=nil {return false ,_c .Wrap (_cfdg ,_cfaff ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _gfbe .Zero (){return false ,nil ;};if _cfdg =_gfbe .RasterOperation (_bgcef ,_eefa ,_dfad ,_dfba ,PixSrc ,p3 ,0,0);_cfdg !=nil {return false ,_c .Wrap (_cfdg ,_cfaff ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cfdg =_gfbe .RasterOperation (0,0,_dfad ,_dfba ,PixNotSrcAndDst ,p2 ,0,0);_cfdg !=nil {return false ,_c .Wrap (_cfdg ,_cfaff ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _gfbe .Zero (),nil ;};func (_bbc *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_gede bool ,_cbc error ){const _cgf ="\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 =_bgag ();};_aafa :=_bbc .Width >>3;_fcg :=_bbc .Width &7;_gbeg :=byte (0xff<<uint (8-_fcg ));var (_fgeb ,_fgdc ,_eabc ,_fca int ;_bcffe byte ;);for _fgeb =0;_fgeb < _bbc .Height ;_fgeb ++{_eabc =_bbc .RowStride *_fgeb ;for _fgdc =0;_fgdc < _aafa ;_fgdc ++{_bcffe ,_cbc =_bbc .GetByte (_eabc +_fgdc );if _cbc !=nil {return false ,_c .Wrap (_cbc ,_cgf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_fca +=tab8 [_bcffe ];};if _fcg !=0{_bcffe ,_cbc =_bbc .GetByte (_eabc +_fgdc );if _cbc !=nil {return false ,_c .Wrap (_cbc ,_cgf ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_bcffe &=_gbeg ;_fca +=tab8 [_bcffe ];};if _fca > thresh {return true ,nil ;};};return _gede ,nil ;};func (_afgb *Bitmaps )String ()string {_dcfc :=_fg .Builder {};for _ ,_efdf :=range _afgb .Values {_dcfc .WriteString (_efdf .String ());_dcfc .WriteRune ('\n');};return _dcfc .String ();};func (_bafge *byWidth )Less (i ,j int )bool {return _bafge .Values [i ].Width < _bafge .Values [j ].Width };func (_bebf *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _befc ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _bebf ==nil {return nil ,_c .Error (_befc ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_c .Error (_befc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_ggcf :=len (_bebf .Values );_ebcb :=&Bitmaps {Values :make ([]*Bitmap ,_ggcf ),Boxes :make ([]*_dd .Rectangle ,_ggcf )};var (_baee ,_fccdc *Bitmap ;_edge *_dd .Rectangle ;_gdbf error ;);for _ggacb :=0;_ggacb < _ggcf ;_ggacb ++{if _baee ,_gdbf =_bebf .GetBitmap (_ggacb );_gdbf !=nil {return nil ,_c .Wrap (_gdbf ,_befc ,"");};if _edge ,_gdbf =_bebf .GetBox (_ggacb );_gdbf !=nil {return nil ,_c .Wrap (_gdbf ,_befc ,"");};if _fccdc ,_gdbf =s .clipRectangle (_edge ,nil );_gdbf !=nil {return nil ,_c .Wrap (_gdbf ,_befc ,"");};if _fccdc ,_gdbf =_fccdc .And (_baee );_gdbf !=nil {return nil ,_c .Wrap (_gdbf ,_befc ,"");};_ebcb .Values [_ggacb ]=_fccdc ;_ebcb .Boxes [_ggacb ]=_edge ;};return _ebcb ,nil ;};func (_dace *byWidth )Len ()int {return len (_dace .Values )};func (_debc *Points )AddPoint (x ,y float32 ){*_debc =append (*_debc ,Point {x ,y })};func _fada (_ebaa ,_caddd *Bitmap )(*Bitmap ,error ){if _caddd ==nil {return nil ,_c .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 _caddd ==_ebaa {return _ebaa ,nil ;};if _ebaa ==nil {_ebaa =_caddd .createTemplate ();copy (_ebaa .Data ,_caddd .Data );return _ebaa ,nil ;};_dfff :=_ebaa .resizeImageData (_caddd );if _dfff !=nil {return nil ,_c .Wrap (_dfff ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");};_ebaa .Text =_caddd .Text ;copy (_ebaa .Data ,_caddd .Data );return _ebaa ,nil ;};func (_ccgc *Bitmap )setEightPartlyBytes (_dec ,_dbf int ,_gbdg uint64 )(_fec error ){var (_fgda byte ;_egca int ;);const _cdab ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _bbef :=1;_bbef <=_dbf ;_bbef ++{_egca =64-_bbef *8;_fgda =byte (_gbdg >>uint (_egca )&0xff);_fge .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",_fgda ,_dec ,_dec +_bbef -1,_dbf ,_egca );if _fec =_ccgc .SetByte (_dec +_bbef -1,_fgda );_fec !=nil {return _c .Wrap (_fec ,_cdab ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_aebg :=_ccgc .RowStride *8-_ccgc .Width ;if _aebg ==0{return nil ;};_egca -=8;_fgda =byte (_gbdg >>uint (_egca )&0xff)<<uint (_aebg );if _fec =_ccgc .SetByte (_dec +_dbf ,_fgda );_fec !=nil {return _c .Wrap (_fec ,_cdab ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func _ebb ()(_fff [256]uint32 ){for _bcg :=0;_bcg < 256;_bcg ++{if _bcg &0x01!=0{_fff [_bcg ]|=0xf;};if _bcg &0x02!=0{_fff [_bcg ]|=0xf0;};if _bcg &0x04!=0{_fff [_bcg ]|=0xf00;};if _bcg &0x08!=0{_fff [_bcg ]|=0xf000;};if _bcg &0x10!=0{_fff [_bcg ]|=0xf0000;};if _bcg &0x20!=0{_fff [_bcg ]|=0xf00000;};if _bcg &0x40!=0{_fff [_bcg ]|=0xf000000;};if _bcg &0x80!=0{_fff [_bcg ]|=0xf0000000;};};return _fff ;};func (_caae *Bitmap )connComponentsBitmapsBB (_ceaa *Bitmaps ,_gabge int )(_cfd *Boxes ,_fddf error ){const _fbcce ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _gabge !=4&&_gabge !=8{return nil ,_c .Error (_fbcce ,"\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 _ceaa ==nil {return nil ,_c .Error (_fbcce ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_ceaa .Values )> 0{return nil ,_c .Error (_fbcce ,"\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 _caae .Zero (){return &Boxes {},nil ;};var (_bcfc ,_cege ,_cacf ,_decb *Bitmap ;);_caae .setPadBits (0);if _bcfc ,_fddf =_fada (nil ,_caae );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062\u006d\u0031");};if _cege ,_fddf =_fada (nil ,_caae );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062\u006d\u0032");};_deea :=&_ff .Stack {};_deea .Aux =&_ff .Stack {};_cfd =&Boxes {};var (_ddc ,_cfab int ;_dfag _dd .Point ;_faad bool ;_gegb *_dd .Rectangle ;);for {if _dfag ,_faad ,_fddf =_bcfc .nextOnPixel (_ddc ,_cfab );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"");};if !_faad {break ;};if _gegb ,_fddf =_badc (_bcfc ,_deea ,_dfag .X ,_dfag .Y ,_gabge );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"");};if _fddf =_cfd .Add (_gegb );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"");};if _cacf ,_fddf =_bcfc .clipRectangle (_gegb ,nil );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062\u006d\u0033");};if _decb ,_fddf =_cege .clipRectangle (_gegb ,nil );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062\u006d\u0034");};if _ ,_fddf =_dce (_cacf ,_cacf ,_decb );_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _fddf =_cege .RasterOperation (_gegb .Min .X ,_gegb .Min .Y ,_gegb .Dx (),_gegb .Dy (),PixSrcXorDst ,_cacf ,0,0);_fddf !=nil {return nil ,_c .Wrap (_fddf ,_fbcce ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_ceaa .AddBitmap (_cacf );_ddc =_dfag .X ;_cfab =_dfag .Y ;};_ceaa .Boxes =*_cfd ;return _cfd ,nil ;};func (_fcef *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _fcef .Copy (),nil ;};_agfc ,_bdb :=_fcef .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _bdb !=nil {return nil ,_c .Wrap (_bdb ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _agfc ,nil ;};func (_bfef *Bitmap )countPixels ()int {var (_eged int ;_afcb uint8 ;_gdca byte ;_aaa int ;);_acga :=_bfef .RowStride ;_gdb :=uint (_bfef .Width &0x07);if _gdb !=0{_afcb =uint8 ((0xff<<(8-_gdb ))&0xff);_acga --;};for _eegd :=0;_eegd < _bfef .Height ;_eegd ++{for _aaa =0;_aaa < _acga ;_aaa ++{_gdca =_bfef .Data [_eegd *_bfef .RowStride +_aaa ];_eged +=int (_fdee [_gdca ]);};if _gdb !=0{_eged +=int (_fdee [_bfef .Data [_eegd *_bfef .RowStride +_aaa ]&_afcb ]);};};return _eged ;};func _acc (_gebge ,_dced *Bitmap ,_ddbd ,_babd int )(*Bitmap ,error ){const _fcbg ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _dced ==nil {return nil ,_c .Error (_fcbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ddbd < 1||_babd < 1{return nil ,_c .Error (_fcbg ,"\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 _ddbd ==1&&_babd ==1{_gccd ,_ccba :=_fada (_gebge ,_dced );if _ccba !=nil {return nil ,_c .Wrap (_ccba ,_fcbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _gccd ,nil ;};if _ddbd ==1||_babd ==1{_egcf :=SelCreateBrick (_babd ,_ddbd ,_babd /2,_ddbd /2,SelHit );_cbdf ,_ggdd :=_bagff (_gebge ,_dced ,_egcf );if _ggdd !=nil {return nil ,_c .Wrap (_ggdd ,_fcbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _cbdf ,nil ;};_faf :=SelCreateBrick (1,_ddbd ,0,_ddbd /2,SelHit );_eegdg :=SelCreateBrick (_babd ,1,_babd /2,0,SelHit );_cfeb ,_deae :=_bagff (nil ,_dced ,_faf );if _deae !=nil {return nil ,_c .Wrap (_deae ,_fcbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_gebge ,_deae =_bagff (_gebge ,_cfeb ,_eegdg );if _deae !=nil {return nil ,_c .Wrap (_deae ,_fcbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gebge ,nil ;};func _gceb (_ddag ,_dcg ,_dfgd *Bitmap )(*Bitmap ,error ){const _edc ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _dcg ==nil {return nil ,_c .Error (_edc ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfgd ==nil {return nil ,_c .Error (_edc ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _cbgf error ;switch {case _ddag ==_dcg :if _cbgf =_ddag .RasterOperation (0,0,_dcg .Width ,_dcg .Height ,PixNotSrcAndDst ,_dfgd ,0,0);_cbgf !=nil {return nil ,_c .Wrap (_cbgf ,_edc ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _ddag ==_dfgd :if _cbgf =_ddag .RasterOperation (0,0,_dcg .Width ,_dcg .Height ,PixNotSrcAndDst ,_dcg ,0,0);_cbgf !=nil {return nil ,_c .Wrap (_cbgf ,_edc ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_ddag ,_cbgf =_fada (_ddag ,_dcg );if _cbgf !=nil {return nil ,_c .Wrap (_cbgf ,_edc ,"");};if _cbgf =_ddag .RasterOperation (0,0,_dcg .Width ,_dcg .Height ,PixNotSrcAndDst ,_dfgd ,0,0);_cbgf !=nil {return nil ,_c .Wrap (_cbgf ,_edc ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _ddag ,nil ;};func _be ()(_gaaf [256]uint16 ){for _ebc :=0;_ebc < 256;_ebc ++{if _ebc &0x01!=0{_gaaf [_ebc ]|=0x3;};if _ebc &0x02!=0{_gaaf [_ebc ]|=0xc;};if _ebc &0x04!=0{_gaaf [_ebc ]|=0x30;};if _ebc &0x08!=0{_gaaf [_ebc ]|=0xc0;};if _ebc &0x10!=0{_gaaf [_ebc ]|=0x300;};if _ebc &0x20!=0{_gaaf [_ebc ]|=0xc00;};if _ebc &0x40!=0{_gaaf [_ebc ]|=0x3000;};if _ebc &0x80!=0{_gaaf [_ebc ]|=0xc000;};};return _gaaf ;};func _aaca (_ebadg ,_deac *Bitmap ,_daf ,_ffcfg int )(*Bitmap ,error ){const _cead ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _deac ==nil {return nil ,_c .Error (_cead ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _daf < 1||_ffcfg < 1{return nil ,_c .Error (_cead ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _daf ==1&&_ffcfg ==1{return _deac .Copy (),nil ;};if _daf ==1||_ffcfg ==1{_fdaf :=SelCreateBrick (_ffcfg ,_daf ,_ffcfg /2,_daf /2,SelHit );var _fecgb error ;_ebadg ,_fecgb =_eadb (_ebadg ,_deac ,_fdaf );if _fecgb !=nil {return nil ,_c .Wrap (_fecgb ,_cead ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _ebadg ,nil ;};_adgc :=SelCreateBrick (1,_daf ,0,_daf /2,SelHit );_ddeg :=SelCreateBrick (_ffcfg ,1,_ffcfg /2,0,SelHit );_gdgfd ,_dfbf :=_fadg (nil ,_deac ,_adgc );if _dfbf !=nil {return nil ,_c .Wrap (_dfbf ,_cead ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ebadg ,_dfbf =_fadg (_ebadg ,_gdgfd ,_ddeg );_dfbf !=nil {return nil ,_c .Wrap (_dfbf ,_cead ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_dfbf =_bagff (_gdgfd ,_ebadg ,_adgc );_dfbf !=nil {return nil ,_c .Wrap (_dfbf ,_cead ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};if _ ,_dfbf =_bagff (_ebadg ,_gdgfd ,_ddeg );_dfbf !=nil {return nil ,_c .Wrap (_dfbf ,_cead ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ebadg ,nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_gdg *Bitmap )GetChocolateData ()[]byte {if _gdg .Color ==Vanilla {_gdg .inverseData ();};return _gdg .Data ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_bdfe :=_dgef (h ,w ,"");_bdfe .setOrigin (cy ,cx );var _bgggg ,_gefd int ;for _bgggg =0;_bgggg < h ;_bgggg ++{for _gefd =0;_gefd < w ;_gefd ++{_bdfe .Data [_bgggg ][_gefd ]=tp ;};};return _bdfe ;};func (_bfbg *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_fcda *Boxes ,_ffee error ){const _cab ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _bfbg ==nil {return nil ,_c .Error (_cab ,"\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 ,_c .Error (_cab ,"\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 _fcda ,_ffee =_bfbg .connComponentsBB (connectivity );_ffee !=nil {return nil ,_c .Wrap (_ffee ,_cab ,"");};}else {if _fcda ,_ffee =_bfbg .connComponentsBitmapsBB (bms ,connectivity );_ffee !=nil {return nil ,_c .Wrap (_ffee ,_cab ,"");};};return _fcda ,nil ;};func _fa (_aa ,_dcb *Bitmap )(_ab error ){const _ebf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_cdd :=_dcb .RowStride ;_da :=_aa .RowStride ;_fd :=_dcb .RowStride *4-_aa .RowStride ;var (_eeb ,_ga byte ;_aef uint32 ;_gf ,_aaf ,_aae ,_ece ,_ea ,_bac ,_de int ;);for _aae =0;_aae < _dcb .Height ;_aae ++{_gf =_aae *_cdd ;_aaf =4*_aae *_da ;for _ece =0;_ece < _cdd ;_ece ++{_eeb =_dcb .Data [_gf +_ece ];_aef =_ebde [_eeb ];_bac =_aaf +_ece *4;if _fd !=0&&(_ece +1)*4> _aa .RowStride {for _ea =_fd ;_ea > 0;_ea --{_ga =byte ((_aef >>uint (_ea *8))&0xff);_de =_bac +(_fd -_ea );if _ab =_aa .SetByte (_de ,_ga );_ab !=nil {return _c .Wrapf (_ab ,_ebf ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ea );};};}else if _ab =_aa .setFourBytes (_bac ,_aef );_ab !=nil {return _c .Wrap (_ab ,_ebf ,"");};if _ab =_aa .setFourBytes (_aaf +_ece *4,_ebde [_dcb .Data [_gf +_ece ]]);_ab !=nil {return _c .Wrap (_ab ,_ebf ,"");};};for _ea =1;_ea < 4;_ea ++{for _ece =0;_ece < _da ;_ece ++{if _ab =_aa .SetByte (_aaf +_ea *_da +_ece ,_aa .Data [_aaf +_ece ]);_ab !=nil {return _c .Wrapf (_ab ,_ebf ,"\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",_ea ,_ece );};};};};return nil ;};func (_aafb *byHeight )Less (i ,j int )bool {return _aafb .Values [i ].Height < _aafb .Values [j ].Height };func _ca (_fgc *Bitmap ,_cfa ...int )(_eda *Bitmap ,_cad error ){const _gcc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _fgc ==nil {return nil ,_c .Error (_gcc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_cfa )==0||len (_cfa )> 4{return nil ,_c .Error (_gcc ,"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 _cfa [0]<=0{_fge .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");_eda ,_cad =_fada (nil ,_fgc );if _cad !=nil {return nil ,_c .Wrap (_cad ,_gcc ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");};return _eda ,nil ;};_beb :=_gab ();_eda =_fgc ;for _dde ,_bagd :=range _cfa {if _bagd <=0{break ;};_eda ,_cad =_ag (_eda ,_bagd ,_beb );if _cad !=nil {return nil ,_c .Wrapf (_cad ,_gcc ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_dde );};};return _eda ,nil ;};func _fcae (_fefa *Bitmap ,_cedd *_ff .Stack ,_gbgef ,_dddae int )(_edea *_dd .Rectangle ,_gaad error ){const _egda ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fefa ==nil {return nil ,_c .Error (_egda ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cedd ==nil {return nil ,_c .Error (_egda ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_fcag ,_bfee :=_fefa .Width ,_fefa .Height ;_gabb :=_fcag -1;_ebdfd :=_bfee -1;if _gbgef < 0||_gbgef > _gabb ||_dddae < 0||_dddae > _ebdfd ||!_fefa .GetPixel (_gbgef ,_dddae ){return nil ,nil ;};var _bggf *_dd .Rectangle ;_bggf ,_gaad =Rect (100000,100000,0,0);if _gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"");};if _gaad =_aacf (_cedd ,_gbgef ,_gbgef ,_dddae ,1,_ebdfd ,_bggf );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gaad =_aacf (_cedd ,_gbgef ,_gbgef ,_dddae +1,-1,_ebdfd ,_bggf );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bggf .Min .X ,_bggf .Max .X =_gbgef ,_gbgef ;_bggf .Min .Y ,_bggf .Max .Y =_dddae ,_dddae ;var (_deed *fillSegment ;_ddefe int ;);for _cedd .Len ()> 0{if _deed ,_gaad =_gcfga (_cedd );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"");};_dddae =_deed ._bggb ;for _gbgef =_deed ._acda ;_gbgef >=0&&_fefa .GetPixel (_gbgef ,_dddae );_gbgef --{if _gaad =_fefa .SetPixel (_gbgef ,_dddae ,0);_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"");};};if _gbgef >=_deed ._acda {for _gbgef ++;_gbgef <=_deed ._egaba &&_gbgef <=_gabb &&!_fefa .GetPixel (_gbgef ,_dddae );_gbgef ++{};_ddefe =_gbgef ;if !(_gbgef <=_deed ._egaba &&_gbgef <=_gabb ){continue ;};}else {_ddefe =_gbgef +1;if _ddefe < _deed ._acda -1{if _gaad =_aacf (_cedd ,_ddefe ,_deed ._acda -1,_deed ._bggb ,-_deed ._dafe ,_ebdfd ,_bggf );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");};};_gbgef =_deed ._acda +1;};for {for ;_gbgef <=_gabb &&_fefa .GetPixel (_gbgef ,_dddae );_gbgef ++{if _gaad =_fefa .SetPixel (_gbgef ,_dddae ,0);_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gaad =_aacf (_cedd ,_ddefe ,_gbgef -1,_deed ._bggb ,_deed ._dafe ,_ebdfd ,_bggf );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gbgef > _deed ._egaba +1{if _gaad =_aacf (_cedd ,_deed ._egaba +1,_gbgef -1,_deed ._bggb ,-_deed ._dafe ,_ebdfd ,_bggf );_gaad !=nil {return nil ,_c .Wrap (_gaad ,_egda ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");};};for _gbgef ++;_gbgef <=_deed ._egaba &&_gbgef <=_gabb &&!_fefa .GetPixel (_gbgef ,_dddae );_gbgef ++{};_ddefe =_gbgef ;if !(_gbgef <=_deed ._egaba &&_gbgef <=_gabb ){break ;};};};_bggf .Max .X ++;_bggf .Max .Y ++;return _bggf ,nil ;};func (_acff *Bitmaps )selectByIndicator (_gcae *_ff .NumSlice )(_face *Bitmaps ,_efdb error ){const _fbfd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _acff ==nil {return nil ,_c .Error (_fbfd ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _gcae ==nil {return nil ,_c .Error (_fbfd ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};if len (_acff .Values )==0{return _acff ,nil ;};if len (*_gcae )!=len (_acff .Values ){return nil ,_c .Errorf (_fbfd ,"\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 (*_gcae ),len (_acff .Values ));};var _bddc ,_efdafc ,_gdgd int ;for _efdafc =0;_efdafc < len (*_gcae );_efdafc ++{if _bddc ,_efdb =_gcae .GetInt (_efdafc );_efdb !=nil {return nil ,_c .Wrap (_efdb ,_fbfd ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _bddc ==1{_gdgd ++;};};if _gdgd ==len (_acff .Values ){return _acff ,nil ;};_face =&Bitmaps {};_eaae :=len (_acff .Values )==len (_acff .Boxes );for _efdafc =0;_efdafc < len (*_gcae );_efdafc ++{if _bddc =int ((*_gcae )[_efdafc ]);_bddc ==0{continue ;};_face .Values =append (_face .Values ,_acff .Values [_efdafc ]);if _eaae {_face .Boxes =append (_face .Boxes ,_acff .Boxes [_efdafc ]);};};return _face ,nil ;};func ClipBoxToRectangle (box *_dd .Rectangle ,wi ,hi int )(_fbcb *_dd .Rectangle ,_fcf error ){const _ebfdg ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_c .Error (_ebfdg ,"\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 ,_c .Error (_ebfdg ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_gccb :=*box ;_fbcb =&_gccb ;if _fbcb .Min .X < 0{_fbcb .Max .X +=_fbcb .Min .X ;_fbcb .Min .X =0;};if _fbcb .Min .Y < 0{_fbcb .Max .Y +=_fbcb .Min .Y ;_fbcb .Min .Y =0;};if _fbcb .Max .X > wi {_fbcb .Max .X =wi ;};if _fbcb .Max .Y > hi {_fbcb .Max .Y =hi ;};return _fbcb ,nil ;};func _baedg (_fgcff ...MorphProcess )(_acag error ){const _gege ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _addbb ,_cbbb int ;for _eace ,_ccag :=range _fgcff {if _acag =_ccag .verify (_eace ,&_addbb ,&_cbbb );_acag !=nil {return _c .Wrap (_acag ,_gege ,"");};};if _cbbb !=0&&_addbb !=0{return _c .Error (_gege ,"\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 (_gda *Bitmap )GetUnpaddedData ()([]byte ,error ){_afbe :=uint (_gda .Width &0x07);if _afbe ==0{return _gda .Data ,nil ;};_dgae :=_gda .Width *_gda .Height ;if _dgae %8!=0{_dgae >>=3;_dgae ++;}else {_dgae >>=3;};_cbeg :=make ([]byte ,_dgae );_defg :=_b .NewWriterMSB (_cbeg );const _gde ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _ebab :=0;_ebab < _gda .Height ;_ebab ++{for _fee :=0;_fee < _gda .RowStride ;_fee ++{_gbcd :=_gda .Data [_ebab *_gda .RowStride +_fee ];if _fee !=_gda .RowStride -1{_cag :=_defg .WriteByte (_gbcd );if _cag !=nil {return nil ,_c .Wrap (_cag ,_gde ,"");};continue ;};for _acb :=uint (0);_acb < _afbe ;_acb ++{_fac :=_defg .WriteBit (int (_gbcd >>(7-_acb )&0x01));if _fac !=nil {return nil ,_c .Wrap (_fac ,_gde ,"");};};};};return _cbeg ,nil ;};func (_gfee *ClassedPoints )ySortFunction ()func (_dcdc int ,_ccade int )bool {return func (_ebcc ,_baab int )bool {return _gfee .YAtIndex (_ebcc )< _gfee .YAtIndex (_baab )};};func (_dffce *byWidth )Swap (i ,j int ){_dffce .Values [i ],_dffce .Values [j ]=_dffce .Values [j ],_dffce .Values [i ];if _dffce .Boxes !=nil {_dffce .Boxes [i ],_dffce .Boxes [j ]=_dffce .Boxes [j ],_dffce .Boxes [i ];};};func TstFrameBitmapData ()[]byte {return _bcbg .Data };func TstFrameBitmap ()*Bitmap {return _bcbg .Copy ()};func (_ced *Bitmap )nextOnPixelLow (_fbfb ,_cec ,_ebbe ,_baga ,_cede int )(_dbcc _dd .Point ,_ccb bool ,_abf error ){const _agbg ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_gbege int ;_gbdc byte ;);_gee :=_cede *_ebbe ;_fgeba :=_gee +(_baga /8);if _gbdc ,_abf =_ced .GetByte (_fgeba );_abf !=nil {return _dbcc ,false ,_c .Wrap (_abf ,_agbg ,"\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 _gbdc !=0{_eegb :=_baga -(_baga %8)+7;for _gbege =_baga ;_gbege <=_eegb &&_gbege < _fbfb ;_gbege ++{if _ced .GetPixel (_gbege ,_cede ){_dbcc .X =_gbege ;_dbcc .Y =_cede ;return _dbcc ,true ,nil ;};};};_deff :=(_baga /8)+1;_gbege =8*_deff ;var _dgbg int ;for _fgeba =_gee +_deff ;_gbege < _fbfb ;_fgeba ,_gbege =_fgeba +1,_gbege +8{if _gbdc ,_abf =_ced .GetByte (_fgeba );_abf !=nil {return _dbcc ,false ,_c .Wrap (_abf ,_agbg ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _gbdc ==0{continue ;};for _dgbg =0;_dgbg < 8&&_gbege < _fbfb ;_dgbg ,_gbege =_dgbg +1,_gbege +1{if _ced .GetPixel (_gbege ,_cede ){_dbcc .X =_gbege ;_dbcc .Y =_cede ;return _dbcc ,true ,nil ;};};};for _aafc :=_cede +1;_aafc < _cec ;_aafc ++{_gee =_aafc *_ebbe ;for _fgeba ,_gbege =_gee ,0;_gbege < _fbfb ;_fgeba ,_gbege =_fgeba +1,_gbege +8{if _gbdc ,_abf =_ced .GetByte (_fgeba );_abf !=nil {return _dbcc ,false ,_c .Wrap (_abf ,_agbg ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _gbdc ==0{continue ;};for _dgbg =0;_dgbg < 8&&_gbege < _fbfb ;_dgbg ,_gbege =_dgbg +1,_gbege +1{if _ced .GetPixel (_gbege ,_aafc ){_dbcc .X =_gbege ;_dbcc .Y =_aafc ;return _dbcc ,true ,nil ;};};};};return _dbcc ,false ,nil ;};func (_bbdggb *Bitmaps )CountPixels ()*_ff .NumSlice {_adgb :=&_ff .NumSlice {};for _ ,_agde :=range _bbdggb .Values {_adgb .AddInt (_agde .CountPixels ());};return _adgb ;};var _ _e .Interface =&ClassedPoints {};type byHeight Bitmaps ;type Getter interface{GetBitmap ()*Bitmap ;};func TstISymbol (t *_gg .T ,scale ...int )*Bitmap {_ccebe ,_eacg :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_g .NoError (t ,_eacg );return TstGetScaledSymbol (t ,_ccebe ,scale ...);};func _dfcc (_ecc *Bitmap ,_adea ,_bfgf int ,_cfaa ,_gff int ,_efcg RasterOperator ){var (_abea bool ;_debed bool ;_bgec int ;_cadfc int ;_bdgf int ;_dgafb int ;_ffge bool ;_aface byte ;);_adfe :=8-(_adea &7);_edbec :=_gfag [_adfe ];_cageb :=_ecc .RowStride *_bfgf +(_adea >>3);if _cfaa < _adfe {_abea =true ;_edbec &=_eccd [8-_adfe +_cfaa ];};if !_abea {_bgec =(_cfaa -_adfe )>>3;if _bgec !=0{_debed =true ;_cadfc =_cageb +1;};};_bdgf =(_adea +_cfaa )&7;if !(_abea ||_bdgf ==0){_ffge =true ;_aface =_eccd [_bdgf ];_dgafb =_cageb +1+_bgec ;};var _baaf ,_cddd int ;switch _efcg {case PixClr :for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_cageb ]=_ceac (_ecc .Data [_cageb ],0x0,_edbec );_cageb +=_ecc .RowStride ;};if _debed {for _baaf =0;_baaf < _gff ;_baaf ++{for _cddd =0;_cddd < _bgec ;_cddd ++{_ecc .Data [_cadfc +_cddd ]=0x0;};_cadfc +=_ecc .RowStride ;};};if _ffge {for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_dgafb ]=_ceac (_ecc .Data [_dgafb ],0x0,_aface );_dgafb +=_ecc .RowStride ;};};case PixSet :for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_cageb ]=_ceac (_ecc .Data [_cageb ],0xff,_edbec );_cageb +=_ecc .RowStride ;};if _debed {for _baaf =0;_baaf < _gff ;_baaf ++{for _cddd =0;_cddd < _bgec ;_cddd ++{_ecc .Data [_cadfc +_cddd ]=0xff;};_cadfc +=_ecc .RowStride ;};};if _ffge {for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_dgafb ]=_ceac (_ecc .Data [_dgafb ],0xff,_aface );_dgafb +=_ecc .RowStride ;};};case PixNotDst :for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_cageb ]=_ceac (_ecc .Data [_cageb ],^_ecc .Data [_cageb ],_edbec );_cageb +=_ecc .RowStride ;};if _debed {for _baaf =0;_baaf < _gff ;_baaf ++{for _cddd =0;_cddd < _bgec ;_cddd ++{_ecc .Data [_cadfc +_cddd ]=^(_ecc .Data [_cadfc +_cddd ]);};_cadfc +=_ecc .RowStride ;};};if _ffge {for _baaf =0;_baaf < _gff ;_baaf ++{_ecc .Data [_dgafb ]=_ceac (_ecc .Data [_dgafb ],^_ecc .Data [_dgafb ],_aface );_dgafb +=_ecc .RowStride ;};};};};var _abff =[5]int {1,2,3,0,4};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _dgef (_ebea ,_bcac int ,_ababd string )*Selection {_bcge :=&Selection {Height :_ebea ,Width :_bcac ,Name :_ababd };_bcge .Data =make ([][]SelectionValue ,_ebea );for _geeb :=0;_geeb < _ebea ;_geeb ++{_bcge .Data [_geeb ]=make ([]SelectionValue ,_bcac );};return _bcge ;};func (_egg *Bitmap )InverseData (){_egg .inverseData ()};func (_dcgc *Bitmaps )GetBox (i int )(*_dd .Rectangle ,error ){const _ddeef ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dcgc ==nil {return nil ,_c .Error (_ddeef ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");};if i > len (_dcgc .Boxes )-1{return nil ,_c .Errorf (_ddeef ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dcgc .Boxes [i ],nil ;};func (_bca *Boxes )Get (i int )(*_dd .Rectangle ,error ){const _ecda ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bca ==nil {return nil ,_c .Error (_ecda ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_bca )-1{return nil ,_c .Errorf (_ecda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bca )[i ],nil ;};func NewClassedPoints (points *Points ,classes _ff .IntSlice )(*ClassedPoints ,error ){const _gcfe ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_c .Error (_gcfe ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_c .Error (_gcfe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_gcgd :=&ClassedPoints {Points :points ,IntSlice :classes };if _fbabf :=_gcgd .validateIntSlice ();_fbabf !=nil {return nil ,_c .Wrap (_fbabf ,_gcfe ,"");};return _gcgd ,nil ;};func (_eadbf *ClassedPoints )SortByX (){_eadbf ._deaa =_eadbf .xSortFunction ();_e .Sort (_eadbf )};func (_ddfcc *Bitmaps )AddBox (box *_dd .Rectangle ){_ddfcc .Boxes =append (_ddfcc .Boxes ,box )};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dfbfg (d ,s ,hSize ,vSize )};func (_eedg Points )GetIntY (i int )(int ,error ){if i >=len (_eedg ){return 0,_c .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 (_eedg [i ].Y ),nil ;};func _gfd (_ggeg ,_fecg *Bitmap ,_dbde ,_fag ,_ebfb ,_cbef ,_ccad int ,_cebg CombinationOperator )error {var _fccd int ;_efda :=func (){_fccd ++;_ebfb +=_fecg .RowStride ;_cbef +=_ggeg .RowStride ;_ccad +=_ggeg .RowStride };for _fccd =_dbde ;_fccd < _fag ;_efda (){_gedef :=_ebfb ;for _dffb :=_cbef ;_dffb <=_ccad ;_dffb ++{_edga ,_eggf :=_fecg .GetByte (_gedef );if _eggf !=nil {return _eggf ;};_dggf ,_eggf :=_ggeg .GetByte (_dffb );if _eggf !=nil {return _eggf ;};if _eggf =_fecg .SetByte (_gedef ,_gfce (_edga ,_dggf ,_cebg ));_eggf !=nil {return _eggf ;};_gedef ++;};};return nil ;};func (_bfbd *ClassedPoints )Less (i ,j int )bool {return _bfbd ._deaa (i ,j )};func _fbcd (_daagc ,_bgdac *Bitmap ,_feee ,_gbb int )(_ebfcd error ){const _ecaa ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_eadg ,_fecb ,_ggad ,_cfafb int ;_baac ,_aead ,_gfcec ,_fdafc ,_ceea ,_ccbaa ,_abdec byte ;);for _eadg =0;_eadg < _feee ;_eadg ++{_ggad =_eadg *_daagc .RowStride ;_cfafb =_eadg *_bgdac .RowStride ;for _fecb =0;_fecb < _gbb ;_fecb ++{_baac ,_ebfcd =_daagc .GetByte (_ggad +_fecb );if _ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_aead ,_ebfcd =_bgdac .GetByte (_cfafb +_fecb );if _ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _eadg > 0{_gfcec ,_ebfcd =_daagc .GetByte (_ggad -_daagc .RowStride +_fecb );if _ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0069\u0020\u003e \u0030");};_baac |=_gfcec ;};if _fecb > 0{_fdafc ,_ebfcd =_daagc .GetByte (_ggad +_fecb -1);if _ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u006a\u0020\u003e \u0030");};_baac |=_fdafc <<7;};_baac &=_aead ;if _baac ==0||(^_baac )==0{if _ebfcd =_daagc .SetByte (_ggad +_fecb ,_baac );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_abdec =_baac ;_baac =(_baac |(_baac >>1)|(_baac <<1))&_aead ;if (_baac ^_abdec )==0{if _ebfcd =_daagc .SetByte (_ggad +_fecb ,_baac );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _eadg =_feee -1;_eadg >=0;_eadg --{_ggad =_eadg *_daagc .RowStride ;_cfafb =_eadg *_bgdac .RowStride ;for _fecb =_gbb -1;_fecb >=0;_fecb --{if _baac ,_ebfcd =_daagc .GetByte (_ggad +_fecb );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _aead ,_ebfcd =_bgdac .GetByte (_cfafb +_fecb );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _eadg < _feee -1{if _ceea ,_ebfcd =_daagc .GetByte (_ggad +_daagc .RowStride +_fecb );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_baac |=_ceea ;};if _fecb < _gbb -1{if _ccbaa ,_ebfcd =_daagc .GetByte (_ggad +_fecb +1);_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_baac |=_ccbaa >>7;};_baac &=_aead ;if _baac ==0||(^_baac )==0{if _ebfcd =_daagc .SetByte (_ggad +_fecb ,_baac );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\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 {_abdec =_baac ;_baac =(_baac |(_baac >>1)|(_baac <<1))&_aead ;if (_baac ^_abdec )==0{if _ebfcd =_daagc .SetByte (_ggad +_fecb ,_baac );_ebfcd !=nil {return _c .Wrap (_ebfcd ,_ecaa ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");};break ;};};};};return nil ;};func _ddef (_gfbee *Bitmap ,_bbaae ,_aagc ,_fgebaa ,_accd int ,_cebc RasterOperator ,_adac *Bitmap ,_eafa ,_aggbd int )error {var (_eaaa byte ;_dfde int ;_afac int ;_dgeg ,_effca int ;_cbfb ,_fbde int ;);_caea :=_fgebaa >>3;_dgga :=_fgebaa &7;if _dgga > 0{_eaaa =_eccd [_dgga ];};_dfde =_adac .RowStride *_aggbd +(_eafa >>3);_afac =_gfbee .RowStride *_aagc +(_bbaae >>3);switch _cebc {case PixSrc :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=_adac .Data [_dgeg ];_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ],_eaaa );};};case PixNotSrc :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=^(_adac .Data [_dgeg ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^_adac .Data [_dgeg ],_eaaa );};};case PixSrcOrDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]|=_adac .Data [_dgeg ];_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ]|_gfbee .Data [_effca ],_eaaa );};};case PixSrcAndDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]&=_adac .Data [_dgeg ];_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ]&_gfbee .Data [_effca ],_eaaa );};};case PixSrcXorDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]^=_adac .Data [_dgeg ];_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ]^_gfbee .Data [_effca ],_eaaa );};};case PixNotSrcOrDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]|=^(_adac .Data [_dgeg ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^(_adac .Data [_dgeg ])|_gfbee .Data [_effca ],_eaaa );};};case PixNotSrcAndDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]&=^(_adac .Data [_dgeg ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^(_adac .Data [_dgeg ])&_gfbee .Data [_effca ],_eaaa );};};case PixSrcOrNotDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=_adac .Data [_dgeg ]|^(_gfbee .Data [_effca ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ]|^(_gfbee .Data [_effca ]),_eaaa );};};case PixSrcAndNotDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=_adac .Data [_dgeg ]&^(_gfbee .Data [_effca ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],_adac .Data [_dgeg ]&^(_gfbee .Data [_effca ]),_eaaa );};};case PixNotPixSrcOrDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=^(_adac .Data [_dgeg ]|_gfbee .Data [_effca ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^(_adac .Data [_dgeg ]|_gfbee .Data [_effca ]),_eaaa );};};case PixNotPixSrcAndDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=^(_adac .Data [_dgeg ]&_gfbee .Data [_effca ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^(_adac .Data [_dgeg ]&_gfbee .Data [_effca ]),_eaaa );};};case PixNotPixSrcXorDst :for _cbfb =0;_cbfb < _accd ;_cbfb ++{_dgeg =_dfde +_cbfb *_adac .RowStride ;_effca =_afac +_cbfb *_gfbee .RowStride ;for _fbde =0;_fbde < _caea ;_fbde ++{_gfbee .Data [_effca ]=^(_adac .Data [_dgeg ]^_gfbee .Data [_effca ]);_effca ++;_dgeg ++;};if _dgga > 0{_gfbee .Data [_effca ]=_ceac (_gfbee .Data [_effca ],^(_adac .Data [_dgeg ]^_gfbee .Data [_effca ]),_eaaa );};};default:_fge .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",_cebc );return _c .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 (_gfab *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cffef *Bitmaps ,_ggbbb error ){const _aaeb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _gfab ==nil {return nil ,_c .Error (_aaeb ,"\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 ,_c .Errorf (_aaeb ,"\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 ,_c .Errorf (_aaeb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );};_aaabb ,_ggbbb :=_gfab .makeSizeIndicator (width ,height ,tp ,relation );if _ggbbb !=nil {return nil ,_c .Wrap (_ggbbb ,_aaeb ,"");};_cffef ,_ggbbb =_gfab .selectByIndicator (_aaabb );if _ggbbb !=nil {return nil ,_c .Wrap (_ggbbb ,_aaeb ,"");};return _cffef ,nil ;};func (_gcab *ClassedPoints )SortByY (){_gcab ._deaa =_gcab .ySortFunction ();_e .Sort (_gcab )};func _cccba (_cdda *Bitmap ,_ddbdc ,_gacde int ,_fgb ,_gbgad int ,_fccb RasterOperator ,_gfega *Bitmap ,_gdef ,_aebac int )error {var _cfacd ,_cffe ,_dfge ,_gaca int ;if _ddbdc < 0{_gdef -=_ddbdc ;_fgb +=_ddbdc ;_ddbdc =0;};if _gdef < 0{_ddbdc -=_gdef ;_fgb +=_gdef ;_gdef =0;};_cfacd =_ddbdc +_fgb -_cdda .Width ;if _cfacd > 0{_fgb -=_cfacd ;};_cffe =_gdef +_fgb -_gfega .Width ;if _cffe > 0{_fgb -=_cffe ;};if _gacde < 0{_aebac -=_gacde ;_gbgad +=_gacde ;_gacde =0;};if _aebac < 0{_gacde -=_aebac ;_gbgad +=_aebac ;_aebac =0;};_dfge =_gacde +_gbgad -_cdda .Height ;if _dfge > 0{_gbgad -=_dfge ;};_gaca =_aebac +_gbgad -_gfega .Height ;if _gaca > 0{_gbgad -=_gaca ;};if _fgb <=0||_gbgad <=0{return nil ;};var _fbcg error ;switch {case _ddbdc &7==0&&_gdef &7==0:_fbcg =_ddef (_cdda ,_ddbdc ,_gacde ,_fgb ,_gbgad ,_fccb ,_gfega ,_gdef ,_aebac );case _ddbdc &7==_gdef &7:_fbcg =_cded (_cdda ,_ddbdc ,_gacde ,_fgb ,_gbgad ,_fccb ,_gfega ,_gdef ,_aebac );default:_fbcg =_ecfe (_cdda ,_ddbdc ,_gacde ,_fgb ,_gbgad ,_fccb ,_gfega ,_gdef ,_aebac );};if _fbcg !=nil {return _c .Wrap (_fbcg ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};type CombinationOperator int ;func (_fgcf *Bitmap )GetByteIndex (x ,y int )int {return y *_fgcf .RowStride +(x >>3)};func _dbced (_ccdd ,_eadfd ,_fbbdd *Bitmap ,_caeaf int )(*Bitmap ,error ){const _efcgg ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _eadfd ==nil {return nil ,_c .Error (_efcgg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _fbbdd ==nil {return nil ,_c .Error (_efcgg ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _caeaf !=4&&_caeaf !=8{return nil ,_c .Error (_efcgg ,"\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 _dgebf error ;_ccdd ,_dgebf =_fada (_ccdd ,_eadfd );if _dgebf !=nil {return nil ,_c .Wrap (_dgebf ,_efcgg ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_fafd :=_eadfd .createTemplate ();_fbbdd .setPadBits (0);for _bffa :=0;_bffa < _adde ;_bffa ++{_fafd ,_dgebf =_fada (_fafd ,_ccdd );if _dgebf !=nil {return nil ,_c .Wrapf (_dgebf ,_efcgg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bffa );};if _dgebf =_eade (_ccdd ,_fbbdd ,_caeaf );_dgebf !=nil {return nil ,_c .Wrapf (_dgebf ,_efcgg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_bffa );};if _fafd .Equals (_ccdd ){break ;};};return _ccdd ,nil ;};func _dga (_gc *Bitmap ,_bb int )(*Bitmap ,error ){const _gaa ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gc ==nil {return nil ,_c .Error (_gaa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _bb ==1{return _fada (nil ,_gc );};if _bb !=2&&_bb !=4&&_bb !=8{return nil ,_c .Error (_gaa ,"\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");};_eea :=_bb *_gc .Width ;_dcf :=_bb *_gc .Height ;_ge :=New (_eea ,_dcf );var _fgd error ;switch _bb {case 2:_fgd =_ec (_ge ,_gc );case 4:_fgd =_fa (_ge ,_gc );case 8:_fgd =_fbd (_ge ,_gc );};if _fgd !=nil {return nil ,_c .Wrap (_fgd ,_gaa ,"");};return _ge ,nil ;};func TstPSymbol (t *_gg .T )*Bitmap {t .Helper ();_fgag :=New (5,8);_g .NoError (t ,_fgag .SetPixel (0,0,1));_g .NoError (t ,_fgag .SetPixel (1,0,1));_g .NoError (t ,_fgag .SetPixel (2,0,1));_g .NoError (t ,_fgag .SetPixel (3,0,1));_g .NoError (t ,_fgag .SetPixel (4,1,1));_g .NoError (t ,_fgag .SetPixel (0,1,1));_g .NoError (t ,_fgag .SetPixel (4,2,1));_g .NoError (t ,_fgag .SetPixel (0,2,1));_g .NoError (t ,_fgag .SetPixel (4,3,1));_g .NoError (t ,_fgag .SetPixel (0,3,1));_g .NoError (t ,_fgag .SetPixel (0,4,1));_g .NoError (t ,_fgag .SetPixel (1,4,1));_g .NoError (t ,_fgag .SetPixel (2,4,1));_g .NoError (t ,_fgag .SetPixel (3,4,1));_g .NoError (t ,_fgag .SetPixel (0,5,1));_g .NoError (t ,_fgag .SetPixel (0,6,1));_g .NoError (t ,_fgag .SetPixel (0,7,1));return _fgag ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_dd .Rectangle ;};func _cded (_ddaf *Bitmap ,_ggcge ,_edbe ,_afdfa ,_ecbcd int ,_eaffe RasterOperator ,_caag *Bitmap ,_accb ,_eacc int )error {var (_fbdf bool ;_efcc bool ;_fcbf int ;_fegge int ;_abde int ;_dgbf bool ;_ccae byte ;_bbff int ;_ccdf int ;_fdac int ;_ccdc ,_fdce int ;);_caad :=8-(_ggcge &7);_dddg :=_gfag [_caad ];_fgfc :=_ddaf .RowStride *_edbe +(_ggcge >>3);_ddefg :=_caag .RowStride *_eacc +(_accb >>3);if _afdfa < _caad {_fbdf =true ;_dddg &=_eccd [8-_caad +_afdfa ];};if !_fbdf {_fcbf =(_afdfa -_caad )>>3;if _fcbf > 0{_efcc =true ;_fegge =_fgfc +1;_abde =_ddefg +1;};};_bbff =(_ggcge +_afdfa )&7;if !(_fbdf ||_bbff ==0){_dgbf =true ;_ccae =_eccd [_bbff ];_ccdf =_fgfc +1+_fcbf ;_fdac =_ddefg +1+_fcbf ;};switch _eaffe {case PixSrc :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotSrc :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^_caag .Data [_ddefg ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=^_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^_caag .Data [_fdac ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixSrcOrDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ]|_ddaf .Data [_fgfc ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]|=_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ]|_ddaf .Data [_ccdf ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixSrcAndDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ]&_ddaf .Data [_fgfc ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]&=_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ]&_ddaf .Data [_ccdf ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixSrcXorDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ]^_ddaf .Data [_fgfc ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]^=_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ]^_ddaf .Data [_ccdf ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotSrcOrDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^(_caag .Data [_ddefg ])|_ddaf .Data [_fgfc ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]|=^(_caag .Data [_abde +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^(_caag .Data [_fdac ])|_ddaf .Data [_ccdf ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotSrcAndDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^(_caag .Data [_ddefg ])&_ddaf .Data [_fgfc ],_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]&=^_caag .Data [_abde +_fdce ];};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^(_caag .Data [_fdac ])&_ddaf .Data [_ccdf ],_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixSrcOrNotDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ]|^(_ddaf .Data [_fgfc ]),_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=_caag .Data [_abde +_fdce ]|^(_ddaf .Data [_fegge +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ]|^(_ddaf .Data [_ccdf ]),_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixSrcAndNotDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],_caag .Data [_ddefg ]&^(_ddaf .Data [_fgfc ]),_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=_caag .Data [_abde +_fdce ]&^(_ddaf .Data [_fegge +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],_caag .Data [_fdac ]&^(_ddaf .Data [_ccdf ]),_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotPixSrcOrDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^(_caag .Data [_ddefg ]|_ddaf .Data [_fgfc ]),_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=^(_caag .Data [_abde +_fdce ]|_ddaf .Data [_fegge +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^(_caag .Data [_fdac ]|_ddaf .Data [_ccdf ]),_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotPixSrcAndDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^(_caag .Data [_ddefg ]&_ddaf .Data [_fgfc ]),_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=^(_caag .Data [_abde +_fdce ]&_ddaf .Data [_fegge +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^(_caag .Data [_fdac ]&_ddaf .Data [_ccdf ]),_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};case PixNotPixSrcXorDst :for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_fgfc ]=_ceac (_ddaf .Data [_fgfc ],^(_caag .Data [_ddefg ]^_ddaf .Data [_fgfc ]),_dddg );_fgfc +=_ddaf .RowStride ;_ddefg +=_caag .RowStride ;};if _efcc {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{for _fdce =0;_fdce < _fcbf ;_fdce ++{_ddaf .Data [_fegge +_fdce ]=^(_caag .Data [_abde +_fdce ]^_ddaf .Data [_fegge +_fdce ]);};_fegge +=_ddaf .RowStride ;_abde +=_caag .RowStride ;};};if _dgbf {for _ccdc =0;_ccdc < _ecbcd ;_ccdc ++{_ddaf .Data [_ccdf ]=_ceac (_ddaf .Data [_ccdf ],^(_caag .Data [_fdac ]^_ddaf .Data [_ccdf ]),_ccae );_ccdf +=_ddaf .RowStride ;_fdac +=_caag .RowStride ;};};default:_fge .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",_eaffe );return _c .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 _fgcfa ()[]int {_aagb :=make ([]int ,256);_aagb [0]=0;_aagb [1]=7;var _ddcd int ;for _ddcd =2;_ddcd < 4;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -2]+6;};for _ddcd =4;_ddcd < 8;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -4]+5;};for _ddcd =8;_ddcd < 16;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -8]+4;};for _ddcd =16;_ddcd < 32;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -16]+3;};for _ddcd =32;_ddcd < 64;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -32]+2;};for _ddcd =64;_ddcd < 128;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -64]+1;};for _ddcd =128;_ddcd < 256;_ddcd ++{_aagb [_ddcd ]=_aagb [_ddcd -128];};return _aagb ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func _fdca (_gecd *Bitmap )(_aafcc *Bitmap ,_bdbc int ,_efea error ){const _edaa ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _gecd ==nil {return nil ,0,_c .Errorf (_edaa ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _abce ,_aefg *Bitmap ;if _abce ,_efea =_fada (nil ,_gecd );_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_edbc [13]int ;_aaab ,_efgd int ;);_ddb :=12;_dccef :=_ff .NewNumSlice (_ddb +1);_dcbf :=_ff .NewNumSlice (_ddb +1);var _gdgg *Boxes ;for _dcgbg :=0;_dcgbg <=_ddb ;_dcgbg ++{if _dcgbg ==0{if _aefg ,_efea =_fada (nil ,_abce );_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _aefg ,_efea =_cccb (_abce ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _gdgg ,_efea =_aefg .connComponentsBB (4);_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"");};_edbc [_dcgbg ]=len (*_gdgg );_dccef .AddInt (_edbc [_dcgbg ]);switch _dcgbg {case 0:_aaab =_edbc [0];default:_efgd =_edbc [_dcgbg -1]-_edbc [_dcgbg ];_dcbf .AddInt (_efgd );};_abce =_aefg ;};_dgf :=true ;_feba :=2;var _gfcd ,_ccgg int ;for _gcgf :=1;_gcgf < len (*_dcbf );_gcgf ++{if _gfcd ,_efea =_dccef .GetInt (_gcgf );_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _dgf &&_gfcd < int (0.3*float32 (_aaab )){_feba =_gcgf +1;_dgf =false ;};if _efgd ,_efea =_dcbf .GetInt (_gcgf );_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _efgd > _ccgg {_ccgg =_efgd ;};};_agca :=_gecd .XResolution ;if _agca ==0{_agca =150;};if _agca > 110{_feba ++;};if _feba < 2{_fge .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");_feba =2;};_bdbc =_feba +1;if _aafcc ,_efea =_aaca (nil ,_gecd ,_feba +1,1);_efea !=nil {return nil ,0,_c .Wrap (_efea ,_edaa ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _aafcc ,_bdbc ,nil ;};func MakePixelCentroidTab8 ()[]int {return _fgcfa ()};func TstCSymbol (t *_gg .T )*Bitmap {t .Helper ();_abfa :=New (6,6);_g .NoError (t ,_abfa .SetPixel (1,0,1));_g .NoError (t ,_abfa .SetPixel (2,0,1));_g .NoError (t ,_abfa .SetPixel (3,0,1));_g .NoError (t ,_abfa .SetPixel (4,0,1));_g .NoError (t ,_abfa .SetPixel (0,1,1));_g .NoError (t ,_abfa .SetPixel (5,1,1));_g .NoError (t ,_abfa .SetPixel (0,2,1));_g .NoError (t ,_abfa .SetPixel (0,3,1));_g .NoError (t ,_abfa .SetPixel (0,4,1));_g .NoError (t ,_abfa .SetPixel (5,4,1));_g .NoError (t ,_abfa .SetPixel (1,5,1));_g .NoError (t ,_abfa .SetPixel (2,5,1));_g .NoError (t ,_abfa .SetPixel (3,5,1));_g .NoError (t ,_abfa .SetPixel (4,5,1));return _abfa ;};func (_geeg *Bitmaps )HeightSorter ()func (_gfceg ,_bcgcb int )bool {return func (_bgac ,_abfcg int )bool {_cacdc :=_geeg .Values [_bgac ].Height < _geeg .Values [_abfcg ].Height ;_fge .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_geeg .Values [_bgac ].Height ,_geeg .Values [_abfcg ].Height ,_cacdc );return _cacdc ;};};func (_bbdg *Bitmap )addPadBits ()(_adg error ){const _gedf ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_fcdd :=_bbdg .Width %8;if _fcdd ==0{return nil ;};_dff :=_bbdg .Width /8;_aga :=_b .NewReader (_bbdg .Data );_dffc :=make ([]byte ,_bbdg .Height *_bbdg .RowStride );_cae :=_b .NewWriterMSB (_dffc );_daca :=make ([]byte ,_dff );var (_bfe int ;_ecgc uint64 ;);for _bfe =0;_bfe < _bbdg .Height ;_bfe ++{if _ ,_adg =_aga .Read (_daca );_adg !=nil {return _c .Wrap (_adg ,_gedf ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_adg =_cae .Write (_daca );_adg !=nil {return _c .Wrap (_adg ,_gedf ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _ecgc ,_adg =_aga .ReadBits (byte (_fcdd ));_adg !=nil {return _c .Wrap (_adg ,_gedf ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _adg =_cae .WriteByte (byte (_ecgc )<<uint (8-_fcdd ));_adg !=nil {return _c .Wrap (_adg ,_gedf ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_bbdg .Data =_cae .Data ();return nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _fada (d ,s )};func (_agd *Bitmap )CountPixels ()int {return _agd .countPixels ()};func (_efgg *Bitmap )resizeImageData (_fgcc *Bitmap )error {if _fgcc ==nil {return _c .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 _efgg .SizesEqual (_fgcc ){return nil ;};_efgg .Data =make ([]byte ,len (_fgcc .Data ));_efgg .Width =_fgcc .Width ;_efgg .Height =_fgcc .Height ;_efgg .RowStride =_fgcc .RowStride ;return nil ;};func (_bdd Points )GetGeometry (i int )(_bfda ,_gdaa float32 ,_cgdd error ){if i > len (_bdd )-1{return 0,0,_c .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 );};_acgf :=_bdd [i ];return _acgf .X ,_acgf .Y ,nil ;};func (_dbg *Selection )findMaxTranslations ()(_bcfdg ,_fgbd ,_fbfe ,_fbda int ){for _ceab :=0;_ceab < _dbg .Height ;_ceab ++{for _edbg :=0;_edbg < _dbg .Width ;_edbg ++{if _dbg .Data [_ceab ][_edbg ]==SelHit {_bcfdg =_dgea (_bcfdg ,_dbg .Cx -_edbg );_fgbd =_dgea (_fgbd ,_dbg .Cy -_ceab );_fbfe =_dgea (_fbfe ,_edbg -_dbg .Cx );_fbda =_dgea (_fbda ,_ceab -_dbg .Cy );};};};return _bcfdg ,_fgbd ,_fbfe ,_fbda ;};func (_fbbff *Bitmaps )AddBitmap (bm *Bitmap ){_fbbff .Values =append (_fbbff .Values ,bm )};func Extract (roi _dd .Rectangle ,src *Bitmap )(*Bitmap ,error ){_eebb :=New (roi .Dx (),roi .Dy ());_ggaaa :=roi .Min .X &0x07;_cfgd :=8-_ggaaa ;_fgde :=uint (8-_eebb .Width &0x07);_fcba :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_cadf :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_gbcf :=_eebb .RowStride ==_cadf +1-_fcba ;var _bgce int ;for _ecf :=roi .Min .Y ;_ecf < roi .Max .Y ;_ecf ++{_fbfg :=_fcba ;_beg :=_bgce ;switch {case _fcba ==_cadf :_gdae ,_fddc :=src .GetByte (_fbfg );if _fddc !=nil {return nil ,_fddc ;};_gdae <<=uint (_ggaaa );_fddc =_eebb .SetByte (_beg ,_fbfc (_fgde ,_gdae ));if _fddc !=nil {return nil ,_fddc ;};case _ggaaa ==0:for _fbcc :=_fcba ;_fbcc <=_cadf ;_fbcc ++{_ecbdb ,_dbeab :=src .GetByte (_fbfg );if _dbeab !=nil {return nil ,_dbeab ;};_fbfg ++;if _fbcc ==_cadf &&_gbcf {_ecbdb =_fbfc (_fgde ,_ecbdb );};_dbeab =_eebb .SetByte (_beg ,_ecbdb );if _dbeab !=nil {return nil ,_dbeab ;};_beg ++;};default:_afbc :=_bgbfd (src ,_eebb ,uint (_ggaaa ),uint (_cfgd ),_fgde ,_fcba ,_cadf ,_gbcf ,_fbfg ,_beg );if _afbc !=nil {return nil ,_afbc ;};};_fcba +=src .RowStride ;_cadf +=src .RowStride ;_bgce +=_eebb .RowStride ;};return _eebb ,nil ;};type SizeComparison int ;func (_dbea *Bitmap )SetByte (index int ,v byte )error {if index > len (_dbea .Data )-1||index < 0{return _c .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 );};_dbea .Data [index ]=v ;return nil ;};func _fdb (_adc ,_egcc int )int {if _adc < _egcc {return _adc ;};return _egcc ;};type Point struct{X ,Y float32 ;};type LocationFilter int ;const (Vanilla Color =iota ;Chocolate ;);func (_ecbc *Bitmap )clipRectangle (_dfg ,_bgbf *_dd .Rectangle )(_gac *Bitmap ,_bfba error ){const _ede ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _dfg ==nil {return nil ,_c .Error (_ede ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_faa ,_daa :=_ecbc .Width ,_ecbc .Height ;_daaf ,_bfba :=ClipBoxToRectangle (_dfg ,_faa ,_daa );if _bfba !=nil {_fge .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",_bfba );return nil ,nil ;};_debd ,_beab :=_daaf .Min .X ,_daaf .Min .Y ;_gacd ,_bdbd :=_daaf .Max .X -_daaf .Min .X ,_daaf .Max .Y -_daaf .Min .Y ;_gac =New (_gacd ,_bdbd );_gac .Text =_ecbc .Text ;if _bfba =_gac .RasterOperation (0,0,_gacd ,_bdbd ,PixSrc ,_ecbc ,_debd ,_beab );_bfba !=nil {return nil ,_c .Wrap (_bfba ,_ede ,"");};if _bgbf !=nil {*_bgbf =*_daaf ;};return _gac ,nil ;};func _fadg (_deacf *Bitmap ,_gdfa *Bitmap ,_ebed *Selection )(*Bitmap ,error ){var (_gafd *Bitmap ;_debb error ;);_deacf ,_debb =_degd (_deacf ,_gdfa ,_ebed ,&_gafd );if _debb !=nil {return nil ,_debb ;};if _debb =_deacf .clearAll ();_debb !=nil {return nil ,_debb ;};var _fccg SelectionValue ;for _gcfg :=0;_gcfg < _ebed .Height ;_gcfg ++{for _ecee :=0;_ecee < _ebed .Width ;_ecee ++{_fccg =_ebed .Data [_gcfg ][_ecee ];if _fccg ==SelHit {if _debb =_deacf .RasterOperation (_ecee -_ebed .Cx ,_gcfg -_ebed .Cy ,_gdfa .Width ,_gdfa .Height ,PixSrcOrDst ,_gafd ,0,0);_debb !=nil {return nil ,_debb ;};};};};return _deacf ,nil ;};func (_bedb *Bitmap )connComponentsBB (_gfbf int )(_gebe *Boxes ,_dcgb error ){const _gaee ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _gfbf !=4&&_gfbf !=8{return nil ,_c .Error (_gaee ,"\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 _bedb .Zero (){return &Boxes {},nil ;};_bedb .setPadBits (0);_ecff ,_dcgb :=_fada (nil ,_bedb );if _dcgb !=nil {return nil ,_c .Wrap (_dcgb ,_gaee ,"\u0062\u006d\u0031");};_efb :=&_ff .Stack {};_efb .Aux =&_ff .Stack {};_gebe =&Boxes {};var (_ffbe ,_dcfb int ;_aaga _dd .Point ;_fced bool ;_addbe *_dd .Rectangle ;);for {if _aaga ,_fced ,_dcgb =_ecff .nextOnPixel (_dcfb ,_ffbe );_dcgb !=nil {return nil ,_c .Wrap (_dcgb ,_gaee ,"");};if !_fced {break ;};if _addbe ,_dcgb =_badc (_ecff ,_efb ,_aaga .X ,_aaga .Y ,_gfbf );_dcgb !=nil {return nil ,_c .Wrap (_dcgb ,_gaee ,"");};if _dcgb =_gebe .Add (_addbe );_dcgb !=nil {return nil ,_c .Wrap (_dcgb ,_gaee ,"");};_dcfb =_aaga .X ;_ffbe =_aaga .Y ;};return _gebe ,nil ;};func _eade (_gabf *Bitmap ,_agab *Bitmap ,_begd int )(_eafe error ){const _fgee ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_dfbac :=_fdb (_gabf .Height ,_agab .Height );_bfbgc :=_fdb (_gabf .RowStride ,_agab .RowStride );switch _begd {case 4:_eafe =_fbcd (_gabf ,_agab ,_dfbac ,_bfbgc );case 8:_eafe =_bfde (_gabf ,_agab ,_dfbac ,_bfbgc );default:return _c .Errorf (_fgee ,"\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",_begd );};if _eafe !=nil {return _c .Wrap (_eafe ,_fgee ,"");};return nil ;};func (_gbe *Bitmap )And (s *Bitmap )(_gae *Bitmap ,_dbce error ){const _aea ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _gbe ==nil {return nil ,_c .Error (_aea ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_c .Error (_aea ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_gbe .SizesEqual (s ){_fge .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",_aea );};if _gae ,_dbce =_fada (_gae ,_gbe );_dbce !=nil {return nil ,_c .Wrap (_dbce ,_aea ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dbce =_gae .RasterOperation (0,0,_gae .Width ,_gae .Height ,PixSrcAndDst ,s ,0,0);_dbce !=nil {return nil ,_c .Wrap (_dbce ,_aea ,"");};return _gae ,nil ;};func _gcdg (_aacee ,_fbge *Bitmap ,_cdag *Selection )(*Bitmap ,error ){const _dfbd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _ceda ,_cbddg int ;if _fbge ==nil {return nil ,_c .Error (_dfbd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _cdag ==nil {return nil ,_c .Error (_dfbd ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_ceda =_cdag .Width ;_cbddg =_cdag .Height ;if _ceda ==0||_cbddg ==0{return nil ,_c .Error (_dfbd ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _aacee ==nil {return _fbge .createTemplate (),nil ;};if _daag :=_aacee .resizeImageData (_fbge );_daag !=nil {return nil ,_daag ;};return _aacee ,nil ;};func TstVSymbol (t *_gg .T ,scale ...int )*Bitmap {_ccac ,_bgegf :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_g .NoError (t ,_bgegf );return TstGetScaledSymbol (t ,_ccac ,scale ...);};func _gab ()(_eg []byte ){_eg =make ([]byte ,256);for _ceg :=0;_ceg < 256;_ceg ++{_ege :=byte (_ceg );_eg [_ege ]=(_ege &0x01)|((_ege &0x04)>>1)|((_ege &0x10)>>2)|((_ege &0x40)>>3)|((_ege &0x02)<<3)|((_ege &0x08)<<2)|((_ege &0x20)<<1)|(_ege &0x80);};return _eg ;};func MakePixelSumTab8 ()[]int {return _bgag ()};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_agcg float64 ,_cdae error ){const _gbf ="\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 _agcg ,_c .Error (_gbf ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _agcg ,_c .Error (_gbf ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if area1 ==0||area2 ==0{return _agcg ,_c .Error (_gbf ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_gece ,_fdcb :=bm1 .Width ,bm1 .Height ;_aabf ,_geee :=bm2 .Width ,bm2 .Height ;if _bacc (_gece -_aabf )> maxDiffW {return 0,nil ;};if _bacc (_fdcb -_geee )> maxDiffH {return 0,nil ;};var _bada ,_baddd int ;if delX >=0{_bada =int (delX +0.5);}else {_bada =int (delX -0.5);};if delY >=0{_baddd =int (delY +0.5);}else {_baddd =int (delY -0.5);};_dgab :=bm1 .createTemplate ();if _cdae =_dgab .RasterOperation (_bada ,_baddd ,_aabf ,_geee ,PixSrc ,bm2 ,0,0);_cdae !=nil {return _agcg ,_c .Wrap (_cdae ,_gbf ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _cdae =_dgab .RasterOperation (0,0,_gece ,_fdcb ,PixSrcAndDst ,bm1 ,0,0);_cdae !=nil {return _agcg ,_c .Wrap (_cdae ,_gbf ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_afcbg :=_dgab .countPixels ();_agcg =float64 (_afcbg )*float64 (_afcbg )/(float64 (area1 )*float64 (area2 ));return _agcg ,nil ;};type ClassedPoints struct{*Points ;_ff .IntSlice ;_deaa func (_bggg ,_acde int )bool ;};func (_aac *Bitmap )setFourBytes (_dbab int ,_dbcb uint32 )error {if _dbab +3> len (_aac .Data )-1{return _c .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",_dbab );};_aac .Data [_dbab ]=byte ((_dbcb &0xff000000)>>24);_aac .Data [_dbab +1]=byte ((_dbcb &0xff0000)>>16);_aac .Data [_dbab +2]=byte ((_dbcb &0xff00)>>8);_aac .Data [_dbab +3]=byte (_dbcb &0xff);return nil ;};func (_efde *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _abfc ="\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 >=_efde .IntSlice .Size (){return 0,_c .Errorf (_abfc ,"\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 (_efde .YAtIndex (i )),nil ;};func (_bbaf *Bitmap )setBit (_geed int ){_bbaf .Data [(_geed >>3)]|=0x80>>uint (_geed &7)};func (_bdcg *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _gceda ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _bdcg ==nil {return nil ,_c .Error (_gceda ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_bdcg .Values )-1{return nil ,_c .Errorf (_gceda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _bdcg .Values [i ],nil ;};const _adde =5000;func TstGetScaledSymbol (t *_gg .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_dbgd ,_acfgd :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_g .NoError (t ,_acfgd );return _dbgd ;};func TstESymbol (t *_gg .T ,scale ...int )*Bitmap {_efdd ,_ggab :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_g .NoError (t ,_ggab );return TstGetScaledSymbol (t ,_efdd ,scale ...);};func _ecfe (_bedcb *Bitmap ,_dfcg ,_ddbf ,_cba ,_gbddb int ,_aaeeb RasterOperator ,_gcggf *Bitmap ,_gfeb ,_dgaa int )error {var (_bgcc bool ;_cfega bool ;_gfcc byte ;_dgdd int ;_bbfeg int ;_cacb int ;_fadab int ;_ggbf bool ;_abef int ;_afge int ;_cacde int ;_ggca bool ;_gfbb byte ;_aafcb int ;_bbca int ;_feff int ;_gcee byte ;_gaed int ;_gbfdf int ;_dfab uint ;_dbbcb uint ;_agff byte ;_agefa shift ;_cdee bool ;_cegc bool ;_bafa ,_cgadc int ;);if _gfeb &7!=0{_gbfdf =8-(_gfeb &7);};if _dfcg &7!=0{_bbfeg =8-(_dfcg &7);};if _gbfdf ==0&&_bbfeg ==0{_agff =_gfag [0];}else {if _bbfeg > _gbfdf {_dfab =uint (_bbfeg -_gbfdf );}else {_dfab =uint (8-(_gbfdf -_bbfeg ));};_dbbcb =8-_dfab ;_agff =_gfag [_dfab ];};if (_dfcg &7)!=0{_bgcc =true ;_dgdd =8-(_dfcg &7);_gfcc =_gfag [_dgdd ];_cacb =_bedcb .RowStride *_ddbf +(_dfcg >>3);_fadab =_gcggf .RowStride *_dgaa +(_gfeb >>3);_gaed =8-(_gfeb &7);if _dgdd > _gaed {_agefa =_agee ;if _cba >=_gbfdf {_cdee =true ;};}else {_agefa =_ddfb ;};};if _cba < _dgdd {_cfega =true ;_gfcc &=_eccd [8-_dgdd +_cba ];};if !_cfega {_abef =(_cba -_dgdd )>>3;if _abef !=0{_ggbf =true ;_afge =_bedcb .RowStride *_ddbf +((_dfcg +_bbfeg )>>3);_cacde =_gcggf .RowStride *_dgaa +((_gfeb +_bbfeg )>>3);};};_aafcb =(_dfcg +_cba )&7;if !(_cfega ||_aafcb ==0){_ggca =true ;_gfbb =_eccd [_aafcb ];_bbca =_bedcb .RowStride *_ddbf +((_dfcg +_bbfeg )>>3)+_abef ;_feff =_gcggf .RowStride *_dgaa +((_gfeb +_bbfeg )>>3)+_abef ;if _aafcb > int (_dbbcb ){_cegc =true ;};};switch _aaeeb {case PixSrc :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee ,_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee ,_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotSrc :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^_gcee ,_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=^_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^_gcee ,_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixSrcOrDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee |_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]|=_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee |_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixSrcAndDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee &_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]&=_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee &_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixSrcXorDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee ^_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]^=_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee ^_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotSrcOrDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^_gcee |_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]|=^_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^_gcee |_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotSrcAndDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^_gcee &_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]&=^_gcee ;};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^_gcee &_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixSrcOrNotDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee |^_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=_gcee |^_bedcb .Data [_afge +_cgadc ];};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee |^_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixSrcAndNotDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],_gcee &^_bedcb .Data [_cacb ],_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=_gcee &^_bedcb .Data [_afge +_cgadc ];};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],_gcee &^_bedcb .Data [_bbca ],_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotPixSrcOrDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^(_gcee |_bedcb .Data [_cacb ]),_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=^(_gcee |_bedcb .Data [_afge +_cgadc ]);};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^(_gcee |_bedcb .Data [_bbca ]),_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotPixSrcAndDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^(_gcee &_bedcb .Data [_cacb ]),_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=^(_gcee &_bedcb .Data [_afge +_cgadc ]);};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^(_gcee &_bedcb .Data [_bbca ]),_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};case PixNotPixSrcXorDst :if _bgcc {for _bafa =0;_bafa < _gbddb ;_bafa ++{if _agefa ==_agee {_gcee =_gcggf .Data [_fadab ]<<_dfab ;if _cdee {_gcee =_ceac (_gcee ,_gcggf .Data [_fadab +1]>>_dbbcb ,_agff );};}else {_gcee =_gcggf .Data [_fadab ]>>_dbbcb ;};_bedcb .Data [_cacb ]=_ceac (_bedcb .Data [_cacb ],^(_gcee ^_bedcb .Data [_cacb ]),_gfcc );_cacb +=_bedcb .RowStride ;_fadab +=_gcggf .RowStride ;};};if _ggbf {for _bafa =0;_bafa < _gbddb ;_bafa ++{for _cgadc =0;_cgadc < _abef ;_cgadc ++{_gcee =_ceac (_gcggf .Data [_cacde +_cgadc ]<<_dfab ,_gcggf .Data [_cacde +_cgadc +1]>>_dbbcb ,_agff );_bedcb .Data [_afge +_cgadc ]=^(_gcee ^_bedcb .Data [_afge +_cgadc ]);};_afge +=_bedcb .RowStride ;_cacde +=_gcggf .RowStride ;};};if _ggca {for _bafa =0;_bafa < _gbddb ;_bafa ++{_gcee =_gcggf .Data [_feff ]<<_dfab ;if _cegc {_gcee =_ceac (_gcee ,_gcggf .Data [_feff +1]>>_dbbcb ,_agff );};_bedcb .Data [_bbca ]=_ceac (_bedcb .Data [_bbca ],^(_gcee ^_bedcb .Data [_bbca ]),_gfbb );_bbca +=_bedcb .RowStride ;_feff +=_gcggf .RowStride ;};};default:_fge .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",_aaeeb );return _c .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 (_gfdg Points )YSorter ()func (_bdbdb ,_caaed int )bool {return func (_eafdc ,_dgfd int )bool {return _gfdg [_eafdc ].Y < _gfdg [_dgfd ].Y };};func (_gddf MorphProcess )verify (_decg int ,_fabb ,_gdcc *int )error {const _cccf ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _gddf .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gddf .Arguments )!=2{return _c .Error (_cccf ,"\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");};_ebfa ,_fef :=_gddf .getWidthHeight ();if _ebfa <=0||_fef <=0{return _c .Error (_cccf ,"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 :_dbeb :=len (_gddf .Arguments );*_fabb +=_dbeb ;if _dbeb < 1||_dbeb > 4{return _c .Error (_cccf ,"\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 _fbg :=0;_fbg < _dbeb ;_fbg ++{if _gddf .Arguments [_fbg ]< 1||_gddf .Arguments [_fbg ]> 4{return _c .Error (_cccf ,"\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 (_gddf .Arguments )==0{return _c .Error (_cccf ,"\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");};_gddfc :=_gddf .Arguments [0];if _gddfc !=2&&_gddfc !=4&&_gddfc !=8{return _c .Error (_cccf ,"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");};*_fabb -=_abff [_gddfc /4];case MopAddBorder :if len (_gddf .Arguments )==0{return _c .Error (_cccf ,"\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");};_fadd :=_gddf .Arguments [0];if _decg > 0{return _c .Error (_cccf ,"\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 _fadd < 1{return _c .Error (_cccf ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_gdcc =_fadd ;};return nil ;};func (_addb *Bitmap )setPadBits (_efd int ){_edag :=8-_addb .Width %8;if _edag ==8{return ;};_dea :=_addb .Width /8;_febc :=_gfag [_edag ];if _efd ==0{_febc ^=_febc ;};var _ggac int ;for _eag :=0;_eag < _addb .Height ;_eag ++{_ggac =_eag *_addb .RowStride +_dea ;if _efd ==0{_addb .Data [_ggac ]&=_febc ;}else {_addb .Data [_ggac ]|=_febc ;};};};func (_gebad *Bitmaps )makeSizeIndicator (_eeafc ,_daac int ,_eecb LocationFilter ,_geea SizeComparison )(_fdad *_ff .NumSlice ,_aaeef error ){const _bec ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _gebad ==nil {return nil ,_c .Error (_bec ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _eecb {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_bec ,"\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",_eecb );};switch _geea {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_bec ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_geea );};_fdad =&_ff .NumSlice {};var (_cbdca ,_daef ,_bddf int ;_edfd *Bitmap ;);for _ ,_edfd =range _gebad .Values {_cbdca =0;_daef ,_bddf =_edfd .Width ,_edfd .Height ;switch _eecb {case LocSelectWidth :if (_geea ==SizeSelectIfLT &&_daef < _eeafc )||(_geea ==SizeSelectIfGT &&_daef > _eeafc )||(_geea ==SizeSelectIfLTE &&_daef <=_eeafc )||(_geea ==SizeSelectIfGTE &&_daef >=_eeafc )||(_geea ==SizeSelectIfEQ &&_daef ==_eeafc ){_cbdca =1;};case LocSelectHeight :if (_geea ==SizeSelectIfLT &&_bddf < _daac )||(_geea ==SizeSelectIfGT &&_bddf > _daac )||(_geea ==SizeSelectIfLTE &&_bddf <=_daac )||(_geea ==SizeSelectIfGTE &&_bddf >=_daac )||(_geea ==SizeSelectIfEQ &&_bddf ==_daac ){_cbdca =1;};case LocSelectIfEither :if (_geea ==SizeSelectIfLT &&(_daef < _eeafc ||_bddf < _daac ))||(_geea ==SizeSelectIfGT &&(_daef > _eeafc ||_bddf > _daac ))||(_geea ==SizeSelectIfLTE &&(_daef <=_eeafc ||_bddf <=_daac ))||(_geea ==SizeSelectIfGTE &&(_daef >=_eeafc ||_bddf >=_daac ))||(_geea ==SizeSelectIfEQ &&(_daef ==_eeafc ||_bddf ==_daac )){_cbdca =1;};case LocSelectIfBoth :if (_geea ==SizeSelectIfLT &&(_daef < _eeafc &&_bddf < _daac ))||(_geea ==SizeSelectIfGT &&(_daef > _eeafc &&_bddf > _daac ))||(_geea ==SizeSelectIfLTE &&(_daef <=_eeafc &&_bddf <=_daac ))||(_geea ==SizeSelectIfGTE &&(_daef >=_eeafc &&_bddf >=_daac ))||(_geea ==SizeSelectIfEQ &&(_daef ==_eeafc &&_bddf ==_daac )){_cbdca =1;};};_fdad .AddInt (_cbdca );};return _fdad ,nil ;};func (_cgd *Bitmap )Equals (s *Bitmap )bool {if len (_cgd .Data )!=len (s .Data )||_cgd .Width !=s .Width ||_cgd .Height !=s .Height {return false ;};for _dcc :=0;_dcc < _cgd .Height ;_dcc ++{_bge :=_dcc *_cgd .RowStride ;for _cbed :=0;_cbed < _cgd .RowStride ;_cbed ++{if _cgd .Data [_bge +_cbed ]!=s .Data [_bge +_cbed ]{return false ;};};};return true ;};func (_ebda *ClassedPoints )validateIntSlice ()error {const _bdcf ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_gbag :=range _ebda .IntSlice {if _gbag >=(_ebda .Points .Size ()){return _c .Errorf (_bdcf ,"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",_gbag ,_ebda .Points .Size ());};};return nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dacd (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};type Boxes []*_dd .Rectangle ;func TstAddSymbol (t *_gg .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_eabcf :=_dd .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_eabcf );*x +=sym .Width +space ;};func _ag (_baf *Bitmap ,_ccf int ,_gga []byte )(_gfb *Bitmap ,_ggc error ){const _dbc ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _baf ==nil {return nil ,_c .Error (_dbc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _ccf < 1||_ccf > 4{return nil ,_c .Error (_dbc ,"\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 _baf .Height <=1{return nil ,_c .Errorf (_dbc ,"\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",_baf .Height );};_gfb =New (_baf .Width /2,_baf .Height /2);if _gga ==nil {_gga =_gab ();};_cde :=_fdb (_baf .RowStride ,2*_gfb .RowStride );switch _ccf {case 1:_ggc =_def (_baf ,_gfb ,_ccf ,_gga ,_cde );case 2:_ggc =_aba (_baf ,_gfb ,_ccf ,_gga ,_cde );case 3:_ggc =_dgd (_baf ,_gfb ,_ccf ,_gga ,_cde );case 4:_ggc =_fad (_baf ,_gfb ,_ccf ,_gga ,_cde );};if _ggc !=nil {return nil ,_ggc ;};return _gfb ,nil ;};func (_dabe *byHeight )Len ()int {return len (_dabe .Values )};func (_bba *Bitmap )Zero ()bool {_ffda :=_bba .Width /8;_ggbg :=_bba .Width &7;var _bdbf byte ;if _ggbg !=0{_bdbf =byte (0xff<<uint (8-_ggbg ));};var _bfdg ,_fbb ,_eee int ;for _fbb =0;_fbb < _bba .Height ;_fbb ++{_bfdg =_bba .RowStride *_fbb ;for _eee =0;_eee < _ffda ;_eee ,_bfdg =_eee +1,_bfdg +1{if _bba .Data [_bfdg ]!=0{return false ;};};if _ggbg > 0{if _bba .Data [_bfdg ]&_bdbf !=0{return false ;};};};return true ;};func (_baff *Bitmap )addBorderGeneral (_ebfd ,_gcb ,_bbb ,_dbdb int ,_ebaf int )(*Bitmap ,error ){const _acd ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ebfd < 0||_gcb < 0||_bbb < 0||_dbdb < 0{return nil ,_c .Error (_acd ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_edf ,_ecg :=_baff .Width ,_baff .Height ;_ffdb :=_edf +_ebfd +_gcb ;_efag :=_ecg +_bbb +_dbdb ;_ccc :=New (_ffdb ,_efag );_ccc .Color =_baff .Color ;_eff :=PixClr ;if _ebaf > 0{_eff =PixSet ;};_gea :=_ccc .RasterOperation (0,0,_ebfd ,_efag ,_eff ,nil ,0,0);if _gea !=nil {return nil ,_c .Wrap (_gea ,_acd ,"\u006c\u0065\u0066\u0074");};_gea =_ccc .RasterOperation (_ffdb -_gcb ,0,_gcb ,_efag ,_eff ,nil ,0,0);if _gea !=nil {return nil ,_c .Wrap (_gea ,_acd ,"\u0072\u0069\u0067h\u0074");};_gea =_ccc .RasterOperation (0,0,_ffdb ,_bbb ,_eff ,nil ,0,0);if _gea !=nil {return nil ,_c .Wrap (_gea ,_acd ,"\u0074\u006f\u0070");};_gea =_ccc .RasterOperation (0,_efag -_dbdb ,_ffdb ,_dbdb ,_eff ,nil ,0,0);if _gea !=nil {return nil ,_c .Wrap (_gea ,_acd ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_gea =_ccc .RasterOperation (_ebfd ,_bbb ,_edf ,_ecg ,PixSrc ,_baff ,0,0);if _gea !=nil {return nil ,_c .Wrap (_gea ,_acd ,"\u0063\u006f\u0070\u0079");};return _ccc ,nil ;};func _ggfb (_fbab ,_cfba *Bitmap ,_cacd ,_gaf ,_dabd ,_ebe ,_fbc ,_fae ,_fcdb ,_fdc int ,_ecd CombinationOperator ,_dgdg int )error {var _efef int ;_deef :=func (){_efef ++;_dabd +=_cfba .RowStride ;_ebe +=_fbab .RowStride ;_fbc +=_fbab .RowStride };for _efef =_cacd ;_efef < _gaf ;_deef (){var _bbdc uint16 ;_ccef :=_dabd ;for _ccgd :=_ebe ;_ccgd <=_fbc ;_ccgd ++{_bfae ,_geedb :=_cfba .GetByte (_ccef );if _geedb !=nil {return _geedb ;};_afec ,_geedb :=_fbab .GetByte (_ccgd );if _geedb !=nil {return _geedb ;};_bbdc =(_bbdc |(uint16 (_afec )&0xff))<<uint (_fdc );_afec =byte (_bbdc >>8);if _geedb =_cfba .SetByte (_ccef ,_gfce (_bfae ,_afec ,_ecd ));_geedb !=nil {return _geedb ;};_ccef ++;_bbdc <<=uint (_fcdb );if _ccgd ==_fbc {_afec =byte (_bbdc >>(8-uint8 (_fdc )));if _dgdg !=0{_afec =_fbfc (uint (8+_fae ),_afec );};_bfae ,_geedb =_cfba .GetByte (_ccef );if _geedb !=nil {return _geedb ;};if _geedb =_cfba .SetByte (_ccef ,_gfce (_bfae ,_afec ,_ecd ));_geedb !=nil {return _geedb ;};};};};return nil ;};func _dce (_fgeg ,_agfa ,_cef *Bitmap )(*Bitmap ,error ){const _gfge ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _agfa ==nil {return nil ,_c .Error (_gfge ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cef ==nil {return nil ,_c .Error (_gfge ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fgeg ==_cef {return nil ,_c .Error (_gfge ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_agfa .SizesEqual (_cef ){_fge .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",_gfge );};var _effc error ;if _fgeg ,_effc =_fada (_fgeg ,_agfa );_effc !=nil {return nil ,_c .Wrap (_effc ,_gfge ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _effc =_fgeg .RasterOperation (0,0,_fgeg .Width ,_fgeg .Height ,PixSrcXorDst ,_cef ,0,0);_effc !=nil {return nil ,_c .Wrap (_effc ,_gfge ,"");};return _fgeg ,nil ;};func _eadb (_abdd ,_ffde *Bitmap ,_dcdd *Selection )(*Bitmap ,error ){const _facg ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _dgde error ;if _abdd ,_dgde =_gcdg (_abdd ,_ffde ,_dcdd );_dgde !=nil {return nil ,_dgde ;};_begc ,_dgde :=_fadg (nil ,_ffde ,_dcdd );if _dgde !=nil {return nil ,_c .Wrap (_dgde ,_facg ,"");};if _ ,_dgde =_bagff (_abdd ,_begc ,_dcdd );_dgde !=nil {return nil ,_c .Wrap (_dgde ,_facg ,"");};return _abdd ,nil ;};func (_ccca *ClassedPoints )XAtIndex (i int )float32 {return (*_ccca .Points )[_ccca .IntSlice [i ]].X };type shift int ;func (_acfbb *ClassedPoints )Swap (i ,j int ){_acfbb .IntSlice [i ],_acfbb .IntSlice [j ]=_acfbb .IntSlice [j ],_acfbb .IntSlice [i ];};func (_fcce *BitmapsArray )AddBitmaps (bm *Bitmaps ){_fcce .Values =append (_fcce .Values ,bm )};func (_bbg *Bitmap )clearAll ()error {return _bbg .RasterOperation (0,0,_bbg .Width ,_bbg .Height ,PixClr ,nil ,0,0);};func (_gced *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fbbc ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _eece :=_gced .validateIntSlice ();_eece !=nil {return nil ,_c .Wrap (_eece ,_fbbc ,"");};if _gced .IntSlice .Size ()==0{return nil ,_c .Error (_fbbc ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_gced .SortByY ();var (_ddee []*ClassedPoints ;_cbee int ;);_ffdf :=-1;var _afbf *ClassedPoints ;for _cbgd :=0;_cbgd < len (_gced .IntSlice );_cbgd ++{_cbee =int (_gced .YAtIndex (_cbgd ));if _cbee !=_ffdf {_afbf =&ClassedPoints {Points :_gced .Points };_ffdf =_cbee ;_ddee =append (_ddee ,_afbf );};_afbf .IntSlice =append (_afbf .IntSlice ,_gced .IntSlice [_cbgd ]);};for _ ,_gcbfe :=range _ddee {_gcbfe .SortByX ();};return _ddee ,nil ;};type Points []Point ;func (_bcfd *Bitmap )nextOnPixel (_gdd ,_aafd int )(_fbaa _dd .Point ,_bfab bool ,_cdgc error ){const _fcbb ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_fbaa ,_bfab ,_cdgc =_bcfd .nextOnPixelLow (_bcfd .Width ,_bcfd .Height ,_bcfd .RowStride ,_gdd ,_aafd );if _cdgc !=nil {return _fbaa ,false ,_c .Wrap (_cdgc ,_fcbb ,"");};return _fbaa ,_bfab ,nil ;};func (_eaff *Bitmap )String ()string {var _acbg ="\u000a";for _fea :=0;_fea < _eaff .Height ;_fea ++{var _dba string ;for _gabg :=0;_gabg < _eaff .Width ;_gabg ++{_bbda :=_eaff .GetPixel (_gabg ,_fea );if _bbda {_dba +="\u0031";}else {_dba +="\u0030";};};_acbg +=_dba +"\u000a";};return _acbg ;};func (_efagb Points )Get (i int )(Point ,error ){if i > len (_efagb )-1{return Point {},_c .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 _efagb [i ],nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _ccg ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_cgg :=_gbaf (width ,height );_cgg .Data =data ;if _bfb :=((width *height )+7)>>3;len (data )< _bfb {return nil ,_c .Errorf (_ccg ,"\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 ),_bfb );};if _agg :=_cgg .addPadBits ();_agg !=nil {return nil ,_c .Wrap (_agg ,_ccg ,"");};return _cgg ,nil ;};func (_daafa MorphProcess )getWidthHeight ()(_bage ,_gdff int ){return _daafa .Arguments [0],_daafa .Arguments [1];};func (_ccee *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_ccee .Width ,Height :_ccee .Height ,RowStride :_ccee .RowStride ,Color :_ccee .Color ,Text :_ccee .Text ,BitmapNumber :_ccee .BitmapNumber ,Special :_ccee .Special ,Data :make ([]byte ,len (_ccee .Data ))};};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _gfce (oldByte ,newByte ,op );};func (_gaab *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _gaab .removeBorderGeneral (left ,right ,top ,bot );};func _cdgg (_bffd ,_dcdb *Bitmap ,_ecgg ,_afdc ,_bdg ,_fcace ,_baa ,_bdef ,_eaag ,_gebf int ,_eed CombinationOperator )error {var _baffg int ;_cfed :=func (){_baffg ++;_bdg +=_dcdb .RowStride ;_fcace +=_bffd .RowStride ;_baa +=_bffd .RowStride };for _baffg =_ecgg ;_baffg < _afdc ;_cfed (){var _abbg uint16 ;_gdcf :=_bdg ;for _ggbb :=_fcace ;_ggbb <=_baa ;_ggbb ++{_dcgd ,_gfaf :=_dcdb .GetByte (_gdcf );if _gfaf !=nil {return _gfaf ;};_ccaf ,_gfaf :=_bffd .GetByte (_ggbb );if _gfaf !=nil {return _gfaf ;};_abbg =(_abbg |uint16 (_ccaf ))<<uint (_gebf );_ccaf =byte (_abbg >>8);if _ggbb ==_baa {_ccaf =_fbfc (uint (_bdef ),_ccaf );};if _gfaf =_dcdb .SetByte (_gdcf ,_gfce (_dcgd ,_ccaf ,_eed ));_gfaf !=nil {return _gfaf ;};_gdcf ++;_abbg <<=uint (_eaag );};};return nil ;};func TstWriteSymbols (t *_gg .T ,bms *Bitmaps ,src *Bitmap ){for _acge :=0;_acge < bms .Size ();_acge ++{_cgebe :=bms .Values [_acge ];_ccgf :=bms .Boxes [_acge ];_beabg :=src .RasterOperation (_ccgf .Min .X ,_ccgf .Min .Y ,_cgebe .Width ,_cgebe .Height ,PixSrc ,_cgebe ,0,0);_g .NoError (t ,_beabg );};};type Component int ;func (_efgc *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _bedg ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_dccf ,_bacf :=_efgc .selectByIndexes (idx );if _bacf !=nil {return nil ,_c .Wrap (_bacf ,_bedg ,"");};return _dccf ,nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _fegd (_cdage *Bitmap ,_bega ,_fagf int ,_ecad ,_eadf int ,_eaed RasterOperator ){var (_ggde int ;_cbad byte ;_acaf ,_bccd int ;_dddcg int ;);_dagad :=_ecad >>3;_gceg :=_ecad &7;if _gceg > 0{_cbad =_eccd [_gceg ];};_ggde =_cdage .RowStride *_fagf +(_bega >>3);switch _eaed {case PixClr :for _acaf =0;_acaf < _eadf ;_acaf ++{_dddcg =_ggde +_acaf *_cdage .RowStride ;for _bccd =0;_bccd < _dagad ;_bccd ++{_cdage .Data [_dddcg ]=0x0;_dddcg ++;};if _gceg > 0{_cdage .Data [_dddcg ]=_ceac (_cdage .Data [_dddcg ],0x0,_cbad );};};case PixSet :for _acaf =0;_acaf < _eadf ;_acaf ++{_dddcg =_ggde +_acaf *_cdage .RowStride ;for _bccd =0;_bccd < _dagad ;_bccd ++{_cdage .Data [_dddcg ]=0xff;_dddcg ++;};if _gceg > 0{_cdage .Data [_dddcg ]=_ceac (_cdage .Data [_dddcg ],0xff,_cbad );};};case PixNotDst :for _acaf =0;_acaf < _eadf ;_acaf ++{_dddcg =_ggde +_acaf *_cdage .RowStride ;for _bccd =0;_bccd < _dagad ;_bccd ++{_cdage .Data [_dddcg ]=^_cdage .Data [_dddcg ];_dddcg ++;};if _gceg > 0{_cdage .Data [_dddcg ]=_ceac (_cdage .Data [_dddcg ],^_cdage .Data [_dddcg ],_cbad );};};};};func _ceac (_cffc ,_aebdg ,_decf byte )byte {return (_cffc &^(_decf ))|(_aebdg &_decf )};func TstDSymbol (t *_gg .T ,scale ...int )*Bitmap {_agedg ,_dbfag :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_g .NoError (t ,_dbfag );return TstGetScaledSymbol (t ,_agedg ,scale ...);};func (_dbcee *Bitmap )centroid (_ecdb ,_fdg []int )(Point ,error ){_ffbf :=Point {};_dbcee .setPadBits (0);if len (_ecdb )==0{_ecdb =_fgcfa ();};if len (_fdg )==0{_fdg =_bgag ();};var _bdee ,_bdf ,_dfc ,_aggfd ,_cbdd ,_bcaa int ;var _gcef byte ;for _cbdd =0;_cbdd < _dbcee .Height ;_cbdd ++{_degf :=_dbcee .RowStride *_cbdd ;_aggfd =0;for _bcaa =0;_bcaa < _dbcee .RowStride ;_bcaa ++{_gcef =_dbcee .Data [_degf +_bcaa ];if _gcef !=0{_aggfd +=_fdg [_gcef ];_bdee +=_ecdb [_gcef ]+_bcaa *8*_fdg [_gcef ];};};_dfc +=_aggfd ;_bdf +=_aggfd *_cbdd ;};if _dfc !=0{_ffbf .X =float32 (_bdee )/float32 (_dfc );_ffbf .Y =float32 (_bdf )/float32 (_dfc );};return _ffbf ,nil ;};func (_aca *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _aca .addBorderGeneral (left ,right ,top ,bot ,val );};func (_dagg CombinationOperator )String ()string {var _ggbd string ;switch _dagg {case CmbOpOr :_ggbd ="\u004f\u0052";case CmbOpAnd :_ggbd ="\u0041\u004e\u0044";case CmbOpXor :_ggbd ="\u0058\u004f\u0052";case CmbOpXNor :_ggbd ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_ggbd ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_ggbd ="\u004e\u004f\u0054";};return _ggbd ;};const (_agee shift =iota ;_ddfb ;);func (_bacgf *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dacd (_bacgf ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_ccff *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_gdgc *Bitmaps ,_ecfa *Boxes ,_gcbf error ){const _egf ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _ccff ==nil {return nil ,nil ,_c .Error (_egf ,"\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 ,_c .Error (_egf ,"\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 _ccff .Zero (){_ecfa =&Boxes {};_gdgc =&Bitmaps {};return _gdgc ,_ecfa ,nil ;};switch components {case ComponentConn :_gdgc =&Bitmaps {};if _ecfa ,_gcbf =_ccff .ConnComponents (_gdgc ,8);_gcbf !=nil {return nil ,nil ,_c .Wrap (_gcbf ,_egf ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentCharacters :_fbe ,_caga :=MorphSequence (_ccff ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _caga !=nil {return nil ,nil ,_c .Wrap (_caga ,_egf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _fge .Log .IsLogLevel (_fge .LogLevelTrace ){_fge .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",_fbe .String ());};_ffad :=&Bitmaps {};_ecfa ,_caga =_fbe .ConnComponents (_ffad ,8);if _caga !=nil {return nil ,nil ,_c .Wrap (_caga ,_egf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};if _fge .Log .IsLogLevel (_fge .LogLevelTrace ){_fge .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",_ffad .String ());};if _gdgc ,_caga =_ffad .ClipToBitmap (_ccff );_caga !=nil {return nil ,nil ,_c .Wrap (_caga ,_egf ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_efff :=1;var _aadg *Bitmap ;switch {case _ccff .XResolution <=200:_aadg =_ccff ;case _ccff .XResolution <=400:_efff =2;_aadg ,_gcbf =_ca (_ccff ,1,0,0,0);if _gcbf !=nil {return nil ,nil ,_c .Wrap (_gcbf ,_egf ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");};default:_efff =4;_aadg ,_gcbf =_ca (_ccff ,1,1,0,0);if _gcbf !=nil {return nil ,nil ,_c .Wrap (_gcbf ,_egf ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");};};_acfb ,_ ,_bgeb :=_fdca (_aadg );if _bgeb !=nil {return nil ,nil ,_c .Wrap (_bgeb ,_egf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_gcg ,_bgeb :=_cfedf (_acfb ,_efff );if _bgeb !=nil {return nil ,nil ,_c .Wrap (_bgeb ,_egf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ddg :=&Bitmaps {};if _ecfa ,_bgeb =_gcg .ConnComponents (_ddg ,4);_bgeb !=nil {return nil ,nil ,_c .Wrap (_bgeb ,_egf ,"\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 _gdgc ,_bgeb =_ddg .ClipToBitmap (_ccff );_bgeb !=nil {return nil ,nil ,_c .Wrap (_bgeb ,_egf ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_gdgc ,_gcbf =_gdgc .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _gcbf !=nil {return nil ,nil ,_c .Wrap (_gcbf ,_egf ,"");};_ecfa ,_gcbf =_ecfa .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _gcbf !=nil {return nil ,nil ,_c .Wrap (_gcbf ,_egf ,"");};return _gdgc ,_ecfa ,nil ;};func (_ebfba Points )XSorter ()func (_fbgee ,_bbfe int )bool {return func (_aebd ,_egcd int )bool {return _ebfba [_aebd ].X < _ebfba [_egcd ].X };};func TstWordBitmapWithSpaces (t *_gg .T ,scale ...int )*Bitmap {_gadad :=1;if len (scale )> 0{_gadad =scale [0];};_ffdbd :=3;_dcefe :=9+7+15+2*_ffdbd +2*_ffdbd ;_aacfd :=5+_ffdbd +5+2*_ffdbd ;_gadec :=New (_dcefe *_gadad ,_aacfd *_gadad );_cfgb :=&Bitmaps {};var _egcfa *int ;_ffdbd *=_gadad ;_defb :=_ffdbd ;_egcfa =&_defb ;_bdac :=_ffdbd ;_eeaa :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,_ffdbd );_eeaa =TstISymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,_ffdbd );_eeaa =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,0);*_egcfa =_ffdbd ;_bdac =5*_gadad +_ffdbd ;_eeaa =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,_ffdbd );_eeaa =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,1*_gadad );_eeaa =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cfgb ,_eeaa ,_egcfa ,_bdac ,0);TstWriteSymbols (t ,_cfgb ,_gadec );return _gadec ;};func _addc (_ebac ,_afgg *Bitmap ,_eagc *Selection )(*Bitmap ,error ){const _fgea ="\u006f\u0070\u0065\u006e";var _bfbe error ;_ebac ,_bfbe =_gcdg (_ebac ,_afgg ,_eagc );if _bfbe !=nil {return nil ,_c .Wrap (_bfbe ,_fgea ,"");};_beda ,_bfbe :=_bagff (nil ,_afgg ,_eagc );if _bfbe !=nil {return nil ,_c .Wrap (_bfbe ,_fgea ,"");};_ ,_bfbe =_fadg (_ebac ,_beda ,_eagc );if _bfbe !=nil {return nil ,_c .Wrap (_bfbe ,_fgea ,"");};return _ebac ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gfaa ,_dacg int ;_eced :=src .RowStride -1;if x < 0{_dacg =-x ;x =0;}else if x +src .Width > dst .Width {_eced -=src .Width +x -dst .Width ;};if y < 0{_gfaa =-y ;y =0;_dacg +=src .RowStride ;_eced +=src .RowStride ;}else if y +src .Height > dst .Height {_gfaa =src .Height +y -dst .Height ;};var (_cbedg int ;_abca error ;);_gfe :=x &0x07;_ead :=8-_gfe ;_bacg :=src .Width &0x07;_gfad :=_ead -_bacg ;_gadga :=_ead &0x07!=0;_dcd :=src .Width <=((_eced -_dacg )<<3)+_ead ;_dbed :=dst .GetByteIndex (x ,y );_bgf :=_gfaa +dst .Height ;if src .Height > _bgf {_cbedg =_bgf ;}else {_cbedg =src .Height ;};switch {case !_gadga :_abca =_gfd (src ,dst ,_gfaa ,_cbedg ,_dbed ,_dacg ,_eced ,op );case _dcd :_abca =_cdgg (src ,dst ,_gfaa ,_cbedg ,_dbed ,_dacg ,_eced ,_gfad ,_gfe ,_ead ,op );default:_abca =_ggfb (src ,dst ,_gfaa ,_cbedg ,_dbed ,_dacg ,_eced ,_gfad ,_gfe ,_ead ,op ,_bacg );};return _abca ;};func TstNSymbol (t *_gg .T ,scale ...int )*Bitmap {_acgfd ,_faeg :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_g .NoError (t ,_faeg );return TstGetScaledSymbol (t ,_acgfd ,scale ...);};func (_ffe *Bitmap )ClipRectangle (box *_dd .Rectangle )(_aeba *Bitmap ,_dbd *_dd .Rectangle ,_cfe error ){const _bea ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_c .Error (_bea ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_ggd ,_afb :=_ffe .Width ,_ffe .Height ;_fgf :=_dd .Rect (0,0,_ggd ,_afb );if !box .Overlaps (_fgf ){return nil ,nil ,_c .Error (_bea ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_eebc :=box .Intersect (_fgf );_edg ,_cbg :=_eebc .Min .X ,_eebc .Min .Y ;_bgbg ,_fab :=_eebc .Dx (),_eebc .Dy ();_aeba =New (_bgbg ,_fab );_aeba .Text =_ffe .Text ;if _cfe =_aeba .RasterOperation (0,0,_bgbg ,_fab ,PixSrc ,_ffe ,_edg ,_cbg );_cfe !=nil {return nil ,nil ,_c .Wrap (_cfe ,_bea ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");};_dbd =&_eebc ;return _aeba ,_dbd ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _ec (_bg ,_a *Bitmap )(_cd error ){const _ee ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ba :=_a .RowStride ;_bag :=_bg .RowStride ;var (_ef byte ;_eb uint16 ;_bga ,_fb ,_bc ,_db ,_ae int ;);for _bc =0;_bc < _a .Height ;_bc ++{_bga =_bc *_ba ;_fb =2*_bc *_bag ;for _db =0;_db < _ba ;_db ++{_ef =_a .Data [_bga +_db ];_eb =_fffg [_ef ];_ae =_fb +_db *2;if _bg .RowStride !=_a .RowStride *2&&(_db +1)*2> _bg .RowStride {_cd =_bg .SetByte (_ae ,byte (_eb >>8));}else {_cd =_bg .setTwoBytes (_ae ,_eb );};if _cd !=nil {return _c .Wrap (_cd ,_ee ,"");};};for _db =0;_db < _bag ;_db ++{_ae =_fb +_bag +_db ;_ef =_bg .Data [_fb +_db ];if _cd =_bg .SetByte (_ae ,_ef );_cd !=nil {return _c .Wrapf (_cd ,_ee ,"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",_fb +_db ,_fb +_bag +_db );};};};return nil ;};func _aacf (_dae *_ff .Stack ,_bdea ,_gdge ,_gfff ,_aaad ,_bfdgc int ,_gabe *_dd .Rectangle )(_bgde error ){const _ffcfe ="\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 _dae ==nil {return _c .Error (_ffcfe ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gabe ==nil {return _c .Error (_ffcfe ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");};_gabe .Min .X =_ff .Min (_gabe .Min .X ,_bdea );_gabe .Max .X =_ff .Max (_gabe .Max .X ,_gdge );_gabe .Min .Y =_ff .Min (_gabe .Min .Y ,_gfff );_gabe .Max .Y =_ff .Max (_gabe .Max .Y ,_gfff );if !(_gfff +_aaad >=0&&_gfff +_aaad <=_bfdgc ){return nil ;};if _dae .Aux ==nil {return _c .Error (_ffcfe ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _eagb *fillSegment ;_edfa ,_agede :=_dae .Aux .Pop ();if _agede {if _eagb ,_agede =_edfa .(*fillSegment );!_agede {return _c .Error (_ffcfe ,"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 {_eagb =&fillSegment {};};_eagb ._acda =_bdea ;_eagb ._egaba =_gdge ;_eagb ._bggb =_gfff ;_eagb ._dafe =_aaad ;_dae .Push (_eagb );return nil ;};func _dacd (_agad *Bitmap ,_gaabb ,_caba ,_gbdf ,_fcega int ,_eaagg RasterOperator ,_edfea *Bitmap ,_fbbf ,_dafd int )error {const _bedc ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _agad ==nil {return _c .Error (_bedc ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _eaagg ==PixDst {return nil ;};switch _eaagg {case PixClr ,PixSet ,PixNotDst :_aec (_agad ,_gaabb ,_caba ,_gbdf ,_fcega ,_eaagg );return nil ;};if _edfea ==nil {_fge .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 _c .Error (_bedc ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _efac :=_cccba (_agad ,_gaabb ,_caba ,_gbdf ,_fcega ,_eaagg ,_edfea ,_fbbf ,_dafd );_efac !=nil {return _c .Wrap (_efac ,_bedc ,"");};return nil ;};func TstImageBitmapData ()[]byte {return _dggg .Data };func TstOSymbol (t *_gg .T ,scale ...int )*Bitmap {_gbcdb ,_dbbdc :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_g .NoError (t ,_dbbdc );return TstGetScaledSymbol (t ,_gbcdb ,scale ...);};func (_cgcaa *Boxes )makeSizeIndicator (_egd ,_ddae int ,_ebbg LocationFilter ,_cfg SizeComparison )*_ff .NumSlice {_gegc :=&_ff .NumSlice {};var _eeeb ,_cddf ,_dgcc int ;for _ ,_aggg :=range *_cgcaa {_eeeb =0;_cddf ,_dgcc =_aggg .Dx (),_aggg .Dy ();switch _ebbg {case LocSelectWidth :if (_cfg ==SizeSelectIfLT &&_cddf < _egd )||(_cfg ==SizeSelectIfGT &&_cddf > _egd )||(_cfg ==SizeSelectIfLTE &&_cddf <=_egd )||(_cfg ==SizeSelectIfGTE &&_cddf >=_egd ){_eeeb =1;};case LocSelectHeight :if (_cfg ==SizeSelectIfLT &&_dgcc < _ddae )||(_cfg ==SizeSelectIfGT &&_dgcc > _ddae )||(_cfg ==SizeSelectIfLTE &&_dgcc <=_ddae )||(_cfg ==SizeSelectIfGTE &&_dgcc >=_ddae ){_eeeb =1;};case LocSelectIfEither :if (_cfg ==SizeSelectIfLT &&(_dgcc < _ddae ||_cddf < _egd ))||(_cfg ==SizeSelectIfGT &&(_dgcc > _ddae ||_cddf > _egd ))||(_cfg ==SizeSelectIfLTE &&(_dgcc <=_ddae ||_cddf <=_egd ))||(_cfg ==SizeSelectIfGTE &&(_dgcc >=_ddae ||_cddf >=_egd )){_eeeb =1;};case LocSelectIfBoth :if (_cfg ==SizeSelectIfLT &&(_dgcc < _ddae &&_cddf < _egd ))||(_cfg ==SizeSelectIfGT &&(_dgcc > _ddae &&_cddf > _egd ))||(_cfg ==SizeSelectIfLTE &&(_dgcc <=_ddae &&_cddf <=_egd ))||(_cfg ==SizeSelectIfGTE &&(_dgcc >=_ddae &&_cddf >=_egd )){_eeeb =1;};};_gegc .AddInt (_eeeb );};return _gegc ;};func TstWSymbol (t *_gg .T ,scale ...int )*Bitmap {_dfgeg ,_eeda :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_g .NoError (t ,_eeda );return TstGetScaledSymbol (t ,_dfgeg ,scale ...);};type RasterOperator int ;func (_adfd *Boxes )Add (box *_dd .Rectangle )error {if _adfd ==nil {return _c .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");};*_adfd =append (*_adfd ,box );return nil ;};func (_bebg *Bitmap )ToImage ()_dd .Image {_ecbd ,_abd :=_d .NewImage (_bebg .Width ,_bebg .Height ,1,1,_bebg .Data ,nil ,nil );if _abd !=nil {_fge .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",_abd );};return _ecbd ;};func (_agaac *Bitmap )setEightFullBytes (_geaf int ,_eaaf uint64 )error {if _geaf +7> len (_agaac .Data )-1{return _c .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");};_agaac .Data [_geaf ]=byte ((_eaaf &0xff00000000000000)>>56);_agaac .Data [_geaf +1]=byte ((_eaaf &0xff000000000000)>>48);_agaac .Data [_geaf +2]=byte ((_eaaf &0xff0000000000)>>40);_agaac .Data [_geaf +3]=byte ((_eaaf &0xff00000000)>>32);_agaac .Data [_geaf +4]=byte ((_eaaf &0xff000000)>>24);_agaac .Data [_geaf +5]=byte ((_eaaf &0xff0000)>>16);_agaac .Data [_geaf +6]=byte ((_eaaf &0xff00)>>8);_agaac .Data [_geaf +7]=byte (_eaaf &0xff);return nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);var (_fffg =_be ();_ebde =_ebb ();_adbe =_df (););func (_fffd *Bitmaps )WidthSorter ()func (_cafc ,_dcae int )bool {return func (_cabd ,_bcbd int )bool {return _fffd .Values [_cabd ].Width < _fffd .Values [_bcbd ].Width };};func _gfce (_abac ,_dfgc byte ,_bfg CombinationOperator )byte {switch _bfg {case CmbOpOr :return _dfgc |_abac ;case CmbOpAnd :return _dfgc &_abac ;case CmbOpXor :return _dfgc ^_abac ;case CmbOpXNor :return ^(_dfgc ^_abac );case CmbOpNot :return ^(_dfgc );default:return _dfgc ;};};func (_cff *ClassedPoints )xSortFunction ()func (_aggb int ,_fcea int )bool {return func (_agfef ,_bbeg int )bool {return _cff .XAtIndex (_agfef )< _cff .XAtIndex (_bbeg )};};func (_cdg *Bitmap )GetPixel (x ,y int )bool {_bace :=_cdg .GetByteIndex (x ,y );_baed :=_cdg .GetBitOffset (x );_bfd :=uint (7-_baed );if _bace > len (_cdg .Data )-1{_fge .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 ,_cdg );return false ;};if (_cdg .Data [_bace ]>>_bfd )&0x01>=1{return true ;};return false ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _cebd ="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 ,_c .Error (_cebd ,"\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 ,_c .Error (_cebd ,"\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 ,_c .Error (_cebd ,"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 ,_c .Error (_cebd ,"\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 ,_c .Error (_cebd ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");};_ccea ,_bead :=bm1 .Width ,bm1 .Height ;_acdb ,_bdgd :=bm2 .Width ,bm2 .Height ;if _ff .Abs (_ccea -_acdb )> maxDiffW {return false ,nil ;};if _ff .Abs (_bead -_bdgd )> maxDiffH {return false ,nil ;};_febf :=int (delX +_ff .Sign (delX )*0.5);_bef :=int (delY +_ff .Sign (delY )*0.5);_gadf :=int (_ffg .Ceil (_ffg .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_eeca :=bm2 .RowStride ;_eebcd :=_dgea (_bef ,0);_edee :=_fdb (_bdgd +_bef ,_bead );_caf :=bm1 .RowStride *_eebcd ;_bccb :=bm2 .RowStride *(_eebcd -_bef );var _ffcf int ;if _edee <=_bead {_ffcf =downcount [_edee -1];};_gbfd :=_dgea (_febf ,0);_gdbc :=_fdb (_acdb +_febf ,_ccea );var _cbcb ,_ageb int ;if _febf >=8{_cbcb =_febf >>3;_caf +=_cbcb ;_gbfd -=_cbcb <<3;_gdbc -=_cbcb <<3;_febf &=7;}else if _febf <=-8{_ageb =-((_febf +7)>>3);_bccb +=_ageb ;_eeca -=_ageb ;_febf +=_ageb <<3;};var (_caged ,_edfg ,_fda int ;_fdec ,_cbea ,_gbge byte ;);if _gbfd >=_gdbc ||_eebcd >=_edee {return false ,nil ;};_faef :=(_gdbc +7)>>3;switch {case _febf ==0:for _edfg =_eebcd ;_edfg < _edee ;_edfg ,_caf ,_bccb =_edfg +1,_caf +bm1 .RowStride ,_bccb +bm2 .RowStride {for _fda =0;_fda < _faef ;_fda ++{_fdec =bm1 .Data [_caf +_fda ]&bm2 .Data [_bccb +_fda ];_caged +=tab [_fdec ];};if _caged >=_gadf {return true ,nil ;};if _debf :=_caged +downcount [_edfg ]-_ffcf ;_debf < _gadf {return false ,nil ;};};case _febf > 0&&_eeca < _faef :for _edfg =_eebcd ;_edfg < _edee ;_edfg ,_caf ,_bccb =_edfg +1,_caf +bm1 .RowStride ,_bccb +bm2 .RowStride {_cbea =bm1 .Data [_caf ];_gbge =bm2 .Data [_bccb ]>>uint (_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];for _fda =1;_fda < _eeca ;_fda ++{_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda ]>>uint (_febf )|bm2 .Data [_bccb +_fda -1]<<uint (8-_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];};_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda -1]<<uint (8-_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];if _caged >=_gadf {return true ,nil ;}else if _caged +downcount [_edfg ]-_ffcf < _gadf {return false ,nil ;};};case _febf > 0&&_eeca >=_faef :for _edfg =_eebcd ;_edfg < _edee ;_edfg ,_caf ,_bccb =_edfg +1,_caf +bm1 .RowStride ,_bccb +bm2 .RowStride {_cbea =bm1 .Data [_caf ];_gbge =bm2 .Data [_bccb ]>>uint (_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];for _fda =1;_fda < _faef ;_fda ++{_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda ]>>uint (_febf );_gbge |=bm2 .Data [_bccb +_fda -1]<<uint (8-_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];};if _caged >=_gadf {return true ,nil ;}else if _caged +downcount [_edfg ]-_ffcf < _gadf {return false ,nil ;};};case _faef < _eeca :for _edfg =_eebcd ;_edfg < _edee ;_edfg ,_caf ,_bccb =_edfg +1,_caf +bm1 .RowStride ,_bccb +bm2 .RowStride {for _fda =0;_fda < _faef ;_fda ++{_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda ]<<uint (-_febf );_gbge |=bm2 .Data [_bccb +_fda +1]>>uint (8+_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];};if _caged >=_gadf {return true ,nil ;}else if _aaed :=_caged +downcount [_edfg ]-_ffcf ;_aaed < _gadf {return false ,nil ;};};case _eeca >=_faef :for _edfg =_eebcd ;_edfg < _edee ;_edfg ,_caf ,_bccb =_edfg +1,_caf +bm1 .RowStride ,_bccb +bm2 .RowStride {for _fda =0;_fda < _faef ;_fda ++{_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda ]<<uint (-_febf );_gbge |=bm2 .Data [_bccb +_fda +1]>>uint (8+_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];};_cbea =bm1 .Data [_caf +_fda ];_gbge =bm2 .Data [_bccb +_fda ]<<uint (-_febf );_fdec =_cbea &_gbge ;_caged +=tab [_fdec ];if _caged >=_gadf {return true ,nil ;}else if _caged +downcount [_edfg ]-_ffcf < _gadf {return false ,nil ;};};};_cbf :=float32 (_caged )*float32 (_caged )/(float32 (area1 )*float32 (area2 ));if _cbf >=scoreThreshold {_fge .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",_caged ,_gadf ,_cbf ,scoreThreshold );};return false ,nil ;};func _abg (_gcgg ,_egcg *Bitmap ,_egee ,_gebcb int )(*Bitmap ,error ){const _eeff ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _egcg ==nil {return nil ,_c .Error (_eeff ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _egee < 1&&_gebcb < 1{return nil ,_c .Error (_eeff ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _egee ==1&&_gebcb ==1{return _egcg .Copy (),nil ;};if _egee ==1||_gebcb ==1{var _efead error ;_efbe :=SelCreateBrick (_gebcb ,_egee ,_gebcb /2,_egee /2,SelHit );_gcgg ,_efead =_addc (_gcgg ,_egcg ,_efbe );if _efead !=nil {return nil ,_c .Wrap (_efead ,_eeff ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _gcgg ,nil ;};_fdefa :=SelCreateBrick (1,_egee ,0,_egee /2,SelHit );_dcbfg :=SelCreateBrick (_gebcb ,1,_gebcb /2,0,SelHit );_bbfcg ,_fbce :=_bagff (nil ,_egcg ,_fdefa );if _fbce !=nil {return nil ,_c .Wrap (_fbce ,_eeff ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");};_gcgg ,_fbce =_bagff (_gcgg ,_bbfcg ,_dcbfg );if _fbce !=nil {return nil ,_c .Wrap (_fbce ,_eeff ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_fbce =_fadg (_bbfcg ,_gcgg ,_fdefa );if _fbce !=nil {return nil ,_c .Wrap (_fbce ,_eeff ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_ ,_fbce =_fadg (_gcgg ,_bbfcg ,_dcbfg );if _fbce !=nil {return nil ,_c .Wrap (_fbce ,_eeff ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _gcgg ,nil ;};func (_eadcd *ClassedPoints )YAtIndex (i int )float32 {return (*_eadcd .Points )[_eadcd .IntSlice [i ]].Y };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 _bbf (_geg *Bitmap ,_gb ,_bgb int )(*Bitmap ,error ){const _ed ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _geg ==nil {return nil ,_c .Error (_ed ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gb <=0||_bgb <=0{return nil ,_c .Error (_ed ,"\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 _gb ==_bgb {if _gb ==1{_eefe ,_fbf :=_fada (nil ,_geg );if _fbf !=nil {return nil ,_c .Wrap (_fbf ,_ed ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _eefe ,nil ;};if _gb ==2||_gb ==4||_gb ==8{_eab ,_gfc :=_dga (_geg ,_gb );if _gfc !=nil {return nil ,_c .Wrap (_gfc ,_ed ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _eab ,nil ;};};_eeg :=_gb *_geg .Width ;_ecef :=_bgb *_geg .Height ;_bbfc :=New (_eeg ,_ecef );_bfa :=_bbfc .RowStride ;var (_gbd ,_gfcb ,_bbe ,_bcc ,_cf int ;_bcf byte ;_dda error ;);for _gfcb =0;_gfcb < _geg .Height ;_gfcb ++{_gbd =_bgb *_gfcb *_bfa ;for _bbe =0;_bbe < _geg .Width ;_bbe ++{if _bcff :=_geg .GetPixel (_bbe ,_gfcb );_bcff {_cf =_gb *_bbe ;for _bcc =0;_bcc < _gb ;_bcc ++{_bbfc .setBit (_gbd *8+_cf +_bcc );};};};for _bcc =1;_bcc < _bgb ;_bcc ++{_bgcd :=_gbd +_bcc *_bfa ;for _cg :=0;_cg < _bfa ;_cg ++{if _bcf ,_dda =_bbfc .GetByte (_gbd +_cg );_dda !=nil {return nil ,_c .Wrapf (_dda ,_ed ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bcc );};if _dda =_bbfc .SetByte (_bgcd +_cg ,_bcf );_dda !=nil {return nil ,_c .Wrap (_dda ,_ed ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _bbfc ,nil ;};func (_egad *Bitmaps )SortByHeight (){_bdbdbf :=(*byHeight )(_egad );_e .Sort (_bdbdbf )};func (_fgac *Points )Add (pt *Points )error {const _ecag ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _fgac ==nil {return _c .Error (_ecag ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _c .Error (_ecag ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_fgac =append (*_fgac ,*pt ...);return nil ;};func TstRSymbol (t *_gg .T ,scale ...int )*Bitmap {_dcgdg ,_ebadge :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_g .NoError (t ,_ebadge );return TstGetScaledSymbol (t ,_dcgdg ,scale ...);};func _fbd (_af ,_cc *Bitmap )(_dg error ){const _ad ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_dab :=_cc .RowStride ;_eef :=_af .RowStride ;var _dag ,_bf ,_bae ,_ebd ,_bgc int ;for _bae =0;_bae < _cc .Height ;_bae ++{_dag =_bae *_dab ;_bf =8*_bae *_eef ;for _ebd =0;_ebd < _dab ;_ebd ++{if _dg =_af .setEightBytes (_bf +_ebd *8,_adbe [_cc .Data [_dag +_ebd ]]);_dg !=nil {return _c .Wrap (_dg ,_ad ,"");};};for _bgc =1;_bgc < 8;_bgc ++{for _ebd =0;_ebd < _eef ;_ebd ++{if _dg =_af .SetByte (_bf +_bgc *_eef +_ebd ,_af .Data [_bf +_ebd ]);_dg !=nil {return _c .Wrap (_dg ,_ad ,"");};};};};return nil ;};var (_eccd =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gfag =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_ccfed *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _dfgce ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_ccfed .Values )==0{return nil ,_c .Error (_dfgce ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_bcb :=&BitmapsArray {};_ccfed .SortByHeight ();_agea :=-1;_gdee :=-1;for _baaca :=0;_baaca < len (_ccfed .Values );_baaca ++{_dadg :=_ccfed .Values [_baaca ].Height ;if _dadg > _agea {_agea =_dadg ;_gdee ++;_bcb .Values =append (_bcb .Values ,&Bitmaps {});};_bcb .Values [_gdee ].AddBitmap (_ccfed .Values [_baaca ]);};return _bcb ,nil ;};func (_egdd *Bitmaps )Size ()int {return len (_egdd .Values )};func (_efacg *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _babdb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _efacg ==nil {return nil ,_c .Error (_babdb ,"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 (_efacg .Values )-1{return nil ,_c .Errorf (_babdb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _efacg .Values [i ],nil ;};func _fbfc (_eca uint ,_cbdb byte )byte {return _cbdb >>_eca <<_eca };func _bgag ()[]int {_bbdfa :=make ([]int ,256);for _dgda :=0;_dgda <=0xff;_dgda ++{_cdggb :=byte (_dgda );_bbdfa [_cdggb ]=int (_cdggb &0x1)+(int (_cdggb >>1)&0x1)+(int (_cdggb >>2)&0x1)+(int (_cdggb >>3)&0x1)+(int (_cdggb >>4)&0x1)+(int (_cdggb >>5)&0x1)+(int (_cdggb >>6)&0x1)+(int (_cdggb >>7)&0x1);};return _bbdfa ;};func Rect (x ,y ,w ,h int )(*_dd .Rectangle ,error ){const _cfaf ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_cfaf ,"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 ,_c .Error (_cfaf ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_gefb :=_dd .Rect (x ,y ,x +w ,y +h );return &_gefb ,nil ;};func (_ecgf Points )Size ()int {return len (_ecgf )};func _dfbfg (_agga ,_gacb *Bitmap ,_edda ,_ddfc int )(*Bitmap ,error ){const _bbaa ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _gacb ==nil {_fge .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 ,_c .Error (_bbaa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _edda < 1||_ddfc < 1{return nil ,_c .Error (_bbaa ,"\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 _edda ==1&&_ddfc ==1{_ccbe ,_cceb :=_fada (_agga ,_gacb );if _cceb !=nil {return nil ,_c .Wrap (_cceb ,_bbaa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _ccbe ,nil ;};if _edda ==1||_ddfc ==1{_efad :=SelCreateBrick (_ddfc ,_edda ,_ddfc /2,_edda /2,SelHit );_abe ,_ecedf :=_fadg (_agga ,_gacb ,_efad );if _ecedf !=nil {return nil ,_c .Wrap (_ecedf ,_bbaa ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _abe ,nil ;};_dffa :=SelCreateBrick (1,_edda ,0,_edda /2,SelHit );_aggc :=SelCreateBrick (_ddfc ,1,_ddfc /2,0,SelHit );_dcec ,_dcbd :=_fadg (nil ,_gacb ,_dffa );if _dcbd !=nil {return nil ,_c .Wrap (_dcbd ,_bbaa ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};_agga ,_dcbd =_fadg (_agga ,_dcec ,_aggc );if _dcbd !=nil {return nil ,_c .Wrap (_dcbd ,_bbaa ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _agga ,nil ;};func (_cfbae *Selection )setOrigin (_badf ,_fdbb int ){_cfbae .Cy ,_cfbae .Cx =_badf ,_fdbb };func _aba (_gge ,_ddad *Bitmap ,_cga int ,_fdf []byte ,_gdc int )(_cgb error ){const _dge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";var (_geb ,_ecb ,_cea ,_bfac ,_ggaa ,_cada ,_fc ,_cbe int ;_ggg ,_fba ,_adf ,_bbfca uint32 ;_dbb ,_bagf byte ;_fde uint16 ;);_fbff :=make ([]byte ,4);_fe :=make ([]byte ,4);for _cea =0;_cea < _gge .Height -1;_cea ,_bfac =_cea +2,_bfac +1{_geb =_cea *_gge .RowStride ;_ecb =_bfac *_ddad .RowStride ;for _ggaa ,_cada =0,0;_ggaa < _gdc ;_ggaa ,_cada =_ggaa +4,_cada +1{for _fc =0;_fc < 4;_fc ++{_cbe =_geb +_ggaa +_fc ;if _cbe <=len (_gge .Data )-1&&_cbe < _geb +_gge .RowStride {_fbff [_fc ]=_gge .Data [_cbe ];}else {_fbff [_fc ]=0x00;};_cbe =_geb +_gge .RowStride +_ggaa +_fc ;if _cbe <=len (_gge .Data )-1&&_cbe < _geb +(2*_gge .RowStride ){_fe [_fc ]=_gge .Data [_cbe ];}else {_fe [_fc ]=0x00;};};_ggg =_dc .BigEndian .Uint32 (_fbff );_fba =_dc .BigEndian .Uint32 (_fe );_adf =_ggg &_fba ;_adf |=_adf <<1;_bbfca =_ggg |_fba ;_bbfca &=_bbfca <<1;_fba =_adf |_bbfca ;_fba &=0xaaaaaaaa;_ggg =_fba |(_fba <<7);_dbb =byte (_ggg >>24);_bagf =byte ((_ggg >>8)&0xff);_cbe =_ecb +_cada ;if _cbe +1==len (_ddad .Data )-1||_cbe +1>=_ecb +_ddad .RowStride {if _cgb =_ddad .SetByte (_cbe ,_fdf [_dbb ]);_cgb !=nil {return _c .Wrapf (_cgb ,_dge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_cbe );};}else {_fde =(uint16 (_fdf [_dbb ])<<8)|uint16 (_fdf [_bagf ]);if _cgb =_ddad .setTwoBytes (_cbe ,_fde );_cgb !=nil {return _c .Wrapf (_cgb ,_dge ,"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",_cbe );};_cada ++;};};};return nil ;};func New (width ,height int )*Bitmap {_cfbf :=_gbaf (width ,height );_cfbf .Data =make ([]byte ,height *_cfbf .RowStride );return _cfbf ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_debe *Bitmap )removeBorderGeneral (_fgef ,_add ,_aged ,_dddc int )(*Bitmap ,error ){const _fdfe ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _fgef < 0||_add < 0||_aged < 0||_dddc < 0{return nil ,_c .Error (_fdfe ,"\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");};_efe ,_bbed :=_debe .Width ,_debe .Height ;_bce :=_efe -_fgef -_add ;_efge :=_bbed -_aged -_dddc ;if _bce <=0{return nil ,_c .Errorf (_fdfe ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_bce );};if _efge <=0{return nil ,_c .Errorf (_fdfe ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_efge );};_ega :=New (_bce ,_efge );_ega .Color =_debe .Color ;_fded :=_ega .RasterOperation (0,0,_bce ,_efge ,PixSrc ,_debe ,_fgef ,_aged );if _fded !=nil {return nil ,_c .Wrap (_fded ,_fdfe ,"");};return _ega ,nil ;};func (_dgafg *Bitmap )equivalent (_caa *Bitmap )bool {if _dgafg ==_caa {return true ;};if !_dgafg .SizesEqual (_caa ){return false ;};_gada :=_fbbb (_dgafg ,_caa ,CmbOpXor );_dcce :=_dgafg .countPixels ();_aad :=int (0.25*float32 (_dcce ));if _gada .thresholdPixelSum (_aad ){return false ;};var (_dgg [9][9]int ;_egc [18][9]int ;_fbbd [9][18]int ;_ade int ;_dee int ;);_bgeg :=9;_dad :=_dgafg .Height /_bgeg ;_eeaf :=_dgafg .Width /_bgeg ;_cagd ,_fcac :=_dad /2,_eeaf /2;if _dad < _eeaf {_cagd =_eeaf /2;_fcac =_dad /2;};_gbegf :=float64 (_cagd )*float64 (_fcac )*_ffg .Pi ;_eggb :=int (float64 (_dad *_eeaf /2)*0.9);_bad :=int (float64 (_eeaf *_dad /2)*0.9);for _bde :=0;_bde < _bgeg ;_bde ++{_gebg :=_eeaf *_bde +_ade ;var _fcb int ;if _bde ==_bgeg -1{_ade =0;_fcb =_dgafg .Width ;}else {_fcb =_gebg +_eeaf ;if ((_dgafg .Width -_ade )%_bgeg )> 0{_ade ++;_fcb ++;};};for _cggd :=0;_cggd < _bgeg ;_cggd ++{_fege :=_dad *_cggd +_dee ;var _agaa int ;if _cggd ==_bgeg -1{_dee =0;_agaa =_dgafg .Height ;}else {_agaa =_fege +_dad ;if (_dgafg .Height -_dee )%_bgeg > 0{_dee ++;_agaa ++;};};var _gaeb ,_edb ,_fed ,_dgb int ;_gfgf :=(_gebg +_fcb )/2;_age :=(_fege +_agaa )/2;for _acbf :=_gebg ;_acbf < _fcb ;_acbf ++{for _bed :=_fege ;_bed < _agaa ;_bed ++{if _gada .GetPixel (_acbf ,_bed ){if _acbf < _gfgf {_gaeb ++;}else {_edb ++;};if _bed < _age {_dgb ++;}else {_fed ++;};};};};_dgg [_bde ][_cggd ]=_gaeb +_edb ;_egc [_bde *2][_cggd ]=_gaeb ;_egc [_bde *2+1][_cggd ]=_edb ;_fbbd [_bde ][_cggd *2]=_dgb ;_fbbd [_bde ][_cggd *2+1]=_fed ;};};for _cgaf :=0;_cgaf < _bgeg *2-1;_cgaf ++{for _cadd :=0;_cadd < (_bgeg -1);_cadd ++{var _dggc int ;for _fcee :=0;_fcee < 2;_fcee ++{for _aaee :=0;_aaee < 2;_aaee ++{_dggc +=_egc [_cgaf +_fcee ][_cadd +_aaee ];};};if _dggc > _bad {return false ;};};};for _bafe :=0;_bafe < (_bgeg -1);_bafe ++{for _eafd :=0;_eafd < ((_bgeg *2)-1);_eafd ++{var _bab int ;for _cda :=0;_cda < 2;_cda ++{for _fgae :=0;_fgae < 2;_fgae ++{_bab +=_fbbd [_bafe +_cda ][_eafd +_fgae ];};};if _bab > _eggb {return false ;};};};for _dgdb :=0;_dgdb < (_bgeg -2);_dgdb ++{for _edgf :=0;_edgf < (_bgeg -2);_edgf ++{var _feb ,_ddea int ;for _babe :=0;_babe < 3;_babe ++{for _gebdg :=0;_gebdg < 3;_gebdg ++{if _babe ==_gebdg {_feb +=_dgg [_dgdb +_babe ][_edgf +_gebdg ];};if (2-_babe )==_gebdg {_ddea +=_dgg [_dgdb +_babe ][_edgf +_gebdg ];};};};if _feb > _bad ||_ddea > _bad {return false ;};};};for _bfc :=0;_bfc < (_bgeg -1);_bfc ++{for _dgc :=0;_dgc < (_bgeg -1);_dgc ++{var _ceb int ;for _cggf :=0;_cggf < 2;_cggf ++{for _cdac :=0;_cdac < 2;_cdac ++{_ceb +=_dgg [_bfc +_cggf ][_dgc +_cdac ];};};if float64 (_ceb )> _gbegf {return false ;};};};return true ;};func _fbbb (_feeg ,_ccbf *Bitmap ,_cdbd CombinationOperator )*Bitmap {_cddg :=New (_feeg .Width ,_feeg .Height );for _ecaf :=0;_ecaf < len (_cddg .Data );_ecaf ++{_cddg .Data [_ecaf ]=_gfce (_feeg .Data [_ecaf ],_ccbf .Data [_ecaf ],_cdbd );};return _cddg ;};func (_eaf *Bitmap )SetDefaultPixel (){for _ggf :=range _eaf .Data {_eaf .Data [_ggf ]=byte (0xff);};};func (_aab *Bitmap )Copy ()*Bitmap {_gggd :=make ([]byte ,len (_aab .Data ));copy (_gggd ,_aab .Data );return &Bitmap {Width :_aab .Width ,Height :_aab .Height ,RowStride :_aab .RowStride ,Data :_gggd ,Color :_aab .Color ,Text :_aab .Text ,BitmapNumber :_aab .BitmapNumber ,Special :_aab .Special };};func (_eeba *Bitmaps )selectByIndexes (_agcga []int )(*Bitmaps ,error ){_dgabd :=&Bitmaps {};for _ ,_gegd :=range _agcga {_aefgd ,_edfef :=_eeba .GetBitmap (_gegd );if _edfef !=nil {return nil ,_c .Wrap (_edfef ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_dgabd .AddBitmap (_aefgd );};return _dgabd ,nil ;};func (_dbfa *Boxes )selectWithIndicator (_gdgf *_ff .NumSlice )(_bbad *Boxes ,_gfgeg error ){const _fceg ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _dbfa ==nil {return nil ,_c .Error (_fceg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _gdgf ==nil {return nil ,_c .Error (_fceg ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gdgf )!=len (*_dbfa ){return nil ,_c .Error (_fceg ,"\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 _dadf ,_eadc int ;for _fbae :=0;_fbae < len (*_gdgf );_fbae ++{if _dadf ,_gfgeg =_gdgf .GetInt (_fbae );_gfgeg !=nil {return nil ,_c .Wrap (_gfgeg ,_fceg ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _dadf ==1{_eadc ++;};};if _eadc ==len (*_dbfa ){return _dbfa ,nil ;};_acdc :=Boxes {};for _ebfdf :=0;_ebfdf < len (*_gdgf );_ebfdf ++{_dadf =int ((*_gdgf )[_ebfdf ]);if _dadf ==0{continue ;};_acdc =append (_acdc ,(*_dbfa )[_ebfdf ]);};_bbad =&_acdc ;return _bbad ,nil ;};func (_badd *Bitmap )thresholdPixelSum (_eegg int )bool {var (_febd int ;_ccgb uint8 ;_cdb byte ;_bff int ;);_ddf :=_badd .RowStride ;_agbb :=uint (_badd .Width &0x07);if _agbb !=0{_ccgb =uint8 ((0xff<<(8-_agbb ))&0xff);_ddf --;};for _adb :=0;_adb < _badd .Height ;_adb ++{for _bff =0;_bff < _ddf ;_bff ++{_cdb =_badd .Data [_adb *_badd .RowStride +_bff ];_febd +=int (_fdee [_cdb ]);};if _agbb !=0{_cdb =_badd .Data [_adb *_badd .RowStride +_bff ]&_ccgb ;_febd +=int (_fdee [_cdb ]);};if _febd > _eegg {return true ;};};return false ;};func (_feed *BitmapsArray )GetBox (i int )(*_dd .Rectangle ,error ){const _bdeac ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _feed ==nil {return nil ,_c .Error (_bdeac ,"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 (_feed .Boxes )-1{return nil ,_c .Errorf (_bdeac ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _feed .Boxes [i ],nil ;};func _dgd (_fdfb ,_agf *Bitmap ,_dac int ,_deb []byte ,_afc int )(_cfb error ){const _fcd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_ggb ,_afg ,_ace ,_dfa ,_ffce ,_acf ,_gca ,_fgec int ;_gdf ,_eac ,_dbe ,_ddd uint32 ;_gfg ,_gebc byte ;_afd uint16 ;);_dcab :=make ([]byte ,4);_gce :=make ([]byte ,4);for _ace =0;_ace < _fdfb .Height -1;_ace ,_dfa =_ace +2,_dfa +1{_ggb =_ace *_fdfb .RowStride ;_afg =_dfa *_agf .RowStride ;for _ffce ,_acf =0,0;_ffce < _afc ;_ffce ,_acf =_ffce +4,_acf +1{for _gca =0;_gca < 4;_gca ++{_fgec =_ggb +_ffce +_gca ;if _fgec <=len (_fdfb .Data )-1&&_fgec < _ggb +_fdfb .RowStride {_dcab [_gca ]=_fdfb .Data [_fgec ];}else {_dcab [_gca ]=0x00;};_fgec =_ggb +_fdfb .RowStride +_ffce +_gca ;if _fgec <=len (_fdfb .Data )-1&&_fgec < _ggb +(2*_fdfb .RowStride ){_gce [_gca ]=_fdfb .Data [_fgec ];}else {_gce [_gca ]=0x00;};};_gdf =_dc .BigEndian .Uint32 (_dcab );_eac =_dc .BigEndian .Uint32 (_gce );_dbe =_gdf &_eac ;_dbe |=_dbe <<1;_ddd =_gdf |_eac ;_ddd &=_ddd <<1;_eac =_dbe &_ddd ;_eac &=0xaaaaaaaa;_gdf =_eac |(_eac <<7);_gfg =byte (_gdf >>24);_gebc =byte ((_gdf >>8)&0xff);_fgec =_afg +_acf ;if _fgec +1==len (_agf .Data )-1||_fgec +1>=_afg +_agf .RowStride {if _cfb =_agf .SetByte (_fgec ,_deb [_gfg ]);_cfb !=nil {return _c .Wrapf (_cfb ,_fcd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fgec );};}else {_afd =(uint16 (_deb [_gfg ])<<8)|uint16 (_deb [_gebc ]);if _cfb =_agf .setTwoBytes (_fgec ,_afd );_cfb !=nil {return _c .Wrapf (_cfb ,_fcd ,"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",_fgec );};_acf ++;};};};return nil ;};func (_ccfff *Bitmaps )SortByWidth (){_ddbbf :=(*byWidth )(_ccfff );_e .Sort (_ddbbf )};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _fadg (d ,s ,sel )};func TstTSymbol (t *_gg .T ,scale ...int )*Bitmap {_ggcgc ,_cbfe :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_g .NoError (t ,_cbfe );return TstGetScaledSymbol (t ,_ggcgc ,scale ...);};func (_feg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _feg .Copy (),nil ;};_abab ,_bgcf :=_feg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _bgcf !=nil {return nil ,_c .Wrap (_bgcf ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _abab ,nil ;};var _fgcfd =[]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 MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _cccb (src ,sequence ...);};func (_ffdc *Bitmap )GetVanillaData ()[]byte {if _ffdc .Color ==Chocolate {_ffdc .inverseData ();};return _ffdc .Data ;};func (_fgccb *Bitmap )setAll ()error {_eec :=_dacd (_fgccb ,0,0,_fgccb .Width ,_fgccb .Height ,PixSet ,nil ,0,0);if _eec !=nil {return _c .Wrap (_eec ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func TstWordBitmap (t *_gg .T ,scale ...int )*Bitmap {_aafff :=1;if len (scale )> 0{_aafff =scale [0];};_baeed :=3;_bdeb :=9+7+15+2*_baeed ;_bfec :=5+_baeed +5;_agac :=New (_bdeb *_aafff ,_bfec *_aafff );_ggfc :=&Bitmaps {};var _dece *int ;_baeed *=_aafff ;_befd :=0;_dece =&_befd ;_bgccb :=0;_gddb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,_baeed );_gddb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,_baeed );_gddb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,0);*_dece =0;_bgccb =5*_aafff +_baeed ;_gddb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,_baeed );_gddb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,1*_aafff );_gddb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ggfc ,_gddb ,_dece ,_bgccb ,0);TstWriteSymbols (t ,_ggfc ,_agac );return _agac ;};func _bfde (_cgeb ,_ddac *Bitmap ,_bbgc ,_cbbf int )(_ebef error ){const _fggc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_aff ,_acea ,_edec ,_abgf int ;_bccdc ,_fcbad ,_edcc ,_fegda ,_bfgg ,_acfbd ,_adeg ,_fbffe byte ;);for _aff =0;_aff < _bbgc ;_aff ++{_edec =_aff *_cgeb .RowStride ;_abgf =_aff *_ddac .RowStride ;for _acea =0;_acea < _cbbf ;_acea ++{if _bccdc ,_ebef =_cgeb .GetByte (_edec +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _fcbad ,_ebef =_ddac .GetByte (_abgf +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _aff > 0{if _edcc ,_ebef =_cgeb .GetByte (_edec -_cgeb .RowStride +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bccdc |=_edcc |(_edcc <<1)|(_edcc >>1);if _acea > 0{if _fbffe ,_ebef =_cgeb .GetByte (_edec -_cgeb .RowStride +_acea -1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bccdc |=_fbffe <<7;};if _acea < _cbbf -1{if _fbffe ,_ebef =_cgeb .GetByte (_edec -_cgeb .RowStride +_acea +1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bccdc |=_fbffe >>7;};};if _acea > 0{if _fegda ,_ebef =_cgeb .GetByte (_edec +_acea -1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u006a\u0020\u003e \u0030");};_bccdc |=_fegda <<7;};_bccdc &=_fcbad ;if _bccdc ==0||^_bccdc ==0{if _ebef =_cgeb .SetByte (_edec +_acea ,_bccdc );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_adeg =_bccdc ;_bccdc =(_bccdc |(_bccdc >>1)|(_bccdc <<1))&_fcbad ;if (_bccdc ^_adeg )==0{if _ebef =_cgeb .SetByte (_edec +_acea ,_bccdc );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _aff =_bbgc -1;_aff >=0;_aff --{_edec =_aff *_cgeb .RowStride ;_abgf =_aff *_ddac .RowStride ;for _acea =_cbbf -1;_acea >=0;_acea --{if _bccdc ,_ebef =_cgeb .GetByte (_edec +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _fcbad ,_ebef =_ddac .GetByte (_abgf +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _aff < _bbgc -1{if _bfgg ,_ebef =_cgeb .GetByte (_edec +_cgeb .RowStride +_acea );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bccdc |=_bfgg |(_bfgg <<1)|_bfgg >>1;if _acea > 0{if _fbffe ,_ebef =_cgeb .GetByte (_edec +_cgeb .RowStride +_acea -1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\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");};_bccdc |=_fbffe <<7;};if _acea < _cbbf -1{if _fbffe ,_ebef =_cgeb .GetByte (_edec +_cgeb .RowStride +_acea +1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\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");};_bccdc |=_fbffe >>7;};};if _acea < _cbbf -1{if _acfbd ,_ebef =_cgeb .GetByte (_edec +_acea +1);_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\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");};_bccdc |=_acfbd >>7;};_bccdc &=_fcbad ;if _bccdc ==0||(^_bccdc )==0{if _ebef =_cgeb .SetByte (_edec +_acea ,_bccdc );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_adeg =_bccdc ;_bccdc =(_bccdc |(_bccdc >>1)|(_bccdc <<1))&_fcbad ;if (_bccdc ^_adeg )==0{if _ebef =_cgeb .SetByte (_edec +_acea ,_bccdc );_ebef !=nil {return _c .Wrap (_ebef ,_fggc ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");};break ;};};};};return nil ;};func TstImageBitmap ()*Bitmap {return _dggg .Copy ()};func init (){const _gbba ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_bcbg =New (50,40);var _aebga error ;_bcbg ,_aebga =_bcbg .AddBorder (2,1);if _aebga !=nil {panic (_c .Wrap (_aebga ,_gbba ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_dggg ,_aebga =NewWithData (50,22,_fgcfd );if _aebga !=nil {panic (_c .Wrap (_aebga ,_gbba ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func (_afe *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fga :=_afe .GetByteIndex (x ,y );if _fga > len (_afe .Data )-1{return _c .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",_fga );};_adfg :=_afe .GetBitOffset (x );_ffgc :=uint (7-_adfg );_afae :=_afe .Data [_fga ];var _cbb byte ;if pixel ==1{_cbb =_afae |(pixel &0x01<<_ffgc );}else {_cbb =_afae &^(1<<_ffgc );};_afe .Data [_fga ]=_cbb ;return nil ;};func _def (_aag ,_gbg *Bitmap ,_fdd int ,_gad []byte ,_abc int )(_ac error ){const _bgd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_dgaf ,_ccd ,_gef ,_aeb ,_cb ,_cce ,_bbeb ,_cca int ;_afa ,_ffd uint32 ;_eaa ,_ce byte ;_ccfd uint16 ;);_agc :=make ([]byte ,4);_bgg :=make ([]byte ,4);for _gef =0;_gef < _aag .Height -1;_gef ,_aeb =_gef +2,_aeb +1{_dgaf =_gef *_aag .RowStride ;_ccd =_aeb *_gbg .RowStride ;for _cb ,_cce =0,0;_cb < _abc ;_cb ,_cce =_cb +4,_cce +1{for _bbeb =0;_bbeb < 4;_bbeb ++{_cca =_dgaf +_cb +_bbeb ;if _cca <=len (_aag .Data )-1&&_cca < _dgaf +_aag .RowStride {_agc [_bbeb ]=_aag .Data [_cca ];}else {_agc [_bbeb ]=0x00;};_cca =_dgaf +_aag .RowStride +_cb +_bbeb ;if _cca <=len (_aag .Data )-1&&_cca < _dgaf +(2*_aag .RowStride ){_bgg [_bbeb ]=_aag .Data [_cca ];}else {_bgg [_bbeb ]=0x00;};};_afa =_dc .BigEndian .Uint32 (_agc );_ffd =_dc .BigEndian .Uint32 (_bgg );_ffd |=_afa ;_ffd |=_ffd <<1;_ffd &=0xaaaaaaaa;_afa =_ffd |(_ffd <<7);_eaa =byte (_afa >>24);_ce =byte ((_afa >>8)&0xff);_cca =_ccd +_cce ;if _cca +1==len (_gbg .Data )-1||_cca +1>=_ccd +_gbg .RowStride {_gbg .Data [_cca ]=_gad [_eaa ];}else {_ccfd =(uint16 (_gad [_eaa ])<<8)|uint16 (_gad [_ce ]);if _ac =_gbg .setTwoBytes (_cca ,_ccfd );_ac !=nil {return _c .Wrapf (_ac ,_bgd ,"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",_cca );};_cce ++;};};};return nil ;};func (_bdgfd *byHeight )Swap (i ,j int ){_bdgfd .Values [i ],_bdgfd .Values [j ]=_bdgfd .Values [j ],_bdgfd .Values [i ];if _bdgfd .Boxes !=nil {_bdgfd .Boxes [i ],_bdgfd .Boxes [j ]=_bdgfd .Boxes [j ],_bdgfd .Boxes [i ];};};func (_cbde *Bitmap )CreateTemplate ()*Bitmap {return _cbde .createTemplate ()};var MorphBC BoundaryCondition ;func (_cebf *Bitmap )setTwoBytes (_cac int ,_acgad uint16 )error {if _cac +1> len (_cebf .Data )-1{return _c .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",_cac );};_cebf .Data [_cac ]=byte ((_acgad &0xff00)>>8);_cebf .Data [_cac +1]=byte (_acgad &0xff);return nil ;};type SizeSelection int ;func (_aafg *BitmapsArray )AddBox (box *_dd .Rectangle ){_aafg .Boxes =append (_aafg .Boxes ,box )};func _gd (_dca *Bitmap ,_ffc *Bitmap ,_bbd int )(_abb error ){const _eba ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bbd {case 2:_abb =_ec (_dca ,_ffc );case 4:_abb =_fa (_dca ,_ffc );case 8:_abb =_fbd (_dca ,_ffc );default:return _c .Error (_eba ,"\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 _abb !=nil {_abb =_c .Wrap (_abb ,_eba ,"");};return _abb ;};func (_geba *Bitmap )Equivalent (s *Bitmap )bool {return _geba .equivalent (s )};type SelectionValue int ;func _degd (_egdc *Bitmap ,_cdf *Bitmap ,_afdf *Selection ,_aebf **Bitmap )(*Bitmap ,error ){const _dbbc ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _cdf ==nil {return nil ,_c .Error (_dbbc ,"\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 _afdf ==nil {return nil ,_c .Error (_dbbc ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_bfaeb ,_faadf :=_afdf .Height ,_afdf .Width ;if _bfaeb ==0||_faadf ==0{return nil ,_c .Error (_dbbc ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _egdc ==nil {_egdc =_cdf .createTemplate ();*_aebf =_cdf ;return _egdc ,nil ;};_egdc .Width =_cdf .Width ;_egdc .Height =_cdf .Height ;_egdc .RowStride =_cdf .RowStride ;_egdc .Color =_cdf .Color ;_egdc .Data =make ([]byte ,_cdf .RowStride *_cdf .Height );if _egdc ==_cdf {*_aebf =_cdf .Copy ();}else {*_aebf =_cdf ;};return _egdc ,nil ;};func (_agdb *Bitmap )SizesEqual (s *Bitmap )bool {if _agdb ==s {return true ;};if _agdb .Width !=s .Width ||_agdb .Height !=s .Height {return false ;};return true ;};func (_gcgfc Points )GetIntX (i int )(int ,error ){if i >=len (_gcgfc ){return 0,_c .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 (_gcgfc [i ].X ),nil ;};func _cccb (_eaec *Bitmap ,_edgd ...MorphProcess )(_fdef *Bitmap ,_cbdc error ){const _ccge ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _eaec ==nil {return nil ,_c .Error (_ccge ,"\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 (_edgd )==0{return nil ,_c .Error (_ccge ,"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 _cbdc =_baedg (_edgd ...);_cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};var _ddbb ,_bafg ,_gfcf int ;_fdef =_eaec .Copy ();for _ ,_cfeg :=range _edgd {switch _cfeg .Operation {case MopDilation :_ddbb ,_bafg =_cfeg .getWidthHeight ();_fdef ,_cbdc =DilateBrick (nil ,_fdef ,_ddbb ,_bafg );if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopErosion :_ddbb ,_bafg =_cfeg .getWidthHeight ();_fdef ,_cbdc =_acc (nil ,_fdef ,_ddbb ,_bafg );if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopOpening :_ddbb ,_bafg =_cfeg .getWidthHeight ();_fdef ,_cbdc =_abg (nil ,_fdef ,_ddbb ,_bafg );if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopClosing :_ddbb ,_bafg =_cfeg .getWidthHeight ();_fdef ,_cbdc =_dbdd (nil ,_fdef ,_ddbb ,_bafg );if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopRankBinaryReduction :_fdef ,_cbdc =_ca (_fdef ,_cfeg .Arguments ...);if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopReplicativeBinaryExpansion :_fdef ,_cbdc =_cfedf (_fdef ,_cfeg .Arguments [0]);if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};case MopAddBorder :_gfcf =_cfeg .Arguments [0];_fdef ,_cbdc =_fdef .AddBorder (_gfcf ,0);if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"");};default:return nil ,_c .Error (_ccge ,"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 _gfcf > 0{_fdef ,_cbdc =_fdef .RemoveBorder (_gfcf );if _cbdc !=nil {return nil ,_c .Wrap (_cbdc ,_ccge ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _fdef ,nil ;};func (_afde *Bitmap )GetBitOffset (x int )int {return x &0x07};func Centroids (bms []*Bitmap )(*Points ,error ){_fgaa :=make ([]Point ,len (bms ));_ada :=_fgcfa ();_bdce :=_bgag ();var _gccg error ;for _ebg ,_daba :=range bms {_fgaa [_ebg ],_gccg =_daba .centroid (_ada ,_bdce );if _gccg !=nil {return nil ,_gccg ;};};_cfc :=Points (_fgaa );return &_cfc ,nil ;};func _gcfga (_acad *_ff .Stack )(_eeef *fillSegment ,_egcdb error ){const _beeg ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _acad ==nil {return nil ,_c .Error (_beeg ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _acad .Aux ==nil {return nil ,_c .Error (_beeg ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_gcbe ,_caddg :=_acad .Pop ();if !_caddg {return nil ,nil ;};_fcadg ,_caddg :=_gcbe .(*fillSegment );if !_caddg {return nil ,_c .Error (_beeg ,"\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");};_eeef =&fillSegment {_fcadg ._acda ,_fcadg ._egaba ,_fcadg ._bggb +_fcadg ._dafe ,_fcadg ._dafe };_acad .Aux .Push (_fcadg );return _eeef ,nil ;};func _gbaf (_fdfg ,_acg int )*Bitmap {return &Bitmap {Width :_fdfg ,Height :_acg ,RowStride :(_fdfg +7)>>3};};func (_fegb *Bitmap )SetPadBits (value int ){_fegb .setPadBits (value )};func _dbdd (_gadgf ,_bafea *Bitmap ,_aaedf ,_gebcc int )(*Bitmap ,error ){const _dgfg ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _bafea ==nil {return nil ,_c .Error (_dgfg ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aaedf < 1||_gebcc < 1{return nil ,_c .Error (_dgfg ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _aaedf ==1&&_gebcc ==1{return _fada (_gadgf ,_bafea );};if MorphBC ==SymmetricMorphBC {_dcfa ,_gcbc :=_aaca (_gadgf ,_bafea ,_aaedf ,_gebcc );if _gcbc !=nil {return nil ,_c .Wrap (_gcbc ,_dgfg ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _dcfa ,nil ;};_cdabc :=_dgea (_aaedf /2,_gebcc /2);_cagb :=8*((_cdabc +7)/8);_gbdd ,_ddda :=_bafea .AddBorder (_cagb ,0);if _ddda !=nil {return nil ,_c .Wrapf (_ddda ,_dgfg ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_cagb );};var _aee ,_egdg *Bitmap ;if _aaedf ==1||_gebcc ==1{_dcef :=SelCreateBrick (_gebcc ,_aaedf ,_gebcc /2,_aaedf /2,SelHit );_aee ,_ddda =_eadb (nil ,_gbdd ,_dcef );if _ddda !=nil {return nil ,_c .Wrap (_ddda ,_dgfg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_cfbfg :=SelCreateBrick (1,_aaedf ,0,_aaedf /2,SelHit );_bged ,_eeae :=_fadg (nil ,_gbdd ,_cfbfg );if _eeae !=nil {return nil ,_c .Wrap (_eeae ,_dgfg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_egfc :=SelCreateBrick (_gebcc ,1,_gebcc /2,0,SelHit );_aee ,_eeae =_fadg (nil ,_bged ,_egfc );if _eeae !=nil {return nil ,_c .Wrap (_eeae ,_dgfg ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_eeae =_bagff (_bged ,_aee ,_cfbfg );_eeae !=nil {return nil ,_c .Wrap (_eeae ,_dgfg ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_eeae =_bagff (_aee ,_bged ,_egfc );_eeae !=nil {return nil ,_c .Wrap (_eeae ,_dgfg ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");};};if _egdg ,_ddda =_aee .RemoveBorder (_cagb );_ddda !=nil {return nil ,_c .Wrap (_ddda ,_dgfg ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _gadgf ==nil {return _egdg ,nil ;};if _ ,_ddda =_fada (_gadgf ,_egdg );_ddda !=nil {return nil ,_ddda ;};return _gadgf ,nil ;};