unipdf/internal/ccittfax/ccittfax.go
2020-09-07 00:23:12 +00:00

12 lines
29 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 ccittfax ;import (_cb "errors";_b "math";);type Encoder struct{K int ;EndOfLine bool ;EncodedByteAlign bool ;Columns int ;Rows int ;EndOfBlock bool ;BlackIs1 bool ;DamagedRowsBeforeError int ;};func (_cgb *Encoder )Encode (pixels [][]byte )[]byte {if _cgb .BlackIs1 {_caf =0;_aef =1;}else {_caf =1;_aef =0;};if _cgb .K ==0{return _cgb .encodeG31D (pixels );};if _cgb .K > 0{return _cgb .encodeG32D (pixels );};if _cgb .K < 0{return _cgb .encodeG4 (pixels );};return nil ;};func init (){_d =make (map[int ]code );_d [0]=code {Code :13<<8|3<<6,BitsWritten :10};_d [1]=code {Code :2<<(5+8),BitsWritten :3};_d [2]=code {Code :3<<(6+8),BitsWritten :2};_d [3]=code {Code :2<<(6+8),BitsWritten :2};_d [4]=code {Code :3<<(5+8),BitsWritten :3};_d [5]=code {Code :3<<(4+8),BitsWritten :4};_d [6]=code {Code :2<<(4+8),BitsWritten :4};_d [7]=code {Code :3<<(3+8),BitsWritten :5};_d [8]=code {Code :5<<(2+8),BitsWritten :6};_d [9]=code {Code :4<<(2+8),BitsWritten :6};_d [10]=code {Code :4<<(1+8),BitsWritten :7};_d [11]=code {Code :5<<(1+8),BitsWritten :7};_d [12]=code {Code :7<<(1+8),BitsWritten :7};_d [13]=code {Code :4<<8,BitsWritten :8};_d [14]=code {Code :7<<8,BitsWritten :8};_d [15]=code {Code :12<<8,BitsWritten :9};_d [16]=code {Code :5<<8|3<<6,BitsWritten :10};_d [17]=code {Code :6<<8,BitsWritten :10};_d [18]=code {Code :2<<8,BitsWritten :10};_d [19]=code {Code :12<<8|7<<5,BitsWritten :11};_d [20]=code {Code :13<<8,BitsWritten :11};_d [21]=code {Code :13<<8|4<<5,BitsWritten :11};_d [22]=code {Code :6<<8|7<<5,BitsWritten :11};_d [23]=code {Code :5<<8,BitsWritten :11};_d [24]=code {Code :2<<8|7<<5,BitsWritten :11};_d [25]=code {Code :3<<8,BitsWritten :11};_d [26]=code {Code :12<<8|10<<4,BitsWritten :12};_d [27]=code {Code :12<<8|11<<4,BitsWritten :12};_d [28]=code {Code :12<<8|12<<4,BitsWritten :12};_d [29]=code {Code :12<<8|13<<4,BitsWritten :12};_d [30]=code {Code :6<<8|8<<4,BitsWritten :12};_d [31]=code {Code :6<<8|9<<4,BitsWritten :12};_d [32]=code {Code :6<<8|10<<4,BitsWritten :12};_d [33]=code {Code :6<<8|11<<4,BitsWritten :12};_d [34]=code {Code :13<<8|2<<4,BitsWritten :12};_d [35]=code {Code :13<<8|3<<4,BitsWritten :12};_d [36]=code {Code :13<<8|4<<4,BitsWritten :12};_d [37]=code {Code :13<<8|5<<4,BitsWritten :12};_d [38]=code {Code :13<<8|6<<4,BitsWritten :12};_d [39]=code {Code :13<<8|7<<4,BitsWritten :12};_d [40]=code {Code :6<<8|12<<4,BitsWritten :12};_d [41]=code {Code :6<<8|13<<4,BitsWritten :12};_d [42]=code {Code :13<<8|10<<4,BitsWritten :12};_d [43]=code {Code :13<<8|11<<4,BitsWritten :12};_d [44]=code {Code :5<<8|4<<4,BitsWritten :12};_d [45]=code {Code :5<<8|5<<4,BitsWritten :12};_d [46]=code {Code :5<<8|6<<4,BitsWritten :12};_d [47]=code {Code :5<<8|7<<4,BitsWritten :12};_d [48]=code {Code :6<<8|4<<4,BitsWritten :12};_d [49]=code {Code :6<<8|5<<4,BitsWritten :12};_d [50]=code {Code :5<<8|2<<4,BitsWritten :12};_d [51]=code {Code :5<<8|3<<4,BitsWritten :12};_d [52]=code {Code :2<<8|4<<4,BitsWritten :12};_d [53]=code {Code :3<<8|7<<4,BitsWritten :12};_d [54]=code {Code :3<<8|8<<4,BitsWritten :12};_d [55]=code {Code :2<<8|7<<4,BitsWritten :12};_d [56]=code {Code :2<<8|8<<4,BitsWritten :12};_d [57]=code {Code :5<<8|8<<4,BitsWritten :12};_d [58]=code {Code :5<<8|9<<4,BitsWritten :12};_d [59]=code {Code :2<<8|11<<4,BitsWritten :12};_d [60]=code {Code :2<<8|12<<4,BitsWritten :12};_d [61]=code {Code :5<<8|10<<4,BitsWritten :12};_d [62]=code {Code :6<<8|6<<4,BitsWritten :12};_d [63]=code {Code :6<<8|7<<4,BitsWritten :12};_be =make (map[int ]code );_be [0]=code {Code :53<<8,BitsWritten :8};_be [1]=code {Code :7<<(2+8),BitsWritten :6};_be [2]=code {Code :7<<(4+8),BitsWritten :4};_be [3]=code {Code :8<<(4+8),BitsWritten :4};_be [4]=code {Code :11<<(4+8),BitsWritten :4};_be [5]=code {Code :12<<(4+8),BitsWritten :4};_be [6]=code {Code :14<<(4+8),BitsWritten :4};_be [7]=code {Code :15<<(4+8),BitsWritten :4};_be [8]=code {Code :19<<(3+8),BitsWritten :5};_be [9]=code {Code :20<<(3+8),BitsWritten :5};_be [10]=code {Code :7<<(3+8),BitsWritten :5};_be [11]=code {Code :8<<(3+8),BitsWritten :5};_be [12]=code {Code :8<<(2+8),BitsWritten :6};_be [13]=code {Code :3<<(2+8),BitsWritten :6};_be [14]=code {Code :52<<(2+8),BitsWritten :6};_be [15]=code {Code :53<<(2+8),BitsWritten :6};_be [16]=code {Code :42<<(2+8),BitsWritten :6};_be [17]=code {Code :43<<(2+8),BitsWritten :6};_be [18]=code {Code :39<<(1+8),BitsWritten :7};_be [19]=code {Code :12<<(1+8),BitsWritten :7};_be [20]=code {Code :8<<(1+8),BitsWritten :7};_be [21]=code {Code :23<<(1+8),BitsWritten :7};_be [22]=code {Code :3<<(1+8),BitsWritten :7};_be [23]=code {Code :4<<(1+8),BitsWritten :7};_be [24]=code {Code :40<<(1+8),BitsWritten :7};_be [25]=code {Code :43<<(1+8),BitsWritten :7};_be [26]=code {Code :19<<(1+8),BitsWritten :7};_be [27]=code {Code :36<<(1+8),BitsWritten :7};_be [28]=code {Code :24<<(1+8),BitsWritten :7};_be [29]=code {Code :2<<8,BitsWritten :8};_be [30]=code {Code :3<<8,BitsWritten :8};_be [31]=code {Code :26<<8,BitsWritten :8};_be [32]=code {Code :27<<8,BitsWritten :8};_be [33]=code {Code :18<<8,BitsWritten :8};_be [34]=code {Code :19<<8,BitsWritten :8};_be [35]=code {Code :20<<8,BitsWritten :8};_be [36]=code {Code :21<<8,BitsWritten :8};_be [37]=code {Code :22<<8,BitsWritten :8};_be [38]=code {Code :23<<8,BitsWritten :8};_be [39]=code {Code :40<<8,BitsWritten :8};_be [40]=code {Code :41<<8,BitsWritten :8};_be [41]=code {Code :42<<8,BitsWritten :8};_be [42]=code {Code :43<<8,BitsWritten :8};_be [43]=code {Code :44<<8,BitsWritten :8};_be [44]=code {Code :45<<8,BitsWritten :8};_be [45]=code {Code :4<<8,BitsWritten :8};_be [46]=code {Code :5<<8,BitsWritten :8};_be [47]=code {Code :10<<8,BitsWritten :8};_be [48]=code {Code :11<<8,BitsWritten :8};_be [49]=code {Code :82<<8,BitsWritten :8};_be [50]=code {Code :83<<8,BitsWritten :8};_be [51]=code {Code :84<<8,BitsWritten :8};_be [52]=code {Code :85<<8,BitsWritten :8};_be [53]=code {Code :36<<8,BitsWritten :8};_be [54]=code {Code :37<<8,BitsWritten :8};_be [55]=code {Code :88<<8,BitsWritten :8};_be [56]=code {Code :89<<8,BitsWritten :8};_be [57]=code {Code :90<<8,BitsWritten :8};_be [58]=code {Code :91<<8,BitsWritten :8};_be [59]=code {Code :74<<8,BitsWritten :8};_be [60]=code {Code :75<<8,BitsWritten :8};_be [61]=code {Code :50<<8,BitsWritten :8};_be [62]=code {Code :51<<8,BitsWritten :8};_be [63]=code {Code :52<<8,BitsWritten :8};_g =make (map[int ]code );_g [64]=code {Code :3<<8|3<<6,BitsWritten :10};_g [128]=code {Code :12<<8|8<<4,BitsWritten :12};_g [192]=code {Code :12<<8|9<<4,BitsWritten :12};_g [256]=code {Code :5<<8|11<<4,BitsWritten :12};_g [320]=code {Code :3<<8|3<<4,BitsWritten :12};_g [384]=code {Code :3<<8|4<<4,BitsWritten :12};_g [448]=code {Code :3<<8|5<<4,BitsWritten :12};_g [512]=code {Code :3<<8|12<<3,BitsWritten :13};_g [576]=code {Code :3<<8|13<<3,BitsWritten :13};_g [640]=code {Code :2<<8|10<<3,BitsWritten :13};_g [704]=code {Code :2<<8|11<<3,BitsWritten :13};_g [768]=code {Code :2<<8|12<<3,BitsWritten :13};_g [832]=code {Code :2<<8|13<<3,BitsWritten :13};_g [896]=code {Code :3<<8|18<<3,BitsWritten :13};_g [960]=code {Code :3<<8|19<<3,BitsWritten :13};_g [1024]=code {Code :3<<8|20<<3,BitsWritten :13};_g [1088]=code {Code :3<<8|21<<3,BitsWritten :13};_g [1152]=code {Code :3<<8|22<<3,BitsWritten :13};_g [1216]=code {Code :119<<3,BitsWritten :13};_g [1280]=code {Code :2<<8|18<<3,BitsWritten :13};_g [1344]=code {Code :2<<8|19<<3,BitsWritten :13};_g [1408]=code {Code :2<<8|20<<3,BitsWritten :13};_g [1472]=code {Code :2<<8|21<<3,BitsWritten :13};_g [1536]=code {Code :2<<8|26<<3,BitsWritten :13};_g [1600]=code {Code :2<<8|27<<3,BitsWritten :13};_g [1664]=code {Code :3<<8|4<<3,BitsWritten :13};_g [1728]=code {Code :3<<8|5<<3,BitsWritten :13};_gc =make (map[int ]code );_gc [64]=code {Code :27<<(3+8),BitsWritten :5};_gc [128]=code {Code :18<<(3+8),BitsWritten :5};_gc [192]=code {Code :23<<(2+8),BitsWritten :6};_gc [256]=code {Code :55<<(1+8),BitsWritten :7};_gc [320]=code {Code :54<<8,BitsWritten :8};_gc [384]=code {Code :55<<8,BitsWritten :8};_gc [448]=code {Code :100<<8,BitsWritten :8};_gc [512]=code {Code :101<<8,BitsWritten :8};_gc [576]=code {Code :104<<8,BitsWritten :8};_gc [640]=code {Code :103<<8,BitsWritten :8};_gc [704]=code {Code :102<<8,BitsWritten :9};_gc [768]=code {Code :102<<8|1<<7,BitsWritten :9};_gc [832]=code {Code :105<<8,BitsWritten :9};_gc [896]=code {Code :105<<8|1<<7,BitsWritten :9};_gc [960]=code {Code :106<<8,BitsWritten :9};_gc [1024]=code {Code :106<<8|1<<7,BitsWritten :9};_gc [1088]=code {Code :107<<8,BitsWritten :9};_gc [1152]=code {Code :107<<8|1<<7,BitsWritten :9};_gc [1216]=code {Code :108<<8,BitsWritten :9};_gc [1280]=code {Code :108<<8|1<<7,BitsWritten :9};_gc [1344]=code {Code :109<<8,BitsWritten :9};_gc [1408]=code {Code :109<<8|1<<7,BitsWritten :9};_gc [1472]=code {Code :76<<8,BitsWritten :9};_gc [1536]=code {Code :76<<8|1<<7,BitsWritten :9};_gc [1600]=code {Code :77<<8,BitsWritten :9};_gc [1664]=code {Code :24<<(2+8),BitsWritten :6};_gc [1728]=code {Code :77<<8|1<<7,BitsWritten :9};_ge =make (map[int ]code );_ge [1792]=code {Code :1<<8,BitsWritten :11};_ge [1856]=code {Code :1<<8|4<<5,BitsWritten :11};_ge [1920]=code {Code :1<<8|5<<5,BitsWritten :11};_ge [1984]=code {Code :1<<8|2<<4,BitsWritten :12};_ge [2048]=code {Code :1<<8|3<<4,BitsWritten :12};_ge [2112]=code {Code :1<<8|4<<4,BitsWritten :12};_ge [2176]=code {Code :1<<8|5<<4,BitsWritten :12};_ge [2240]=code {Code :1<<8|6<<4,BitsWritten :12};_ge [2304]=code {Code :1<<8|7<<4,BitsWritten :12};_ge [2368]=code {Code :1<<8|12<<4,BitsWritten :12};_ge [2432]=code {Code :1<<8|13<<4,BitsWritten :12};_ge [2496]=code {Code :1<<8|14<<4,BitsWritten :12};_ge [2560]=code {Code :1<<8|15<<4,BitsWritten :12};_f =make (map[int ]byte );_f [0]=0xFF;_f [1]=0xFE;_f [2]=0xFC;_f [3]=0xF8;_f [4]=0xF0;_f [5]=0xE0;_f [6]=0xC0;_f [7]=0x80;_f [8]=0x00;};var (_fb =_cb .New ("\u0045\u004f\u0046\u0042 c\u006f\u0064\u0065\u0020\u0069\u0073\u0020\u0063\u006f\u0072\u0072\u0075\u0070\u0074e\u0064");_fa =_cb .New ("R\u0054\u0043\u0020\u0063od\u0065 \u0069\u0073\u0020\u0063\u006fr\u0072\u0075\u0070\u0074\u0065\u0064");_bc =_cb .New ("\u0077\u0072o\u006e\u0067\u0020\u0063\u006f\u0064\u0065\u0020\u0069\u006e\u0020\u0068\u006f\u0072\u0069\u007a\u006f\u006e\u0074\u0061\u006c\u0020mo\u0064\u0065");_eg =_cb .New ("\u006e\u006f\u0020\u0045\u004f\u004c\u0020\u0066\u006f\u0075\u006e\u0064\u0020\u0077\u0068\u0069\u006c\u0065 \u0074\u0068\u0065\u0020\u0045\u006e\u0064O\u0066\u004c\u0069\u006e\u0065\u0020\u0070\u0061\u0072\u0061\u006de\u0074\u0065\u0072\u0020\u0069\u0073\u0020\u0074\u0072\u0075\u0065");_bgc =_cb .New ("i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0045\u004f\u004c");_a =_cb .New ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0032\u0044\u0020\u0063\u006f\u0064\u0065"););func _eeg (_afg ,_cdg []byte ,_ga int ,_cba bool ,_aff int )([]byte ,int ,int ,error ){_ega :=_ga ;var _fae error ;_cdg ,_ga ,_fae =_aba (_afg ,_cdg ,_ga ,_cba );if _fae !=nil {return _cdg ,_ega ,_aff ,_fae ;};_cba =!_cba ;_cdg ,_ga ,_fae =_aba (_afg ,_cdg ,_ga ,_cba );if _fae !=nil {return _cdg ,_ega ,_aff ,_fae ;};_aff =len (_cdg );return _cdg ,_ga ,_aff ,nil ;};func init (){for _cea ,_caa :=range _be {_cbce (_bca ,_caa ,0,_cea );};for _gb ,_bff :=range _gc {_cbce (_bca ,_bff ,0,_gb );};for _dd ,_af :=range _d {_cbce (_bf ,_af ,0,_dd );};for _cd ,_dff :=range _g {_cbce (_bf ,_dff ,0,_cd );};for _faf ,_cc :=range _ge {_cbce (_bca ,_cc ,0,_faf );_cbce (_bf ,_cc ,0,_faf );};_cbce (_egg ,_e ,0,0);_cbce (_egg ,_fc ,0,0);_cbce (_egg ,_bg ,0,0);_cbce (_egg ,_df ,0,0);_cbce (_egg ,_bb ,0,0);_cbce (_egg ,_ef ,0,0);_cbce (_egg ,_ee ,0,0);_cbce (_egg ,_ce ,0,0);_cbce (_egg ,_bee ,0,0);};func _aba (_cbc ,_bfa []byte ,_fcdd int ,_de bool )([]byte ,int ,error ){_dg :=_fcdd ;var _baga int ;for _baga ,_fcdd =_cfc (_cbc ,_fcdd ,_de );_baga !=-1;_baga ,_fcdd =_cfc (_cbc ,_fcdd ,_de ){_bfa =_caed (_bfa ,_de ,_baga );if _baga < 64{break ;};};if _baga ==-1{return _bfa ,_dg ,_bc ;};return _bfa ,_fcdd ,nil ;};func _fgc (_dbdd []byte ,_bda int )int {if _bda >=len (_dbdd ){return _bda ;};if _bda < -1{_bda =-1;};var _cacb byte ;if _bda > -1{_cacb =_dbdd [_bda ];}else {_cacb =_caf ;};_ecb :=_bda +1;for _ecb < len (_dbdd ){if _dbdd [_ecb ]!=_cacb {break ;};_ecb ++;};return _ecb ;};func _bbc (_afc []byte ,_cda int )(bool ,int ){return _ceec (_afc ,_cda ,_gg )};func (_dgg *Encoder )encodeG31D (_bcbf [][]byte )[]byte {var _cgeb []byte ;_eed :=0;for _gdg :=range _bcbf {if _dgg .Rows > 0&&!_dgg .EndOfBlock &&_gdg ==_dgg .Rows {break ;};_aac ,_dgd :=_abab (_bcbf [_gdg ],_eed ,_cg );_cgeb =_dgg .appendEncodedRow (_cgeb ,_aac ,_eed );if _dgg .EncodedByteAlign {_dgd =0;};_eed =_dgd ;};if _dgg .EndOfBlock {_gab ,_ :=_faa (_eed );_cgeb =_dgg .appendEncodedRow (_cgeb ,_gab ,_eed );};return _cgeb ;};func _faa (_afe int )([]byte ,int ){var _dee []byte ;for _cbbb :=0;_cbbb < 6;_cbbb ++{_dee ,_afe =_bde (_dee ,_afe ,_cg );};return _dee ,_afe %8;};func (_bec *Encoder )decodeG32D (_dde []byte )([][]byte ,error ){var (_cde [][]byte ;_fad int ;_fg error ;);_bfe :for (_fad /8)< len (_dde ){var _bbe bool ;_bbe ,_fad ,_fg =_dbg (_dde ,_fad );if _fg !=nil {return nil ,_fg ;};if _bbe {break ;};_bbe ,_fad =_fbe (_dde ,_fad );if !_bbe {if _bec .EndOfLine {return nil ,_eg ;};};var _ac []byte ;_ac ,_fad =_bec .decodeRow1D (_dde ,_fad );if _bec .EncodedByteAlign &&_fad %8!=0{_fad +=8-_fad %8;};if _ac !=nil {_cde =append (_cde ,_ac );};if _bec .Rows > 0&&!_bec .EndOfBlock &&len (_cde )>=_bec .Rows {break ;};for _ccd :=1;_ccd < _bec .K &&(_fad /8)< len (_dde );_ccd ++{_bbe ,_fad =_bbc (_dde ,_fad );if !_bbe {_bbe ,_fad ,_fg =_dbg (_dde ,_fad );if _fg !=nil {return nil ,_fg ;};if _bbe {break _bfe ;}else {if _bec .EndOfLine {return nil ,_eg ;};};};var (_eea code ;_cge bool ;);_cgf :=true ;var _dcc []byte ;_ccg :=-1;for _eea ,_fad ,_cge =_gccf (_dde ,_fad );_cge ;_eea ,_fad ,_cge =_gccf (_dde ,_fad ){switch _eea {case _e :_dcc ,_ccg =_gff (_cde ,_dcc ,_cgf ,_ccg );case _fc :_dcc ,_fad ,_ccg ,_fg =_eeg (_dde ,_dcc ,_fad ,_cgf ,_ccg );if _fg !=nil {return nil ,_fg ;};case _bg :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,0);_cgf =!_cgf ;case _df :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,1);_cgf =!_cgf ;case _bb :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,2);_cgf =!_cgf ;case _ef :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,3);_cgf =!_cgf ;case _ee :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,-1);_cgf =!_cgf ;case _ce :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,-2);_cgf =!_cgf ;case _bee :_dcc ,_ccg =_cfe (_cde ,_dcc ,_cgf ,_ccg ,-3);_cgf =!_cgf ;};if len (_dcc )>=_bec .Columns {break ;};};if _bec .EncodedByteAlign &&_fad %8!=0{_fad +=8-_fad %8;};if _dcc !=nil {_cde =append (_cde ,_dcc );};if _bec .Rows > 0&&!_bec .EndOfBlock &&len (_cde )>=_bec .Rows {break _bfe ;};};};return _cde ,nil ;};func _caed (_feae []byte ,_bgbg bool ,_ec int )[]byte {if _ec < 0{return _feae ;};_fcde :=make ([]byte ,_ec );if _bgbg {for _gfdf :=0;_gfdf < len (_fcde );_gfdf ++{_fcde [_gfdf ]=_caf ;};}else {for _beg :=0;_beg < len (_fcde );_beg ++{_fcde [_beg ]=_aef ;};};_feae =append (_feae ,_fcde ...);return _feae ;};func (_aeeg *Encoder )encodeG32D (_ddg [][]byte )[]byte {var _eaf []byte ;var _ccgc int ;for _aaf :=0;_aaf < len (_ddg );_aaf +=_aeeg .K {if _aeeg .Rows > 0&&!_aeeg .EndOfBlock &&_aaf ==_aeeg .Rows {break ;};_faec ,_feg :=_abab (_ddg [_aaf ],_ccgc ,_dc );_eaf =_aeeg .appendEncodedRow (_eaf ,_faec ,_ccgc );if _aeeg .EncodedByteAlign {_feg =0;};_ccgc =_feg ;for _aad :=_aaf +1;_aad < (_aaf +_aeeg .K )&&_aad < len (_ddg );_aad ++{if _aeeg .Rows > 0&&!_aeeg .EndOfBlock &&_aad ==_aeeg .Rows {break ;};_begf ,_ffa :=_bde (nil ,_ccgc ,_gg );var _dec ,_ffe ,_bcc int ;_cca :=-1;for _cca < len (_ddg [_aad ]){_dec =_fgc (_ddg [_aad ],_cca );_ffe =_facg (_ddg [_aad ],_ddg [_aad -1],_cca );_bcc =_fgc (_ddg [_aad -1],_ffe );if _bcc < _dec {_begf ,_ffa =_ede (_begf ,_ffa );_cca =_bcc ;}else {if _b .Abs (float64 (_ffe -_dec ))> 3{_begf ,_ffa ,_cca =_bbdg (_ddg [_aad ],_begf ,_ffa ,_cca ,_dec );}else {_begf ,_ffa =_cgba (_begf ,_ffa ,_dec ,_ffe );_cca =_dec ;};};};_eaf =_aeeg .appendEncodedRow (_eaf ,_begf ,_ccgc );if _aeeg .EncodedByteAlign {_ffa =0;};_ccgc =_ffa %8;};};if _aeeg .EndOfBlock {_cdffg ,_ :=_aeff (_ccgc );_eaf =_aeeg .appendEncodedRow (_eaf ,_cdffg ,_ccgc );};return _eaf ;};func _fac (_deb []byte ,_ebbb bool ,_eee int )(int ,int ){_bagd :=0;for _eee < len (_deb ){if _ebbb {if _deb [_eee ]!=_caf {break ;};}else {if _deb [_eee ]!=_aef {break ;};};_bagd ++;_eee ++;};return _bagd ,_eee ;};func _ddef (_beb []byte ,_ccc int )(uint16 ,int ,int ){_fcda :=_ccc ;_eab :=_ccc /8;_ccc %=8;if _eab >=len (_beb ){return 0,16,_fcda ;};_bcf :=byte (0xFF>>uint (_ccc ));_fec :=uint16 ((_beb [_eab ]&_bcf )<<uint (_ccc ))<<8;_fce :=8-_ccc ;_eab ++;_ccc =0;if _eab >=len (_beb ){return _fec >>(16-uint (_fce )),16-_fce ,_fcda +_fce ;};_fec |=uint16 (_beb [_eab ])<<(8-uint (_fce ));_fce +=8;_eab ++;_ccc =0;if _eab >=len (_beb ){return _fec >>(16-uint (_fce )),16-_fce ,_fcda +_fce ;};if _fce ==16{return _fec ,0,_fcda +_fce ;};_bfac :=16-_fce ;_fec |=uint16 (_beb [_eab ]>>(8-uint (_bfac )));return _fec ,0,_fcda +16;};func _gccf (_ed []byte ,_bba int )(code ,int ,bool ){var (_gbbc uint16 ;_gbe int ;_ebab int ;);_ebab =_bba ;_gbbc ,_gbe ,_bba =_ddef (_ed ,_bba );_ade ,_bdc :=_acg (_gbbc ,_gbe );if !_bdc {return code {},_ebab ,false ;};return _ade ,_ebab +_ade .BitsWritten ,true ;};func _acb (_gac []byte ,_ced int )(bool ,int ){_bfag :=_ced ;var (_aee uint16 ;_ecc int ;);_aee ,_ecc ,_ced =_ddef (_gac ,_ced );if _ecc > 4{return false ,_bfag ;};_aee >>=uint (4-_ecc );_aee <<=4;if _aee !=_cg .Code {return false ,_bfag ;}else {return true ,_ced -4+_ecc ;};};func (_gf *Encoder )decodeG31D (_ab []byte )([][]byte ,error ){var _bbg [][]byte ;var _cbb int ;for (_cbb /8)< len (_ab ){var _db bool ;_db ,_cbb =_acb (_ab ,_cbb );if !_db {if _gf .EndOfLine {return nil ,_eg ;};}else {for _gbb :=0;_gbb < 5;_gbb ++{_db ,_cbb =_acb (_ab ,_cbb );if !_db {if _gbb ==0{break ;};return nil ,_bgc ;};};if _db {break ;};};var _fcd []byte ;_fcd ,_cbb =_gf .decodeRow1D (_ab ,_cbb );if _gf .EncodedByteAlign &&_cbb %8!=0{_cbb +=8-_cbb %8;};_bbg =append (_bbg ,_fcd );if _gf .Rows > 0&&!_gf .EndOfBlock &&len (_bbg )>=_gf .Rows {break ;};};return _bbg ,nil ;};func (_fe *Encoder )decodeG4 (_ba []byte )([][]byte ,error ){_gfa :=make ([]byte ,_fe .Columns );for _efa :=range _gfa {_gfa [_efa ]=_caf ;};_cee :=make ([][]byte ,1);_cee [0]=_gfa ;var (_bd bool ;_bgb error ;_ea int ;);for (_ea /8)< len (_ba ){_bd ,_ea ,_bgb =_dge (_ba ,_ea );if _bgb !=nil {return nil ,_bgb ;};if _bd {break ;};var (_eb code ;_ad bool ;);_gccd :=true ;var _geb []byte ;_cf :=-1;for _cf < _fe .Columns {_eb ,_ea ,_ad =_gccf (_ba ,_ea );if !_ad {return nil ,_a ;};switch _eb {case _e :_geb ,_cf =_gff (_cee ,_geb ,_gccd ,_cf );case _fc :_geb ,_ea ,_cf ,_bgb =_eeg (_ba ,_geb ,_ea ,_gccd ,_cf );if _bgb !=nil {return nil ,_bgb ;};case _bg :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,0);_gccd =!_gccd ;case _df :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,1);_gccd =!_gccd ;case _bb :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,2);_gccd =!_gccd ;case _ef :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,3);_gccd =!_gccd ;case _ee :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,-1);_gccd =!_gccd ;case _ce :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,-2);_gccd =!_gccd ;case _bee :_geb ,_cf =_cfe (_cee ,_geb ,_gccd ,_cf ,-3);_gccd =!_gccd ;};if len (_geb )>=_fe .Columns {break ;};};if _fe .EncodedByteAlign &&_ea %8!=0{_ea +=8-_ea %8;};_cee =append (_cee ,_geb );if _fe .Rows > 0&&!_fe .EndOfBlock &&len (_cee )>=(_fe .Rows +1){break ;};};_cee =_cee [1:];return _cee ,nil ;};type decodingTreeNode struct{Val byte ;RunLen *int ;Code *code ;Left *decodingTreeNode ;Right *decodingTreeNode ;};func _abc (_cbg int )([]byte ,int ){var _eaa []byte ;for _ece :=0;_ece < 2;_ece ++{_eaa ,_cbg =_bde (_eaa ,_cbg ,_cg );};return _eaa ,_cbg %8;};func _cgba (_bbcb []byte ,_cfgb ,_fece ,_ccdg int )([]byte ,int ){_ddc :=_fca (_fece ,_ccdg );_bbcb ,_cfgb =_bde (_bbcb ,_cfgb ,_ddc );return _bbcb ,_cfgb ;};func (_abb *Encoder )encodeG4 (_eca [][]byte )[]byte {_cfd :=make ([][]byte ,len (_eca ));copy (_cfd ,_eca );_cfd =_afec (_cfd );var _cgbg []byte ;var _bbeg int ;for _fde :=1;_fde < len (_cfd );_fde ++{if _abb .Rows > 0&&!_abb .EndOfBlock &&_fde ==(_abb .Rows +1){break ;};var _ecad []byte ;var _cdgb ,_gbf ,_dca int ;_ceea :=_bbeg ;_gcg :=-1;for _gcg < len (_cfd [_fde ]){_cdgb =_fgc (_cfd [_fde ],_gcg );_gbf =_facg (_cfd [_fde ],_cfd [_fde -1],_gcg );_dca =_fgc (_cfd [_fde -1],_gbf );if _dca < _cdgb {_ecad ,_ceea =_bde (_ecad ,_ceea ,_e );_gcg =_dca ;}else {if _b .Abs (float64 (_gbf -_cdgb ))> 3{_ecad ,_ceea ,_gcg =_bbdg (_cfd [_fde ],_ecad ,_ceea ,_gcg ,_cdgb );}else {_ecad ,_ceea =_cgba (_ecad ,_ceea ,_cdgb ,_gbf );_gcg =_cdgb ;};};};_cgbg =_abb .appendEncodedRow (_cgbg ,_ecad ,_bbeg );if _abb .EncodedByteAlign {_ceea =0;};_bbeg =_ceea %8;};if _abb .EndOfBlock {_dfe ,_ :=_abc (_bbeg );_cgbg =_abb .appendEncodedRow (_cgbg ,_dfe ,_bbeg );};return _cgbg ;};type code struct{Code uint16 ;BitsWritten int ;};func _cbce (_ecd *decodingTreeNode ,_ccdc code ,_ebb int ,_bebd int ){_fbf :=_dbd (_ccdc .Code ,_ebb );_ebb ++;if _fbf ==1{if _ecd .Right ==nil {_ecd .Right =&decodingTreeNode {Val :_fbf };};if _ebb ==_ccdc .BitsWritten {_ecd .Right .RunLen =&_bebd ;_ecd .Right .Code =&_ccdc ;}else {_cbce (_ecd .Right ,_ccdc ,_ebb ,_bebd );};}else {if _ecd .Left ==nil {_ecd .Left =&decodingTreeNode {Val :_fbf };};if _ebb ==_ccdc .BitsWritten {_ecd .Left .RunLen =&_bebd ;_ecd .Left .Code =&_ccdc ;}else {_cbce (_ecd .Left ,_ccdc ,_ebb ,_bebd );};};};func _gff (_cdd [][]byte ,_bag []byte ,_da bool ,_aa int )([]byte ,int ){_cae :=_bac (_bag ,_cdd [len (_cdd )-1],_aa ,_da );_daa :=_fgc (_cdd [len (_cdd )-1],_cae );if _aa ==-1{_bag =_caed (_bag ,_da ,_daa -_aa -1);}else {_bag =_caed (_bag ,_da ,_daa -_aa );};_aa =_daa ;return _bag ,_aa ;};var (_bca =&decodingTreeNode {Val :255};_bf =&decodingTreeNode {Val :255};_egg =&decodingTreeNode {Val :255};);func (_bfc *Encoder )decodeRow1D (_ceb []byte ,_cef int )([]byte ,int ){var _gbea []byte ;_cdff :=true ;var _bdg int ;_bdg ,_cef =_cfc (_ceb ,_cef ,_cdff );for _bdg !=-1{_gbea =_caed (_gbea ,_cdff ,_bdg );if _bdg < 64{if len (_gbea )>=_bfc .Columns {break ;};_cdff =!_cdff ;};_bdg ,_cef =_cfc (_ceb ,_cef ,_cdff );};return _gbea ,_cef ;};func (_ff *Encoder )Decode (encoded []byte )([][]byte ,error ){if _ff .BlackIs1 {_caf =0;_aef =1;}else {_caf =1;_aef =0;};if _ff .K ==0{return _ff .decodeG31D (encoded );};if _ff .K > 0{return _ff .decodeG32D (encoded );};if _ff .K < 4{return _ff .decodeG4 (encoded );};return nil ,nil ;};func _facg (_dffa ,_affc []byte ,_dfa int )int {_efe :=_fgc (_affc ,_dfa );if _efe < len (_affc )&&(_dfa ==-1&&_affc [_efe ]==_caf ||_dfa >=0&&_dfa < len (_dffa )&&_dffa [_dfa ]==_affc [_efe ]||_dfa >=len (_dffa )&&_dffa [_dfa -1]!=_affc [_efe ]){_efe =_fgc (_affc ,_efe );};return _efe ;};func _acd (_eeb uint16 ,_gde int ,_cbbeg bool )(int ,code ){var _cdf *int ;var _fea *code ;if _cbbeg {_cdf ,_fea =_deg (_bca ,_eeb ,_gde );}else {_cdf ,_fea =_deg (_bf ,_eeb ,_gde );};if _cdf ==nil {return -1,code {};};return *_cdf ,*_fea ;};func (_eac *Encoder )appendEncodedRow (_ffb ,_bbd []byte ,_acbe int )[]byte {if len (_ffb )> 0&&_acbe !=0&&!_eac .EncodedByteAlign {_ffb [len (_ffb )-1]=_ffb [len (_ffb )-1]|_bbd [0];_ffb =append (_ffb ,_bbd [1:]...);}else {_ffb =append (_ffb ,_bbd ...);};return _ffb ;};var (_d map[int ]code ;_be map[int ]code ;_g map[int ]code ;_gc map[int ]code ;_ge map[int ]code ;_f map[int ]byte ;_cg =code {Code :1<<4,BitsWritten :12};_dc =code {Code :3<<3,BitsWritten :13};_gg =code {Code :2<<3,BitsWritten :13};_e =code {Code :1<<12,BitsWritten :4};_fc =code {Code :1<<13,BitsWritten :3};_bg =code {Code :1<<15,BitsWritten :1};_df =code {Code :3<<13,BitsWritten :3};_bb =code {Code :3<<10,BitsWritten :6};_ef =code {Code :3<<9,BitsWritten :7};_ee =code {Code :2<<13,BitsWritten :3};_ce =code {Code :2<<10,BitsWritten :6};_bee =code {Code :2<<9,BitsWritten :7};);func _afec (_edg [][]byte )[][]byte {_aca :=make ([]byte ,len (_edg [0]));for _aade :=range _aca {_aca [_aade ]=_caf ;};_edg =append (_edg ,[]byte {});for _eeag :=len (_edg )-1;_eeag > 0;_eeag --{_edg [_eeag ]=_edg [_eeag -1];};_edg [0]=_aca ;return _edg ;};func _bde (_gcf []byte ,_cgcf int ,_abbc code )([]byte ,int ){_bfacg :=0;for _bfacg < _abbc .BitsWritten {_adb :=_cgcf /8;_bgf :=_cgcf %8;if _adb >=len (_gcf ){_gcf =append (_gcf ,0);};_dbda :=8-_bgf ;_gdec :=_abbc .BitsWritten -_bfacg ;if _dbda > _gdec {_dbda =_gdec ;};if _bfacg < 8{_gcf [_adb ]=_gcf [_adb ]|byte (_abbc .Code >>uint (8+_bgf -_bfacg ))&_f [8-_dbda -_bgf ];}else {_gcf [_adb ]=_gcf [_adb ]|(byte (_abbc .Code <<uint (_bfacg -8))&_f [8-_dbda ])>>uint (_bgf );};_cgcf +=_dbda ;_bfacg +=_dbda ;};return _gcf ,_cgcf ;};func _ceec (_bfagd []byte ,_ag int ,_ggb code )(bool ,int ){_dbcc :=_ag ;var (_cdde uint16 ;_bed int ;);_cdde ,_bed ,_ag =_ddef (_bfagd ,_ag );if _bed > 3{return false ,_dbcc ;};_cdde >>=uint (3-_bed );_cdde <<=3;if _cdde !=_ggb .Code {return false ,_dbcc ;}else {return true ,_ag -3+_bed ;};};func _dbd (_cac uint16 ,_eba int )byte {if _eba < 8{_cac >>=8;};_eba %=8;_abd :=byte (0x01<<(7-uint (_eba )));return (byte (_cac )&_abd )>>(7-uint (_eba ));};func _ede (_dbf []byte ,_cbaa int )([]byte ,int ){return _bde (_dbf ,_cbaa ,_e )};func _aeff (_bbcd int )([]byte ,int ){var _bccf []byte ;for _acbfc :=0;_acbfc < 6;_acbfc ++{_bccf ,_bbcd =_bde (_bccf ,_bbcd ,_dc );};return _bccf ,_bbcd %8;};func _acg (_ae uint16 ,_bcb int )(code ,bool ){_ ,_egc :=_deg (_egg ,_ae ,_bcb );if _egc ==nil {return code {},false ;};return *_egc ,true ;};func _fcec (_cgd []byte ,_ead int ,_gba int ,_aeb bool )([]byte ,int ){var (_agf code ;_edd bool ;);for !_edd {_agf ,_gba ,_edd =_fcecd (_gba ,_aeb );_cgd ,_ead =_bde (_cgd ,_ead ,_agf );};return _cgd ,_ead ;};func _abab (_cefd []byte ,_dcd int ,_fbb code )([]byte ,int ){_ged :=true ;var _dgda []byte ;_dgda ,_dcd =_bde (nil ,_dcd ,_fbb );_adea :=0;var _dgad int ;for _adea < len (_cefd ){_dgad ,_adea =_fac (_cefd ,_ged ,_adea );_dgda ,_dcd =_fcec (_dgda ,_dcd ,_dgad ,_ged );_ged =!_ged ;};return _dgda ,_dcd %8;};func _cfc (_daf []byte ,_caag int ,_eegf bool )(int ,int ){var (_bgda uint16 ;_gee int ;_dfd int ;);_dfd =_caag ;_bgda ,_gee ,_caag =_ddef (_daf ,_caag );_dac ,_cfg :=_acd (_bgda ,_gee ,_eegf );if _dac ==-1{return -1,_dfd ;};return _dac ,_dfd +_cfg .BitsWritten ;};func _fbe (_faed []byte ,_eda int )(bool ,int ){return _ceec (_faed ,_eda ,_dc )};var (_caf byte =1;_aef byte =0;);func _cfe (_bbeb [][]byte ,_beed []byte ,_gd bool ,_ggg ,_bgd int )([]byte ,int ){_bbf :=_bac (_beed ,_bbeb [len (_bbeb )-1],_ggg ,_gd );_gfd :=_bbf +_bgd ;if _ggg ==-1{_beed =_caed (_beed ,_gd ,_gfd -_ggg -1);}else {_beed =_caed (_beed ,_gd ,_gfd -_ggg );};_ggg =_gfd ;return _beed ,_ggg ;};func _fca (_egf ,_eag int )code {var _bdf code ;switch _eag -_egf {case -1:_bdf =_df ;case -2:_bdf =_bb ;case -3:_bdf =_ef ;case 0:_bdf =_bg ;case 1:_bdf =_ee ;case 2:_bdf =_ce ;case 3:_bdf =_bee ;};return _bdf ;};func _fcecd (_bfd int ,_ffg bool )(code ,int ,bool ){if _bfd < 64{if _ffg {return _be [_bfd ],0,true ;}else {return _d [_bfd ],0,true ;};}else {_fdg :=_bfd /64;if _fdg > 40{return _ge [2560],_bfd -2560,false ;};if _fdg > 27{return _ge [_fdg *64],_bfd -_fdg *64,false ;};if _ffg {return _gc [_fdg *64],_bfd -_fdg *64,false ;}else {return _g [_fdg *64],_bfd -_fdg *64,false ;};};};func _dge (_faff []byte ,_dbc int )(bool ,int ,error ){_cab :=_dbc ;var _dga bool ;_dga ,_dbc =_acb (_faff ,_dbc );if _dga {_dga ,_dbc =_acb (_faff ,_dbc );if _dga {return true ,_dbc ,nil ;}else {return false ,_cab ,_fb ;};};return false ,_cab ,nil ;};func _deg (_acbf *decodingTreeNode ,_eege uint16 ,_cbe int )(*int ,*code ){if _acbf ==nil {return nil ,nil ;};if _cbe ==16{return _acbf .RunLen ,_acbf .Code ;};_bae :=_dbd (_eege ,_cbe );_cbe ++;var _edf *int ;var _bdb *code ;if _bae ==1{_edf ,_bdb =_deg (_acbf .Right ,_eege ,_cbe );}else {_edf ,_bdb =_deg (_acbf .Left ,_eege ,_cbe );};if _edf ==nil {_edf =_acbf .RunLen ;_bdb =_acbf .Code ;};return _edf ,_bdb ;};func _dbg (_fd []byte ,_ace int )(bool ,int ,error ){_cbbe :=_ace ;var _ege =false ;for _gfb :=0;_gfb < 6;_gfb ++{_ege ,_ace =_fbe (_fd ,_ace );if !_ege {if _gfb > 1{return false ,_cbbe ,_fa ;}else {_ace =_cbbe ;break ;};};};return _ege ,_ace ,nil ;};func _bbdg (_dab ,_ddf []byte ,_ffge ,_fee ,_gad int )([]byte ,int ,int ){_ecag :=_fgc (_dab ,_gad );_eef :=_fee >=0&&_dab [_fee ]==_caf ||_fee ==-1;_ddf ,_ffge =_bde (_ddf ,_ffge ,_fc );var _fgf int ;if _fee > -1{_fgf =_gad -_fee ;}else {_fgf =_gad -_fee -1;};_ddf ,_ffge =_fcec (_ddf ,_ffge ,_fgf ,_eef );_eef =!_eef ;_gbd :=_ecag -_gad ;_ddf ,_ffge =_fcec (_ddf ,_ffge ,_gbd ,_eef );_fee =_ecag ;return _ddf ,_ffge ,_fee ;};func _bac (_bebf ,_agg []byte ,_gbaf int ,_bece bool )int {_eafd :=_fgc (_agg ,_gbaf );if _eafd < len (_agg )&&(_gbaf ==-1&&_agg [_eafd ]==_caf ||_gbaf >=0&&_gbaf < len (_bebf )&&_bebf [_gbaf ]==_agg [_eafd ]||_gbaf >=len (_bebf )&&_bece &&_agg [_eafd ]==_caf ||_gbaf >=len (_bebf )&&!_bece &&_agg [_eafd ]==_aef ){_eafd =_fgc (_agg ,_eafd );};return _eafd ;};