aboutsummaryrefslogtreecommitdiff
path: root/unipdf/core
diff options
context:
space:
mode:
Diffstat (limited to 'unipdf/core')
-rw-r--r--unipdf/core/core.go1935
-rw-r--r--unipdf/core/security/crypt/crypt.go135
-rw-r--r--unipdf/core/security/security.go127
3 files changed, 2197 insertions, 0 deletions
diff --git a/unipdf/core/core.go b/unipdf/core/core.go
new file mode 100644
index 0000000..16a8e5f
--- /dev/null
+++ b/unipdf/core/core.go
@@ -0,0 +1,1935 @@
+//
+// 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 core defines and implements the primitive PDF object types in golang, and provides functionality
+// for parsing those from a PDF file stream. This includes I/O handling, cross references, repairs, encryption,
+// encoding and other core capabilities.
+package core ;import (_eb "bufio";_d "bytes";_bea "compress/lzw";_f "compress/zlib";_cb "crypto/md5";_gg "crypto/rand";_c "encoding/hex";_a "errors";_ec "fmt";_cbg "github.com/unidoc/unipdf/v4/common";_db "github.com/unidoc/unipdf/v4/core/security";_bg "github.com/unidoc/unipdf/v4/core/security/crypt";
+_bed "github.com/unidoc/unipdf/v4/internal/ccittfax";_bce "github.com/unidoc/unipdf/v4/internal/imageutil";_bb "github.com/unidoc/unipdf/v4/internal/jbig2";_fe "github.com/unidoc/unipdf/v4/internal/jbig2/bitmap";_gge "github.com/unidoc/unipdf/v4/internal/jbig2/decoder";
+_fed "github.com/unidoc/unipdf/v4/internal/jbig2/document";_geg "github.com/unidoc/unipdf/v4/internal/jbig2/errors";_ed "github.com/unidoc/unipdf/v4/internal/precision";_ga "github.com/unidoc/unipdf/v4/internal/strutils";_fg "golang.org/x/image/tiff/lzw";
+_ce "golang.org/x/text/unicode/bidi";_cbf "golang.org/x/xerrors";_bc "image";_be "image/color";_gc "image/jpeg";_de "io";_ge "os";_da "reflect";_ee "regexp";_dc "sort";_b "strconv";_cg "strings";_ea "sync";_gf "time";_e "unicode";);func _gaac (_bcdca PdfObject ,_fcca int )PdfObject {if _fcca > _dbgcd {_cbg .Log .Error ("\u0054\u0072ac\u0065\u0020\u0064e\u0070\u0074\u0068\u0020lev\u0065l \u0062\u0065\u0079\u006f\u006e\u0064\u0020%d\u0020\u002d\u0020\u0065\u0072\u0072\u006fr\u0021",_dbgcd );
+return MakeNull ();};switch _edec :=_bcdca .(type ){case *PdfIndirectObject :_bcdca =_gaac ((*_edec ).PdfObject ,_fcca +1);case *PdfObjectArray :for _febad ,_becg :=range (*_edec )._gdgb {(*_edec )._gdgb [_febad ]=_gaac (_becg ,_fcca +1);};case *PdfObjectDictionary :for _ddbg ,_abda :=range (*_edec )._cdab {(*_edec )._cdab [_ddbg ]=_gaac (_abda ,_fcca +1);
+};_dc .Slice ((*_edec )._ggegg ,func (_fffb ,_bbfcb int )bool {return (*_edec )._ggegg [_fffb ]< (*_edec )._ggegg [_bbfcb ]});};return _bcdca ;};func _eaaa (_gdbe *PdfObjectStream ,_faa *PdfObjectDictionary )(*CCITTFaxEncoder ,error ){_fccc :=NewCCITTFaxEncoder ();
+_cbc :=_gdbe .PdfObjectDictionary ;if _cbc ==nil {return _fccc ,nil ;};if _faa ==nil {_cfdd :=TraceToDirectObject (_cbc .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073"));if _cfdd !=nil {switch _bbdf :=_cfdd .(type ){case *PdfObjectDictionary :_faa =_bbdf ;
+case *PdfObjectArray :if _bbdf .Len ()==1{if _acbb ,_ddcc :=GetDict (_bbdf .Get (0));_ddcc {_faa =_acbb ;};};default:_cbg .Log .Error ("\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073\u0020\u006e\u006f\u0074 \u0061 \u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u0025\u0023\u0076",_cfdd );
+return nil ,_a .New ("\u0069\u006e\u0076\u0061li\u0064\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");};};if _faa ==nil {_cbg .Log .Error ("\u0044\u0065c\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069\u0065\u0064 %\u0023\u0076",_cfdd );
+return nil ,_a .New ("\u0069\u006e\u0076\u0061li\u0064\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");};};if _cgggc ,_cfda :=GetNumberAsInt64 (_faa .Get ("\u004b"));_cfda ==nil {_fccc .K =int (_cgggc );};if _edegg ,_ccab :=GetNumberAsInt64 (_faa .Get ("\u0043o\u006c\u0075\u006d\u006e\u0073"));
+_ccab ==nil {_fccc .Columns =int (_edegg );}else {_fccc .Columns =1728;};if _gbgb ,_gdda :=GetNumberAsInt64 (_faa .Get ("\u0042\u006c\u0061\u0063\u006b\u0049\u0073\u0031"));_gdda ==nil {_fccc .BlackIs1 =_gbgb > 0;}else {if _acag ,_fbga :=GetBoolVal (_faa .Get ("\u0042\u006c\u0061\u0063\u006b\u0049\u0073\u0031"));
+_fbga {_fccc .BlackIs1 =_acag ;}else {if _ggffd ,_fgb :=GetArray (_faa .Get ("\u0044\u0065\u0063\u006f\u0064\u0065"));_fgb {_gcag ,_dade :=_ggffd .ToIntegerArray ();if _dade ==nil {_fccc .BlackIs1 =_gcag [0]==1&&_gcag [1]==0;};};};};if _cced ,_ddad :=GetNumberAsInt64 (_faa .Get ("\u0045\u006ec\u006f\u0064\u0065d\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e"));
+_ddad ==nil {_fccc .EncodedByteAlign =_cced > 0;}else {if _bagd ,_ggdb :=GetBoolVal (_faa .Get ("\u0045\u006ec\u006f\u0064\u0065d\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e"));_ggdb {_fccc .EncodedByteAlign =_bagd ;};};if _fegb ,_fedb :=GetNumberAsInt64 (_faa .Get ("\u0045n\u0064\u004f\u0066\u004c\u0069\u006ee"));
+_fedb ==nil {_fccc .EndOfLine =_fegb > 0;}else {if _fbddd ,_aaefc :=GetBoolVal (_faa .Get ("\u0045n\u0064\u004f\u0066\u004c\u0069\u006ee"));_aaefc {_fccc .EndOfLine =_fbddd ;};};if _aedf ,_ggcb :=GetNumberAsInt64 (_faa .Get ("\u0052\u006f\u0077\u0073"));
+_ggcb ==nil {_fccc .Rows =int (_aedf );};_fccc .EndOfBlock =true ;if _agfa ,_bgdf :=GetNumberAsInt64 (_faa .Get ("\u0045\u006e\u0064\u004f\u0066\u0042\u006c\u006f\u0063\u006b"));_bgdf ==nil {_fccc .EndOfBlock =_agfa > 0;}else {if _egdc ,_eabd :=GetBoolVal (_faa .Get ("\u0045\u006e\u0064\u004f\u0066\u0042\u006c\u006f\u0063\u006b"));
+_eabd {_fccc .EndOfBlock =_egdc ;};};if _daed ,_addgd :=GetNumberAsInt64 (_faa .Get ("\u0044\u0061\u006d\u0061ge\u0064\u0052\u006f\u0077\u0073\u0042\u0065\u0066\u006f\u0072\u0065\u0045\u0072\u0072o\u0072"));_addgd !=nil {_fccc .DamagedRowsBeforeError =int (_daed );
+};_cbg .Log .Trace ("\u0064\u0065\u0063\u006f\u0064\u0065\u0020\u0070\u0061\u0072\u0061\u006ds\u003a\u0020\u0025\u0073",_faa .String ());return _fccc ,nil ;};
+
+// Seek implementation of Seek interface.
+func (_cacf *limitedReadSeeker )Seek (offset int64 ,whence int )(int64 ,error ){var _dabc int64 ;switch whence {case _de .SeekStart :_dabc =offset ;case _de .SeekCurrent :_dgegc ,_agab :=_cacf ._bbdbf .Seek (0,_de .SeekCurrent );if _agab !=nil {return 0,_agab ;
+};_dabc =_dgegc +offset ;case _de .SeekEnd :_dabc =_cacf ._cede +offset ;};if _fcge :=_cacf .getError (_dabc );_fcge !=nil {return 0,_fcge ;};if _ ,_cacc :=_cacf ._bbdbf .Seek (_dabc ,_de .SeekStart );_cacc !=nil {return 0,_cacc ;};return _dabc ,nil ;};
+func (_fbbd *FlateEncoder )postDecodePredict (_eddeb []byte )([]byte ,error ){if _fbbd .Predictor > 1{if _fbbd .Predictor ==2{_cbg .Log .Trace ("\u0054\u0069\u0066\u0066\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067");_cbg .Log .Trace ("\u0043\u006f\u006c\u006f\u0072\u0073\u003a\u0020\u0025\u0064",_fbbd .Colors );
+_acde :=_fbbd .Columns *_fbbd .Colors ;if _acde < 1{return []byte {},nil ;};_gfde :=len (_eddeb )/_acde ;if len (_eddeb )%_acde !=0{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020T\u0049\u0046\u0046 \u0065\u006e\u0063\u006fd\u0069\u006e\u0067\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u002e\u002e\u002e");
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077 \u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064/\u0025\u0064\u0029",len (_eddeb ),_acde );};if _acde %_fbbd .Colors !=0{return nil ,_ec .Errorf ("\u0069\u006ev\u0061\u006c\u0069\u0064 \u0072\u006fw\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020(\u0025\u0064\u0029\u0020\u0066\u006f\u0072\u0020\u0063\u006f\u006c\u006fr\u0073\u0020\u0025\u0064",_acde ,_fbbd .Colors );
+};if _acde > len (_eddeb ){_cbg .Log .Debug ("\u0052\u006fw\u0020\u006c\u0065\u006e\u0067t\u0068\u0020\u0063\u0061\u006en\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0064\u0061\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064\u002f\u0025\u0064\u0029",_acde ,len (_eddeb ));
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_cbg .Log .Trace ("i\u006e\u0070\u0020\u006fut\u0044a\u0074\u0061\u0020\u0028\u0025d\u0029\u003a\u0020\u0025\u0020\u0078",len (_eddeb ),_eddeb );
+_decec :=_d .NewBuffer (nil );for _bcg :=0;_bcg < _gfde ;_bcg ++{_agbb :=_eddeb [_acde *_bcg :_acde *(_bcg +1)];for _degb :=_fbbd .Colors ;_degb < _acde ;_degb ++{_agbb [_degb ]+=_agbb [_degb -_fbbd .Colors ];};_decec .Write (_agbb );};_dcf :=_decec .Bytes ();
+_cbg .Log .Trace ("\u0050O\u0075t\u0044\u0061\u0074\u0061\u0020(\u0025\u0064)\u003a\u0020\u0025\u0020\u0078",len (_dcf ),_dcf );return _dcf ,nil ;}else if _fbbd .Predictor >=10&&_fbbd .Predictor <=15{_cbg .Log .Trace ("\u0050\u004e\u0047 \u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067");
+_dgc :=_fbbd .Columns *_fbbd .Colors +1;_bfe :=len (_eddeb )/_dgc ;if len (_eddeb )%_dgc !=0{return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077 \u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064/\u0025\u0064\u0029",len (_eddeb ),_dgc );
+};if _dgc > len (_eddeb ){_cbg .Log .Debug ("\u0052\u006fw\u0020\u006c\u0065\u006e\u0067t\u0068\u0020\u0063\u0061\u006en\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0064\u0061\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064\u002f\u0025\u0064\u0029",_dgc ,len (_eddeb ));
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_fccf :=_d .NewBuffer (nil );_cbg .Log .Trace ("P\u0072\u0065\u0064\u0069ct\u006fr\u0020\u0063\u006f\u006c\u0075m\u006e\u0073\u003a\u0020\u0025\u0064",_fbbd .Columns );
+_cbg .Log .Trace ("\u004ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064\u0020\u002f \u0025d\u0020=\u0020\u0025\u0064\u0020\u0072\u006f\u0077s",len (_eddeb ),_dgc ,_bfe );_bgda :=make ([]byte ,_dgc );for _bac :=0;_bac < _dgc ;_bac ++{_bgda [_bac ]=0;};_edeg :=_fbbd .Colors ;
+for _abab :=0;_abab < _bfe ;_abab ++{_eabb :=_eddeb [_dgc *_abab :_dgc *(_abab +1)];_befb :=_eabb [0];switch _befb {case _edgfa :case _def :for _feef :=1+_edeg ;_feef < _dgc ;_feef ++{_eabb [_feef ]+=_eabb [_feef -_edeg ];};case _daf :for _eceb :=1;_eceb < _dgc ;
+_eceb ++{_eabb [_eceb ]+=_bgda [_eceb ];};case _ggf :for _agfd :=1;_agfd < _edeg +1;_agfd ++{_eabb [_agfd ]+=_bgda [_agfd ]/2;};for _dbad :=_edeg +1;_dbad < _dgc ;_dbad ++{_eabb [_dbad ]+=byte ((int (_eabb [_dbad -_edeg ])+int (_bgda [_dbad ]))/2);};case _fbfa :for _ccfg :=1;
+_ccfg < _dgc ;_ccfg ++{var _cegg ,_abec ,_gdee byte ;_abec =_bgda [_ccfg ];if _ccfg >=_edeg +1{_cegg =_eabb [_ccfg -_edeg ];_gdee =_bgda [_ccfg -_edeg ];};_eabb [_ccfg ]+=_cffc (_cegg ,_abec ,_gdee );};default:_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069d\u0020\u0066\u0069\u006c\u0074\u0065r\u0020\u0062\u0079\u0074\u0065\u0020\u0028\u0025\u0064\u0029\u0020\u0040\u0072o\u0077\u0020\u0025\u0064",_befb ,_abab );
+return nil ,_ec .Errorf ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065r\u0020\u0062\u0079\u0074\u0065\u0020\u0028\u0025\u0064\u0029",_befb );};copy (_bgda ,_eabb );_fccf .Write (_eabb [1:]);};_aef :=_fccf .Bytes ();return _aef ,nil ;
+}else {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0070r\u0065\u0064\u0069\u0063\u0074\u006f\u0072 \u0028\u0025\u0064\u0029",_fbbd .Predictor );return nil ,_ec .Errorf ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0070\u0072\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u0020(\u0025\u0064\u0029",_fbbd .Predictor );
+};};return _eddeb ,nil ;};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_gddg *DCTEncoder )UpdateParams (params *PdfObjectDictionary ){_eedb ,_bccfa :=GetNumberAsInt64 (params .Get ("\u0043o\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073"));if _bccfa ==nil {_gddg .ColorComponents =int (_eedb );
+};_fgc ,_bccfa :=GetNumberAsInt64 (params .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074"));if _bccfa ==nil {_gddg .BitsPerComponent =int (_fgc );};_aaca ,_bccfa :=GetNumberAsInt64 (params .Get ("\u0057\u0069\u0064t\u0068"));
+if _bccfa ==nil {_gddg .Width =int (_aaca );};_ddba ,_bccfa :=GetNumberAsInt64 (params .Get ("\u0048\u0065\u0069\u0067\u0068\u0074"));if _bccfa ==nil {_gddg .Height =int (_ddba );};_ebbe ,_bccfa :=GetNumberAsInt64 (params .Get ("\u0051u\u0061\u006c\u0069\u0074\u0079"));
+if _bccfa ==nil {_gddg .Quality =int (_ebbe );};_cgbg ,_ebea :=GetArray (params .Get ("\u0044\u0065\u0063\u006f\u0064\u0065"));if _ebea {_gddg .Decode ,_bccfa =_cgbg .ToFloat64Array ();if _bccfa !=nil {_cbg .Log .Error ("F\u0061\u0069\u006c\u0065\u0064\u0020\u0063\u006f\u006ev\u0065\u0072\u0074\u0069\u006e\u0067\u0020de\u0063\u006f\u0064\u0065 \u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0069\u006eto\u0020\u0061r\u0072\u0061\u0079\u0073\u003a\u0020\u0025\u0076",_bccfa );
+};};};
+
+// MakeName creates a PdfObjectName from a string.
+func MakeName (s string )*PdfObjectName {_gcfd :=PdfObjectName (s );return &_gcfd };
+
+// GetTrailer returns the PDFs trailer dictionary. The trailer dictionary is typically the starting point for a PDF,
+// referencing other key objects that are important in the document structure.
+func (_cdbg *PdfParser )GetTrailer ()*PdfObjectDictionary {return _cdbg ._dgbb };
+
+// MakeDictMap creates a PdfObjectDictionary initialized from a map of keys to values.
+func MakeDictMap (objmap map[string ]PdfObject )*PdfObjectDictionary {_ggdfg :=MakeDict ();return _ggdfg .Update (objmap );};func _fdcc (_fcfa _de .ReadSeeker ,_cdgeg int64 )(*limitedReadSeeker ,error ){_ ,_cgde :=_fcfa .Seek (0,_de .SeekStart );if _cgde !=nil {return nil ,_cgde ;
+};return &limitedReadSeeker {_bbdbf :_fcfa ,_cede :_cdgeg },nil ;};
+
+// DrawableImage is same as golang image/draw's Image interface that allow drawing images.
+type DrawableImage interface{ColorModel ()_be .Model ;Bounds ()_bc .Rectangle ;At (_dcfe ,_fcab int )_be .Color ;Set (_efgf ,_fgff int ,_aaeg _be .Color );};
+
+// MakeDict creates and returns an empty PdfObjectDictionary.
+func MakeDict ()*PdfObjectDictionary {_fgffd :=&PdfObjectDictionary {};_fgffd ._cdab =map[PdfObjectName ]PdfObject {};_fgffd ._ggegg =[]PdfObjectName {};_fgffd ._dfdgf =&_ea .Mutex {};return _fgffd ;};
+
+// MakeStringFromBytes creates an PdfObjectString from a byte array.
+// This is more natural than MakeString as `data` is usually not utf-8 encoded.
+func MakeStringFromBytes (data []byte )*PdfObjectString {return MakeString (string (data ))};
+
+// PdfCrypt provides PDF encryption/decryption support.
+// The PDF standard supports encryption of strings and streams (Section 7.6).
+type PdfCrypt struct{_fbf encryptDict ;_cbbgb _db .StdEncryptDict ;_eaad string ;_dbg []byte ;_acfa map[PdfObject ]bool ;_dfa map[PdfObject ]bool ;_eddc bool ;_gde cryptFilters ;_gef string ;_ade string ;_gfc *PdfParser ;_cdd map[int ]struct{};};func (_debf *offsetReader )Seek (offset int64 ,whence int )(int64 ,error ){if whence ==_de .SeekStart {offset +=_debf ._bbda ;
+};_fgbb ,_fbcb :=_debf ._fecaa .Seek (offset ,whence );if _fbcb !=nil {return _fgbb ,_fbcb ;};if whence ==_de .SeekCurrent {_fgbb -=_debf ._bbda ;};if _fgbb < 0{return 0,_a .New ("\u0063\u006f\u0072\u0065\u002eo\u0066\u0066\u0073\u0065\u0074\u0052\u0065\u0061\u0064\u0065\u0072\u002e\u0053e\u0065\u006b\u003a\u0020\u006e\u0065\u0067\u0061\u0074\u0069\u0076\u0065\u0020\u0070\u006f\u0073\u0069\u0074\u0069\u006f\u006e");
+};return _fgbb ,nil ;};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_baca *MultiEncoder )UpdateParams (params *PdfObjectDictionary ){for _ ,_gbae :=range _baca ._acg {_gbae .UpdateParams (params );};};
+
+// PdfObjectStreams represents the primitive PDF object streams.
+// 7.5.7 Object Streams (page 45).
+type PdfObjectStreams struct{PdfObjectReference ;_face []PdfObject ;};
+
+// GetNumberAsInt64 returns the contents of `obj` as an int64 if it is an integer or float, or an
+// error if it isn't. This is for cases where expecting an integer, but some implementations
+// actually store the number in a floating point format.
+func GetNumberAsInt64 (obj PdfObject )(int64 ,error ){switch _cdbdc :=obj .(type ){case *PdfObjectFloat :_cbg .Log .Debug ("\u004e\u0075m\u0062\u0065\u0072\u0020\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064\u0020\u0061\u0073\u0020\u0069\u006e\u0074e\u0067\u0065\u0072\u0020\u0077\u0061s\u0020\u0073\u0074\u006f\u0072\u0065\u0064\u0020\u0061\u0073\u0020\u0066\u006c\u006fa\u0074\u0020(\u0074\u0079\u0070\u0065 \u0063\u0061\u0073\u0074\u0069n\u0067\u0020\u0075\u0073\u0065\u0064\u0029");
+return int64 (*_cdbdc ),nil ;case *PdfObjectInteger :return int64 (*_cdbdc ),nil ;case *PdfObjectReference :_bbgag :=TraceToDirectObject (obj );return GetNumberAsInt64 (_bbgag );case *PdfIndirectObject :return GetNumberAsInt64 (_cdbdc .PdfObject );};return 0,ErrNotANumber ;
+};
+
+// String returns a string describing `null`.
+func (_bfee *PdfObjectNull )String ()string {return "\u006e\u0075\u006c\u006c"};
+
+// ASCII85Encoder implements ASCII85 encoder/decoder.
+type ASCII85Encoder struct{};
+
+// IsTextWriteDirectionLTR returns `true` if string write direction Left To Right.
+// detect string write direction using golang.org/x/text/unicode/bidi library.
+func IsTextWriteDirectionLTR (str string )bool {_abac :=func (_agedf rune )bool {return _agedf =='\u000A'};_ggbab :=_cg .TrimFunc (str ,_abac );_fffea :=_ce .Paragraph {};_ ,_dfdc :=_fffea .SetString (_ggbab );if _dfdc !=nil {return true ;};_ccggc ,_dfdc :=_fffea .Order ();
+if _dfdc !=nil {return true ;};if _ccggc .NumRuns ()< 1{return true ;};return _fffea .IsLeftToRight ();};
+
+// Append appends PdfObject(s) to the streams.
+func (_aegg *PdfObjectStreams )Append (objects ...PdfObject ){if _aegg ==nil {_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0020-\u0020\u0041\u0074\u0074\u0065\u006d\u0070\u0074\u0020\u0074\u006f\u0020\u0061p\u0070\u0065\u006e\u0064\u0020\u0074\u006f\u0020\u0061\u0020\u006e\u0069\u006c\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0073");
+return ;};_aegg ._face =append (_aegg ._face ,objects ...);};
+
+// NewCCITTFaxEncoder makes a new CCITTFax encoder.
+func NewCCITTFaxEncoder ()*CCITTFaxEncoder {return &CCITTFaxEncoder {Columns :1728,EndOfBlock :true }};const JB2ImageAutoThreshold =-1.0;func _dae (_aa func (*_d .Buffer ))[]byte {_gd :=_af ();defer _fb (_gd );_aa (_gd );_bec :=_gd .Bytes ();_dd :=make ([]byte ,len (_bec ));
+copy (_dd ,_bec );return _dd ;};
+
+// GetBoolVal returns the bool value within a *PdObjectBool represented by an PdfObject interface directly or indirectly.
+// If the PdfObject does not represent a bool value, a default value of false is returned (found = false also).
+func GetBoolVal (obj PdfObject )(_bcdbg bool ,_dedb bool ){_gaff ,_dedb :=TraceToDirectObject (obj ).(*PdfObjectBool );if _dedb {return bool (*_gaff ),true ;};return false ,false ;};func (_fbabd *PdfParser )seekPdfVersionTopDown ()(int ,int ,error ){_fbabd ._eebc .Seek (0,_de .SeekStart );
+_caed :=20;_eccd :=make ([]byte ,_caed );for {_cebf ,_eebcg :=_fbabd ._eebc .ReadByte ();if _eebcg !=nil {if _eebcg ==_de .EOF {break ;}else {return 0,0,_eebcg ;};};if IsDecimalDigit (_cebf )&&_eccd [_caed -1]=='.'&&IsDecimalDigit (_eccd [_caed -2])&&_eccd [_caed -3]=='-'&&_eccd [_caed -4]=='F'&&_eccd [_caed -5]=='D'&&_eccd [_caed -6]=='P'{_gedcb :=int (_eccd [_caed -2]-'0');
+_dfcef :=int (_cebf -'0');return _gedcb ,_dfcef ,nil ;};_eccd =append (_eccd [1:_caed ],_cebf );};return 0,0,_a .New ("\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");};
+
+// DecodeStream decodes a JBIG2 encoded stream and returns the result as a slice of bytes.
+func (_efcf *JBIG2Encoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _efcf .DecodeBytes (streamObj .Stream );};
+
+// Close closes the bufferedReadSeeker.
+func (_ff *bufferedReadSeeker )Close ()error {if _fa ,_afe :=_ff ._aag .(_de .Closer );_afe {return _fa .Close ();};return nil ;};
+
+// EncodeBytes encodes a bytes array and return the encoded value based on the encoder parameters.
+func (_cddd *RunLengthEncoder )EncodeBytes (data []byte )([]byte ,error ){_effd :=_d .NewReader (data );var _eaaf []byte ;var _gadb []byte ;_fged ,_bcad :=_effd .ReadByte ();if _bcad ==_de .EOF {return []byte {},nil ;}else if _bcad !=nil {return nil ,_bcad ;
+};_egbd :=1;for {_febd ,_ggdeg :=_effd .ReadByte ();if _ggdeg ==_de .EOF {break ;}else if _ggdeg !=nil {return nil ,_ggdeg ;};if _febd ==_fged {if len (_gadb )> 0{_gadb =_gadb [:len (_gadb )-1];if len (_gadb )> 0{_eaaf =append (_eaaf ,byte (len (_gadb )-1));
+_eaaf =append (_eaaf ,_gadb ...);};_egbd =1;_gadb =[]byte {};};_egbd ++;if _egbd >=127{_eaaf =append (_eaaf ,byte (257-_egbd ),_fged );_egbd =0;};}else {if _egbd > 0{if _egbd ==1{_gadb =[]byte {_fged };}else {_eaaf =append (_eaaf ,byte (257-_egbd ),_fged );
+};_egbd =0;};_gadb =append (_gadb ,_febd );if len (_gadb )>=127{_eaaf =append (_eaaf ,byte (len (_gadb )-1));_eaaf =append (_eaaf ,_gadb ...);_gadb =[]byte {};};};_fged =_febd ;};if len (_gadb )> 0{_eaaf =append (_eaaf ,byte (len (_gadb )-1));_eaaf =append (_eaaf ,_gadb ...);
+}else if _egbd > 0{_eaaf =append (_eaaf ,byte (257-_egbd ),_fged );};_eaaf =append (_eaaf ,128);return _eaaf ,nil ;};
+
+// LookupByNumber looks up a PdfObject by object number. Returns an error on failure.
+func (_ac *PdfParser )LookupByNumber (objNumber int )(PdfObject ,error ){_bfbb ,_ ,_bbc :=_ac .lookupByNumberWrapper (objNumber ,true );return _bfbb ,_bbc ;};
+
+// PdfObjectInteger represents the primitive PDF integer numerical object.
+type PdfObjectInteger int64 ;var _aedeef _ea .Map ;
+
+// DecodeBytes decodes a slice of LZW encoded bytes and returns the result.
+func (_aagd *LZWEncoder )DecodeBytes (encoded []byte )([]byte ,error ){var _ceaf _d .Buffer ;_dddb :=_d .NewReader (encoded );var _ccee _de .ReadCloser ;if _aagd .EarlyChange ==1{_ccee =_fg .NewReader (_dddb ,_fg .MSB ,8);}else {_ccee =_bea .NewReader (_dddb ,_bea .MSB ,8);
+};defer _ccee .Close ();if _ ,_bcb :=_ceaf .ReadFrom (_ccee );_bcb !=nil {if _bcb !=_de .ErrUnexpectedEOF ||_ceaf .Len ()==0{return nil ,_bcb ;};_cbg .Log .Debug ("\u0057\u0041\u0052\u004e\u003a\u0020\u004c\u005a\u0057\u0020\u0064\u0065\u0063\u006f\u0064i\u006e\u0067\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0025\u0076\u002e \u004f\u0075\u0074\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062e \u0069\u006e\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e",_bcb );
+};return _ceaf .Bytes (),nil ;};func (_eceg *PdfCrypt )checkAccessRights (_edc []byte )(bool ,_db .Permissions ,error ){_cfbc :=_eceg .securityHandler ();_dbec ,_fedg ,_fda :=_cfbc .Authenticate (&_eceg ._cbbgb ,_edc );if _fda !=nil {return false ,0,_fda ;
+}else if _fedg ==0||len (_dbec )==0{return false ,0,nil ;};return true ,_fedg ,nil ;};
+
+// DecodeBytes decodes a slice of DCT encoded bytes and returns the result.
+func (_bff *DCTEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_ffcd :=_d .NewReader (encoded );_fdad ,_gbecd :=_gc .Decode (_ffcd );if _gbecd !=nil {_cbg .Log .Debug ("\u0045r\u0072\u006f\u0072\u0020\u0064\u0065\u0063\u006f\u0064\u0069\u006eg\u0020\u0069\u006d\u0061\u0067\u0065\u003a\u0020\u0025\u0073",_gbecd );
+return nil ,_gbecd ;};_gcba :=_fdad .Bounds ();var _eecb =make ([]byte ,_gcba .Dx ()*_gcba .Dy ()*_bff .ColorComponents *_bff .BitsPerComponent /8);_afed :=0;switch _bff .ColorComponents {case 1:_gdc :=[]float64 {_bff .Decode [0],_bff .Decode [1]};for _agfb :=_gcba .Min .Y ;
+_agfb < _gcba .Max .Y ;_agfb ++{for _bbaae :=_gcba .Min .X ;_bbaae < _gcba .Max .X ;_bbaae ++{_dacg :=_fdad .At (_bbaae ,_agfb );if _bff .BitsPerComponent ==16{_eba ,_bfcc :=_dacg .(_be .Gray16 );if !_bfcc {return nil ,_a .New ("\u0063\u006fl\u006f\u0072\u0020t\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");
+};_bbgaa :=_fdefa (uint (_eba .Y >>8),_gdc [0],_gdc [1]);_fgag :=_fdefa (uint (_eba .Y ),_gdc [0],_gdc [1]);_eecb [_afed ]=byte (_bbgaa );_afed ++;_eecb [_afed ]=byte (_fgag );_afed ++;}else {_cgcd ,_adcgd :=_dacg .(_be .Gray );if !_adcgd {return nil ,_a .New ("\u0063\u006fl\u006f\u0072\u0020t\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");
+};_eecb [_afed ]=byte (_fdefa (uint (_cgcd .Y ),_gdc [0],_gdc [1]));_afed ++;};};};case 3:_aebf :=[]float64 {_bff .Decode [0],_bff .Decode [1]};_gbea :=[]float64 {_bff .Decode [2],_bff .Decode [3]};_ebdb :=[]float64 {_bff .Decode [4],_bff .Decode [5]};
+for _ddce :=_gcba .Min .Y ;_ddce < _gcba .Max .Y ;_ddce ++{for _cbbec :=_gcba .Min .X ;_cbbec < _gcba .Max .X ;_cbbec ++{_affg :=_fdad .At (_cbbec ,_ddce );if _bff .BitsPerComponent ==16{_ccfd ,_ddf :=_affg .(_be .RGBA64 );if !_ddf {return nil ,_a .New ("\u0063\u006fl\u006f\u0072\u0020t\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");
+};_bgdae :=_fdefa (uint (_ccfd .R >>8),_aebf [0],_aebf [1]);_aec :=_fdefa (uint (_ccfd .R ),_aebf [0],_aebf [1]);_fdef :=_fdefa (uint (_ccfd .G >>8),_gbea [0],_gbea [1]);_edf :=_fdefa (uint (_ccfd .G ),_gbea [0],_gbea [1]);_cag :=_fdefa (uint (_ccfd .B >>8),_ebdb [0],_ebdb [1]);
+_cec :=_fdefa (uint (_ccfd .B ),_ebdb [0],_ebdb [1]);_eecb [_afed ]=byte (_bgdae );_afed ++;_eecb [_afed ]=byte (_aec );_afed ++;_eecb [_afed ]=byte (_fdef );_afed ++;_eecb [_afed ]=byte (_edf );_afed ++;_eecb [_afed ]=byte (_cag );_afed ++;_eecb [_afed ]=byte (_cec );
+_afed ++;}else {_dbf ,_cabf :=_affg .(_be .RGBA );if _cabf {_edgff :=_fdefa (uint (_dbf .R ),_aebf [0],_aebf [1]);_aeda :=_fdefa (uint (_dbf .G ),_gbea [0],_gbea [1]);_adaf :=_fdefa (uint (_dbf .B ),_ebdb [0],_ebdb [1]);_eecb [_afed ]=byte (_edgff );_afed ++;
+_eecb [_afed ]=byte (_aeda );_afed ++;_eecb [_afed ]=byte (_adaf );_afed ++;}else {_bgee ,_gfb :=_affg .(_be .YCbCr );if !_gfb {return nil ,_a .New ("\u0063\u006fl\u006f\u0072\u0020t\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");};_gadf ,_dgdg ,_eae ,_ :=_bgee .RGBA ();
+_gffg :=_fdefa (uint (_gadf >>8),_aebf [0],_aebf [1]);_begb :=_fdefa (uint (_dgdg >>8),_gbea [0],_gbea [1]);_afgd :=_fdefa (uint (_eae >>8),_ebdb [0],_ebdb [1]);_eecb [_afed ]=byte (_gffg );_afed ++;_eecb [_afed ]=byte (_begb );_afed ++;_eecb [_afed ]=byte (_afgd );
+_afed ++;};};};};case 4:_ggcga :=[]float64 {_bff .Decode [0],_bff .Decode [1]};_afgg :=[]float64 {_bff .Decode [2],_bff .Decode [3]};_fcda :=[]float64 {_bff .Decode [4],_bff .Decode [5]};_efg :=[]float64 {_bff .Decode [6],_bff .Decode [7]};for _aebfb :=_gcba .Min .Y ;
+_aebfb < _gcba .Max .Y ;_aebfb ++{for _bfce :=_gcba .Min .X ;_bfce < _gcba .Max .X ;_bfce ++{_ddee :=_fdad .At (_bfce ,_aebfb );_dbc ,_fffd :=_ddee .(_be .CMYK );if !_fffd {return nil ,_a .New ("\u0063\u006fl\u006f\u0072\u0020t\u0079\u0070\u0065\u0020\u0065\u0072\u0072\u006f\u0072");
+};_bdb :=255-_fdefa (uint (_dbc .C ),_ggcga [0],_ggcga [1]);_ggdf :=255-_fdefa (uint (_dbc .M ),_afgg [0],_afgg [1]);_bgeg :=255-_fdefa (uint (_dbc .Y ),_fcda [0],_fcda [1]);_bdbe :=255-_fdefa (uint (_dbc .K ),_efg [0],_efg [1]);_eecb [_afed ]=byte (_bdb );
+_afed ++;_eecb [_afed ]=byte (_ggdf );_afed ++;_eecb [_afed ]=byte (_bgeg );_afed ++;_eecb [_afed ]=byte (_bdbe );_afed ++;};};};return _eecb ,nil ;};
+
+// DecodeBytes decodes a slice of Flate encoded bytes and returns the result.
+func (_ggde *FlateEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_cbg .Log .Trace ("\u0046\u006c\u0061\u0074\u0065\u0044\u0065\u0063\u006f\u0064\u0065\u0020b\u0079\u0074\u0065\u0073");if len (encoded )==0{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u006d\u0070\u0074\u0079\u0020\u0046\u006c\u0061\u0074\u0065 e\u006ec\u006f\u0064\u0065\u0064\u0020\u0062\u0075\u0066\u0066\u0065\u0072\u002e \u0052\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u0065\u006d\u0070\u0074\u0079\u0020\u0062y\u0074\u0065\u0020\u0073\u006c\u0069\u0063\u0065\u002e");
+return []byte {},nil ;};_eage :=_d .NewReader (encoded );_aeee ,_adcg :=_f .NewReader (_eage );if _adcg !=nil {_cbg .Log .Debug ("\u0044e\u0063o\u0064\u0069\u006e\u0067\u0020e\u0072\u0072o\u0072\u0020\u0025\u0076\u000a",_adcg );_cbg .Log .Debug ("\u0053t\u0072e\u0061\u006d\u0020\u0028\u0025\u0064\u0029\u0020\u0025\u0020\u0078",len (encoded ),encoded );
+return nil ,_adcg ;};defer _aeee .Close ();var _ebcg _d .Buffer ;_ebcg .ReadFrom (_aeee );return _ebcg .Bytes (),nil ;};
+
+// GetParser returns the parser for lazy-loading or compare references.
+func (_abef *PdfObjectReference )GetParser ()*PdfParser {return _abef ._afgde };type offsetReader struct{_fecaa _de .ReadSeeker ;_bbda int64 ;};func (_eegf *PdfParser )parseNumber ()(PdfObject ,error ){return ParseNumber (_eegf ._eebc ._fba )};
+
+// DecodeStream implements ASCII hex decoding.
+func (_dfea *ASCIIHexEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _dfea .DecodeBytes (streamObj .Stream );};
+
+// PdfObjectBool represents the primitive PDF boolean object.
+type PdfObjectBool bool ;type encryptDict struct{Filter string ;V int ;SubFilter string ;Length int ;StmF string ;StrF string ;EFF string ;CF map[string ]_bg .FilterDict ;};func (_decd *PdfCrypt )isDecrypted (_agfe PdfObject )bool {_ ,_cccg :=_decd ._acfa [_agfe ];
+if _cccg {_cbg .Log .Trace ("\u0041\u006c\u0072\u0065\u0061\u0064\u0079\u0020\u0064\u0065\u0063\u0072y\u0070\u0074\u0065\u0064");return true ;};switch _cefe :=_agfe .(type ){case *PdfObjectStream :if _decd ._cbbgb .R !=5{if _abc ,_cad :=_cefe .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );
+_cad &&*_abc =="\u0058\u0052\u0065\u0066"{return true ;};};case *PdfIndirectObject :if _ ,_cccg =_decd ._cdd [int (_cefe .ObjectNumber )];_cccg {return true ;};switch _bae :=_cefe .PdfObject .(type ){case *PdfObjectDictionary :_feca :=true ;for _ ,_fdga :=range _dfc {if _bae .Get (_fdga )==nil {_feca =false ;
+break ;};};if _feca {return true ;};};};_cbg .Log .Trace ("\u004e\u006f\u0074\u0020\u0064\u0065\u0063\u0072\u0079\u0070\u0074\u0065d\u0020\u0079\u0065\u0074");return false ;};
+
+// SetPredictor sets the predictor function. Specify the number of columns per row.
+// The columns indicates the number of samples per row.
+// Used for grouping data together for compression.
+func (_ebe *FlateEncoder )SetPredictor (columns int ){_ebe .Predictor =11;_ebe .Columns =columns };func (_baa *PdfCrypt )securityHandler ()_db .StdHandler {if _baa ._cbbgb .R >=5{return _db .NewHandlerR6 ();};return _db .NewHandlerR4 (_baa ._eaad ,_baa ._fbf .Length );
+};
+
+// HasInvalidHexRunes implements core.ParserMetadata interface.
+func (_gcca ParserMetadata )HasInvalidHexRunes ()bool {return _gcca ._ecb };
+
+// Write outputs the object as it is to be written to file.
+func (_ddfbb *PdfObjectStream )Write ()[]byte {return _dae (func (_cdacg *_d .Buffer ){_cdacg .WriteString (_b .FormatInt (_ddfbb .ObjectNumber ,10));_cdacg .WriteString ("\u0020\u0030\u0020\u0052");});};
+
+// EncodeBytes encodes the image data using either Group3 or Group4 CCITT facsimile (fax) encoding.
+// `data` is expected to be 1 color component, 1 bit per component. It is also valid to provide 8 BPC, 1 CC image like
+// a standard go image Gray data.
+func (_ceca *CCITTFaxEncoder )EncodeBytes (data []byte )([]byte ,error ){var _ccef _bce .Gray ;switch len (data ){case _ceca .Rows *_ceca .Columns :_eead ,_fcee :=_bce .NewImage (_ceca .Columns ,_ceca .Rows ,8,1,data ,nil ,nil );if _fcee !=nil {return nil ,_fcee ;
+};_ccef =_eead .(_bce .Gray );case (_ceca .Columns *_ceca .Rows )+7>>3:_gegc ,_ecac :=_bce .NewImage (_ceca .Columns ,_ceca .Rows ,1,1,data ,nil ,nil );if _ecac !=nil {return nil ,_ecac ;};_cged :=_gegc .(*_bce .Monochrome );if _ecac =_cged .AddPadding ();
+_ecac !=nil {return nil ,_ecac ;};_ccef =_cged ;default:if len (data )< _bce .BytesPerLine (_ceca .Columns ,1,1)*_ceca .Rows {return nil ,_a .New ("p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020i\u006e\u0070\u0075t\u0020d\u0061\u0074\u0061");
+};_gggg ,_dfbb :=_bce .NewImage (_ceca .Columns ,_ceca .Rows ,1,1,data ,nil ,nil );if _dfbb !=nil {return nil ,_dfbb ;};_ebef :=_gggg .(*_bce .Monochrome );_ccef =_ebef ;};_bdba :=make ([][]byte ,_ceca .Rows );for _eege :=0;_eege < _ceca .Rows ;_eege ++{_ccb :=make ([]byte ,_ceca .Columns );
+for _gbed :=0;_gbed < _ceca .Columns ;_gbed ++{_cecd :=_ccef .GrayAt (_gbed ,_eege );_ccb [_gbed ]=_cecd .Y >>7;};_bdba [_eege ]=_ccb ;};_dgfb :=&_bed .Encoder {K :_ceca .K ,Columns :_ceca .Columns ,EndOfLine :_ceca .EndOfLine ,EndOfBlock :_ceca .EndOfBlock ,BlackIs1 :_ceca .BlackIs1 ,DamagedRowsBeforeError :_ceca .DamagedRowsBeforeError ,Rows :_ceca .Rows ,EncodedByteAlign :_ceca .EncodedByteAlign };
+return _dgfb .Encode (_bdba ),nil ;};const (XrefTypeTableEntry xrefType =iota ;XrefTypeObjectStream xrefType =iota ;);func (_eeac *PdfParser )parseObject ()(PdfObject ,error ){_cbg .Log .Trace ("\u0052e\u0061d\u0020\u0064\u0069\u0072\u0065c\u0074\u0020o\u0062\u006a\u0065\u0063\u0074");
+_eeac .skipSpaces ();for {_acfg ,_adg :=_eeac ._eebc .Peek (2);if _adg !=nil {if _adg !=_de .EOF ||len (_acfg )==0{return nil ,_adg ;};if len (_acfg )==1{_acfg =append (_acfg ,' ');};};_cbg .Log .Trace ("\u0050e\u0065k\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u003a\u0020\u0025\u0073",string (_acfg ));
+if _acfg [0]=='/'{_ddadc ,_fecbe :=_eeac .parseName ();_cbg .Log .Trace ("\u002d\u003e\u004ea\u006d\u0065\u003a\u0020\u0027\u0025\u0073\u0027",_ddadc );return &_ddadc ,_fecbe ;}else if _acfg [0]=='('{_cbg .Log .Trace ("\u002d>\u0053\u0074\u0072\u0069\u006e\u0067!");
+_dbgda ,_ebda :=_eeac .parseString ();return _dbgda ,_ebda ;}else if _acfg [0]=='['{_cbg .Log .Trace ("\u002d\u003e\u0041\u0072\u0072\u0061\u0079\u0021");_abcc ,_eecbb :=_eeac .parseArray ();return _abcc ,_eecbb ;}else if (_acfg [0]=='<')&&(_acfg [1]=='<'){_cbg .Log .Trace ("\u002d>\u0044\u0069\u0063\u0074\u0021");
+_cfgg ,_aacb :=_eeac .ParseDict ();return _cfgg ,_aacb ;}else if _acfg [0]=='<'{_cbg .Log .Trace ("\u002d\u003e\u0048\u0065\u0078\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0021");_dbacb ,_fdce :=_eeac .parseHexString ();return _dbacb ,_fdce ;}else if _acfg [0]=='%'{_eeac .readComment ();
+_eeac .skipSpaces ();}else {_cbg .Log .Trace ("\u002d\u003eN\u0075\u006d\u0062e\u0072\u0020\u006f\u0072\u0020\u0072\u0065\u0066\u003f");_acfg ,_ =_eeac ._eebc .Peek (15);_aece :=string (_acfg );_cbg .Log .Trace ("\u0050\u0065\u0065k\u0020\u0073\u0074\u0072\u003a\u0020\u0025\u0073",_aece );
+if (len (_aece )> 3)&&(_aece [:4]=="\u006e\u0075\u006c\u006c"){_agffg ,_bggc :=_eeac .parseNull ();return &_agffg ,_bggc ;}else if (len (_aece )> 4)&&(_aece [:5]=="\u0066\u0061\u006cs\u0065"){_cabg ,_gcgc :=_eeac .parseBool ();return &_cabg ,_gcgc ;}else if (len (_aece )> 3)&&(_aece [:4]=="\u0074\u0072\u0075\u0065"){_eagb ,_agef :=_eeac .parseBool ();
+return &_eagb ,_agef ;};_eaffe :=_gaeg .FindStringSubmatch (_aece );if len (_eaffe )> 1{_acfg ,_ =_eeac ._eebc .ReadBytes ('R');_cbg .Log .Trace ("\u002d\u003e\u0020\u0021\u0052\u0065\u0066\u003a\u0020\u0027\u0025\u0073\u0027",string (_acfg [:]));_bbca ,_ffad :=_ecgb (string (_acfg ));
+_bbca ._afgde =_eeac ;return &_bbca ,_ffad ;};_efec :=_geade .FindStringSubmatch (_aece );if len (_efec )> 1{_cbg .Log .Trace ("\u002d\u003e\u0020\u004e\u0075\u006d\u0062\u0065\u0072\u0021");_bbfe ,_ggfd :=_eeac .parseNumber ();return _bbfe ,_ggfd ;};_efec =_abag .FindStringSubmatch (_aece );
+if len (_efec )> 1{_cbg .Log .Trace ("\u002d\u003e\u0020\u0045xp\u006f\u006e\u0065\u006e\u0074\u0069\u0061\u006c\u0020\u004e\u0075\u006d\u0062\u0065r\u0021");_cbg .Log .Trace ("\u0025\u0020\u0073",_efec );_addf ,_edgfff :=_eeac .parseNumber ();return _addf ,_edgfff ;
+};_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020U\u006e\u006b\u006e\u006f\u0077n\u0020(\u0070e\u0065\u006b\u0020\u0022\u0025\u0073\u0022)",_aece );return nil ,_a .New ("\u006f\u0062\u006a\u0065\u0063t\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0065\u0072\u0072\u006fr\u0020\u002d\u0020\u0075\u006e\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064\u0020\u0070\u0061\u0074\u0074\u0065\u0072\u006e");
+};};};const _gbb ="\u0053\u0074\u0064C\u0046";func _dbb (_dddba PdfObject ,_ffgab int ,_acbg map[PdfObject ]struct{})error {_cbg .Log .Trace ("\u0054\u0072\u0061\u0076\u0065\u0072s\u0065\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0064\u0061\u0074\u0061 \u0028\u0064\u0065\u0070\u0074\u0068\u0020=\u0020\u0025\u0064\u0029",_ffgab );
+if _ ,_baef :=_acbg [_dddba ];_baef {_cbg .Log .Trace ("-\u0041\u006c\u0072\u0065ad\u0079 \u0074\u0072\u0061\u0076\u0065r\u0073\u0065\u0064\u002e\u002e\u002e");return nil ;};_acbg [_dddba ]=struct{}{};switch _bagc :=_dddba .(type ){case *PdfIndirectObject :_gfef :=_bagc ;
+_cbg .Log .Trace ("\u0069\u006f\u003a\u0020\u0025\u0073",_gfef );_cbg .Log .Trace ("\u002d\u0020\u0025\u0073",_gfef .PdfObject );return _dbb (_gfef .PdfObject ,_ffgab +1,_acbg );case *PdfObjectStream :_cfbca :=_bagc ;return _dbb (_cfbca .PdfObjectDictionary ,_ffgab +1,_acbg );
+case *PdfObjectDictionary :_gdae :=_bagc ;_cbg .Log .Trace ("\u002d\u0020\u0064\u0069\u0063\u0074\u003a\u0020\u0025\u0073",_gdae );for _ ,_bfgf :=range _gdae .Keys (){_gbgg :=_gdae .Get (_bfgf );if _fece ,_aeaa :=_gbgg .(*PdfObjectReference );_aeaa {_ddbb :=_fece .Resolve ();
+_gdae .Set (_bfgf ,_ddbb );_ceddc :=_dbb (_ddbb ,_ffgab +1,_acbg );if _ceddc !=nil {return _ceddc ;};}else {_gfefc :=_dbb (_gbgg ,_ffgab +1,_acbg );if _gfefc !=nil {return _gfefc ;};};};return nil ;case *PdfObjectArray :_dbfbg :=_bagc ;_cbg .Log .Trace ("-\u0020\u0061\u0072\u0072\u0061\u0079\u003a\u0020\u0025\u0073",_dbfbg );
+for _eaccb ,_bffdc :=range _dbfbg .Elements (){if _agbe ,_cfdab :=_bffdc .(*PdfObjectReference );_cfdab {_aecc :=_agbe .Resolve ();_dbfbg .Set (_eaccb ,_aecc );_eade :=_dbb (_aecc ,_ffgab +1,_acbg );if _eade !=nil {return _eade ;};}else {_bcgb :=_dbb (_bffdc ,_ffgab +1,_acbg );
+if _bcgb !=nil {return _bcgb ;};};};return nil ;case *PdfObjectReference :_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020T\u0072\u0061\u0063\u0069\u006e\u0067\u0020\u0061\u0020r\u0065\u0066\u0065r\u0065n\u0063\u0065\u0021");return _a .New ("\u0065r\u0072\u006f\u0072\u0020t\u0072\u0061\u0063\u0069\u006eg\u0020a\u0020r\u0065\u0066\u0065\u0072\u0065\u006e\u0063e");
+};return nil ;};
+
+// MakeBool creates a PdfObjectBool from a bool value.
+func MakeBool (val bool )*PdfObjectBool {_gdfd :=PdfObjectBool (val );return &_gdfd };
+
+// GetXrefType returns the type of the first xref object (table or stream).
+func (_bbaba *PdfParser )GetXrefType ()*xrefType {return _bbaba ._afffc };
+
+// MakeStreamDict make a new instance of an encoding dictionary for a stream object.
+func (_gae *ASCII85Encoder )MakeStreamDict ()*PdfObjectDictionary {_egaa :=MakeDict ();_egaa .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_gae .GetFilterName ()));return _egaa ;};
+
+// HasDataAfterEOF checks if there is some data after EOF marker.
+func (_dcdb ParserMetadata )HasDataAfterEOF ()bool {return _dcdb ._fcff };
+
+// IsDecimalDigit checks if the character is a part of a decimal number string.
+func IsDecimalDigit (c byte )bool {return '0'<=c &&c <='9'};
+
+// MakeStream creates an PdfObjectStream with specified contents and encoding. If encoding is nil, then raw encoding
+// will be used (i.e. no encoding applied).
+func MakeStream (contents []byte ,encoder StreamEncoder )(*PdfObjectStream ,error ){_fgac :=&PdfObjectStream {};if encoder ==nil {encoder =NewRawEncoder ();};_fgac .PdfObjectDictionary =encoder .MakeStreamDict ();_fag ,_gcdf :=encoder .EncodeBytes (contents );
+if _gcdf !=nil {return nil ,_gcdf ;};_fgac .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (len (_fag ))));_fgac .Stream =_fag ;return _fgac ,nil ;};
+
+// GoImageToJBIG2 creates a binary image on the base of 'i' golang image.Image.
+// If the image is not a black/white image then the function converts provided input into
+// JBIG2Image with 1bpp. For non grayscale images the function performs the conversion to the grayscale temp image.
+// Then it checks the value of the gray image value if it's within bounds of the black white threshold.
+// This 'bwThreshold' value should be in range (0.0, 1.0). The threshold checks if the grayscale pixel (uint) value
+// is greater or smaller than 'bwThreshold' * 255. Pixels inside the range will be white, and the others will be black.
+// If the 'bwThreshold' is equal to -1.0 - JB2ImageAutoThreshold then it's value would be set on the base of
+// it's histogram using Triangle method. For more information go to:
+//
+// https://www.mathworks.com/matlabcentral/fileexchange/28047-gray-image-thresholding-using-the-triangle-method
+func GoImageToJBIG2 (i _bc .Image ,bwThreshold float64 )(*JBIG2Image ,error ){const _ccdf ="\u0047\u006f\u0049\u006d\u0061\u0067\u0065\u0054\u006fJ\u0042\u0049\u0047\u0032";if i ==nil {return nil ,_geg .Error (_ccdf ,"i\u006d\u0061\u0067\u0065 '\u0069'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");
+};var (_acgg uint8 ;_aebda _bce .Image ;_ffa error ;);if bwThreshold ==JB2ImageAutoThreshold {_aebda ,_ffa =_bce .MonochromeConverter .Convert (i );}else if bwThreshold > 1.0||bwThreshold < 0.0{return nil ,_geg .Error (_ccdf ,"p\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074h\u0072\u0065\u0073\u0068\u006f\u006c\u0064 i\u0073\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u0061\u0020\u0072\u0061\u006ege\u0020\u007b0\u002e\u0030\u002c\u0020\u0031\u002e\u0030\u007d");
+}else {_acgg =uint8 (255*bwThreshold );_aebda ,_ffa =_bce .MonochromeThresholdConverter (_acgg ).Convert (i );};if _ffa !=nil {return nil ,_ffa ;};return _becd (_aebda ),nil ;};const (DefaultJPEGQuality =75;);
+
+// UpdateParams updates the parameter values of the encoder.
+func (_bbcd *ASCII85Encoder )UpdateParams (params *PdfObjectDictionary ){};var _fgadc =map[byte ][]byte {'\n':[]byte ("\u005c\u006e"),'\r':[]byte ("\u005c\u0072"),'\t':[]byte ("\u005c\u0074"),'\b':[]byte ("\u005c\u0062"),'\f':[]byte ("\u005c\u0066"),'(':[]byte ("\u005c\u0028"),')':[]byte ("\u005c\u0029"),'\\':[]byte ("\u005c\u005c")};
+
+
+// GetFileOffset returns the current file offset, accounting for buffered position.
+func (_eg *bufferedReadSeeker )GetFileOffset ()int64 {_ae ,_ :=_eg ._aag .Seek (0,_de .SeekCurrent );_ae -=int64 (_eg ._fba .Buffered ());return _ae ;};
+
+// IsWhiteSpace checks if byte represents a white space character.
+func IsWhiteSpace (ch byte )bool {if (ch ==0x00)||(ch ==0x09)||(ch ==0x0A)||(ch ==0x0C)||(ch ==0x0D)||(ch ==0x20){return true ;};return false ;};func (_eaab *PdfParser )seekToEOFMarker (_bbgfc int64 )error {var _bfacb int64 ;var _ccfc int64 =2048;for _bfacb < _bbgfc -4{if _bbgfc <=(_ccfc +_bfacb ){_ccfc =_bbgfc -_bfacb ;
+};_ ,_aeceg :=_eaab ._eebc .Seek (_bbgfc -_bfacb -_ccfc ,_de .SeekStart );if _aeceg !=nil {return _aeceg ;};_ceeae :=make ([]byte ,_ccfc );_eaab ._eebc .Read (_ceeae );_cbg .Log .Trace ("\u004c\u006f\u006f\u006bi\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0045\u004f\u0046 \u006da\u0072\u006b\u0065\u0072\u003a\u0020\u0022%\u0073\u0022",string (_ceeae ));
+_afcfa :=_bgdb .FindAllStringIndex (string (_ceeae ),-1);if _afcfa !=nil {_fbfg :=_afcfa [len (_afcfa )-1];_cbg .Log .Trace ("\u0049\u006e\u0064\u003a\u0020\u0025\u0020\u0064",_afcfa );_bfgd :=_bbgfc -_bfacb -_ccfc +int64 (_fbfg [0]);_eaab ._eebc .Seek (_bfgd ,_de .SeekStart );
+return nil ;};_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0069\u006eg\u003a\u0020\u0045\u004f\u0046\u0020\u006d\u0061\u0072\u006b\u0065\u0072\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064\u0021\u0020\u002d\u0020\u0063\u006f\u006e\u0074\u0069\u006e\u0075\u0065\u0020s\u0065e\u006b\u0069\u006e\u0067");
+_bfacb +=_ccfc -4;};_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0045\u004f\u0046\u0020\u006d\u0061\u0072\u006be\u0072 \u0077\u0061\u0073\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u002e");return _aceg ;};
+
+// PdfIndirectObject represents the primitive PDF indirect object.
+type PdfIndirectObject struct{PdfObjectReference ;PdfObject ;};
+
+// RunLengthEncoder represents Run length encoding.
+type RunLengthEncoder struct{};
+
+// MakeArrayFromFloats creates an PdfObjectArray from a slice of float64s, where each array element is an
+// PdfObjectFloat.
+func MakeArrayFromFloats (vals []float64 )*PdfObjectArray {_bffb :=MakeArray ();for _ ,_gecc :=range vals {_bffb .Append (MakeFloat (_gecc ));};return _bffb ;};
+
+// DecodeBytes decodes a slice of ASCII encoded bytes and returns the result.
+func (_egdg *ASCIIHexEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_bgcg :=_d .NewReader (encoded );var _geeb []byte ;for {_bdaa ,_cdge :=_bgcg .ReadByte ();if _cdge !=nil {return nil ,_cdge ;};if _bdaa =='>'{break ;};if IsWhiteSpace (_bdaa ){continue ;
+};if (_bdaa >='a'&&_bdaa <='f')||(_bdaa >='A'&&_bdaa <='F')||(_bdaa >='0'&&_bdaa <='9'){_geeb =append (_geeb ,_bdaa );}else {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069d\u0020\u0061\u0073\u0063\u0069\u0069 \u0068\u0065\u0078\u0020\u0063\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072 \u0028\u0025\u0063\u0029",_bdaa );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0061\u0073\u0063\u0069\u0069\u0020\u0068e\u0078 \u0063\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0020\u0028\u0025\u0063\u0029",_bdaa );};};if len (_geeb )%2==1{_geeb =append (_geeb ,'0');
+};_cbg .Log .Trace ("\u0049\u006e\u0062\u006f\u0075\u006e\u0064\u0020\u0025\u0073",_geeb );_fgaa :=make ([]byte ,_c .DecodedLen (len (_geeb )));_ ,_ddfa :=_c .Decode (_fgaa ,_geeb );if _ddfa !=nil {return nil ,_ddfa ;};return _fgaa ,nil ;};
+
+// Write outputs the object as it is to be written to file.
+func (_gcgeg *PdfObjectString )Write ()[]byte {return _dae (func (_baga *_d .Buffer ){if _gcgeg ._fcgeb {_cdggc :=_c .EncodeToString (_gcgeg .Bytes ());_baga .Grow (len (_cdggc )+2);_baga .WriteString ("\u003c");_baga .WriteString (_cdggc );_baga .WriteString ("\u003e");
+return ;};_baga .Grow (len (_gcgeg ._efga )+len (_gcgeg ._efga )/5+2);_baga .WriteString ("\u0028");for _ecgg :=0;_ecgg < len (_gcgeg ._efga );_ecgg ++{_fdgac :=_gcgeg ._efga [_ecgg ];if _cecgf ,_bbde :=_fgadc [_fdgac ];_bbde {_baga .Write (_cecgf );}else {_baga .WriteByte (_fdgac );
+};};_baga .WriteString ("\u0029");});};
+
+// GetBool returns the *PdfObjectBool object that is represented by a PdfObject directly or indirectly
+// within an indirect object. The bool flag indicates whether a match was found.
+func GetBool (obj PdfObject )(_deeb *PdfObjectBool ,_begf bool ){_deeb ,_begf =TraceToDirectObject (obj ).(*PdfObjectBool );return _deeb ,_begf ;};
+
+// PdfObjectArray represents the primitive PDF array object.
+type PdfObjectArray struct{_gdgb []PdfObject };
+
+// MakeString creates an PdfObjectString from a string.
+// NOTE: PDF does not use utf-8 string encoding like Go so `s` will often not be a utf-8 encoded
+// string.
+func MakeString (s string )*PdfObjectString {_afaf :=PdfObjectString {_efga :s };return &_afaf };
+
+// String returns a string describing `ref`.
+func (_bdcfb *PdfObjectReference )String ()string {return _ec .Sprintf ("\u0052\u0065\u0066\u0028\u0025\u0064\u0020\u0025\u0064\u0029",_bdcfb .ObjectNumber ,_bdcfb .GenerationNumber );};
+
+// GetNumberAsFloat returns the contents of `obj` as a float if it is an integer or float, or an
+// error if it isn't.
+func GetNumberAsFloat (obj PdfObject )(float64 ,error ){switch _edeb :=obj .(type ){case *PdfObjectFloat :return float64 (*_edeb ),nil ;case *PdfObjectInteger :return float64 (*_edeb ),nil ;case *PdfObjectReference :_bgdaec :=TraceToDirectObject (obj );
+return GetNumberAsFloat (_bgdaec );case *PdfIndirectObject :return GetNumberAsFloat (_edeb .PdfObject );};return 0,ErrNotANumber ;};
+
+// MakeFloat creates an PdfObjectFloat from a float64.
+func MakeFloat (val float64 )*PdfObjectFloat {val =_ed .RoundDefault (val );_fggc :=PdfObjectFloat (val );return &_fggc ;};
+
+// PdfCryptNewEncrypt makes the document crypt handler based on a specified crypt filter.
+func PdfCryptNewEncrypt (cf _bg .Filter ,userPass ,ownerPass []byte ,perm _db .Permissions )(*PdfCrypt ,*EncryptInfo ,error ){_fde :=&PdfCrypt {_dfa :make (map[PdfObject ]bool ),_gde :make (cryptFilters ),_cbbgb :_db .StdEncryptDict {P :perm ,EncryptMetadata :true }};
+var _beae Version ;if cf !=nil {_ccf :=cf .PDFVersion ();_beae .Major ,_beae .Minor =_ccf [0],_ccf [1];V ,R :=cf .HandlerVersion ();_fde ._fbf .V =V ;_fde ._cbbgb .R =R ;_fde ._fbf .Length =cf .KeyLength ()*8;};const (_dag =_gbb ;);_fde ._gde [_dag ]=cf ;
+if _fde ._fbf .V >=4{_fde ._gef =_dag ;_fde ._ade =_dag ;};_fca :=_fde .newEncryptDict ();_cbbg :=_cb .Sum ([]byte (_gf .Now ().Format (_gf .RFC850 )));_gff :=string (_cbbg [:]);_fcf :=make ([]byte ,100);_gg .Read (_fcf );_cbbg =_cb .Sum (_fcf );_cae :=string (_cbbg [:]);
+_cbg .Log .Trace ("\u0052\u0061\u006e\u0064\u006f\u006d\u0020\u0062\u003a\u0020\u0025\u0020\u0078",_fcf );_cbg .Log .Trace ("\u0047\u0065\u006e\u0020\u0049\u0064\u0020\u0030\u003a\u0020\u0025\u0020\u0078",_gff );_fde ._eaad =_gff ;_ddd :=_fde .generateParams (userPass ,ownerPass );
+if _ddd !=nil {return nil ,nil ,_ddd ;};_aaf (&_fde ._cbbgb ,_fca );if _fde ._fbf .V >=4{if _cce :=_fde .saveCryptFilters (_fca );_cce !=nil {return nil ,nil ,_cce ;};};return _fde ,&EncryptInfo {Version :_beae ,Encrypt :_fca ,ID0 :_gff ,ID1 :_cae },nil ;
+};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_gddac *JPXEncoder )MakeStreamDict ()*PdfObjectDictionary {return MakeDict ()};
+
+// AddPageImage adds the page with the image 'img' to the encoder context in order to encode it jbig2 document.
+// The 'settings' defines what encoding type should be used by the encoder.
+func (_fdfd *JBIG2Encoder )AddPageImage (img *JBIG2Image ,settings *JBIG2EncoderSettings )(_fcbdb error ){const _gdf ="\u004a\u0042\u0049\u0047\u0032\u0044\u006f\u0063\u0075\u006d\u0065n\u0074\u002e\u0041\u0064\u0064\u0050\u0061\u0067\u0065\u0049m\u0061\u0067\u0065";
+if _fdfd ==nil {return _geg .Error (_gdf ,"J\u0042I\u0047\u0032\u0044\u006f\u0063\u0075\u006d\u0065n\u0074\u0020\u0069\u0073 n\u0069\u006c");};if settings ==nil {settings =&_fdfd .DefaultPageSettings ;};if _fdfd ._beffg ==nil {_fdfd ._beffg =_fed .InitEncodeDocument (settings .FileMode );
+};if _fcbdb =settings .Validate ();_fcbdb !=nil {return _geg .Wrap (_fcbdb ,_gdf ,"");};_gcga ,_fcbdb :=img .toBitmap ();if _fcbdb !=nil {return _geg .Wrap (_fcbdb ,_gdf ,"");};switch settings .Compression {case JB2Generic :if _fcbdb =_fdfd ._beffg .AddGenericPage (_gcga ,settings .DuplicatedLinesRemoval );
+_fcbdb !=nil {return _geg .Wrap (_fcbdb ,_gdf ,"");};case JB2SymbolCorrelation :return _geg .Error (_gdf ,"s\u0079\u006d\u0062\u006f\u006c\u0020\u0063\u006f\u0072r\u0065\u006c\u0061\u0074\u0069\u006f\u006e e\u006e\u0063\u006f\u0064i\u006e\u0067\u0020\u006e\u006f\u0074\u0020\u0069\u006dpl\u0065\u006de\u006e\u0074\u0065\u0064\u0020\u0079\u0065\u0074");
+case JB2SymbolRankHaus :return _geg .Error (_gdf ,"\u0073y\u006d\u0062o\u006c\u0020\u0072a\u006e\u006b\u0020\u0068\u0061\u0075\u0073 \u0065\u006e\u0063\u006f\u0064\u0069n\u0067\u0020\u006e\u006f\u0074\u0020\u0069\u006d\u0070\u006c\u0065m\u0065\u006e\u0074\u0065\u0064\u0020\u0079\u0065\u0074");
+default:return _geg .Error (_gdf ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069d\u0020c\u006f\u006d\u0070\u0072\u0065\u0073\u0073i\u006f\u006e");};return nil ;};
+
+// EncodeBytes encodes a bytes array and return the encoded value based on the encoder parameters.
+func (_ecd *FlateEncoder )EncodeBytes (data []byte )([]byte ,error ){if _ecd .Predictor !=1&&_ecd .Predictor !=11{_cbg .Log .Debug ("E\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u0020\u0065\u0072\u0072\u006f\u0072\u003a\u0020\u0046\u006c\u0061\u0074\u0065\u0045\u006e\u0063\u006f\u0064\u0065r\u0020P\u0072\u0065\u0064\u0069c\u0074\u006fr\u0020\u003d\u0020\u0031\u002c\u0020\u0031\u0031\u0020\u006f\u006e\u006c\u0079\u0020\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064");
+return nil ,ErrUnsupportedEncodingParameters ;};if _ecd .Predictor ==11{_beff :=_ecd .Columns ;_fdfg :=len (data )/_beff ;if len (data )%_beff !=0{_cbg .Log .Error ("\u0049n\u0076a\u006c\u0069\u0064\u0020\u0072o\u0077\u0020l\u0065\u006e\u0067\u0074\u0068");
+return nil ,_a .New ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0072o\u0077\u0020l\u0065\u006e\u0067\u0074\u0068");};_cbed :=_d .NewBuffer (nil );_fced :=make ([]byte ,_beff );for _eaga :=0;_eaga < _fdfg ;_eaga ++{_feb :=data [_beff *_eaga :_beff *(_eaga +1)];
+_fced [0]=_feb [0];for _adf :=1;_adf < _beff ;_adf ++{_fced [_adf ]=byte (int (_feb [_adf ]-_feb [_adf -1])%256);};_cbed .WriteByte (1);_cbed .Write (_fced );};data =_cbed .Bytes ();};var _cbaf _d .Buffer ;_cfbcc :=_f .NewWriter (&_cbaf );_cfbcc .Write (data );
+_cfbcc .Close ();return _cbaf .Bytes (),nil ;};func _ca (_df _de .ReadSeeker )*bufferedReadSeeker {return &bufferedReadSeeker {_aag :_df ,_fba :_eb .NewReader (_df )};};
+
+// Write outputs the object as it is to be written to file.
+func (_dbecc *PdfObjectFloat )Write ()[]byte {return []byte (_b .FormatFloat (float64 (*_dbecc ),'f',-1,64));};
+
+// GetNumbersAsFloat converts a list of pdf objects representing floats or integers to a slice of
+// float64 values.
+func GetNumbersAsFloat (objects []PdfObject )(_afda []float64 ,_egede error ){for _ ,_cdgec :=range objects {_efea ,_dea :=GetNumberAsFloat (_cdgec );if _dea !=nil {return nil ,_dea ;};_afda =append (_afda ,_efea );};return _afda ,nil ;};
+
+// NewASCIIHexEncoder makes a new ASCII hex encoder.
+func NewASCIIHexEncoder ()*ASCIIHexEncoder {_egc :=&ASCIIHexEncoder {};return _egc };func (_ddfaa *PdfParser )repairSeekXrefMarker ()error {_cbddf ,_cfgb :=_ddfaa ._eebc .Seek (0,_de .SeekEnd );if _cfgb !=nil {return _cfgb ;};_caceg :=_ee .MustCompile ("\u005cs\u0078\u0072\u0065\u0066\u005c\u0073*");
+var _defb int64 ;var _bfbc int64 =1000;for _defb < _cbddf {if _cbddf <=(_bfbc +_defb ){_bfbc =_cbddf -_defb ;};_ ,_dded :=_ddfaa ._eebc .Seek (-_defb -_bfbc ,_de .SeekEnd );if _dded !=nil {return _dded ;};_fgage :=make ([]byte ,_bfbc );_ddfaa ._eebc .Read (_fgage );
+_cbg .Log .Trace ("\u004c\u006f\u006fki\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0078\u0072\u0065\u0066\u0020\u003a\u0020\u0022\u0025\u0073\u0022",string (_fgage ));_cffag :=_caceg .FindAllStringIndex (string (_fgage ),-1);if _cffag !=nil {_faba :=_cffag [len (_cffag )-1];
+_cbg .Log .Trace ("\u0049\u006e\u0064\u003a\u0020\u0025\u0020\u0064",_cffag );_ddfaa ._eebc .Seek (-_defb -_bfbc +int64 (_faba [0]),_de .SeekEnd );for {_cgga ,_gaeea :=_ddfaa ._eebc .Peek (1);if _gaeea !=nil {return _gaeea ;};_cbg .Log .Trace ("\u0042\u003a\u0020\u0025\u0064\u0020\u0025\u0063",_cgga [0],_cgga [0]);
+if !IsWhiteSpace (_cgga [0]){break ;};_ddfaa ._eebc .Discard (1);};return nil ;};_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0069\u006eg\u003a\u0020\u0045\u004f\u0046\u0020\u006d\u0061\u0072\u006b\u0065\u0072\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064\u0021\u0020\u002d\u0020\u0063\u006f\u006e\u0074\u0069\u006e\u0075\u0065\u0020s\u0065e\u006b\u0069\u006e\u0067");
+_defb +=_bfbc ;};_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0058\u0072\u0065\u0066\u0020\u0074a\u0062\u006c\u0065\u0020\u006d\u0061r\u006b\u0065\u0072\u0020\u0077\u0061\u0073\u0020\u006e\u006f\u0074\u0020\u0066o\u0075\u006e\u0064\u002e");
+return _a .New ("\u0078r\u0065f\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0020");};
+
+// GetString is a helper for Get that returns a string value.
+// Returns false if the key is missing or a value is not a string.
+func (_gaegg *PdfObjectDictionary )GetString (key PdfObjectName )(string ,bool ){_fgace :=_gaegg .Get (key );if _fgace ==nil {return "",false ;};_gcdfd ,_ggge :=_fgace .(*PdfObjectString );if !_ggge {return "",false ;};return _gcdfd .Str (),true ;};func (_fbbc *PdfParser )repairLocateXref ()(int64 ,error ){_decc :=int64 (1000);
+_fbbc ._eebc .Seek (-_decc ,_de .SeekCurrent );_deccf ,_cgdf :=_fbbc ._eebc .Seek (0,_de .SeekCurrent );if _cgdf !=nil {return 0,_cgdf ;};_bbff :=make ([]byte ,_decc );_fbbc ._eebc .Read (_bbff );_befg :=_gddf .FindAllStringIndex (string (_bbff ),-1);if len (_befg )< 1{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0052\u0065\u0070a\u0069\u0072\u003a\u0020\u0078\u0072\u0065f\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064\u0021");
+return 0,_a .New ("\u0072\u0065\u0070\u0061ir\u003a\u0020\u0078\u0072\u0065\u0066\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075n\u0064");};_eecdc :=int64 (_befg [len (_befg )-1][0]);_feae :=_deccf +_eecdc ;return _feae ,nil ;};
+
+// MakeArrayFromIntegers64 creates an PdfObjectArray from a slice of int64s, where each array element
+// is an PdfObjectInteger.
+func MakeArrayFromIntegers64 (vals []int64 )*PdfObjectArray {_cdbd :=MakeArray ();for _ ,_gfcg :=range vals {_cdbd .Append (MakeInteger (_gfcg ));};return _cdbd ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on the current encoder settings.
+func (_fdfbg *JBIG2Encoder )MakeDecodeParams ()PdfObject {return MakeDict ()};
+
+// DCTEncoder provides a DCT (JPG) encoding/decoding functionality for images.
+type DCTEncoder struct{ColorComponents int ;BitsPerComponent int ;Width int ;Height int ;Quality int ;Decode []float64 ;};
+
+// Resolve resolves a PdfObject to direct object, looking up and resolving references as needed (unlike TraceToDirect).
+func (_adc *PdfParser )Resolve (obj PdfObject )(PdfObject ,error ){_dec ,_eag :=obj .(*PdfObjectReference );if !_eag {return obj ,nil ;};_dgd :=_adc .GetFileOffset ();defer func (){_adc .SetFileOffset (_dgd )}();_cge ,_gfd :=_adc .LookupByReference (*_dec );
+if _gfd !=nil {return nil ,_gfd ;};_dece ,_acf :=_cge .(*PdfIndirectObject );if !_acf {return _cge ,nil ;};_cge =_dece .PdfObject ;_ ,_eag =_cge .(*PdfObjectReference );if _eag {return _dece ,_a .New ("\u006d\u0075lt\u0069\u0020\u0064e\u0070\u0074\u0068\u0020tra\u0063e \u0070\u006f\u0069\u006e\u0074\u0065\u0072 t\u006f\u0020\u0070\u006f\u0069\u006e\u0074e\u0072");
+};return _cge ,nil ;};
+
+// GetRevisionNumber returns the current version of the Pdf document.
+func (_gadfg *PdfParser )GetRevisionNumber ()int {return _gadfg ._bcae };
+
+// Write outputs the object as it is to be written to file.
+func (_bccdec *PdfObjectDictionary )Write ()[]byte {var _bcfb _d .Buffer ;_bcfb .WriteString ("\u003c\u003c");for _ ,_daad :=range _bccdec ._ggegg {_eafa :=_bccdec ._cdab [_daad ];_bcfb .Write (_daad .Write ());_bcfb .WriteString ("\u0020");_bcfb .Write (_eafa .Write ());
+};_bcfb .WriteString ("\u003e\u003e");return _bcfb .Bytes ();};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_acbc *ASCIIHexEncoder )MakeStreamDict ()*PdfObjectDictionary {_dab :=MakeDict ();_dab .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_acbc .GetFilterName ()));return _dab ;};func (_bbb *PdfObjectDictionary )setWithLock (_cggdc PdfObjectName ,_cffg PdfObject ,_fegd bool ){if _fegd {_bbb ._dfdgf .Lock ();
+defer _bbb ._dfdgf .Unlock ();};_ ,_gfbf :=_bbb ._cdab [_cggdc ];if !_gfbf {_bbb ._ggegg =append (_bbb ._ggegg ,_cggdc );};_bbb ._cdab [_cggdc ]=_cffg ;};
+
+// PdfVersion returns version of the PDF file.
+func (_ggedf *PdfParser )PdfVersion ()Version {return _ggedf ._dbdbf };func (_aebb *PdfParser )parseNull ()(PdfObjectNull ,error ){_ ,_aebdad :=_aebb ._eebc .Discard (4);return PdfObjectNull {},_aebdad ;};
+
+// Write outputs the object as it is to be written to file.
+func (_gcgb *PdfIndirectObject )Write ()[]byte {return _dae (func (_eced *_d .Buffer ){_eced .WriteString (_b .FormatInt (_gcgb .ObjectNumber ,10));_eced .WriteString ("\u0020\u0030\u0020\u0052");});};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_bccde *ASCIIHexEncoder )MakeDecodeParams ()PdfObject {return nil };func (_bcbf *offsetReader )Read (p []byte )(_fcgd int ,_ccgg error ){return _bcbf ._fecaa .Read (p )};func (_gfac *PdfParser )traceStreamLength (_eacfg PdfObject )(PdfObject ,error ){_dgef ,_abdc :=_eacfg .(*PdfObjectReference );
+if _abdc {_cdac ,_cdbc :=_gfac ._ecbe [_dgef .ObjectNumber ];if _cdbc &&_cdac {_cbg .Log .Debug ("\u0053t\u0072\u0065a\u006d\u0020\u004c\u0065n\u0067\u0074\u0068 \u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065 u\u006e\u0072\u0065s\u006f\u006cv\u0065\u0064\u0020\u0028\u0069\u006cl\u0065\u0067a\u006c\u0029");
+return nil ,_a .New ("\u0069\u006c\u006c\u0065ga\u006c\u0020\u0072\u0065\u0063\u0075\u0072\u0073\u0069\u0076\u0065\u0020\u006c\u006fo\u0070");};_gfac ._ecbe [_dgef .ObjectNumber ]=true ;};_beea ,_gdbed :=_gfac .Resolve (_eacfg );if _gdbed !=nil {return nil ,_gdbed ;
+};_cbg .Log .Trace ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u006c\u0065\u006e\u0067\u0074h\u003f\u0020\u0025\u0073",_beea );if _abdc {_gfac ._ecbe [_dgef .ObjectNumber ]=false ;};return _beea ,nil ;};func _cffc (_bacac ,_geab ,_ffcgc uint8 )uint8 {_acade :=int (_ffcgc );
+_bage :=int (_geab )-_acade ;_gbda :=int (_bacac )-_acade ;_acade =_eabba (_bage +_gbda );_bage =_eabba (_bage );_gbda =_eabba (_gbda );if _bage <=_gbda &&_bage <=_acade {return _bacac ;}else if _gbda <=_acade {return _geab ;};return _ffcgc ;};
+
+// PdfObjectStream represents the primitive PDF Object stream.
+type PdfObjectStream struct{PdfObjectReference ;*PdfObjectDictionary ;Stream []byte ;Lazy bool ;TempFile string ;};
+
+// MakeArray creates an PdfObjectArray from a list of PdfObjects.
+func MakeArray (objects ...PdfObject )*PdfObjectArray {return &PdfObjectArray {_gdgb :objects }};func _fgde (_dfcc _de .ReadSeeker ,_dgegg int64 )(*offsetReader ,error ){_eebf :=&offsetReader {_fecaa :_dfcc ,_bbda :_dgegg };_ ,_afac :=_eebf .Seek (0,_de .SeekStart );
+return _eebf ,_afac ;};
+
+// DecodeStream decodes RunLengthEncoded stream object and give back decoded bytes.
+func (_bdbc *RunLengthEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _bdbc .DecodeBytes (streamObj .Stream );};func _aafa (_bgd *_bg .FilterDict ,_degc *PdfObjectDictionary )error {if _add ,_ebfg :=_degc .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );
+_ebfg {if _gdg :=string (*_add );_gdg !="C\u0072\u0079\u0070\u0074\u0046\u0069\u006c\u0074\u0065\u0072"{_cbg .Log .Debug ("\u0049\u006e\u0076\u0061\u006c\u0069\u0064\u0020C\u0046\u0020\u0064ic\u0074\u0020\u0074\u0079\u0070\u0065:\u0020\u0025\u0073\u0020\u0028\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062\u0065\u0020C\u0072\u0079\u0070\u0074\u0046\u0069\u006c\u0074e\u0072\u0029",_gdg );
+};};_bbg ,_ab :=_degc .Get ("\u0043\u0046\u004d").(*PdfObjectName );if !_ab {return _ec .Errorf ("\u0075\u006e\u0073u\u0070\u0070\u006f\u0072t\u0065\u0064\u0020\u0063\u0072\u0079\u0070t\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0028\u004e\u006f\u006e\u0065\u0029");
+};_bgd .CFM =string (*_bbg );if _agc ,_dcg :=_degc .Get ("\u0041u\u0074\u0068\u0045\u0076\u0065\u006et").(*PdfObjectName );_dcg {_bgd .AuthEvent =_db .AuthEvent (*_agc );}else {_bgd .AuthEvent =_db .EventDocOpen ;};if _dbe ,_ggcg :=_degc .Get ("\u004c\u0065\u006e\u0067\u0074\u0068").(*PdfObjectInteger );
+_ggcg {_bgd .Length =int (*_dbe );};return nil ;};
+
+// MakeLazy create temporary file for stream to reduce memory usage.
+// It can be used for creating PDF with many images.
+// Temporary files are removed automatically when Write/WriteToFile is called for creator object.
+func (_gbab *PdfObjectStream )MakeLazy ()error {if _gbab .Lazy {return nil ;};_beeaa ,_afgfb :=_ge .CreateTemp ("","\u0078o\u0062\u006a\u0065\u0063\u0074");if _afgfb !=nil {return _afgfb ;};defer _beeaa .Close ();_ ,_afgfb =_beeaa .Write (_gbab .Stream );
+if _afgfb !=nil {return _afgfb ;};_gbab .Lazy =true ;_gbab .Stream =nil ;_gbab .TempFile =_beeaa .Name ();return nil ;};func (_edde *PdfCrypt )loadCryptFilters (_abe *PdfObjectDictionary )error {_edde ._gde =cryptFilters {};_fcd :=_abe .Get ("\u0043\u0046");
+_fcd =TraceToDirectObject (_fcd );if _fdff ,_gade :=_fcd .(*PdfObjectReference );_gade {_ede ,_baf :=_edde ._gfc .LookupByReference (*_fdff );if _baf !=nil {_cbg .Log .Debug ("\u0045\u0072r\u006f\u0072\u0020\u006c\u006f\u006f\u006b\u0069\u006e\u0067\u0020\u0075\u0070\u0020\u0043\u0046\u0020\u0072\u0065\u0066\u0065\u0072en\u0063\u0065");
+return _baf ;};_fcd =TraceToDirectObject (_ede );};_dfb ,_gfe :=_fcd .(*PdfObjectDictionary );if !_gfe {_cbg .Log .Debug ("I\u006ev\u0061\u006c\u0069\u0064\u0020\u0043\u0046\u002c \u0074\u0079\u0070\u0065: \u0025\u0054",_fcd );return _a .New ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0043\u0046");
+};for _ ,_eff :=range _dfb .Keys (){_bbaa :=_dfb .Get (_eff );if _aab ,_gefd :=_bbaa .(*PdfObjectReference );_gefd {_dfgd ,_bfd :=_edde ._gfc .LookupByReference (*_aab );if _bfd !=nil {_cbg .Log .Debug ("\u0045\u0072ro\u0072\u0020\u006co\u006f\u006b\u0075\u0070 up\u0020di\u0063\u0074\u0069\u006f\u006e\u0061\u0072y \u0072\u0065\u0066\u0065\u0072\u0065\u006ec\u0065");
+return _bfd ;};_bbaa =TraceToDirectObject (_dfgd );};_ccc ,_ccfb :=_bbaa .(*PdfObjectDictionary );if !_ccfb {return _ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074\u0020\u0069\u006e \u0043\u0046\u0020\u0028\u006e\u0061\u006d\u0065\u0020\u0025\u0073\u0029\u0020-\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0064\u0069\u0063\u0074\u0069on\u0061\u0072\u0079\u0020\u0062\u0075\u0074\u0020\u0025\u0054",_eff ,_bbaa );
+};if _eff =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u002d\u0020\u0043\u0061\u006e\u006e\u006f\u0074\u0020\u006f\u0076\u0065\u0072\u0077r\u0069\u0074\u0065\u0020\u0074\u0068\u0065\u0020\u0069d\u0065\u006e\u0074\u0069\u0074\u0079\u0020\u0066\u0069\u006c\u0074\u0065\u0072 \u002d\u0020\u0054\u0072\u0079\u0069n\u0067\u0020\u006ee\u0078\u0074");
+continue ;};var _dce _bg .FilterDict ;if _bfc :=_aafa (&_dce ,_ccc );_bfc !=nil {return _bfc ;};_adb ,_dfab :=_bg .NewFilter (_dce );if _dfab !=nil {return _dfab ;};_edde ._gde [string (_eff )]=_adb ;};_edde ._gde ["\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"]=_bg .NewIdentity ();
+_edde ._ade ="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079";if _fdg ,_eaf :=_abe .Get ("\u0053\u0074\u0072\u0046").(*PdfObjectName );_eaf {if _ ,_gfgf :=_edde ._gde [string (*_fdg )];!_gfgf {return _ec .Errorf ("\u0063\u0072\u0079\u0070t\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0066o\u0072\u0020\u0053\u0074\u0072\u0046\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069e\u0064\u0020\u0069\u006e\u0020C\u0046\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u0028\u0025\u0073\u0029",*_fdg );
+};_edde ._ade =string (*_fdg );};_edde ._gef ="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079";if _fbgg ,_gda :=_abe .Get ("\u0053\u0074\u006d\u0046").(*PdfObjectName );_gda {if _ ,_ege :=_edde ._gde [string (*_fbgg )];!_ege {return _ec .Errorf ("\u0063\u0072\u0079\u0070t\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0066o\u0072\u0020\u0053\u0074\u006d\u0046\u0020\u006e\u006f\u0074\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069e\u0064\u0020\u0069\u006e\u0020C\u0046\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u0028\u0025\u0073\u0029",*_fbgg );
+};_edde ._gef =string (*_fbgg );};return nil ;};
+
+// EncodeBytes JPX encodes the passed in slice of bytes.
+func (_gaea *JPXEncoder )EncodeBytes (data []byte )([]byte ,error ){_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0041t\u0074\u0065\u006dpt\u0069\u006e\u0067\u0020\u0074\u006f \u0075\u0073\u0065\u0020\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067 \u0025\u0073",_gaea .GetFilterName ());
+return data ,ErrNoJPXDecode ;};func _ebfgc (_ebaac PdfObject )(*float64 ,error ){switch _geddg :=_ebaac .(type ){case *PdfObjectFloat :_bbfg :=float64 (*_geddg );return &_bbfg ,nil ;case *PdfObjectInteger :_cgacc :=float64 (*_geddg );return &_cgacc ,nil ;
+case *PdfObjectNull :return nil ,nil ;};return nil ,ErrNotANumber ;};
+
+// PdfObjectString represents the primitive PDF string object.
+type PdfObjectString struct{_efga string ;_fcgeb bool ;};func _fb (_gfg *_d .Buffer ){_gfg .Reset ();_bcd .Put (_gfg )};func _fdgf (_ffbf ,_dcceg ,_gcbecf int )error {if _dcceg < 0||_dcceg > _ffbf {return _a .New ("s\u006c\u0069\u0063\u0065\u0020\u0069n\u0064\u0065\u0078\u0020\u0061\u0020\u006f\u0075\u0074 \u006f\u0066\u0020b\u006fu\u006e\u0064\u0073");
+};if _gcbecf < _dcceg {return _a .New ("\u0069n\u0076\u0061\u006c\u0069d\u0020\u0073\u006c\u0069\u0063e\u0020i\u006ed\u0065\u0078\u0020\u0062\u0020\u003c\u0020a");};if _gcbecf > _ffbf {return _a .New ("s\u006c\u0069\u0063\u0065\u0020\u0069n\u0064\u0065\u0078\u0020\u0062\u0020\u006f\u0075\u0074 \u006f\u0066\u0020b\u006fu\u006e\u0064\u0073");
+};return nil ;};func _gcfbf (_beaea ,_eeec PdfObject ,_gdbfe int )bool {if _gdbfe > _dbgcd {_cbg .Log .Error ("\u0054\u0072ac\u0065\u0020\u0064e\u0070\u0074\u0068\u0020lev\u0065l \u0062\u0065\u0079\u006f\u006e\u0064\u0020%d\u0020\u002d\u0020\u0065\u0072\u0072\u006fr\u0021",_dbgcd );
+return false ;};if _beaea ==nil &&_eeec ==nil {return true ;}else if _beaea ==nil ||_eeec ==nil {return false ;};if _da .TypeOf (_beaea )!=_da .TypeOf (_eeec ){return false ;};switch _cddg :=_beaea .(type ){case *PdfObjectNull ,*PdfObjectReference :return true ;
+case *PdfObjectName :return *_cddg ==*(_eeec .(*PdfObjectName ));case *PdfObjectString :return *_cddg ==*(_eeec .(*PdfObjectString ));case *PdfObjectInteger :return *_cddg ==*(_eeec .(*PdfObjectInteger ));case *PdfObjectBool :return *_cddg ==*(_eeec .(*PdfObjectBool ));
+case *PdfObjectFloat :return *_cddg ==*(_eeec .(*PdfObjectFloat ));case *PdfIndirectObject :return _gcfbf (TraceToDirectObject (_beaea ),TraceToDirectObject (_eeec ),_gdbfe +1);case *PdfObjectArray :_cdcd :=_eeec .(*PdfObjectArray );if len ((*_cddg )._gdgb )!=len ((*_cdcd )._gdgb ){return false ;
+};for _fgbbg ,_bfaa :=range (*_cddg )._gdgb {if !_gcfbf (_bfaa ,(*_cdcd )._gdgb [_fgbbg ],_gdbfe +1){return false ;};};return true ;case *PdfObjectDictionary :_fgfd :=_eeec .(*PdfObjectDictionary );_adbcb ,_ggaff :=(*_cddg )._cdab ,(*_fgfd )._cdab ;if len (_adbcb )!=len (_ggaff ){return false ;
+};for _begd ,_gcad :=range _adbcb {_gcgee ,_cdee :=_ggaff [_begd ];if !_cdee ||!_gcfbf (_gcad ,_gcgee ,_gdbfe +1){return false ;};};return true ;case *PdfObjectStream :_bfbe :=_eeec .(*PdfObjectStream );return _gcfbf ((*_cddg ).PdfObjectDictionary ,(*_bfbe ).PdfObjectDictionary ,_gdbfe +1);
+default:_cbg .Log .Error ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0055\u006e\u006b\u006e\u006f\u0077\u006e\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0054\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u006e\u0065\u0076\u0065\u0072\u0020\u0068\u0061\u0070\u0070\u0065\u006e\u0021",_beaea );
+};return false ;};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_fea *JPXEncoder )UpdateParams (params *PdfObjectDictionary ){};
+
+// DecodeStream decodes a LZW encoded stream and returns the result as a
+// slice of bytes.
+func (_fddc *LZWEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){_cbg .Log .Trace ("\u004c\u005a\u0057 \u0044\u0065\u0063\u006f\u0064\u0069\u006e\u0067");_cbg .Log .Trace ("\u0050\u0072\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u003a\u0020\u0025\u0064",_fddc .Predictor );
+_cedf ,_gfab :=_fddc .DecodeBytes (streamObj .Stream );if _gfab !=nil {return nil ,_gfab ;};_cbg .Log .Trace ("\u0020\u0049\u004e\u003a\u0020\u0028\u0025\u0064\u0029\u0020\u0025\u0020\u0078",len (streamObj .Stream ),streamObj .Stream );_cbg .Log .Trace ("\u004f\u0055\u0054\u003a\u0020\u0028\u0025\u0064\u0029\u0020\u0025\u0020\u0078",len (_cedf ),_cedf );
+if _fddc .Predictor > 1{if _fddc .Predictor ==2{_cbg .Log .Trace ("\u0054\u0069\u0066\u0066\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067");_ggddd :=_fddc .Columns *_fddc .Colors ;if _ggddd < 1{return []byte {},nil ;};_gdgg :=len (_cedf )/_ggddd ;
+if len (_cedf )%_ggddd !=0{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020T\u0049\u0046\u0046 \u0065\u006e\u0063\u006fd\u0069\u006e\u0067\u003a\u0020\u0049\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u002e\u002e\u002e");
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077 \u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064/\u0025\u0064\u0029",len (_cedf ),_ggddd );};if _ggddd %_fddc .Colors !=0{return nil ,_ec .Errorf ("\u0069\u006ev\u0061\u006c\u0069\u0064 \u0072\u006fw\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020(\u0025\u0064\u0029\u0020\u0066\u006f\u0072\u0020\u0063\u006f\u006c\u006fr\u0073\u0020\u0025\u0064",_ggddd ,_fddc .Colors );
+};if _ggddd > len (_cedf ){_cbg .Log .Debug ("\u0052\u006fw\u0020\u006c\u0065\u006e\u0067t\u0068\u0020\u0063\u0061\u006en\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0064\u0061\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064\u002f\u0025\u0064\u0029",_ggddd ,len (_cedf ));
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_cbg .Log .Trace ("i\u006e\u0070\u0020\u006fut\u0044a\u0074\u0061\u0020\u0028\u0025d\u0029\u003a\u0020\u0025\u0020\u0078",len (_cedf ),_cedf );
+_afgb :=_d .NewBuffer (nil );for _addd :=0;_addd < _gdgg ;_addd ++{_bccd :=_cedf [_ggddd *_addd :_ggddd *(_addd +1)];for _aaea :=_fddc .Colors ;_aaea < _ggddd ;_aaea ++{_bccd [_aaea ]=byte (int (_bccd [_aaea ]+_bccd [_aaea -_fddc .Colors ])%256);};_afgb .Write (_bccd );
+};_bgad :=_afgb .Bytes ();_cbg .Log .Trace ("\u0050O\u0075t\u0044\u0061\u0074\u0061\u0020(\u0025\u0064)\u003a\u0020\u0025\u0020\u0078",len (_bgad ),_bgad );return _bgad ,nil ;}else if _fddc .Predictor >=10&&_fddc .Predictor <=15{_cbg .Log .Trace ("\u0050\u004e\u0047 \u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067");
+_cdcb :=_fddc .Columns *_fddc .Colors +1;if _cdcb < 1{return []byte {},nil ;};_facc :=len (_cedf )/_cdcb ;if len (_cedf )%_cdcb !=0{return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0072\u006f\u0077 \u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064/\u0025\u0064\u0029",len (_cedf ),_cdcb );
+};if _cdcb > len (_cedf ){_cbg .Log .Debug ("\u0052\u006fw\u0020\u006c\u0065\u006e\u0067t\u0068\u0020\u0063\u0061\u006en\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0064\u0061\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0028\u0025\u0064\u002f\u0025\u0064\u0029",_cdcb ,len (_cedf ));
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_cccf :=_d .NewBuffer (nil );_cbg .Log .Trace ("P\u0072\u0065\u0064\u0069ct\u006fr\u0020\u0063\u006f\u006c\u0075m\u006e\u0073\u003a\u0020\u0025\u0064",_fddc .Columns );
+_cbg .Log .Trace ("\u004ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064\u0020\u002f \u0025d\u0020=\u0020\u0025\u0064\u0020\u0072\u006f\u0077s",len (_cedf ),_cdcb ,_facc );_cfbg :=make ([]byte ,_cdcb );for _dadg :=0;_dadg < _cdcb ;_dadg ++{_cfbg [_dadg ]=0;
+};for _dda :=0;_dda < _facc ;_dda ++{_bdfb :=_cedf [_cdcb *_dda :_cdcb *(_dda +1)];_afbe :=_bdfb [0];switch _afbe {case 0:case 1:for _fecb :=2;_fecb < _cdcb ;_fecb ++{_bdfb [_fecb ]=byte (int (_bdfb [_fecb ]+_bdfb [_fecb -1])%256);};case 2:for _fbab :=1;
+_fbab < _cdcb ;_fbab ++{_bdfb [_fbab ]=byte (int (_bdfb [_fbab ]+_cfbg [_fbab ])%256);};default:_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0049n\u0076\u0061\u006c\u0069\u0064\u0020\u0066i\u006c\u0074\u0065\u0072\u0020\u0062\u0079\u0074\u0065\u0020\u0028\u0025\u0064\u0029",_afbe );
+return nil ,_ec .Errorf ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065r\u0020\u0062\u0079\u0074\u0065\u0020\u0028\u0025\u0064\u0029",_afbe );};for _cebcf :=0;_cebcf < _cdcb ;_cebcf ++{_cfbg [_cebcf ]=_bdfb [_cebcf ];};_cccf .Write (_bdfb [1:]);
+};_gfded :=_cccf .Bytes ();return _gfded ,nil ;}else {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0070r\u0065\u0064\u0069\u0063\u0074\u006f\u0072 \u0028\u0025\u0064\u0029",_fddc .Predictor );
+return nil ,_ec .Errorf ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0070\u0072\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u0020(\u0025\u0064\u0029",_fddc .Predictor );};};return _cedf ,nil ;};func _abdb (_bdae *PdfObjectStream ,_ecefb *PdfObjectDictionary )(*LZWEncoder ,error ){_dgdd :=NewLZWEncoder ();
+_dbdf :=_bdae .PdfObjectDictionary ;if _dbdf ==nil {return _dgdd ,nil ;};if _ecefb ==nil {_cada :=TraceToDirectObject (_dbdf .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073"));if _cada !=nil {if _aacd ,_acfaa :=_cada .(*PdfObjectDictionary );
+_acfaa {_ecefb =_aacd ;}else if _bgb ,_ccge :=_cada .(*PdfObjectArray );_ccge {if _bgb .Len ()==1{if _fbfaa ,_gbgd :=GetDict (_bgb .Get (0));_gbgd {_ecefb =_fbfaa ;};};};if _ecefb ==nil {_cbg .Log .Error ("\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073\u0020\u006e\u006f\u0074 \u0061 \u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u0025\u0023\u0076",_cada );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061li\u0064\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");};};};_caba :=_dbdf .Get ("E\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065");if _caba !=nil {_eggg ,_cbgf :=_caba .(*PdfObjectInteger );
+if !_cbgf {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a \u0045\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065\u0020\u0073\u0070\u0065\u0063\u0069\u0066\u0069\u0065d\u0020\u0062\u0075\u0074\u0020\u006e\u006f\u0074\u0020\u006e\u0075\u006d\u0065\u0072i\u0063 \u0028\u0025\u0054\u0029",_caba );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061li\u0064\u0020\u0045\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065");};if *_eggg !=0&&*_eggg !=1{return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0045\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065\u0020\u0076\u0061\u006c\u0075e\u0020\u0028\u006e\u006f\u0074 \u0030\u0020o\u0072\u0020\u0031\u0029");
+};_dgdd .EarlyChange =int (*_eggg );}else {_dgdd .EarlyChange =1;};if _ecefb ==nil {return _dgdd ,nil ;};if _ebcd ,_aadf :=GetIntVal (_ecefb .Get ("E\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065"));_aadf {if _ebcd ==0||_ebcd ==1{_dgdd .EarlyChange =_ebcd ;
+}else {_cbg .Log .Debug ("W\u0041\u0052\u004e\u003a\u0020\u0069n\u0076\u0061\u006c\u0069\u0064\u0020E\u0061\u0072\u006c\u0079\u0043\u0068\u0061n\u0067\u0065\u0020\u0076\u0061\u006c\u0075\u0065\u003a\u0020%\u0064",_ebcd );};};_caba =_ecefb .Get ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr");
+if _caba !=nil {_bfac ,_gea :=_caba .(*PdfObjectInteger );if !_gea {_cbg .Log .Debug ("E\u0072\u0072\u006f\u0072\u003a\u0020\u0050\u0072\u0065d\u0069\u0063\u0074\u006f\u0072\u0020\u0073pe\u0063\u0069\u0066\u0069e\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u006f\u0074 n\u0075\u006de\u0072\u0069\u0063\u0020\u0028\u0025\u0054\u0029",_caba );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0050\u0072\u0065\u0064i\u0063\u0074\u006f\u0072");};_dgdd .Predictor =int (*_bfac );};_caba =_ecefb .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");
+if _caba !=nil {_aeb ,_bfde :=_caba .(*PdfObjectInteger );if !_bfde {_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0049n\u0076\u0061\u006c\u0069\u0064\u0020\u0042i\u0074\u0073\u0050\u0065\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");
+return nil ,_ec .Errorf ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0042\u0069\u0074\u0073\u0050e\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");};_dgdd .BitsPerComponent =int (*_aeb );};if _dgdd .Predictor > 1{_dgdd .Columns =1;_caba =_ecefb .Get ("\u0043o\u006c\u0075\u006d\u006e\u0073");
+if _caba !=nil {_bged ,_cdeb :=_caba .(*PdfObjectInteger );if !_cdeb {return nil ,_ec .Errorf ("\u0070r\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u0020\u0063\u006f\u006cu\u006d\u006e\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064");};_dgdd .Columns =int (*_bged );
+};_dgdd .Colors =1;_caba =_ecefb .Get ("\u0043\u006f\u006c\u006f\u0072\u0073");if _caba !=nil {_afff ,_aebd :=_caba .(*PdfObjectInteger );if !_aebd {return nil ,_ec .Errorf ("\u0070\u0072\u0065d\u0069\u0063\u0074\u006fr\u0020\u0063\u006f\u006c\u006f\u0072\u0073 \u006e\u006f\u0074\u0020\u0061\u006e\u0020\u0069\u006e\u0074\u0065\u0067\u0065\u0072");
+};_dgdd .Colors =int (*_afff );};};_cbg .Log .Trace ("\u0064\u0065\u0063\u006f\u0064\u0065\u0020\u0070\u0061\u0072\u0061\u006ds\u003a\u0020\u0025\u0073",_ecefb .String ());return _dgdd ,nil ;};
+
+// DecodeStream decodes a FlateEncoded stream object and give back decoded bytes.
+func (_bbge *FlateEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){_cbg .Log .Trace ("\u0046l\u0061t\u0065\u0044\u0065\u0063\u006fd\u0065\u0020s\u0074\u0072\u0065\u0061\u006d");_cbg .Log .Trace ("\u0050\u0072\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u003a\u0020\u0025\u0064",_bbge .Predictor );
+if _bbge .BitsPerComponent !=8{return nil ,_ec .Errorf ("\u0069\u006ev\u0061\u006c\u0069\u0064\u0020\u0042\u0069\u0074\u0073\u0050\u0065\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u003d\u0025\u0064\u0020\u0028\u006f\u006e\u006c\u0079\u0020\u0038\u0020\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0029",_bbge .BitsPerComponent );
+};_ggad ,_fffe :=_bbge .DecodeBytes (streamObj .Stream );if _fffe !=nil {return nil ,_fffe ;};_ggad ,_fffe =_bbge .postDecodePredict (_ggad );if _fffe !=nil {return nil ,_fffe ;};return _ggad ,nil ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_cbfd *ASCII85Encoder )MakeDecodeParams ()PdfObject {return nil };func (_cgeg *PdfParser )checkPostEOFData ()error {const _cbbgf ="\u0025\u0025\u0045O\u0046";_ ,_aaee :=_cgeg ._eebc .Seek (-int64 (len ([]byte (_cbbgf )))-1,_de .SeekEnd );if _aaee !=nil {return _aaee ;
+};_efbf :=make ([]byte ,len ([]byte (_cbbgf ))+1);_ ,_aaee =_cgeg ._eebc .Read (_efbf );if _aaee !=nil {if _aaee !=_de .EOF {return _aaee ;};};if string (_efbf )==_cbbgf ||string (_efbf )==_cbbgf +"\u000a"{_cgeg ._eabdd ._fcff =true ;};return nil ;};const _bcbc =6;
+
+
+// JBIG2EncoderSettings contains the parameters and settings used by the JBIG2Encoder.
+// Current version works only on JB2Generic compression.
+type JBIG2EncoderSettings struct{
+
+// FileMode defines if the jbig2 encoder should return full jbig2 file instead of
+// shortened pdf mode. This adds the file header to the jbig2 definition.
+FileMode bool ;
+
+// Compression is the setting that defines the compression type used for encoding the page.
+Compression JBIG2CompressionType ;
+
+// DuplicatedLinesRemoval code generic region in a way such that if the lines are duplicated the encoder
+// doesn't store it twice.
+DuplicatedLinesRemoval bool ;
+
+// DefaultPixelValue is the bit value initial for every pixel in the page.
+DefaultPixelValue uint8 ;
+
+// ResolutionX optional setting that defines the 'x' axis input image resolution - used for single page encoding.
+ResolutionX int ;
+
+// ResolutionY optional setting that defines the 'y' axis input image resolution - used for single page encoding.
+ResolutionY int ;
+
+// Threshold defines the threshold of the image correlation for
+// non Generic compression.
+// User only for JB2SymbolCorrelation and JB2SymbolRankHaus methods.
+// Best results in range [0.7 - 0.98] - the less the better the compression would be
+// but the more lossy.
+// Default value: 0.95
+Threshold float64 ;};
+
+// Peek returns the next n bytes from the buffered reader without advancing the reader.
+func (_gaa *bufferedReadSeeker )Peek (n int )([]byte ,error ){return _gaa ._fba .Peek (n )};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_dbcc *CCITTFaxEncoder )MakeDecodeParams ()PdfObject {_fbce :=MakeDict ();_fbce .Set ("\u004b",MakeInteger (int64 (_dbcc .K )));_fbce .Set ("\u0043o\u006c\u0075\u006d\u006e\u0073",MakeInteger (int64 (_dbcc .Columns )));if _dbcc .BlackIs1 {_fbce .Set ("\u0042\u006c\u0061\u0063\u006b\u0049\u0073\u0031",MakeBool (_dbcc .BlackIs1 ));
+};if _dbcc .EncodedByteAlign {_fbce .Set ("\u0045\u006ec\u006f\u0064\u0065d\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e",MakeBool (_dbcc .EncodedByteAlign ));};if _dbcc .EndOfLine &&_dbcc .K >=0{_fbce .Set ("\u0045n\u0064\u004f\u0066\u004c\u0069\u006ee",MakeBool (_dbcc .EndOfLine ));
+};if _dbcc .Rows !=0&&!_dbcc .EndOfBlock {_fbce .Set ("\u0052\u006f\u0077\u0073",MakeInteger (int64 (_dbcc .Rows )));};if !_dbcc .EndOfBlock {_fbce .Set ("\u0045\u006e\u0064\u004f\u0066\u0042\u006c\u006f\u0063\u006b",MakeBool (_dbcc .EndOfBlock ));};if _dbcc .DamagedRowsBeforeError !=0{_fbce .Set ("\u0044\u0061\u006d\u0061ge\u0064\u0052\u006f\u0077\u0073\u0042\u0065\u0066\u006f\u0072\u0065\u0045\u0072\u0072o\u0072",MakeInteger (int64 (_dbcc .DamagedRowsBeforeError )));
+};return _fbce ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_bfda *JPXEncoder )MakeDecodeParams ()PdfObject {return nil };
+
+// NewMultiEncoder returns a new instance of MultiEncoder.
+func NewMultiEncoder ()*MultiEncoder {_bead :=MultiEncoder {};_bead ._acg =[]StreamEncoder {};return &_bead ;};
+
+// String returns a string describing `array`.
+func (_feea *PdfObjectArray )String ()string {_aagdg :="\u005b";for _dgda ,_efbe :=range _feea .Elements (){_aagdg +=_efbe .String ();if _dgda < (_feea .Len ()-1){_aagdg +="\u002c\u0020";};};_aagdg +="\u005d";return _aagdg ;};
+
+// Version represents a version of a PDF standard.
+type Version struct{Major int ;Minor int ;};
+
+// GetStringBytes is like GetStringVal except that it returns the string as a []byte.
+// It is for convenience.
+func GetStringBytes (obj PdfObject )(_gabe []byte ,_fcdd bool ){_cgcf ,_fcdd :=TraceToDirectObject (obj ).(*PdfObjectString );if _fcdd {return _cgcf .Bytes (),true ;};return ;};
+
+// Encode encodes previously prepare jbig2 document and stores it as the byte slice.
+func (_ccbd *JBIG2Encoder )Encode ()(_fbfb []byte ,_fdcfd error ){const _dee ="J\u0042I\u0047\u0032\u0044\u006f\u0063\u0075\u006d\u0065n\u0074\u002e\u0045\u006eco\u0064\u0065";if _ccbd ._beffg ==nil {return nil ,_geg .Errorf (_dee ,"\u0064\u006f\u0063u\u006d\u0065\u006e\u0074 \u0069\u006e\u0070\u0075\u0074\u0020\u0064a\u0074\u0061\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
+};_ccbd ._beffg .FullHeaders =_ccbd .DefaultPageSettings .FileMode ;_fbfb ,_fdcfd =_ccbd ._beffg .Encode ();if _fdcfd !=nil {return nil ,_geg .Wrap (_fdcfd ,_dee ,"");};return _fbfb ,nil ;};
+
+// GetFilterName returns the name of the encoding filter.
+func (_ebccf *JBIG2Encoder )GetFilterName ()string {return StreamEncodingFilterNameJBIG2 };func (_cefec *PdfParser )loadXrefs ()(*PdfObjectDictionary ,error ){_cefec ._becb .ObjectMap =make (map[int ]XrefObject );_cefec ._ffbc =make (objectStreams );_cbdc ,_gbbd :=_cefec ._eebc .Seek (0,_de .SeekEnd );
+if _gbbd !=nil {return nil ,_gbbd ;};_cbg .Log .Trace ("\u0066s\u0069\u007a\u0065\u003a\u0020\u0025d",_cbdc );_cefec ._fbfd =_cbdc ;_gbbd =_cefec .seekToEOFMarker (_cbdc );if _gbbd !=nil {_cbg .Log .Debug ("\u0046\u0061i\u006c\u0065\u0064\u0020\u0073\u0065\u0065\u006b\u0020\u0074\u006f\u0020\u0065\u006f\u0066\u0020\u006d\u0061\u0072\u006b\u0065\u0072: \u0025\u0076",_gbbd );
+return nil ,_gbbd ;};_cagc ,_gbbd :=_cefec ._eebc .Seek (0,_de .SeekCurrent );if _gbbd !=nil {return nil ,_gbbd ;};var _cdfc int64 =64;_ffeg :=_cagc -_cdfc ;if _ffeg < 0{_ffeg =0;};_ ,_gbbd =_cefec ._eebc .Seek (_ffeg ,_de .SeekStart );if _gbbd !=nil {return nil ,_gbbd ;
+};_afbd :=make ([]byte ,_cdfc );_ ,_gbbd =_cefec ._eebc .Read (_afbd );if _gbbd !=nil {_cbg .Log .Debug ("\u0046\u0061i\u006c\u0065\u0064\u0020\u0072\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u0077\u0068\u0069\u006c\u0065\u0020\u006c\u006f\u006f\u006b\u0069\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0073\u0074\u0061\u0072\u0074\u0078\u0072\u0065\u0066\u003a\u0020\u0025\u0076",_gbbd );
+return nil ,_gbbd ;};_ggbe :=_bcff .FindStringSubmatch (string (_afbd ));if len (_ggbe )< 2{_cbg .Log .Debug ("E\u0072\u0072\u006f\u0072\u003a\u0020s\u0074\u0061\u0072\u0074\u0078\u0072\u0065\u0066\u0020n\u006f\u0074\u0020f\u006fu\u006e\u0064\u0021");return nil ,_a .New ("\u0073\u0074\u0061\u0072tx\u0072\u0065\u0066\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
+};if len (_ggbe )> 2{_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u004du\u006c\u0074\u0069\u0070\u006c\u0065\u0020s\u0074\u0061\u0072\u0074\u0078\u0072\u0065\u0066\u0020\u0028\u0025\u0073\u0029\u0021",_afbd );return nil ,_a .New ("m\u0075\u006c\u0074\u0069\u0070\u006ce\u0020\u0073\u0074\u0061\u0072\u0074\u0078\u0072\u0065f\u0020\u0065\u006et\u0072i\u0065\u0073\u003f");
+};_ebfb ,_ :=_b .ParseInt (_ggbe [1],10,64);_cbg .Log .Trace ("\u0073t\u0061r\u0074\u0078\u0072\u0065\u0066\u0020\u0061\u0074\u0020\u0025\u0064",_ebfb );if _ebfb > _cbdc {_cbg .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0058\u0072\u0065\u0066\u0020\u006f\u0066f\u0073e\u0074 \u006fu\u0074\u0073\u0069\u0064\u0065\u0020\u006f\u0066\u0020\u0066\u0069\u006c\u0065");
+_cbg .Log .Debug ("\u0041\u0074\u0074\u0065\u006d\u0070\u0074\u0069\u006e\u0067\u0020\u0072e\u0070\u0061\u0069\u0072");_ebfb ,_gbbd =_cefec .repairLocateXref ();if _gbbd !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0052\u0065\u0070\u0061\u0069\u0072\u0020\u0061\u0074\u0074\u0065\u006d\u0070t\u0020\u0066\u0061\u0069\u006c\u0065\u0064 \u0028\u0025\u0073\u0029");
+return nil ,_gbbd ;};};_cefec ._eebc .Seek (_ebfb ,_de .SeekStart );_fddd ,_gbbd :=_cefec .parseXref ();if _gbbd !=nil {return nil ,_gbbd ;};_affcd :=_fddd .Get ("\u0058R\u0065\u0066\u0053\u0074\u006d");if _affcd !=nil {_bdgbeg ,_dfcb :=_affcd .(*PdfObjectInteger );
+if !_dfcb {return nil ,_a .New ("\u0058\u0052\u0065\u0066\u0053\u0074\u006d\u0020\u0021=\u0020\u0069\u006e\u0074");};_ ,_gbbd =_cefec .parseXrefStream (_bdgbeg );if _gbbd !=nil &&_cefec .Opts !=nil &&!_cefec .Opts .RelaxedMode {return nil ,_gbbd ;};};var _ebfgd []int64 ;
+_dfceb :=func (_bcfge int64 ,_aeeb []int64 )bool {for _ ,_faeea :=range _aeeb {if _faeea ==_bcfge {return true ;};};return false ;};_affcd =_fddd .Get ("\u0050\u0072\u0065\u0076");for _affcd !=nil {_gaag ,_fccb :=_affcd .(*PdfObjectInteger );if !_fccb {_cbg .Log .Debug ("\u0049\u006ev\u0061\u006c\u0069\u0064\u0020P\u0072\u0065\u0076\u0020\u0072e\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u003a\u0020\u004e\u006f\u0074\u0020\u0061\u0020\u002a\u0050\u0064\u0066\u004f\u0062\u006a\u0065\u0063\u0074\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u0020\u0028\u0025\u0054\u0029",_affcd );
+return _fddd ,nil ;};_bbaga :=*_gaag ;_cbg .Log .Trace ("\u0041\u006eot\u0068\u0065\u0072 \u0050\u0072\u0065\u0076 xr\u0065f \u0074\u0061\u0062\u006c\u0065\u0020\u006fbj\u0065\u0063\u0074\u0020\u0061\u0074\u0020%\u0064",_bbaga );_cefec ._eebc .Seek (int64 (_bbaga ),_de .SeekStart );
+_ccfdc ,_gfdb :=_cefec .parseXref ();if _gfdb !=nil {_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0069\u006e\u0067\u003a\u0020\u0045\u0072\u0072\u006f\u0072\u0020-\u0020\u0046\u0061\u0069\u006c\u0065\u0064\u0020\u006c\u006f\u0061\u0064\u0069n\u0067\u0020\u0061\u006e\u006f\u0074\u0068\u0065\u0072\u0020\u0028\u0050re\u0076\u0029\u0020\u0074\u0072\u0061\u0069\u006c\u0065\u0072");
+_cbg .Log .Debug ("\u0041\u0074t\u0065\u006d\u0070\u0074i\u006e\u0067 \u0074\u006f\u0020\u0063\u006f\u006e\u0074\u0069n\u0075\u0065\u0020\u0062\u0079\u0020\u0069\u0067\u006e\u006f\u0072\u0069n\u0067\u0020\u0069\u0074");break ;};_cefec ._acc =append (_cefec ._acc ,int64 (_bbaga ));
+_affcd =_ccfdc .Get ("\u0050\u0072\u0065\u0076");if _affcd !=nil {_bcfd :=*(_affcd .(*PdfObjectInteger ));if _dfceb (int64 (_bcfd ),_ebfgd ){_cbg .Log .Debug ("\u0050\u0072ev\u0065\u006e\u0074i\u006e\u0067\u0020\u0063irc\u0075la\u0072\u0020\u0078\u0072\u0065\u0066\u0020re\u0066\u0065\u0072\u0065\u006e\u0063\u0069n\u0067");
+break ;};_ebfgd =append (_ebfgd ,int64 (_bcfd ));};};return _fddd ,nil ;};const _dbgcd =10;func _af ()*_d .Buffer {return _bcd .Get ().(*_d .Buffer )};
+
+// String returns a string describing `ind`.
+func (_adddf *PdfIndirectObject )String ()string {return _ec .Sprintf ("\u0049\u004f\u0062\u006a\u0065\u0063\u0074\u003a\u0025\u0064",(*_adddf ).ObjectNumber );};
+
+// HasOddLengthHexStrings checks if the document has odd length hexadecimal strings.
+func (_ecef ParserMetadata )HasOddLengthHexStrings ()bool {return _ecef ._bdcc };
+
+// PdfObject is an interface which all primitive PDF objects must implement.
+type PdfObject interface{
+
+// String outputs a string representation of the primitive (for debugging).
+String ()string ;
+
+// Write outputs the PDF primitive as written to file as expected by the standard.
+Write ()[]byte ;};var _dfc =[]PdfObjectName {"\u0056","\u0052","\u004f","\u0055","\u0050"};
+
+// DecodeBytes decodes a multi-encoded slice of bytes by passing it through the
+// DecodeBytes method of the underlying encoders.
+func (_eabbb *MultiEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_bdcf :=encoded ;var _defd error ;for _ ,_dagda :=range _eabbb ._acg {_cbg .Log .Trace ("\u004du\u006c\u0074i\u0020\u0045\u006e\u0063o\u0064\u0065\u0072 \u0044\u0065\u0063\u006f\u0064\u0065\u003a\u0020\u0041pp\u006c\u0079\u0069n\u0067\u0020F\u0069\u006c\u0074\u0065\u0072\u003a \u0025\u0076 \u0025\u0054",_dagda ,_dagda );
+_bdcf ,_defd =_dagda .DecodeBytes (_bdcf );if _defd !=nil {return nil ,_defd ;};};return _bdcf ,nil ;};func (_fccg *JBIG2Encoder )encodeImage (_dgag _bc .Image )([]byte ,error ){const _bcgc ="e\u006e\u0063\u006f\u0064\u0065\u0049\u006d\u0061\u0067\u0065";
+_eadb ,_bcge :=GoImageToJBIG2 (_dgag ,JB2ImageAutoThreshold );if _bcge !=nil {return nil ,_geg .Wrap (_bcge ,_bcgc ,"\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0020\u0069\u006e\u0070\u0075\u0074\u0020\u0069m\u0061g\u0065\u0020\u0074\u006f\u0020\u006a\u0062\u0069\u0067\u0032\u0020\u0069\u006d\u0067");
+};if _bcge =_fccg .AddPageImage (_eadb ,&_fccg .DefaultPageSettings );_bcge !=nil {return nil ,_geg .Wrap (_bcge ,_bcgc ,"");};return _fccg .Encode ();};
+
+// NewEncoderFromStream creates a StreamEncoder based on the stream's dictionary.
+func NewEncoderFromStream (streamObj *PdfObjectStream )(StreamEncoder ,error ){_bdda :=TraceToDirectObject (streamObj .Get ("\u0046\u0069\u006c\u0074\u0065\u0072"));if _bdda ==nil {return NewRawEncoder (),nil ;};if _ ,_cebeb :=_bdda .(*PdfObjectNull );
+_cebeb {return NewRawEncoder (),nil ;};_ebgd ,_fggeg :=_bdda .(*PdfObjectName );if !_fggeg {_gdef ,_gcgcb :=_bdda .(*PdfObjectArray );if !_gcgcb {return nil ,_ec .Errorf ("\u0066\u0069\u006c\u0074\u0065\u0072 \u006e\u006f\u0074\u0020\u0061\u0020\u004e\u0061\u006d\u0065\u0020\u006f\u0072 \u0041\u0072\u0072\u0061\u0079\u0020\u006fb\u006a\u0065\u0063\u0074");
+};if _gdef .Len ()==0{return NewRawEncoder (),nil ;};if _gdef .Len ()!=1{_edafb ,_fdafg :=_fdge (streamObj );if _fdafg !=nil {_cbg .Log .Error ("\u0046\u0061\u0069\u006c\u0065\u0064 \u0063\u0072\u0065\u0061\u0074\u0069\u006e\u0067\u0020\u006d\u0075\u006c\u0074i\u0020\u0065\u006e\u0063\u006f\u0064\u0065r\u003a\u0020\u0025\u0076",_fdafg );
+return nil ,_fdafg ;};_cbg .Log .Trace ("\u004d\u0075\u006c\u0074\u0069\u0020\u0065\u006e\u0063:\u0020\u0025\u0073\u000a",_edafb );return _edafb ,nil ;};_bdda =_gdef .Get (0);_ebgd ,_gcgcb =_bdda .(*PdfObjectName );if !_gcgcb {return nil ,_ec .Errorf ("\u0066\u0069l\u0074\u0065\u0072\u0020a\u0072\u0072a\u0079\u0020\u006d\u0065\u006d\u0062\u0065\u0072 \u006e\u006f\u0074\u0020\u0061\u0020\u004e\u0061\u006d\u0065\u0020\u006fb\u006a\u0065\u0063\u0074");
+};};if _feaff ,_fceb :=_aedeef .Load (_ebgd .String ());_fceb {return _feaff .(StreamEncoder ),nil ;};switch *_ebgd {case StreamEncodingFilterNameFlate :return _ebb (streamObj ,nil );case StreamEncodingFilterNameLZW :return _abdb (streamObj ,nil );case StreamEncodingFilterNameDCT :return _baaf (streamObj ,nil );
+case StreamEncodingFilterNameRunLength :return _dddbb (streamObj ,nil );case StreamEncodingFilterNameASCIIHex :return NewASCIIHexEncoder (),nil ;case StreamEncodingFilterNameASCII85 ,"\u0041\u0038\u0035":return NewASCII85Encoder (),nil ;case StreamEncodingFilterNameCCITTFax :return _eaaa (streamObj ,nil );
+case StreamEncodingFilterNameJBIG2 :return _daa (streamObj ,nil );case StreamEncodingFilterNameJPX :return NewJPXEncoder (),nil ;};_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0073\u0075\u0070\u0070\u006fr\u0074\u0065\u0064\u0020\u0065\u006e\u0063o\u0064\u0069\u006e\u0067\u0020\u006d\u0065\u0074\u0068\u006fd\u0021");
+return nil ,_ec .Errorf ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0065\u006e\u0063o\u0064i\u006e\u0067\u0020\u006d\u0065\u0074\u0068\u006f\u0064\u0020\u0028\u0025\u0073\u0029",*_ebgd );};
+
+// DecodeStream decodes a JPX encoded stream and returns the result as a
+// slice of bytes.
+func (_bacf *JPXEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0041t\u0074\u0065\u006dpt\u0069\u006e\u0067\u0020\u0074\u006f \u0075\u0073\u0065\u0020\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067 \u0025\u0073",_bacf .GetFilterName ());
+return streamObj .Stream ,ErrNoJPXDecode ;};var (ErrUnsupportedEncodingParameters =_a .New ("\u0075\u006e\u0073u\u0070\u0070\u006f\u0072t\u0065\u0064\u0020\u0065\u006e\u0063\u006fd\u0069\u006e\u0067\u0020\u0070\u0061\u0072\u0061\u006d\u0065\u0074\u0065\u0072\u0073");
+ErrNoCCITTFaxDecode =_a .New ("\u0043\u0043I\u0054\u0054\u0046\u0061\u0078\u0044\u0065\u0063\u006f\u0064\u0065\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0079\u0065\u0074\u0020\u0069\u006d\u0070\u006c\u0065\u006d\u0065\u006e\u0074\u0065\u0064");
+ErrNoJBIG2Decode =_a .New ("\u004a\u0042\u0049\u0047\u0032\u0044\u0065c\u006f\u0064\u0065 \u0065\u006e\u0063\u006fd\u0069\u006e\u0067\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0079\u0065\u0074\u0020\u0069\u006d\u0070\u006c\u0065\u006d\u0065\u006e\u0074\u0065\u0064");
+ErrNoJPXDecode =_a .New ("\u004a\u0050\u0058\u0044\u0065c\u006f\u0064\u0065\u0020\u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0079\u0065\u0074\u0020\u0069\u006d\u0070\u006c\u0065\u006d\u0065\u006e\u0074\u0065\u0064");
+ErrNoPdfVersion =_a .New ("\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020f\u006f\u0075\u006e\u0064");ErrTypeError =_a .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");ErrRangeError =_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");
+ErrNotSupported =_cbf .New ("\u0066\u0065\u0061t\u0075\u0072\u0065\u0020n\u006f\u0074\u0020\u0063\u0075\u0072\u0072e\u006e\u0074\u006c\u0079\u0020\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064");ErrNotANumber =_a .New ("\u006e\u006f\u0074 \u0061\u0020\u006e\u0075\u006d\u0062\u0065\u0072");
+);
+
+// HasInvalidSubsectionHeader implements core.ParserMetadata interface.
+func (_adbg ParserMetadata )HasInvalidSubsectionHeader ()bool {return _adbg ._aacg };
+
+// ParserMetadata gets the pdf parser metadata.
+func (_bdd *PdfParser )ParserMetadata ()(ParserMetadata ,error ){if !_bdd ._cbce {return ParserMetadata {},_ec .Errorf ("\u0070\u0061\u0072\u0073\u0065r\u0020\u0077\u0061\u0073\u0020\u006e\u006f\u0074\u0020\u006d\u0061\u0072\u006be\u0064\u0020\u0066\u006f\u0072\u0020\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0064\u0065\u0074\u0061\u0069\u006c\u0065\u0064\u0020\u006d\u0065\u0074\u0061\u0064\u0061\u0074a");
+};return _bdd ._eabdd ,nil ;};var _bgdb =_ee .MustCompile ("\u0025\u0025\u0045\u004f\u0046\u003f");func _ecgb (_cecf string )(PdfObjectReference ,error ){_dabdf :=PdfObjectReference {};_cgfae :=_gaeg .FindStringSubmatch (_cecf );if len (_cgfae )< 3{_cbg .Log .Debug ("\u0045\u0072\u0072or\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065");
+return _dabdf ,_a .New ("\u0075n\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0070\u0061r\u0073e\u0020r\u0065\u0066\u0065\u0072\u0065\u006e\u0063e");};_bgcb ,_ :=_b .Atoi (_cgfae [1]);_bebe ,_ :=_b .Atoi (_cgfae [2]);_dabdf .ObjectNumber =int64 (_bgcb );
+_dabdf .GenerationNumber =int64 (_bebe );return _dabdf ,nil ;};func (_agd *PdfObjectInteger )String ()string {return _ec .Sprintf ("\u0025\u0064",*_agd )};
+
+// Append appends PdfObject(s) to the array.
+func (_faca *PdfObjectArray )Append (objects ...PdfObject ){if _faca ==nil {_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0020\u002d\u0020\u0041\u0074\u0074\u0065\u006d\u0070t\u0020\u0074\u006f\u0020\u0061\u0070p\u0065\u006e\u0064\u0020\u0074\u006f\u0020\u0061\u0020\u006e\u0069\u006c\u0020a\u0072\u0072\u0061\u0079");
+return ;};_faca ._gdgb =append (_faca ._gdgb ,objects ...);};func (_bbgee *ASCII85Encoder )base256Tobase85 (_cecg uint32 )[5]byte {_babf :=[5]byte {0,0,0,0,0};_dabd :=_cecg ;for _dcfb :=0;_dcfb < 5;_dcfb ++{_bee :=uint32 (1);for _gfag :=0;_gfag < 4-_dcfb ;
+_gfag ++{_bee *=85;};_fcad :=_dabd /_bee ;_dabd =_dabd %_bee ;_babf [_dcfb ]=byte (_fcad );};return _babf ;};
+
+// DecodeBytes decodes byte array with ASCII85. 5 ASCII characters -> 4 raw binary bytes
+func (_fbe *ASCII85Encoder )DecodeBytes (encoded []byte )([]byte ,error ){var _gba []byte ;_cbg .Log .Trace ("\u0041\u0053\u0043\u0049\u0049\u0038\u0035\u0020\u0044e\u0063\u006f\u0064\u0065");_eadf :=0;_affb :=false ;for _eadf < len (encoded )&&!_affb {_gbf :=[5]byte {0,0,0,0,0};
+_fbddc :=0;_bbgf :=0;_fbae :=4;for _bbgf < 5+_fbddc {if _eadf +_bbgf ==len (encoded ){break ;};_adfc :=encoded [_eadf +_bbgf ];if IsWhiteSpace (_adfc ){_fbddc ++;_bbgf ++;continue ;}else if _adfc =='~'&&_eadf +_bbgf +1< len (encoded )&&encoded [_eadf +_bbgf +1]=='>'{_fbae =(_bbgf -_fbddc )-1;
+if _fbae < 0{_fbae =0;};_affb =true ;break ;}else if _adfc >='!'&&_adfc <='u'{_adfc -='!';}else if _adfc =='z'&&_bbgf -_fbddc ==0{_fbae =4;_bbgf ++;break ;}else {_cbg .Log .Error ("\u0046\u0061i\u006c\u0065\u0064\u0020\u0064\u0065\u0063\u006f\u0064\u0069\u006e\u0067\u002c\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020co\u0064\u0065");
+return nil ,_a .New ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0063\u006f\u0064\u0065\u0020e\u006e\u0063\u006f\u0075\u006e\u0074\u0065\u0072\u0065\u0064");};_gbf [_bbgf -_fbddc ]=_adfc ;_bbgf ++;};_eadf +=_bbgf ;for _gcg :=_fbae +1;_gcg < 5;_gcg ++{_gbf [_gcg ]=84;
+};_egfd :=uint32 (_gbf [0])*85*85*85*85+uint32 (_gbf [1])*85*85*85+uint32 (_gbf [2])*85*85+uint32 (_gbf [3])*85+uint32 (_gbf [4]);_adfd :=[]byte {byte ((_egfd >>24)&0xff),byte ((_egfd >>16)&0xff),byte ((_egfd >>8)&0xff),byte (_egfd &0xff)};_gba =append (_gba ,_adfd [:_fbae ]...);
+};_cbg .Log .Trace ("A\u0053\u0043\u0049\u004985\u002c \u0065\u006e\u0063\u006f\u0064e\u0064\u003a\u0020\u0025\u0020\u0058",encoded );_cbg .Log .Trace ("A\u0053\u0043\u0049\u004985\u002c \u0064\u0065\u0063\u006f\u0064e\u0064\u003a\u0020\u0025\u0020\u0058",_gba );
+return _gba ,nil ;};
+
+// SetIfNotNil sets the dictionary's key -> val mapping entry -IF- val is not nil.
+// Note that we take care to perform a type switch. Otherwise if we would supply a nil value
+// of another type, e.g. (PdfObjectArray*)(nil), then it would not be a PdfObject(nil) and thus
+// would get set.
+func (_adgd *PdfObjectDictionary )SetIfNotNil (key PdfObjectName ,val PdfObject ){if val !=nil {switch _bdbf :=val .(type ){case *PdfObjectName :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectDictionary :if _bdbf !=nil {_adgd .Set (key ,val );
+};case *PdfObjectStream :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectString :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectNull :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectInteger :if _bdbf !=nil {_adgd .Set (key ,val );
+};case *PdfObjectArray :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectBool :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectFloat :if _bdbf !=nil {_adgd .Set (key ,val );};case *PdfObjectReference :if _bdbf !=nil {_adgd .Set (key ,val );
+};case *PdfIndirectObject :if _bdbf !=nil {_adgd .Set (key ,val );};default:_cbg .Log .Error ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0055\u006e\u006b\u006e\u006f\u0077\u006e\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0054\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u006e\u0065\u0076\u0065\u0072\u0020\u0068\u0061\u0070\u0070\u0065\u006e\u0021",val );
+};};};var _ddfff =_ee .MustCompile ("\u0028\u005c\u0064\u002b)\\\u0073\u002b\u0028\u005c\u0064\u002b\u0029\u005c\u0073\u002b\u006f\u0062\u006a");
+
+// XrefTable represents the cross references in a PDF, i.e. the table of objects and information
+// where to access within the PDF file.
+type XrefTable struct{ObjectMap map[int ]XrefObject ;_gaf []XrefObject ;};
+
+// DecodeBytes decodes the CCITTFax encoded image data.
+func (_efgg *CCITTFaxEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_gccaf ,_dgbf :=_bed .NewDecoder (encoded ,_bed .DecodeOptions {Columns :_efgg .Columns ,Rows :_efgg .Rows ,K :_efgg .K ,EncodedByteAligned :_efgg .EncodedByteAlign ,BlackIsOne :_efgg .BlackIs1 ,EndOfBlock :_efgg .EndOfBlock ,EndOfLine :_efgg .EndOfLine ,DamagedRowsBeforeError :_efgg .DamagedRowsBeforeError });
+if _dgbf !=nil {return nil ,_dgbf ;};_dbcd ,_dgbf :=_de .ReadAll (_gccaf );if _dgbf !=nil {return nil ,_dgbf ;};return _dbcd ,nil ;};
+
+// DecodeGlobals decodes 'encoded' byte stream and returns their Globally defined segments ('Globals').
+func (_aecd *JBIG2Encoder )DecodeGlobals (encoded []byte )(_bb .Globals ,error ){return _bb .DecodeGlobals (encoded );};
+
+// HeaderPosition gets the file header position.
+func (_dbaccd ParserMetadata )HeaderPosition ()int {return _dbaccd ._aba };
+
+// Encrypt an object with specified key. For numbered objects,
+// the key argument is not used and a new one is generated based
+// on the object and generation number.
+// Traverses through all the subobjects (recursive).
+//
+// Does not look up references.. That should be done prior to calling.
+func (_dggf *PdfCrypt )Encrypt (obj PdfObject ,parentObjNum ,parentGenNum int64 )error {if _dggf .isEncrypted (obj ){return nil ;};switch _fce :=obj .(type ){case *PdfIndirectObject :_dggf ._dfa [_fce ]=true ;_cbg .Log .Trace ("\u0045\u006e\u0063\u0072\u0079\u0070\u0074\u0069\u006e\u0067 \u0069\u006e\u0064\u0069\u0072\u0065\u0063t\u0020\u0025\u0064\u0020\u0025\u0064\u0020\u006f\u0062\u006a\u0021",_fce .ObjectNumber ,_fce .GenerationNumber );
+_ccgb :=_fce .ObjectNumber ;_dacf :=_fce .GenerationNumber ;_dba :=_dggf .Encrypt (_fce .PdfObject ,_ccgb ,_dacf );if _dba !=nil {return _dba ;};return nil ;case *PdfObjectStream :_dggf ._dfa [_fce ]=true ;_fdfc :=_fce .PdfObjectDictionary ;if _cdb ,_agca :=_fdfc .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );
+_agca &&*_cdb =="\u0058\u0052\u0065\u0066"{return nil ;};_agaa :=_fce .ObjectNumber ;_adab :=_fce .GenerationNumber ;_cbg .Log .Trace ("\u0045n\u0063\u0072\u0079\u0070t\u0069\u006e\u0067\u0020\u0073t\u0072e\u0061m\u0020\u0025\u0064\u0020\u0025\u0064\u0020!",_agaa ,_adab );
+_gbdd :=_gbb ;if _dggf ._fbf .V >=4{_gbdd =_dggf ._gef ;_cbg .Log .Trace ("\u0074\u0068\u0069\u0073.s\u0074\u0072\u0065\u0061\u006d\u0046\u0069\u006c\u0074\u0065\u0072\u0020\u003d\u0020%\u0073",_dggf ._gef );if _daeg ,_dbgc :=_fdfc .Get ("\u0046\u0069\u006c\u0074\u0065\u0072").(*PdfObjectArray );
+_dbgc {if _fdfcd ,_fafd :=GetName (_daeg .Get (0));_fafd {if *_fdfcd =="\u0043\u0072\u0079p\u0074"{_gbdd ="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079";if _bbab ,_efb :=_fdfc .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073").(*PdfObjectDictionary );
+_efb {if _cebc ,_gee :=_bbab .Get ("\u004e\u0061\u006d\u0065").(*PdfObjectName );_gee {if _ ,_cgcg :=_dggf ._gde [string (*_cebc )];_cgcg {_cbg .Log .Trace ("\u0055\u0073\u0069\u006eg \u0073\u0074\u0072\u0065\u0061\u006d\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020%\u0073",*_cebc );
+_gbdd =string (*_cebc );};};};};};};_cbg .Log .Trace ("\u0077\u0069\u0074\u0068\u0020\u0025\u0073\u0020\u0066i\u006c\u0074\u0065\u0072",_gbdd );if _gbdd =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{return nil ;};};_bdcb :=_dggf .Encrypt (_fce .PdfObjectDictionary ,_agaa ,_adab );
+if _bdcb !=nil {return _bdcb ;};_aegc ,_bdcb :=_dggf .makeKey (_gbdd ,uint32 (_agaa ),uint32 (_adab ),_dggf ._dbg );if _bdcb !=nil {return _bdcb ;};_fce .Stream ,_bdcb =_dggf .encryptBytes (_fce .Stream ,_gbdd ,_aegc );if _bdcb !=nil {return _bdcb ;};_fdfc .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (len (_fce .Stream ))));
+return nil ;case *PdfObjectString :_cbg .Log .Trace ("\u0045n\u0063r\u0079\u0070\u0074\u0069\u006eg\u0020\u0073t\u0072\u0069\u006e\u0067\u0021");_gbcg :=_gbb ;if _dggf ._fbf .V >=4{_cbg .Log .Trace ("\u0077\u0069\u0074\u0068\u0020\u0025\u0073\u0020\u0066i\u006c\u0074\u0065\u0072",_dggf ._ade );
+if _dggf ._ade =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{return nil ;};_gbcg =_dggf ._ade ;};_dcd ,_eaae :=_dggf .makeKey (_gbcg ,uint32 (parentObjNum ),uint32 (parentGenNum ),_dggf ._dbg );if _eaae !=nil {return _eaae ;};_fdfb :=_fce .Str ();
+_eebg :=make ([]byte ,len (_fdfb ));for _gaca :=0;_gaca < len (_fdfb );_gaca ++{_eebg [_gaca ]=_fdfb [_gaca ];};_cbg .Log .Trace ("\u0045n\u0063\u0072\u0079\u0070\u0074\u0020\u0073\u0074\u0072\u0069\u006eg\u003a\u0020\u0025\u0073\u0020\u003a\u0020\u0025\u0020\u0078",_eebg ,_eebg );
+_eebg ,_eaae =_dggf .encryptBytes (_eebg ,_gbcg ,_dcd );if _eaae !=nil {return _eaae ;};_fce ._efga =string (_eebg );return nil ;case *PdfObjectArray :for _ ,_eedc :=range _fce .Elements (){_fecc :=_dggf .Encrypt (_eedc ,parentObjNum ,parentGenNum );if _fecc !=nil {return _fecc ;
+};};return nil ;case *PdfObjectDictionary :_cggg :=false ;if _cace :=_fce .Get ("\u0054\u0079\u0070\u0065");_cace !=nil {_gfeg ,_gcce :=_cace .(*PdfObjectName );if _gcce &&*_gfeg =="\u0053\u0069\u0067"{_cggg =true ;};};for _ ,_dffd :=range _fce .Keys (){_badf :=_fce .Get (_dffd );
+if _cggg &&string (_dffd )=="\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u0073"{continue ;};if string (_dffd )!="\u0050\u0061\u0072\u0065\u006e\u0074"&&string (_dffd )!="\u0050\u0072\u0065\u0076"&&string (_dffd )!="\u004c\u0061\u0073\u0074"{_dbacc :=_dggf .Encrypt (_badf ,parentObjNum ,parentGenNum );
+if _dbacc !=nil {return _dbacc ;};};};return nil ;};return nil ;};
+
+// EncodeImage encodes 'img' golang image.Image into jbig2 encoded bytes document using default encoder settings.
+func (_bafc *JBIG2Encoder )EncodeImage (img _bc .Image )([]byte ,error ){return _bafc .encodeImage (img )};
+
+// GetDict returns the *PdfObjectDictionary represented by the PdfObject directly or indirectly within an indirect
+// object. On type mismatch the found bool flag is false and a nil pointer is returned.
+func GetDict (obj PdfObject )(_abdbg *PdfObjectDictionary ,_deab bool ){_abdbg ,_deab =TraceToDirectObject (obj ).(*PdfObjectDictionary );return _abdbg ,_deab ;};
+
+// GetFloat returns the *PdfObjectFloat represented by the PdfObject directly or indirectly within an indirect
+// object. On type mismatch the found bool flag is false and a nil pointer is returned.
+func GetFloat (obj PdfObject )(_agfda *PdfObjectFloat ,_ebbf bool ){_agfda ,_ebbf =TraceToDirectObject (obj ).(*PdfObjectFloat );return _agfda ,_ebbf ;};type bufferedReadSeeker struct{_aag _de .ReadSeeker ;_fba *_eb .Reader ;};func (_dcgg *PdfParser )xrefNextObjectOffset (_acgf int64 )int64 {_gfdec :=int64 (0);
+if len (_dcgg ._becb .ObjectMap )==0{return 0;};if len (_dcgg ._becb ._gaf )==0{_bgec :=0;for _ ,_deda :=range _dcgg ._becb .ObjectMap {if _deda .Offset > 0{_bgec ++;};};if _bgec ==0{return 0;};_dcgg ._becb ._gaf =make ([]XrefObject ,_bgec );_fcfad :=0;
+for _ ,_fbgf :=range _dcgg ._becb .ObjectMap {if _fbgf .Offset > 0{_dcgg ._becb ._gaf [_fcfad ]=_fbgf ;_fcfad ++;};};_dc .Slice (_dcgg ._becb ._gaf ,func (_bdfed ,_ggfe int )bool {return _dcgg ._becb ._gaf [_bdfed ].Offset < _dcgg ._becb ._gaf [_ggfe ].Offset });
+};_decg :=_dc .Search (len (_dcgg ._becb ._gaf ),func (_bgdc int )bool {return _dcgg ._becb ._gaf [_bgdc ].Offset >=_acgf });if _decg < len (_dcgg ._becb ._gaf ){_gfdec =_dcgg ._becb ._gaf [_decg ].Offset ;};return _gfdec ;};var _gddf =_ee .MustCompile ("\u005b\\\u0072\u005c\u006e\u005d\u005c\u0073\u002a\u0028\u0078\u0072\u0065f\u0029\u005c\u0073\u002a\u005b\u005c\u0072\u005c\u006e\u005d");
+
+
+// NewRunLengthEncoder makes a new run length encoder
+func NewRunLengthEncoder ()*RunLengthEncoder {return &RunLengthEncoder {}};
+
+// ToIntegerArray returns a slice of all array elements as an int slice. An error is returned if the
+// array non-integer objects. Each element can only be PdfObjectInteger.
+func (_acebf *PdfObjectArray )ToIntegerArray ()([]int ,error ){var _abgc []int ;for _ ,_efcfe :=range _acebf .Elements (){if _gbbf ,_abf :=_efcfe .(*PdfObjectInteger );_abf {_abgc =append (_abgc ,int (*_gbbf ));}else {return nil ,ErrTypeError ;};};return _abgc ,nil ;
+};func (_ceg *PdfCrypt )makeKey (_ged string ,_bgdd ,_dac uint32 ,_aad []byte )([]byte ,error ){_cbe ,_gcaa :=_ceg ._gde [_ged ];if !_gcaa {return nil ,_ec .Errorf ("\u0075n\u006b\u006e\u006f\u0077n\u0020\u0063\u0072\u0079\u0070t\u0020f\u0069l\u0074\u0065\u0072\u0020\u0028\u0025\u0073)",_ged );
+};return _cbe .MakeKey (_bgdd ,_dac ,_aad );};func (_egcd *PdfParser )skipSpaces ()(int ,error ){_gfbe :=0;for {_fbada ,_fbfc :=_egcd ._eebc .ReadByte ();if _fbfc !=nil {return 0,_fbfc ;};if IsWhiteSpace (_fbada ){_gfbe ++;}else {_egcd ._eebc .UnreadByte ();
+break ;};};return _gfbe ,nil ;};
+
+// HasEOLAfterHeader gets information if there is a EOL after the version header.
+func (_beag ParserMetadata )HasEOLAfterHeader ()bool {return _beag ._fee };
+
+// CheckAccessRights checks access rights and permissions for a specified password. If either user/owner password is
+// specified, full rights are granted, otherwise the access rights are specified by the Permissions flag.
+//
+// The bool flag indicates that the user can access and view the file.
+// The AccessPermissions shows what access the user has for editing etc.
+// An error is returned if there was a problem performing the authentication.
+func (_fgdb *PdfParser )CheckAccessRights (password []byte )(bool ,_db .Permissions ,error ){if _fgdb ._feefe ==nil {return true ,_db .PermOwner ,nil ;};return _fgdb ._feefe .checkAccessRights (password );};func (_afbg *PdfParser )getNumbersOfUpdatedObjects (_bbdd *PdfParser )([]int ,error ){if _bbdd ==nil {return nil ,_a .New ("\u0070\u0072e\u0076\u0069\u006f\u0075\u0073\u0020\u0070\u0061\u0072\u0073\u0065\u0072\u0020\u0063\u0061\u006e\u0027\u0074\u0020\u0062\u0065\u0020nu\u006c\u006c");
+};_fabcc :=_bbdd ._fbfd ;_dbff :=make ([]int ,0);_edddc :=make (map[int ]interface{});_fffg :=make (map[int ]int64 );for _cggd ,_caec :=range _afbg ._becb .ObjectMap {if _caec .Offset ==0{if _caec .OsObjNumber !=0{if _ggeg ,_bcfe :=_afbg ._becb .ObjectMap [_caec .OsObjNumber ];
+_bcfe {_edddc [_caec .OsObjNumber ]=struct{}{};_fffg [_cggd ]=_ggeg .Offset ;}else {return nil ,_a .New ("u\u006ed\u0065\u0066\u0069\u006e\u0065\u0064\u0020\u0078r\u0065\u0066\u0020\u0074ab\u006c\u0065");};};}else {_fffg [_cggd ]=_caec .Offset ;};};for _bcdg ,_fbdf :=range _fffg {if _ ,_caa :=_edddc [_bcdg ];
+_caa {continue ;};if _fbdf > _fabcc {_dbff =append (_dbff ,_bcdg );};};return _dbff ,nil ;};
+
+// GetFilterArray returns the names of the underlying encoding filters in an array that
+// can be used as /Filter entry.
+func (_fdcf *MultiEncoder )GetFilterArray ()*PdfObjectArray {_dgeg :=make ([]PdfObject ,len (_fdcf ._acg ));for _baec ,_bde :=range _fdcf ._acg {_dgeg [_baec ]=MakeName (_bde .GetFilterName ());};return MakeArray (_dgeg ...);};
+
+// Remove removes an element specified by key.
+func (_afge *PdfObjectDictionary )Remove (key PdfObjectName ){_bace :=-1;for _bfbfd ,_cceef :=range _afge ._ggegg {if _cceef ==key {_bace =_bfbfd ;break ;};};if _bace >=0{_afge ._ggegg =append (_afge ._ggegg [:_bace ],_afge ._ggegg [_bace +1:]...);delete (_afge ._cdab ,key );
+};};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_gfgd *DCTEncoder )MakeDecodeParams ()PdfObject {return nil };func (_gdeg *PdfParser )initParser ()error {_cdffb ,_dafa ,_fgcc :=_gdeg .parsePdfVersion ();if _fgcc !=nil {_cbg .Log .Error ("U\u006e\u0061\u0062\u006c\u0065\u0020t\u006f\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u0076e\u0072\u0073\u0069o\u006e:\u0020\u0025\u0076",_fgcc );
+return _fgcc ;};_gdeg ._dbdbf .Major =_cdffb ;_gdeg ._dbdbf .Minor =_dafa ;if _gdeg ._dgbb ,_fgcc =_gdeg .loadXrefs ();_fgcc !=nil {_cbg .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020F\u0061\u0069\u006c\u0065d t\u006f l\u006f\u0061\u0064\u0020\u0078\u0072\u0065f \u0074\u0061\u0062\u006c\u0065\u0021\u0020%\u0073",_fgcc );
+return _fgcc ;};_cbg .Log .Trace ("T\u0072\u0061\u0069\u006c\u0065\u0072\u003a\u0020\u0025\u0073",_gdeg ._dgbb );_fggga ,_fgcc :=_gdeg .parseLinearizedDictionary ();if _fgcc !=nil {return _fgcc ;};if _fggga !=nil {_gdeg ._cbca ,_fgcc =_gdeg .checkLinearizedInformation (_fggga );
+if _fgcc !=nil {return _fgcc ;};};if len (_gdeg ._becb .ObjectMap )==0{return _ec .Errorf ("\u0065\u006d\u0070\u0074\u0079\u0020\u0058\u0052\u0045\u0046\u0020t\u0061\u0062\u006c\u0065\u0020\u002d\u0020\u0049\u006e\u0076a\u006c\u0069\u0064");};_gdeg ._bcae =len (_gdeg ._acc );
+if _gdeg ._cbca &&_gdeg ._bcae !=0{_gdeg ._bcae --;};_gdeg ._bcce =make ([]*PdfParser ,_gdeg ._bcae );return nil ;};
+
+// Write outputs the object as it is to be written to file.
+func (_cacfg *PdfObjectInteger )Write ()[]byte {return []byte (_b .FormatInt (int64 (*_cacfg ),10))};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_fcaa *ASCIIHexEncoder )UpdateParams (params *PdfObjectDictionary ){};func _aee (_eee PdfObject )(int64 ,int64 ,error ){if _bef ,_eed :=_eee .(*PdfIndirectObject );_eed {return _bef .ObjectNumber ,_bef .GenerationNumber ,nil ;};if _dff ,_bga :=_eee .(*PdfObjectStream );
+_bga {return _dff .ObjectNumber ,_dff .GenerationNumber ,nil ;};return 0,0,_a .New ("\u006e\u006ft\u0020\u0061\u006e\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u002f\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006f\u0062je\u0063\u0074");};
+
+// LookupByReference looks up a PdfObject by a reference.
+func (_edg *PdfParser )LookupByReference (ref PdfObjectReference )(PdfObject ,error ){_cbg .Log .Trace ("\u004c\u006f\u006fki\u006e\u0067\u0020\u0075\u0070\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u0020\u0025\u0073",ref .String ());return _edg .LookupByNumber (int (ref .ObjectNumber ));
+};
+
+// DecodeBytes decodes a slice of JPX encoded bytes and returns the result.
+func (_cdec *JPXEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u003a\u0020\u0041t\u0074\u0065\u006dpt\u0069\u006e\u0067\u0020\u0074\u006f \u0075\u0073\u0065\u0020\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0065\u006e\u0063\u006f\u0064\u0069\u006e\u0067 \u0025\u0073",_cdec .GetFilterName ());
+return encoded ,ErrNoJPXDecode ;};
+
+// PdfObjectDictionary represents the primitive PDF dictionary/map object.
+type PdfObjectDictionary struct{_cdab map[PdfObjectName ]PdfObject ;_ggegg []PdfObjectName ;_dfdgf *_ea .Mutex ;_adbe *PdfParser ;};
+
+// DecodeStream implements ASCII85 stream decoding.
+func (_egab *ASCII85Encoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _egab .DecodeBytes (streamObj .Stream );};
+
+// Write outputs the object as it is to be written to file.
+func (_gcae *PdfObjectBool )Write ()[]byte {if *_gcae {return []byte ("\u0074\u0072\u0075\u0065");};return []byte ("\u0066\u0061\u006cs\u0065");};
+
+// GetFilterName returns the name of the encoding filter.
+func (_ddg *RunLengthEncoder )GetFilterName ()string {return StreamEncodingFilterNameRunLength };
+
+// EncodeBytes implements support for LZW encoding. Currently not supporting predictors (raw compressed data only).
+// Only supports the Early change = 1 algorithm (compress/lzw) as the other implementation
+// does not have a write method.
+// TODO: Consider refactoring compress/lzw to allow both.
+func (_dgaf *LZWEncoder )EncodeBytes (data []byte )([]byte ,error ){if _dgaf .Predictor !=1{return nil ,_ec .Errorf ("\u004c\u005aW \u0050\u0072\u0065d\u0069\u0063\u0074\u006fr =\u00201 \u006f\u006e\u006c\u0079\u0020\u0073\u0075pp\u006f\u0072\u0074\u0065\u0064\u0020\u0079e\u0074");
+};if _dgaf .EarlyChange ==1{return nil ,_ec .Errorf ("\u004c\u005a\u0057\u0020\u0045\u0061\u0072\u006c\u0079\u0020\u0043\u0068\u0061n\u0067\u0065\u0020\u003d\u0020\u0030 \u006f\u006e\u006c\u0079\u0020\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065d\u0020\u0079\u0065\u0074");
+};var _fgg _d .Buffer ;_cebb :=_bea .NewWriter (&_fgg ,_bea .MSB ,8);_cebb .Write (data );_cebb .Close ();return _fgg .Bytes (),nil ;};
+
+// AddEncoder adds the passed in encoder to the underlying encoder slice.
+func (_gecb *MultiEncoder )AddEncoder (encoder StreamEncoder ){_gecb ._acg =append (_gecb ._acg ,encoder );};
+
+// GetFilterName returns the name of the encoding filter.
+func (_dffa *RawEncoder )GetFilterName ()string {return StreamEncodingFilterNameRaw };
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+// Has the Filter set and the DecodeParms.
+func (_edac *FlateEncoder )MakeStreamDict ()*PdfObjectDictionary {_acaa :=MakeDict ();_acaa .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_edac .GetFilterName ()));_egea :=_edac .MakeDecodeParams ();if _egea !=nil {_acaa .Set ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073",_egea );
+};return _acaa ;};
+
+// GetXrefOffset returns the offset of the xref table.
+func (_ebaa *PdfParser )GetXrefOffset ()int64 {return _ebaa ._cecac };
+
+// UpdateParams updates the parameter values of the encoder.
+func (_fac *FlateEncoder )UpdateParams (params *PdfObjectDictionary ){_bag ,_abce :=GetNumberAsInt64 (params .Get ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr"));if _abce ==nil {_fac .Predictor =int (_bag );};_baacc ,_abce :=GetNumberAsInt64 (params .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074"));
+if _abce ==nil {_fac .BitsPerComponent =int (_baacc );};_afb ,_abce :=GetNumberAsInt64 (params .Get ("\u0057\u0069\u0064t\u0068"));if _abce ==nil {_fac .Columns =int (_afb );};_eeed ,_abce :=GetNumberAsInt64 (params .Get ("\u0043o\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073"));
+if _abce ==nil {_fac .Colors =int (_eeed );};};func (_bade *PdfParser )parseString ()(*PdfObjectString ,error ){_bade ._eebc .ReadByte ();var _edab _d .Buffer ;_fcdf :=1;for {_dfdb ,_aeef :=_bade ._eebc .Peek (1);if _aeef !=nil {return MakeString (_edab .String ()),_aeef ;
+};if _dfdb [0]=='\\'{_bade ._eebc .ReadByte ();_befdb ,_edfc :=_bade ._eebc .ReadByte ();if _edfc !=nil {return MakeString (_edab .String ()),_edfc ;};if IsOctalDigit (_befdb ){_bdccb ,_aedg :=_bade ._eebc .Peek (2);if _aedg !=nil {return MakeString (_edab .String ()),_aedg ;
+};var _fgaea []byte ;_fgaea =append (_fgaea ,_befdb );for _ ,_fgggg :=range _bdccb {if IsOctalDigit (_fgggg ){_fgaea =append (_fgaea ,_fgggg );}else {break ;};};_bade ._eebc .Discard (len (_fgaea )-1);_cbg .Log .Trace ("\u004e\u0075\u006d\u0065ri\u0063\u0020\u0073\u0074\u0072\u0069\u006e\u0067\u0020\u0022\u0025\u0073\u0022",_fgaea );
+_cded ,_aedg :=_b .ParseUint (string (_fgaea ),8,32);if _aedg !=nil {return MakeString (_edab .String ()),_aedg ;};_edab .WriteByte (byte (_cded ));continue ;};switch _befdb {case 'n':_edab .WriteRune ('\n');case 'r':_edab .WriteRune ('\r');case 't':_edab .WriteRune ('\t');
+case 'b':_edab .WriteRune ('\b');case 'f':_edab .WriteRune ('\f');case '(':_edab .WriteRune ('(');case ')':_edab .WriteRune (')');case '\\':_edab .WriteRune ('\\');};continue ;}else if _dfdb [0]=='('{_fcdf ++;}else if _dfdb [0]==')'{_fcdf --;if _fcdf ==0{_bade ._eebc .ReadByte ();
+break ;};};_accg ,_ :=_bade ._eebc .ReadByte ();_edab .WriteByte (_accg );};return MakeString (_edab .String ()),nil ;};
+
+// NewDCTEncoder makes a new DCT encoder with default parameters.
+func NewDCTEncoder ()*DCTEncoder {_cgd :=&DCTEncoder {};_cgd .ColorComponents =3;_cgd .BitsPerComponent =8;_cgd .Quality =DefaultJPEGQuality ;_cgd .Decode =[]float64 {0.0,1.0,0.0,1.0,0.0,1.0};return _cgd ;};
+
+// UnreadByte unreads the last byte read from the buffered reader.
+func (_dg *bufferedReadSeeker )UnreadByte ()error {return _dg ._fba .UnreadByte ()};
+
+// Decoded returns the PDFDocEncoding or UTF-16BE decoded string contents.
+// UTF-16BE is applied when the first two bytes are 0xFE, 0XFF, otherwise decoding of
+// PDFDocEncoding is performed.
+func (_eeeeb *PdfObjectString )Decoded ()string {if _eeeeb ==nil {return "";};_dedgb :=[]byte (_eeeeb ._efga );if len (_dedgb )>=2&&_dedgb [0]==0xFE&&_dedgb [1]==0xFF{return _ga .UTF16ToString (_dedgb [2:]);};return _ga .PDFDocEncodingToString (_dedgb );
+};
+
+// GetFilterName returns the names of the underlying encoding filters,
+// separated by spaces.
+// Note: This is just a string, should not be used in /Filter dictionary entry. Use GetFilterArray for that.
+// TODO(v4): Refactor to GetFilter() which can be used for /Filter (either Name or Array), this can be
+// renamed to String() as a pretty string to use in debugging etc.
+func (_gec *MultiEncoder )GetFilterName ()string {_gce :="";for _dedg ,_bdfa :=range _gec ._acg {_gce +=_bdfa .GetFilterName ();if _dedg < len (_gec ._acg )-1{_gce +="\u0020";};};return _gce ;};func (_abcd *PdfCrypt )encryptBytes (_adba []byte ,_baac string ,_aeg []byte )([]byte ,error ){_cbg .Log .Trace ("\u0045\u006e\u0063\u0072\u0079\u0070\u0074\u0020\u0062\u0079\u0074\u0065\u0073");
+_cbff ,_cbec :=_abcd ._gde [_baac ];if !_cbec {return nil ,_ec .Errorf ("\u0075n\u006b\u006e\u006f\u0077n\u0020\u0063\u0072\u0079\u0070t\u0020f\u0069l\u0074\u0065\u0072\u0020\u0028\u0025\u0073)",_baac );};return _cbff .EncryptBytes (_adba ,_aeg );};func (_caf *PdfCrypt )generateParams (_edgf ,_acaf []byte )error {_eedf :=_caf .securityHandler ();
+_cde ,_eda :=_eedf .GenerateParams (&_caf ._cbbgb ,_acaf ,_edgf );if _eda !=nil {return _eda ;};_caf ._dbg =_cde ;return nil ;};
+
+// DecodeStream decodes the stream containing CCITTFax encoded image data.
+func (_fbcd *CCITTFaxEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _fbcd .DecodeBytes (streamObj .Stream );};func (_eeg *PdfParser )lookupByNumber (_agb int ,_efcb bool )(PdfObject ,bool ,error ){_fcbd ,_fcg :=_eeg .ObjCache [_agb ];
+if _fcg {_cbg .Log .Trace ("\u0052\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u0063a\u0063\u0068\u0065\u0064\u0020\u006f\u0062\u006a\u0065\u0063t\u0020\u0025\u0064",_agb );return _fcbd ,false ,nil ;};if _eeg ._febe ==nil {_eeg ._febe =map[int ]bool {};
+};if _eeg ._febe [_agb ]{_cbg .Log .Debug ("ER\u0052\u004f\u0052\u003a\u0020\u004c\u006fok\u0075\u0070\u0020\u006f\u0066\u0020\u0025\u0064\u0020\u0069\u0073\u0020\u0061\u006c\u0072e\u0061\u0064\u0079\u0020\u0069\u006e\u0020\u0070\u0072\u006f\u0067\u0072\u0065\u0073\u0073\u0020\u002d\u0020\u0072\u0065c\u0075\u0072\u0073\u0069\u0076\u0065 \u006c\u006f\u006f\u006b\u0075\u0070\u0020\u0061\u0074t\u0065m\u0070\u0074\u0020\u0062\u006c\u006f\u0063\u006b\u0065\u0064",_agb );
+return nil ,false ,_a .New ("\u0072\u0065\u0063\u0075\u0072\u0073\u0069\u0076\u0065\u0020\u006c\u006f\u006f\u006b\u0075p\u0020a\u0074\u0074\u0065\u006d\u0070\u0074\u0020\u0062\u006c\u006f\u0063\u006b\u0065\u0064");};_eeg ._febe [_agb ]=true ;defer delete (_eeg ._febe ,_agb );
+_fdb ,_fcg :=_eeg ._becb .ObjectMap [_agb ];if !_fcg {_cbg .Log .Trace ("\u0055\u006e\u0061\u0062l\u0065\u0020\u0074\u006f\u0020\u006c\u006f\u0063\u0061t\u0065\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0069\u006e\u0020\u0078\u0072\u0065\u0066\u0073\u0021 \u002d\u0020\u0052\u0065\u0074u\u0072\u006e\u0069\u006e\u0067\u0020\u006e\u0075\u006c\u006c\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
+var _bbd PdfObjectNull ;return &_bbd ,false ,nil ;};_cbg .Log .Trace ("L\u006fo\u006b\u0075\u0070\u0020\u006f\u0062\u006a\u0020n\u0075\u006d\u0062\u0065r \u0025\u0064",_agb );switch _fdb .XType {case XrefTypeTableEntry :_cbg .Log .Trace ("\u0078r\u0065f\u006f\u0062\u006a\u0020\u006fb\u006a\u0020n\u0075\u006d\u0020\u0025\u0064",_fdb .ObjectNumber );
+_cbg .Log .Trace ("\u0078\u0072\u0065\u0066\u006f\u0062\u006a\u0020\u0067e\u006e\u0020\u0025\u0064",_fdb .Generation );_cbg .Log .Trace ("\u0078\u0072\u0065\u0066\u006f\u0062\u006a\u0020\u006f\u0066\u0066\u0073e\u0074\u0020\u0025\u0064",_fdb .Offset );
+_eeg ._eebc .Seek (_fdb .Offset ,_de .SeekStart );_cd ,_aae :=_eeg .ParseIndirectObject ();if _aae !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0046\u0061\u0069\u006ce\u0064\u0020\u0072\u0065\u0061\u0064\u0069n\u0067\u0020\u0078\u0072\u0065\u0066\u0020\u0028\u0025\u0073\u0029",_aae );
+if _efcb {_cbg .Log .Debug ("\u0041\u0074t\u0065\u006d\u0070\u0074i\u006e\u0067 \u0074\u006f\u0020\u0072\u0065\u0070\u0061\u0069r\u0020\u0078\u0072\u0065\u0066\u0073\u0020\u0028\u0074\u006f\u0070\u0020d\u006f\u0077\u006e\u0029");_cba ,_ggc :=_eeg .repairRebuildXrefsTopDown ();
+if _ggc !=nil {_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020\u0046\u0061\u0069\u006c\u0065\u0064\u0020r\u0065\u0070\u0061\u0069\u0072\u0020\u0028\u0025\u0073\u0029",_ggc );return nil ,false ,_ggc ;};_eeg ._becb =*_cba ;return _eeg .lookupByNumber (_agb ,false );
+};return nil ,false ,_aae ;};if _efcb {_fcgf ,_ ,_ :=_aee (_cd );if int (_fcgf )!=_agb {_cbg .Log .Debug ("\u0049n\u0076\u0061\u006c\u0069d\u0020\u0078\u0072\u0065\u0066s\u003a \u0052e\u0062\u0075\u0069\u006c\u0064\u0069\u006eg");_ggd :=_eeg .rebuildXrefTable ();
+if _ggd !=nil {return nil ,false ,_ggd ;};_eeg .ObjCache =objectCache {};return _eeg .lookupByNumberWrapper (_agb ,false );};};_cbg .Log .Trace ("\u0052\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u006f\u0062\u006a");_eeg .ObjCache [_agb ]=_cd ;
+return _cd ,false ,nil ;case XrefTypeObjectStream :_cbg .Log .Trace ("\u0078r\u0065\u0066\u0020\u0066\u0072\u006f\u006d\u0020\u006f\u0062\u006ae\u0063\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0021");_cbg .Log .Trace ("\u003e\u004c\u006f\u0061\u0064\u0020\u0076\u0069\u0061\u0020\u004f\u0053\u0021");
+_cbg .Log .Trace ("\u004f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d \u0061\u0076\u0061\u0069\u006c\u0061b\u006c\u0065\u0020\u0069\u006e\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020%\u0064\u002f\u0025\u0064",_fdb .OsObjNumber ,_fdb .OsObjIndex );
+if _fdb .OsObjNumber ==_agb {_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u0020\u0043i\u0072\u0063\u0075\u006c\u0061\u0072\u0020\u0072\u0065f\u0065\u0072\u0065n\u0063e\u0021\u003f\u0021");return nil ,true ,_a .New ("\u0078\u0072\u0065f \u0063\u0069\u0072\u0063\u0075\u006c\u0061\u0072\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065");
+};if _ ,_ebf :=_eeg ._becb .ObjectMap [_fdb .OsObjNumber ];_ebf {_bbe ,_dcab :=_eeg .lookupObjectViaOS (_fdb .OsObjNumber ,_agb );if _dcab !=nil {_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020\u0052\u0065\u0074\u0075\u0072\u006e\u0069n\u0067\u0020\u0045\u0052\u0052\u0020\u0028\u0025\u0073\u0029",_dcab );
+return nil ,true ,_dcab ;};_cbg .Log .Trace ("\u003c\u004c\u006f\u0061\u0064\u0065\u0064\u0020\u0076i\u0061\u0020\u004f\u0053");_eeg .ObjCache [_agb ]=_bbe ;if _eeg ._feefe !=nil {_eeg ._feefe ._acfa [_bbe ]=true ;};return _bbe ,true ,nil ;};_cbg .Log .Debug ("\u003f\u003f\u0020\u0042\u0065\u006c\u006f\u006eg\u0073\u0020\u0074o \u0061\u0020\u006e\u006f\u006e\u002dc\u0072\u006f\u0073\u0073\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u0064 \u006f\u0062\u006a\u0065\u0063\u0074\u0020\u002e.\u002e\u0021");
+return nil ,true ,_a .New ("\u006f\u0073\u0020\u0062\u0065\u006c\u006fn\u0067\u0073\u0020t\u006f\u0020\u0061\u0020n\u006f\u006e\u0020\u0063\u0072\u006f\u0073\u0073\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
+};return nil ,false ,_a .New ("\u0075\u006e\u006b\u006e\u006f\u0077\u006e\u0020\u0078\u0072\u0065\u0066 \u0074\u0079\u0070\u0065");};
+
+// String returns a string representation of the *PdfObjectString.
+func (_fcbf *PdfObjectString )String ()string {return _fcbf ._efga };func (_dbdg *PdfParser )parseArray ()(*PdfObjectArray ,error ){_cddc :=MakeArray ();_dbdg ._eebc .ReadByte ();for {_dbdg .skipSpaces ();_eacc ,_gfbeb :=_dbdg ._eebc .Peek (1);if _gfbeb !=nil {return _cddc ,_gfbeb ;
+};if _eacc [0]==']'{_dbdg ._eebc .ReadByte ();break ;};_afab ,_gfbeb :=_dbdg .parseObject ();if _gfbeb !=nil {return _cddc ,_gfbeb ;};_cddc .Append (_afab );};return _cddc ,nil ;};
+
+// SetFileOffset sets the file to an offset position and resets buffer.
+func (_ad *bufferedReadSeeker )SetFileOffset (offset int64 ){if offset < 0{offset =0;};_ad .Seek (offset ,_de .SeekStart );};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_fabf *MultiEncoder )MakeStreamDict ()*PdfObjectDictionary {_ddff :=MakeDict ();_ddff .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",_fabf .GetFilterArray ());for _ ,_ebee :=range _fabf ._acg {_dfcf :=_ebee .MakeStreamDict ();for _ ,_febg :=range _dfcf .Keys (){_ebfda :=_dfcf .Get (_febg );
+if _febg !="\u0046\u0069\u006c\u0074\u0065\u0072"&&_febg !="D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073"{_ddff .Set (_febg ,_ebfda );};};};_deb :=_fabf .MakeDecodeParams ();if _deb !=nil {_ddff .Set ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073",_deb );
+};return _ddff ;};
+
+// GetPreviousRevisionParser returns PdfParser for the previous version of the Pdf document.
+func (_fbbg *PdfParser )GetPreviousRevisionParser ()(*PdfParser ,error ){if _fbbg ._bcae ==0{return nil ,_a .New ("\u0074\u0068\u0069\u0073 i\u0073\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0072\u0065\u0076\u0069\u0073\u0069o\u006e");};if _cdfg ,_gfacd :=_fbbg ._ddfac [_fbbg ];
+_gfacd {return _cdfg ,nil ;};_eecae ,_dfeac :=_fbbg .GetPreviousRevisionReadSeeker ();if _dfeac !=nil {return nil ,_dfeac ;};_ggea ,_dfeac :=NewParser (_eecae );_ggea ._ddfac =_fbbg ._ddfac ;if _dfeac !=nil {return nil ,_dfeac ;};_fbbg ._ddfac [_fbbg ]=_ggea ;
+return _ggea ,nil ;};var _bcff =_ee .MustCompile ("\u0073t\u0061r\u0074\u0078\u003f\u0072\u0065f\u005c\u0073*\u0028\u005c\u0064\u002b\u0029");func (_fgcf *PdfParser )parseXrefStream (_cdda *PdfObjectInteger )(*PdfObjectDictionary ,error ){if _cdda !=nil {_cbg .Log .Trace ("\u0058\u0052\u0065f\u0053\u0074\u006d\u0020x\u0072\u0065\u0066\u0020\u0074\u0061\u0062l\u0065\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0061\u0074\u0020\u0025\u0064",_cdda );
+_fgcf ._eebc .Seek (int64 (*_cdda ),_de .SeekStart );};_cedg :=_fgcf .GetFileOffset ();_fcaad ,_geaf :=_fgcf .ParseIndirectObject ();if _geaf !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0046\u0061\u0069\u006c\u0065\u0064\u0020\u0074\u006f\u0020\u0072\u0065\u0061d\u0020\u0078\u0072\u0065\u0066\u0020\u006fb\u006a\u0065\u0063\u0074");
+return nil ,_a .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0074\u006f\u0020\u0072e\u0061\u0064\u0020\u0078\u0072\u0065\u0066\u0020\u006f\u0062j\u0065\u0063\u0074");};_cbg .Log .Trace ("\u0058R\u0065f\u0053\u0074\u006d\u0020\u006fb\u006a\u0065c\u0074\u003a\u0020\u0025\u0073",_fcaad );
+_daca ,_bdde :=_fcaad .(*PdfObjectStream );if !_bdde {_cbg .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0058R\u0065\u0066\u0053\u0074\u006d\u0020\u0070o\u0069\u006e\u0074\u0069\u006e\u0067 \u0074\u006f\u0020\u006e\u006f\u006e\u002d\u0073\u0074\u0072\u0065a\u006d\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0021");
+return nil ,_a .New ("\u0058\u0052\u0065\u0066\u0053\u0074\u006d\u0020\u0070\u006f\u0069\u006e\u0074i\u006e\u0067\u0020\u0074\u006f\u0020a\u0020\u006e\u006f\u006e\u002d\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006fb\u006a\u0065\u0063\u0074");};_gegbd :=_daca .PdfObjectDictionary ;
+_cegc ,_bdde :=_daca .Get ("\u0053\u0069\u007a\u0065").(*PdfObjectInteger );if !_bdde {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u004d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0073\u0069\u007a\u0065\u0020f\u0072\u006f\u006d\u0020\u0078\u0072\u0065f\u0020\u0073\u0074\u006d");
+return nil ,_a .New ("\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0053\u0069\u007ae\u0020\u0066\u0072\u006f\u006d\u0020\u0078\u0072\u0065\u0066 \u0073\u0074\u006d");};if int64 (*_cegc )> 8388607{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0078\u0072\u0065\u0066\u0020\u0053\u0069\u007a\u0065\u0020\u0065x\u0063\u0065\u0065\u0064\u0065\u0064\u0020l\u0069\u006d\u0069\u0074\u002c\u0020\u006f\u0076\u0065\u0072\u00208\u0033\u0038\u0038\u0036\u0030\u0037\u0020\u0028\u0025\u0064\u0029",*_cegc );
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_fcbg :=_daca .Get ("\u0057");_gbcf ,_bdde :=_fcbg .(*PdfObjectArray );if !_bdde {return nil ,_a .New ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0057\u0020\u0069\u006e\u0020x\u0072\u0065\u0066\u0020\u0073\u0074\u0072\u0065\u0061\u006d");
+};_cgaab :=_gbcf .Len ();if _cgaab !=3{_cbg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0078\u0072\u0065\u0066\u0020\u0073\u0074\u006d\u0020\u0028\u006c\u0065\u006e\u0028\u0057\u0029\u0020\u0021\u003d\u0020\u0033\u0020\u002d\u0020\u0025\u0064\u0029",_cgaab );
+return nil ,_a .New ("\u0075\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0078\u0072\u0065f\u0020s\u0074\u006d\u0020\u006c\u0065\u006e\u0028\u0057\u0029\u0020\u0021\u003d\u0020\u0033");};var _cfgd []int64 ;for _cadb :=0;_cadb < 3;
+_cadb ++{_fbcbe ,_fcbe :=GetInt (_gbcf .Get (_cadb ));if !_fcbe {return nil ,_a .New ("i\u006e\u0076\u0061\u006cid\u0020w\u0020\u006f\u0062\u006a\u0065c\u0074\u0020\u0074\u0079\u0070\u0065");};_cfgd =append (_cfgd ,int64 (*_fbcbe ));};_dcde ,_geaf :=DecodeStream (_daca );
+if _geaf !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052OR\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065\u0020t\u006f \u0064e\u0063o\u0064\u0065\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u003a\u0020\u0025\u0076",_geaf );return nil ,_geaf ;};_dcff :=int (_cfgd [0]);
+_cddaa :=int (_cfgd [0]+_cfgd [1]);_eeag :=int (_cfgd [0]+_cfgd [1]+_cfgd [2]);_faae :=int (_cfgd [0]+_cfgd [1]+_cfgd [2]);if _dcff < 0||_cddaa < 0||_eeag < 0{_cbg .Log .Debug ("\u0045\u0072\u0072\u006fr\u0020\u0073\u0020\u0076\u0061\u006c\u0075\u0065\u0020\u003c \u0030 \u0028\u0025\u0064\u002c\u0025\u0064\u002c%\u0064\u0029",_dcff ,_cddaa ,_eeag );
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};if _faae ==0{_cbg .Log .Debug ("\u004e\u006f\u0020\u0078\u0072\u0065\u0066\u0020\u006f\u0062\u006a\u0065\u0063t\u0073\u0020\u0069\u006e\u0020\u0073t\u0072\u0065\u0061\u006d\u0020\u0028\u0064\u0065\u006c\u0074\u0061\u0062\u0020=\u003d\u0020\u0030\u0029");
+return _gegbd ,nil ;};_ecgff :=len (_dcde )/_faae ;_bccgg :=0;_aaed :=_daca .Get ("\u0049\u006e\u0064e\u0078");var _cffe []int ;if _aaed !=nil {_cbg .Log .Trace ("\u0049n\u0064\u0065\u0078\u003a\u0020\u0025b",_aaed );_cabc ,_aefd :=_aaed .(*PdfObjectArray );
+if !_aefd {_cbg .Log .Debug ("\u0049\u006e\u0076\u0061\u006ci\u0064\u0020\u0049\u006e\u0064\u0065\u0078\u0020\u006f\u0062\u006a\u0065\u0063t\u0020\u0028\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062\u0065\u0020\u0061\u006e\u0020\u0061\u0072\u0072\u0061\u0079\u0029");
+return nil ,_a .New ("i\u006ev\u0061\u006c\u0069\u0064\u0020\u0049\u006e\u0064e\u0078\u0020\u006f\u0062je\u0063\u0074");};if _cabc .Len ()%2!=0{_cbg .Log .Debug ("\u0057\u0041\u0052\u004eI\u004e\u0047\u0020\u0046\u0061\u0069\u006c\u0075\u0072e\u0020\u006c\u006f\u0061\u0064\u0069\u006e\u0067\u0020\u0078\u0072\u0065\u0066\u0020\u0073\u0074\u006d\u0020i\u006e\u0064\u0065\u0078\u0020n\u006f\u0074\u0020\u006d\u0075\u006c\u0074\u0069\u0070\u006c\u0065\u0020\u006f\u0066\u0020\u0032\u002e");
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};_bccgg =0;_dffc ,_aabfc :=_cabc .ToIntegerArray ();if _aabfc !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072 \u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u006e\u0064\u0065\u0078 \u0061\u0072\u0072\u0061\u0079\u0020\u0061\u0073\u0020\u0069\u006e\u0074\u0065\u0067\u0065\u0072\u0073\u003a\u0020\u0025\u0076",_aabfc );
+return nil ,_aabfc ;};for _afgf :=0;_afgf < len (_dffc );_afgf +=2{_eedee :=_dffc [_afgf ];_caccf :=_dffc [_afgf +1];for _gfcf :=0;_gfcf < _caccf ;_gfcf ++{_cffe =append (_cffe ,_eedee +_gfcf );};_bccgg +=_caccf ;};}else {for _cfead :=0;_cfead < int (*_cegc );
+_cfead ++{_cffe =append (_cffe ,_cfead );};_bccgg =int (*_cegc );};if _ecgff ==_bccgg +1{_cbg .Log .Debug ("\u0049n\u0063\u006f\u006d\u0070ati\u0062\u0069\u006c\u0069t\u0079\u003a\u0020\u0049\u006e\u0064\u0065\u0078\u0020\u006di\u0073\u0073\u0069\u006e\u0067\u0020\u0063\u006f\u0076\u0065\u0072\u0061\u0067\u0065\u0020\u006f\u0066\u0020\u0031\u0020\u006f\u0062\u006ae\u0063\u0074\u0020\u002d\u0020\u0061\u0070\u0070en\u0064\u0069\u006eg\u0020\u006f\u006e\u0065\u0020-\u0020M\u0061\u0079\u0020\u006c\u0065\u0061\u0064\u0020\u0074o\u0020\u0070\u0072\u006f\u0062\u006c\u0065\u006d\u0073");
+_fffda :=_bccgg -1;for _ ,_gacd :=range _cffe {if _gacd > _fffda {_fffda =_gacd ;};};_cffe =append (_cffe ,_fffda +1);_bccgg ++;};if _ecgff !=len (_cffe ){_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020x\u0072\u0065\u0066 \u0073\u0074\u006d:\u0020\u006eu\u006d\u0020\u0065\u006e\u0074\u0072i\u0065s \u0021\u003d\u0020\u006c\u0065\u006e\u0028\u0069\u006e\u0064\u0069\u0063\u0065\u0073\u0029\u0020\u0028\u0025\u0064\u0020\u0021\u003d\u0020\u0025\u0064\u0029",_ecgff ,len (_cffe ));
+return nil ,_a .New ("\u0078\u0072ef\u0020\u0073\u0074m\u0020\u006e\u0075\u006d en\u0074ri\u0065\u0073\u0020\u0021\u003d\u0020\u006cen\u0028\u0069\u006e\u0064\u0069\u0063\u0065s\u0029");};_cbg .Log .Trace ("\u004f\u0062j\u0065\u0063\u0074s\u0020\u0063\u006f\u0075\u006e\u0074\u0020\u0025\u0064",_bccgg );
+_cbg .Log .Trace ("\u0049\u006e\u0064i\u0063\u0065\u0073\u003a\u0020\u0025\u0020\u0064",_cffe );_gbfab :=func (_acbcc []byte )int64 {var _gdca int64 ;for _afef :=0;_afef < len (_acbcc );_afef ++{_gdca +=int64 (_acbcc [_afef ])*(1<<uint (8*(len (_acbcc )-_afef -1)));
+};return _gdca ;};_cbg .Log .Trace ("\u0044e\u0063\u006f\u0064\u0065d\u0020\u0073\u0074\u0072\u0065a\u006d \u006ce\u006e\u0067\u0074\u0068\u003a\u0020\u0025d",len (_dcde ));_gaafc :=0;for _egead :=0;_egead < len (_dcde );_egead +=_faae {_feaf :=_fdgf (len (_dcde ),_egead ,_egead +_dcff );
+if _feaf !=nil {_cbg .Log .Debug ("\u0049\u006e\u0076al\u0069\u0064\u0020\u0073\u006c\u0069\u0063\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020\u0025\u0076",_feaf );return nil ,_feaf ;};_feab :=_dcde [_egead :_egead +_dcff ];_feaf =_fdgf (len (_dcde ),_egead +_dcff ,_egead +_cddaa );
+if _feaf !=nil {_cbg .Log .Debug ("\u0049\u006e\u0076al\u0069\u0064\u0020\u0073\u006c\u0069\u0063\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020\u0025\u0076",_feaf );return nil ,_feaf ;};_cgaf :=_dcde [_egead +_dcff :_egead +_cddaa ];_feaf =_fdgf (len (_dcde ),_egead +_cddaa ,_egead +_eeag );
+if _feaf !=nil {_cbg .Log .Debug ("\u0049\u006e\u0076al\u0069\u0064\u0020\u0073\u006c\u0069\u0063\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020\u0025\u0076",_feaf );return nil ,_feaf ;};_ggae :=_dcde [_egead +_cddaa :_egead +_eeag ];_ceea :=_gbfab (_feab );
+_bffd :=_gbfab (_cgaf );_fbdga :=_gbfab (_ggae );if _cfgd [0]==0{_ceea =1;};if _gaafc >=len (_cffe ){_cbg .Log .Debug ("X\u0052\u0065\u0066\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u002d\u0020\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0061\u0063\u0063e\u0073s\u0020\u0069\u006e\u0064e\u0078\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0062\u006f\u0075\u006e\u0064\u0073\u0020\u002d\u0020\u0062\u0072\u0065\u0061\u006b\u0069\u006e\u0067");
+break ;};_bdcfc :=_cffe [_gaafc ];_gaafc ++;_cbg .Log .Trace ("%\u0064\u002e\u0020\u0070\u0031\u003a\u0020\u0025\u0020\u0078",_bdcfc ,_feab );_cbg .Log .Trace ("%\u0064\u002e\u0020\u0070\u0032\u003a\u0020\u0025\u0020\u0078",_bdcfc ,_cgaf );_cbg .Log .Trace ("%\u0064\u002e\u0020\u0070\u0033\u003a\u0020\u0025\u0020\u0078",_bdcfc ,_ggae );
+_cbg .Log .Trace ("\u0025d\u002e \u0078\u0072\u0065\u0066\u003a \u0025\u0064 \u0025\u0064\u0020\u0025\u0064",_bdcfc ,_ceea ,_bffd ,_fbdga );switch _ceea {case 0:_cbg .Log .Trace ("-\u0020\u0046\u0072\u0065\u0065\u0020o\u0062\u006a\u0065\u0063\u0074\u0020-\u0020\u0063\u0061\u006e\u0020\u0070\u0072o\u0062\u0061\u0062\u006c\u0079\u0020\u0069\u0067\u006e\u006fr\u0065");
+case 1:_cbg .Log .Trace ("\u002d\u0020I\u006e\u0020\u0075\u0073e\u0020\u002d \u0075\u006e\u0063\u006f\u006d\u0070\u0072\u0065s\u0073\u0065\u0064\u0020\u0076\u0069\u0061\u0020\u006f\u0066\u0066\u0073e\u0074\u0020\u0025\u0062",_cgaf );if _bffd ==_cedg {_cbg .Log .Debug ("\u0055\u0070d\u0061\u0074\u0069\u006e\u0067\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020\u0066\u006f\u0072\u0020\u0058\u0052\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u0020\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0064",_bdcfc ,_daca .ObjectNumber );
+_bdcfc =int (_daca .ObjectNumber );};if _bafb ,_cgaae :=_fgcf ._becb .ObjectMap [_bdcfc ];!_cgaae ||int (_fbdga )> _bafb .Generation {_cfefc :=XrefObject {ObjectNumber :_bdcfc ,XType :XrefTypeTableEntry ,Offset :_bffd ,Generation :int (_fbdga )};_fgcf ._becb .ObjectMap [_bdcfc ]=_cfefc ;
+};case 2:_cbg .Log .Trace ("\u002d\u0020\u0049\u006e \u0075\u0073\u0065\u0020\u002d\u0020\u0063\u006f\u006d\u0070r\u0065s\u0073\u0065\u0064\u0020\u006f\u0062\u006ae\u0063\u0074");if _ ,_daaa :=_fgcf ._becb .ObjectMap [_bdcfc ];!_daaa {_baff :=XrefObject {ObjectNumber :_bdcfc ,XType :XrefTypeObjectStream ,OsObjNumber :int (_bffd ),OsObjIndex :int (_fbdga )};
+_fgcf ._becb .ObjectMap [_bdcfc ]=_baff ;_cbg .Log .Trace ("\u0065\u006e\u0074\u0072\u0079\u003a\u0020\u0025\u002b\u0076",_baff );};default:_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052:\u0020\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u0049\u004e\u0056\u0041L\u0049\u0044\u0020\u0054\u0059\u0050\u0045\u0020\u0058\u0072\u0065\u0066\u0053\u0074\u006d\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u003f\u002d\u002d\u002d\u002d\u002d\u002d-");
+continue ;};};if _fgcf ._afffc ==nil {_dcbd :=XrefTypeObjectStream ;_fgcf ._afffc =&_dcbd ;};return _gegbd ,nil ;};func (_gaab *PdfCrypt )isEncrypted (_fdc PdfObject )bool {_ ,_cac :=_gaab ._dfa [_fdc ];if _cac {_cbg .Log .Trace ("\u0041\u006c\u0072\u0065\u0061\u0064\u0079\u0020\u0065\u006e\u0063\u0072y\u0070\u0074\u0065\u0064");
+return true ;};_cbg .Log .Trace ("\u004e\u006f\u0074\u0020\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0065d\u0020\u0079\u0065\u0074");return false ;};
+
+// String returns a string representation of `name`.
+func (_ebfbg *PdfObjectName )String ()string {return string (*_ebfbg )};
+
+// DecodeStream decodes a multi-encoded stream by passing it through the
+// DecodeStream method of the underlying encoders.
+func (_agba *MultiEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _agba .DecodeBytes (streamObj .Stream );};var _gaeg =_ee .MustCompile ("\u005e\\\u0073\u002a\u005b\u002d]\u002a\u0028\u005c\u0064\u002b)\u005cs\u002b(\u005c\u0064\u002b\u0029\u005c\u0073\u002bR");
+
+
+// Decrypt attempts to decrypt the PDF file with a specified password. Also tries to
+// decrypt with an empty password. Returns true if successful, false otherwise.
+// An error is returned when there is a problem with decrypting.
+func (_dgce *PdfParser )Decrypt (password []byte )(bool ,error ){if _dgce ._feefe ==nil {return false ,_a .New ("\u0063\u0068\u0065\u0063k \u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u0072s\u0074");};_eaec ,_faagc :=_dgce ._feefe .authenticate (password );
+if _faagc !=nil {return false ,_faagc ;};if !_eaec {_eaec ,_faagc =_dgce ._feefe .authenticate ([]byte (""));};return _eaec ,_faagc ;};func (_cgfa *PdfParser )readTextLine ()(string ,error ){var _ebbg _d .Buffer ;for {_ebdc ,_gecd :=_cgfa ._eebc .Peek (1);
+if _gecd !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_gecd .Error ());return _ebbg .String (),_gecd ;};if (_ebdc [0]!='\r')&&(_ebdc [0]!='\n'){_agad ,_ :=_cgfa ._eebc .ReadByte ();_ebbg .WriteByte (_agad );}else {break ;
+};};return _ebbg .String (),nil ;};func (_daae *PdfParser )parseHexString ()(*PdfObjectString ,error ){_daae ._eebc .ReadByte ();var _ecce _d .Buffer ;for {_gbga ,_ebcdf :=_daae ._eebc .Peek (1);if _ebcdf !=nil {return MakeString (""),_ebcdf ;};if _gbga [0]=='>'{_daae ._eebc .ReadByte ();
+break ;};_adbc ,_ :=_daae ._eebc .ReadByte ();if _daae ._cbce {if _d .IndexByte (_bcefd ,_adbc )==-1{_daae ._eabdd ._ecb =true ;};};if !IsWhiteSpace (_adbc ){_ecce .WriteByte (_adbc );};};if _ecce .Len ()%2==1{_daae ._eabdd ._bdcc =true ;_ecce .WriteRune ('0');
+};_fbec ,_ :=_c .DecodeString (_ecce .String ());return MakeHexString (string (_fbec )),nil ;};func _fdefa (_bdaf uint ,_gaae ,_feac float64 )float64 {_ggadd :=_ed .RoundFloat ((float64 (_bdaf )/255.0),6);_afga :=_ed .RoundFloat ((_feac -_gaae )*_ggadd ,6);
+return _ed .RoundFloat ((_gaae +_afga )*255.0,6);};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_gcfc *LZWEncoder )UpdateParams (params *PdfObjectDictionary ){_ebd ,_adeb :=GetNumberAsInt64 (params .Get ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr"));if _adeb ==nil {_gcfc .Predictor =int (_ebd );};_bda ,_adeb :=GetNumberAsInt64 (params .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074"));
+if _adeb ==nil {_gcfc .BitsPerComponent =int (_bda );};_agcf ,_adeb :=GetNumberAsInt64 (params .Get ("\u0057\u0069\u0064t\u0068"));if _adeb ==nil {_gcfc .Columns =int (_agcf );};_dbd ,_adeb :=GetNumberAsInt64 (params .Get ("\u0043o\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073"));
+if _adeb ==nil {_gcfc .Colors =int (_dbd );};_efbfa ,_adeb :=GetNumberAsInt64 (params .Get ("E\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065"));if _adeb ==nil {_gcfc .EarlyChange =int (_efbfa );};};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_abeg *JBIG2Encoder )MakeStreamDict ()*PdfObjectDictionary {_cceb :=MakeDict ();_cceb .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_abeg .GetFilterName ()));return _cceb ;};
+
+// MakeHexString creates an PdfObjectString from a string intended for output as a hexadecimal string.
+func MakeHexString (s string )*PdfObjectString {_cegcc :=PdfObjectString {_efga :s ,_fcgeb :true };return &_cegcc ;};
+
+// ReadAtLeast reads at least n bytes into slice p.
+// Returns the number of bytes read (should always be == n), and an error on failure.
+func (_fgggf *PdfParser )ReadAtLeast (p []byte ,n int )(int ,error ){_affa :=n ;_acebg :=0;_cdde :=0;for _affa > 0{_eabbcc ,_gfaa :=_fgggf ._eebc .Read (p [_acebg :]);if _gfaa !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u0020\u0046\u0061i\u006c\u0065\u0064\u0020\u0072\u0065\u0061d\u0069\u006e\u0067\u0020\u0028\u0025\u0064\u003b\u0025\u0064\u0029\u0020\u0025\u0073",_eabbcc ,_cdde ,_gfaa .Error ());
+return _acebg ,_a .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0072\u0065a\u0064\u0069\u006e\u0067");};_cdde ++;_acebg +=_eabbcc ;_affa -=_eabbcc ;};return _acebg ,nil ;};type objectCache map[int ]PdfObject ;
+
+// NewRawEncoder returns a new instace of RawEncoder.
+func NewRawEncoder ()*RawEncoder {return &RawEncoder {}};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_gfff *FlateEncoder )MakeDecodeParams ()PdfObject {if _gfff .Predictor > 1{_bafa :=MakeDict ();_bafa .Set ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr",MakeInteger (int64 (_gfff .Predictor )));if _gfff .BitsPerComponent !=8{_bafa .Set ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074",MakeInteger (int64 (_gfff .BitsPerComponent )));
+};if _gfff .Columns !=1{_bafa .Set ("\u0043o\u006c\u0075\u006d\u006e\u0073",MakeInteger (int64 (_gfff .Columns )));};if _gfff .Colors !=1{_bafa .Set ("\u0043\u006f\u006c\u006f\u0072\u0073",MakeInteger (int64 (_gfff .Colors )));};return _bafa ;};return nil ;
+};var _cebaa =_ee .MustCompile ("\u0028\u005c\u0064\u002b\u0029\u005c\u0073\u002b\u0028\u005c\u0064\u002b)\u005c\u0073\u002a\u0024");func (_ffda *PdfParser )parseLinearizedDictionary ()(*PdfObjectDictionary ,error ){_ddcad ,_adfb :=_ffda ._eebc .Seek (0,_de .SeekEnd );
+if _adfb !=nil {return nil ,_adfb ;};var _fcef int64 ;var _ceab int64 =2048;for _fcef < _ddcad -4{if _ddcad <=(_ceab +_fcef ){_ceab =_ddcad -_fcef ;};_ ,_eggf :=_ffda ._eebc .Seek (_fcef ,_de .SeekStart );if _eggf !=nil {return nil ,_eggf ;};_dfff :=make ([]byte ,_ceab );
+_ ,_eggf =_ffda ._eebc .Read (_dfff );if _eggf !=nil {return nil ,_eggf ;};_cbg .Log .Trace ("\u004c\u006f\u006f\u006b\u0069\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0066i\u0072\u0073\u0074\u0020\u0069\u006ed\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u003a \u0022\u0025\u0073\u0022",string (_dfff ));
+_dccc :=_ddfff .FindAllStringIndex (string (_dfff ),-1);if _dccc !=nil {_gfgdg :=_dccc [0];_cbg .Log .Trace ("\u0049\u006e\u0064\u003a\u0020\u0025\u0020\u0064",_dccc );_ ,_eegea :=_ffda ._eebc .Seek (int64 (_gfgdg [0]),_de .SeekStart );if _eegea !=nil {return nil ,_eegea ;
+};_ffda ._eebc ._fba =_eb .NewReader (_ffda ._eebc ._aag );_gdge ,_eegea :=_ffda .ParseIndirectObject ();if _eegea !=nil {return nil ,nil ;};if _gcbed ,_aagc :=GetIndirect (_gdge );_aagc {if _dfed ,_eaea :=GetDict (_gcbed .PdfObject );_eaea {if _dbdc :=_dfed .Get ("\u004c\u0069\u006e\u0065\u0061\u0072\u0069\u007a\u0065\u0064");
+_dbdc !=nil {return _dfed ,nil ;};return nil ,nil ;};};return nil ,nil ;};_fcef +=_ceab -4;};return nil ,_a .New ("\u0074\u0068\u0065\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u006fb\u006a\u0065\u0063\u0074\u0020\u006e\u006f\u0074\u0020\u0066o\u0075\u006e\u0064");
+};
+
+// EncodeBytes encodes the passed in slice of bytes by passing it through the
+// EncodeBytes method of the underlying encoders.
+func (_bgefc *MultiEncoder )EncodeBytes (data []byte )([]byte ,error ){_bgf :=data ;var _gccf error ;for _aabf :=len (_bgefc ._acg )-1;_aabf >=0;_aabf --{_affd :=_bgefc ._acg [_aabf ];_bgf ,_gccf =_affd .EncodeBytes (_bgf );if _gccf !=nil {return nil ,_gccf ;
+};};return _bgf ,nil ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_bgdaa *RawEncoder )MakeDecodeParams ()PdfObject {return nil };
+
+// PdfCryptNewDecrypt makes the document crypt handler based on the encryption dictionary
+// and trailer dictionary. Returns an error on failure to process.
+func PdfCryptNewDecrypt (parser *PdfParser ,ed ,trailer *PdfObjectDictionary )(*PdfCrypt ,error ){_eedg :=&PdfCrypt {_eddc :false ,_acfa :make (map[PdfObject ]bool ),_dfa :make (map[PdfObject ]bool ),_cdd :make (map[int ]struct{}),_gfc :parser };_dagg ,_afd :=ed .Get ("\u0046\u0069\u006c\u0074\u0065\u0072").(*PdfObjectName );
+if !_afd {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0043\u0072\u0079\u0070\u0074 \u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061r\u0079 \u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0064\u0020\u0046i\u006c\u0074\u0065\u0072\u0020\u0066\u0069\u0065\u006c\u0064\u0021");
+return _eedg ,_a .New ("r\u0065\u0071\u0075\u0069\u0072\u0065d\u0020\u0063\u0072\u0079\u0070\u0074 \u0066\u0069\u0065\u006c\u0064\u0020\u0046i\u006c\u0074\u0065\u0072\u0020\u006d\u0069\u0073\u0073\u0069n\u0067");};if *_dagg !="\u0053\u0074\u0061\u006e\u0064\u0061\u0072\u0064"{_cbg .Log .Debug ("\u0045\u0052R\u004f\u0052\u0020\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020(%\u0073\u0029",*_dagg );
+return _eedg ,_a .New ("\u0075n\u0073u\u0070\u0070\u006f\u0072\u0074e\u0064\u0020F\u0069\u006c\u0074\u0065\u0072");};_eedg ._fbf .Filter =string (*_dagg );if _addg ,_aca :=ed .Get ("\u0053u\u0062\u0046\u0069\u006c\u0074\u0065r").(*PdfObjectString );_aca {_eedg ._fbf .SubFilter =_addg .Str ();
+_cbg .Log .Debug ("\u0055s\u0069n\u0067\u0020\u0073\u0075\u0062f\u0069\u006ct\u0065\u0072\u0020\u0025\u0073",_addg );};if L ,_cfc :=ed .Get ("\u004c\u0065\u006e\u0067\u0074\u0068").(*PdfObjectInteger );_cfc {if (*L %8)!=0{_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u0020\u0049\u006ev\u0061\u006c\u0069\u0064\u0020\u0065\u006ec\u0072\u0079\u0070\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u006e\u0067\u0074\u0068");
+return _eedg ,_a .New ("\u0069n\u0076\u0061\u006c\u0069d\u0020\u0065\u006e\u0063\u0072y\u0070t\u0069o\u006e\u0020\u006c\u0065\u006e\u0067\u0074h");};_eedg ._fbf .Length =int (*L );}else {_eedg ._fbf .Length =40;};_eedg ._fbf .V =0;if _ecaa ,_cdg :=ed .Get ("\u0056").(*PdfObjectInteger );
+_cdg {V :=int (*_ecaa );_eedg ._fbf .V =V ;if V >=1&&V <=2{_eedg ._gde =_gbe (_eedg ._fbf .Length );}else if V >=4&&V <=5{if _gca :=_eedg .loadCryptFilters (ed );_gca !=nil {return _eedg ,_gca ;};}else {_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u0020\u0055\u006e\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0065n\u0063\u0072\u0079\u0070\u0074\u0069\u006f\u006e\u0020\u0061lg\u006f\u0020\u0056 \u003d \u0025\u0064",V );
+return _eedg ,_a .New ("u\u006e\u0073\u0075\u0070po\u0072t\u0065\u0064\u0020\u0061\u006cg\u006f\u0072\u0069\u0074\u0068\u006d");};};if _eegc :=_egb (&_eedg ._cbbgb ,ed );_eegc !=nil {return _eedg ,_eegc ;};_fdgb :="";if _dbgd ,_cfe :=trailer .Get ("\u0049\u0044").(*PdfObjectArray );
+_cfe &&_dbgd .Len ()>=1{_bad ,_fdbe :=GetString (_dbgd .Get (0));if !_fdbe {return _eedg ,_a .New ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0074r\u0061\u0069l\u0065\u0072\u0020\u0049\u0044");};_fdgb =_bad .Str ();}else {_cbg .Log .Debug ("\u0054\u0072ai\u006c\u0065\u0072 \u0049\u0044\u0020\u0061rra\u0079 m\u0069\u0073\u0073\u0069\u006e\u0067\u0020or\u0020\u0069\u006e\u0076\u0061\u006c\u0069d\u0021");
+};_eedg ._eaad =_fdgb ;return _eedg ,nil ;};
+
+// DecodeStream decodes the stream data and returns the decoded data.
+// An error is returned upon failure.
+func DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){_cbg .Log .Trace ("\u0044\u0065\u0063\u006f\u0064\u0065\u0020\u0073\u0074\u0072\u0065\u0061\u006d");_bfgc ,_acace :=NewEncoderFromStream (streamObj );if _acace !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0065\u0063\u006f\u0064\u0069n\u0067\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_acace );
+return nil ,_acace ;};_cbg .Log .Trace ("\u0045\u006e\u0063\u006f\u0064\u0065\u0072\u003a\u0020\u0025\u0023\u0076\u000a",_bfgc );_ddbaf ,_acace :=_bfgc .DecodeStream (streamObj );if _acace !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a \u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0065\u0063\u006f\u0064\u0069n\u0067\u0020\u0066\u0061\u0069\u006c\u0065d\u003a\u0020\u0025\u0076",_acace );
+return nil ,_acace ;};return _ddbaf ,nil ;};
+
+// IsFloatDigit checks if a character can be a part of a float number string.
+func IsFloatDigit (c byte )bool {return ('0'<=c &&c <='9')||c =='.'};func (_cece *PdfParser )readComment ()(string ,error ){var _fbaa _d .Buffer ;_ ,_gedd :=_cece .skipSpaces ();if _gedd !=nil {return _fbaa .String (),_gedd ;};_ccgc :=true ;for {_eeeb ,_ccff :=_cece ._eebc .Peek (1);
+if _ccff !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_ccff .Error ());return _fbaa .String (),_ccff ;};if _ccgc &&_eeeb [0]!='%'{return _fbaa .String (),_a .New ("c\u006f\u006d\u006d\u0065\u006e\u0074 \u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0073\u0074a\u0072\u0074\u0020w\u0069t\u0068\u0020\u0025");
+};_ccgc =false ;if (_eeeb [0]!='\r')&&(_eeeb [0]!='\n'){_acga ,_ :=_cece ._eebc .ReadByte ();_fbaa .WriteByte (_acga );}else {break ;};};return _fbaa .String (),nil ;};func (_ebgf *PdfParser )parseXref ()(*PdfObjectDictionary ,error ){_ebgf .skipSpaces ();
+const _aacbc =20;_aaff ,_ :=_ebgf ._eebc .Peek (_aacbc );for _dgbege :=0;_dgbege < 2;_dgbege ++{if _ebgf ._cecac ==0{_ebgf ._cecac =_ebgf .GetFileOffset ();};if _ddfff .Match (_aaff ){_cbg .Log .Trace ("\u0078\u0072e\u0066\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u0074\u006f\u0020\u0061\u006e\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u002e\u0020\u0050\u0072\u006f\u0062\u0061\u0062\u006c\u0079\u0020\u0078\u0072\u0065\u0066\u0020\u006f\u0062\u006a\u0065\u0063\u0074");
+_cbg .Log .Debug ("\u0073t\u0061r\u0074\u0069\u006e\u0067\u0020w\u0069\u0074h\u0020\u0022\u0025\u0073\u0022",string (_aaff ));return _ebgf .parseXrefStream (nil );};if _gead .Match (_aaff ){_cbg .Log .Trace ("\u0053\u0074\u0061\u006ed\u0061\u0072\u0064\u0020\u0078\u0072\u0065\u0066\u0020\u0073e\u0063t\u0069\u006f\u006e\u0020\u0074\u0061\u0062l\u0065\u0021");
+return _ebgf .parseXrefTable ();};_cgee :=_ebgf .GetFileOffset ();if _ebgf ._cecac ==0{_ebgf ._cecac =_cgee ;};_ebgf .SetFileOffset (_cgee -_aacbc );defer _ebgf .SetFileOffset (_cgee );_dcbb ,_ :=_ebgf ._eebc .Peek (_aacbc );_aaff =append (_dcbb ,_aaff ...);
+};_cbg .Log .Debug ("\u0057\u0061\u0072\u006e\u0069\u006e\u0067\u003a\u0020\u0055\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u0078\u0072\u0065f\u0020\u0074\u0061\u0062\u006c\u0065\u0020\u006fr\u0020\u0073\u0074\u0072\u0065\u0061\u006d.\u0020\u0052\u0065\u0070\u0061i\u0072\u0020\u0061\u0074\u0074e\u006d\u0070\u0074\u0065\u0064\u003a\u0020\u004c\u006f\u006f\u006b\u0069\u006e\u0067\u0020\u0066\u006f\u0072\u0020\u0065\u0061\u0072\u006c\u0069\u0065\u0073\u0074\u0020x\u0072\u0065\u0066\u0020\u0066\u0072\u006f\u006d\u0020\u0062\u006f\u0074to\u006d\u002e");
+if _ccdc :=_ebgf .repairSeekXrefMarker ();_ccdc !=nil {_cbg .Log .Debug ("\u0052e\u0070a\u0069\u0072\u0020\u0066\u0061i\u006c\u0065d\u0020\u002d\u0020\u0025\u0076",_ccdc );return nil ,_ccdc ;};return _ebgf .parseXrefTable ();};
+
+// FlateEncoder represents Flate encoding.
+type FlateEncoder struct{Predictor int ;BitsPerComponent int ;
+
+// For predictors
+Columns int ;Rows int ;Colors int ;_dfgc *_bce .ImageBase ;};
+
+// MakeObjectStreams creates an PdfObjectStreams from a list of PdfObjects.
+func MakeObjectStreams (objects ...PdfObject )*PdfObjectStreams {return &PdfObjectStreams {_face :objects };};
+
+// IsAuthenticated returns true if the PDF has already been authenticated for accessing.
+func (_bcba *PdfParser )IsAuthenticated ()bool {return _bcba ._feefe ._eddc };
+
+// IsNullObject returns true if `obj` is a PdfObjectNull.
+func IsNullObject (obj PdfObject )bool {_ ,_fgdc :=TraceToDirectObject (obj ).(*PdfObjectNull );return _fgdc ;};
+
+// ParseIndirectObject parses an indirect object from the input stream. Can also be an object stream.
+// Returns the indirect object (*PdfIndirectObject) or the stream object (*PdfObjectStream).
+func (_bgcge *PdfParser )ParseIndirectObject ()(PdfObject ,error ){_dgega :=PdfIndirectObject {};_dgega ._afgde =_bgcge ;_cbg .Log .Trace ("\u002dR\u0065a\u0064\u0020\u0069\u006e\u0064i\u0072\u0065c\u0074\u0020\u006f\u0062\u006a");_cfff ,_cfcd :=_bgcge ._eebc .Peek (20);
+if _cfcd !=nil {if _cfcd !=_de .EOF {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0046\u0061\u0069\u006c\u0020\u0074\u006f\u0020r\u0065a\u0064\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a");return &_dgega ,_cfcd ;
+};};_cbg .Log .Trace ("\u0028\u0069\u006edi\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0020\u0070\u0065\u0065\u006b\u0020\u0022\u0025\u0073\u0022",string (_cfff ));_fbggf :=_ddfff .FindStringSubmatchIndex (string (_cfff ));if len (_fbggf )< 6{if _cfcd ==_de .EOF {return nil ,_cfcd ;
+};_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0061\u0062l\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065\u0020\u0028\u0025\u0073\u0029",string (_cfff ));
+return &_dgega ,_a .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
+};_bgcge ._eebc .Discard (_fbggf [0]);_cbg .Log .Trace ("O\u0066\u0066\u0073\u0065\u0074\u0073\u0020\u0025\u0020\u0064",_fbggf );_bfacf :=_fbggf [1]-_fbggf [0];_fccbb :=make ([]byte ,_bfacf );_ ,_cfcd =_bgcge .ReadAtLeast (_fccbb ,_bfacf );if _cfcd !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0075\u006e\u0061\u0062l\u0065\u0020\u0074\u006f\u0020\u0072\u0065\u0061\u0064\u0020-\u0020\u0025\u0073",_cfcd );
+return nil ,_cfcd ;};_cbg .Log .Trace ("\u0074\u0065\u0078t\u006c\u0069\u006e\u0065\u003a\u0020\u0025\u0073",_fccbb );_afcfb :=_ddfff .FindStringSubmatch (string (_fccbb ));if len (_afcfb )< 3{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020U\u006e\u0061\u0062l\u0065\u0020\u0074\u006f \u0066\u0069\u006e\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065\u0020\u0028\u0025\u0073\u0029",string (_fccbb ));
+return &_dgega ,_a .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
+};_fadf ,_ :=_b .Atoi (_afcfb [1]);_agfab ,_ :=_b .Atoi (_afcfb [2]);_dgega .ObjectNumber =int64 (_fadf );_dgega .GenerationNumber =int64 (_agfab );for {_effb ,_abcae :=_bgcge ._eebc .Peek (2);if _abcae !=nil {return &_dgega ,_abcae ;};_cbg .Log .Trace ("I\u006ed\u002e\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_effb ),string (_effb ));
+if IsWhiteSpace (_effb [0]){_bgcge .skipSpaces ();}else if _effb [0]=='%'{_bgcge .skipComments ();}else if (_effb [0]=='<')&&(_effb [1]=='<'){_cbg .Log .Trace ("\u0043\u0061\u006c\u006c\u0020\u0050\u0061\u0072\u0073e\u0044\u0069\u0063\u0074");_dgega .PdfObject ,_abcae =_bgcge .ParseDict ();
+_cbg .Log .Trace ("\u0045\u004f\u0046\u0020Ca\u006c\u006c\u0020\u0050\u0061\u0072\u0073\u0065\u0044\u0069\u0063\u0074\u003a\u0020%\u0076",_abcae );if _abcae !=nil {return &_dgega ,_abcae ;};_cbg .Log .Trace ("\u0050\u0061\u0072\u0073\u0065\u0064\u0020\u0064\u0069\u0063t\u0069\u006f\u006e\u0061\u0072\u0079\u002e.\u002e\u0020\u0066\u0069\u006e\u0069\u0073\u0068\u0065\u0064\u002e");
+}else if (_effb [0]=='/')||(_effb [0]=='(')||(_effb [0]=='[')||(_effb [0]=='<'){_dgega .PdfObject ,_abcae =_bgcge .parseObject ();if _abcae !=nil {return &_dgega ,_abcae ;};_cbg .Log .Trace ("P\u0061\u0072\u0073\u0065\u0064\u0020o\u0062\u006a\u0065\u0063\u0074\u0020\u002e\u002e\u002e \u0066\u0069\u006ei\u0073h\u0065\u0064\u002e");
+}else if _effb [0]==']'{_cbg .Log .Debug ("\u0057\u0041\u0052\u004e\u0049N\u0047\u003a\u0020\u0027\u005d\u0027 \u0063\u0068\u0061\u0072\u0061\u0063\u0074e\u0072\u0020\u006eo\u0074\u0020\u0062\u0065i\u006e\u0067\u0020\u0075\u0073\u0065d\u0020\u0061\u0073\u0020\u0061\u006e\u0020\u0061\u0072\u0072\u0061\u0079\u0020\u0065\u006e\u0064\u0069n\u0067\u0020\u006d\u0061\u0072\u006b\u0065\u0072\u002e\u0020\u0053\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u002e");
+_bgcge ._eebc .Discard (1);}else {if _effb [0]=='e'{_cdff ,_gdgc :=_bgcge .readTextLine ();if _gdgc !=nil {return nil ,_gdgc ;};if len (_cdff )>=6&&_cdff [0:6]=="\u0065\u006e\u0064\u006f\u0062\u006a"{break ;};}else if _effb [0]=='s'{_effb ,_ =_bgcge ._eebc .Peek (10);
+if string (_effb [:6])=="\u0073\u0074\u0072\u0065\u0061\u006d"{_aefe :=6;if len (_effb )> 6{if IsWhiteSpace (_effb [_aefe ])&&_effb [_aefe ]!='\r'&&_effb [_aefe ]!='\n'{_cbg .Log .Debug ("\u004e\u006fn\u002d\u0063\u006f\u006e\u0066\u006f\u0072\u006d\u0061\u006e\u0074\u0020\u0050\u0044\u0046\u0020\u006e\u006f\u0074 \u0065\u006e\u0064\u0069\u006e\u0067 \u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006c\u0069\u006e\u0065\u0020\u0070\u0072o\u0070\u0065r\u006c\u0079\u0020\u0077i\u0074\u0068\u0020\u0045\u004fL\u0020\u006d\u0061\u0072\u006b\u0065\u0072");
+_bgcge ._eabdd ._fgd =true ;_aefe ++;};switch _effb [_aefe ]{case '\r':_aefe ++;if _effb [_aefe ]=='\n'{_aefe ++;};case '\n':_aefe ++;default:_bgcge ._eabdd ._fgd =true ;};};_bgcge ._eebc .Discard (_aefe );_bgdg ,_gegg :=_dgega .PdfObject .(*PdfObjectDictionary );
+if !_gegg {return nil ,_a .New ("\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006di\u0073s\u0069\u006e\u0067\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079");};_cbg .Log .Trace ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0069c\u0074\u0020\u0025\u0073",_bgdg );
+_ebfde ,_egfc :=_bgcge .traceStreamLength (_bgdg .Get ("\u004c\u0065\u006e\u0067\u0074\u0068"));if _egfc !=nil {_cbg .Log .Debug ("\u0046\u0061\u0069l\u0020\u0074\u006f\u0020t\u0072\u0061\u0063\u0065\u0020\u0073\u0074r\u0065\u0061\u006d\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0025\u0076",_egfc );
+return nil ,_egfc ;};_cbg .Log .Trace ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u006c\u0065\u006e\u0067\u0074h\u003f\u0020\u0025\u0073",_ebfde );_gaegd ,_babc :=_ebfde .(*PdfObjectInteger );if !_babc {return nil ,_a .New ("\u0073\u0074re\u0061\u006d\u0020l\u0065\u006e\u0067\u0074h n\u0065ed\u0073\u0020\u0074\u006f\u0020\u0062\u0065 a\u006e\u0020\u0069\u006e\u0074\u0065\u0067e\u0072");
+};_afefa :=*_gaegd ;if _afefa < 0{return nil ,_a .New ("\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u006e\u0065\u0065\u0064\u0073\u0020\u0074\u006f \u0062e\u0020\u006c\u006f\u006e\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0030");};_cdad :=_bgcge .GetFileOffset ();
+_ebac :=_bgcge .xrefNextObjectOffset (_cdad );if _cdad +int64 (_afefa )> _ebac &&_ebac > _cdad {_cbg .Log .Debug ("E\u0078\u0070\u0065\u0063te\u0064 \u0065\u006e\u0064\u0069\u006eg\u0020\u0061\u0074\u0020\u0025\u0064",_cdad +int64 (_afefa ));_cbg .Log .Debug ("\u004e\u0065\u0078\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074 \u0073\u0074\u0061\u0072\u0074\u0069\u006e\u0067\u0020\u0061t\u0020\u0025\u0064",_ebac );
+_ddfe :=_ebac -_cdad -17;if _ddfe < 0{return nil ,_a .New ("\u0069n\u0076\u0061l\u0069\u0064\u0020\u0073t\u0072\u0065\u0061m\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u002c\u0020go\u0069\u006e\u0067 \u0070\u0061s\u0074\u0020\u0062\u006f\u0075\u006ed\u0061\u0072i\u0065\u0073");
+};_cbg .Log .Debug ("\u0041\u0074\u0074\u0065\u006d\u0070\u0074\u0069\u006e\u0067\u0020\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u0020c\u006f\u0072\u0072\u0065\u0063\u0074\u0069\u006f\u006e\u0020\u0074\u006f\u0020%\u0064\u002e\u002e\u002e",_ddfe );_afefa =PdfObjectInteger (_ddfe );
+_bgdg .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (_ddfe ));};if int64 (_afefa )> _bgcge ._fbfd {_cbg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u0053t\u0072\u0065\u0061\u006d\u0020l\u0065\u006e\u0067\u0074\u0068\u0020\u0063\u0061\u006e\u006e\u006f\u0074\u0020\u0062\u0065\u0020\u006c\u0061\u0072\u0067\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0066\u0069\u006c\u0065\u0020\u0073\u0069\u007a\u0065");
+return nil ,_a .New ("\u0069n\u0076\u0061l\u0069\u0064\u0020\u0073t\u0072\u0065\u0061m\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u002c\u0020la\u0072\u0067\u0065r\u0020\u0074h\u0061\u006e\u0020\u0066\u0069\u006ce\u0020\u0073i\u007a\u0065");};_bdfeg :=make ([]byte ,_afefa );
+_ ,_egfc =_bgcge .ReadAtLeast (_bdfeg ,int (_afefa ));if _egfc !=nil {_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052 s\u0074r\u0065\u0061\u006d\u0020\u0028%\u0064\u0029\u003a\u0020\u0025\u0058",len (_bdfeg ),_bdfeg );_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_egfc );
+return nil ,_egfc ;};_cgfab :=PdfObjectStream {};_cgfab .Stream =_bdfeg ;_cgfab .PdfObjectDictionary =_dgega .PdfObject .(*PdfObjectDictionary );_cgfab .ObjectNumber =_dgega .ObjectNumber ;_cgfab .GenerationNumber =_dgega .GenerationNumber ;_cgfab .PdfObjectReference ._afgde =_bgcge ;
+_bgcge .skipSpaces ();_bgcge ._eebc .Discard (9);_bgcge .skipSpaces ();return &_cgfab ,nil ;};};_dgega .PdfObject ,_abcae =_bgcge .parseObject ();if _dgega .PdfObject ==nil {_cbg .Log .Debug ("\u0049N\u0043\u004f\u004dP\u0041\u0054\u0049B\u0049LI\u0054\u0059\u003a\u0020\u0049\u006e\u0064i\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u006f\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0069\u006e\u0067\u0020\u0061n \u006fb\u006a\u0065\u0063\u0074\u0020\u002d \u0061\u0073\u0073\u0075\u006di\u006e\u0067\u0020\u006e\u0075\u006c\u006c\u0020\u006f\u0062\u006ae\u0063\u0074");
+_dgega .PdfObject =MakeNull ();};return &_dgega ,_abcae ;};};if _dgega .PdfObject ==nil {_cbg .Log .Debug ("\u0049N\u0043\u004f\u004dP\u0041\u0054\u0049B\u0049LI\u0054\u0059\u003a\u0020\u0049\u006e\u0064i\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006e\u006f\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0069\u006e\u0067\u0020\u0061n \u006fb\u006a\u0065\u0063\u0074\u0020\u002d \u0061\u0073\u0073\u0075\u006di\u006e\u0067\u0020\u006e\u0075\u006c\u006c\u0020\u006f\u0062\u006ae\u0063\u0074");
+_dgega .PdfObject =MakeNull ();};_cbg .Log .Trace ("\u0052\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0021");return &_dgega ,nil ;};
+
+// GetEncryptObj returns the PdfIndirectObject which has information about the PDFs encryption details.
+func (_bgcc *PdfParser )GetEncryptObj ()*PdfIndirectObject {return _bgcc ._fcaf };
+
+// String returns a string describing `d`.
+func (_fcdb *PdfObjectDictionary )String ()string {var _bcbcb _cg .Builder ;_bcbcb .WriteString ("\u0044\u0069\u0063t\u0028");for _ ,_affaa :=range _fcdb ._ggegg {_cfdac :=_fcdb ._cdab [_affaa ];_bcbcb .WriteString ("\u0022"+_affaa .String ()+"\u0022\u003a\u0020");
+_bcbcb .WriteString (_cfdac .String ());_bcbcb .WriteString ("\u002c\u0020");};_bcbcb .WriteString ("\u0029");return _bcbcb .String ();};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_cgbf *RunLengthEncoder )UpdateParams (params *PdfObjectDictionary ){};
+
+// ASCIIHexEncoder implements ASCII hex encoder/decoder.
+type ASCIIHexEncoder struct{};
+
+// NewJPXEncoder returns a new instance of JPXEncoder.
+func NewJPXEncoder ()*JPXEncoder {return &JPXEncoder {}};
+
+// DecodeBytes decodes a slice of JBIG2 encoded bytes and returns the results.
+func (_ebcc *JBIG2Encoder )DecodeBytes (encoded []byte )([]byte ,error ){return _bb .DecodeBytes (encoded ,_gge .Parameters {},_ebcc .Globals );};
+
+// Write outputs the object as it is to be written to file.
+func (_afffe *PdfObjectStreams )Write ()[]byte {return _dae (func (_addc *_d .Buffer ){_addc .WriteString (_b .FormatInt (_afffe .ObjectNumber ,10));_addc .WriteString ("\u0020\u0030\u0020\u0052");});};var _bcefd =[]byte ("\u0030\u0031\u0032\u003345\u0036\u0037\u0038\u0039\u0061\u0062\u0063\u0064\u0065\u0066\u0041\u0042\u0043\u0044E\u0046");
+func (_afbb *PdfParser )parseXrefTable ()(*PdfObjectDictionary ,error ){var _gedc *PdfObjectDictionary ;_gbgc ,_baebe :=_afbb .readTextLine ();if _baebe !=nil {return nil ,_baebe ;};if _afbb ._cbce &&_cg .Count (_cg .TrimPrefix (_gbgc ,"\u0078\u0072\u0065\u0066"),"\u0020")> 0{_afbb ._eabdd ._bdf =true ;
+};_cbg .Log .Trace ("\u0078\u0072\u0065\u0066 f\u0069\u0072\u0073\u0074\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0025\u0073",_gbgc );_fddba :=-1;_afbef :=0;_cbdg :=false ;_edfd :="";for {_afbb .skipSpaces ();_ ,_cgbb :=_afbb ._eebc .Peek (1);if _cgbb !=nil {return nil ,_cgbb ;
+};_gbgc ,_cgbb =_afbb .readTextLine ();if _cgbb !=nil {return nil ,_cgbb ;};_baad :=_cebaa .FindStringSubmatch (_gbgc );if len (_baad )==0{_ceaa :=len (_edfd )> 0;_edfd +=_gbgc +"\u000a";if _ceaa {_baad =_cebaa .FindStringSubmatch (_edfd );};};if len (_baad )==3{if _afbb ._cbce &&!_afbb ._eabdd ._aacg {var (_aada bool ;
+_befdf int ;);for _ ,_dgbeg :=range _gbgc {if _e .IsDigit (_dgbeg ){if _aada {break ;};continue ;};if !_aada {_aada =true ;};_befdf ++;};if _befdf > 1{_afbb ._eabdd ._aacg =true ;};};_fcgdc ,_ :=_b .Atoi (_baad [1]);_gbeg ,_ :=_b .Atoi (_baad [2]);_fddba =_fcgdc ;
+_afbef =_gbeg ;_cbdg =true ;_edfd ="";_cbg .Log .Trace ("\u0078r\u0065\u0066 \u0073\u0075\u0062s\u0065\u0063\u0074\u0069\u006f\u006e\u003a \u0066\u0069\u0072\u0073\u0074\u0020o\u0062\u006a\u0065\u0063\u0074\u003a\u0020\u0025\u0064\u0020\u006fb\u006a\u0065\u0063\u0074\u0073\u003a\u0020\u0025\u0064",_fddba ,_afbef );
+continue ;};_cfce :=_dddf .FindStringSubmatch (_gbgc );if len (_cfce )==4{if !_cbdg {_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u0020\u0058r\u0065\u0066\u0020\u0069\u006e\u0076\u0061\u006c\u0069d\u0020\u0066\u006fr\u006da\u0074\u0021\u000a");return nil ,_a .New ("\u0078\u0072\u0065\u0066 i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0066\u006f\u0072\u006d\u0061\u0074");
+};_egag ,_ :=_b .ParseInt (_cfce [1],10,64);_ffgd ,_ :=_b .Atoi (_cfce [2]);_gcgd :=_cfce [3];_edfd ="";if _cg .ToLower (_gcgd )=="\u006e"&&_egag > 1{_becdg ,_fgfb :=_afbb ._becb .ObjectMap [_fddba ];if !_fgfb ||_ffgd > _becdg .Generation {_gaga :=XrefObject {ObjectNumber :_fddba ,XType :XrefTypeTableEntry ,Offset :_egag ,Generation :_ffgd };
+_afbb ._becb .ObjectMap [_fddba ]=_gaga ;};};_fddba ++;continue ;};if (len (_gbgc )> 6)&&(_gbgc [:7]=="\u0074r\u0061\u0069\u006c\u0065\u0072"){_cbg .Log .Trace ("\u0046o\u0075n\u0064\u0020\u0074\u0072\u0061i\u006c\u0065r\u0020\u002d\u0020\u0025\u0073",_gbgc );
+if len (_gbgc )> 9{_cda :=_afbb .GetFileOffset ();_afbb .SetFileOffset (_cda -int64 (len (_gbgc ))+7);};_afbb .skipSpaces ();_afbb .skipComments ();_cbg .Log .Trace ("R\u0065\u0061\u0064\u0069ng\u0020t\u0072\u0061\u0069\u006c\u0065r\u0020\u0064\u0069\u0063\u0074\u0021");
+_cbg .Log .Trace ("\u0070\u0065\u0065\u006b\u003a\u0020\u0022\u0025\u0073\u0022",_gbgc );_gedc ,_cgbb =_afbb .ParseDict ();_cbg .Log .Trace ("\u0045O\u0046\u0020\u0072\u0065a\u0064\u0069\u006e\u0067\u0020t\u0072a\u0069l\u0065\u0072\u0020\u0064\u0069\u0063\u0074!");
+if _cgbb !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072o\u0072\u0020\u0070\u0061r\u0073\u0069\u006e\u0067\u0020\u0074\u0072a\u0069\u006c\u0065\u0072\u0020\u0064\u0069\u0063\u0074\u0020\u0028\u0025\u0073\u0029",_cgbb );return nil ,_cgbb ;};break ;};if _gbgc =="\u0025\u0025\u0045O\u0046"{_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0065\u006e\u0064 \u006f\u0066\u0020\u0066\u0069\u006c\u0065 -\u0020\u0074\u0072\u0061i\u006c\u0065\u0072\u0020\u006e\u006f\u0074\u0020\u0066ou\u006e\u0064 \u002d\u0020\u0065\u0072\u0072\u006f\u0072\u0021");
+return nil ,_a .New ("\u0065\u006e\u0064 \u006f\u0066\u0020\u0066i\u006c\u0065\u0020\u002d\u0020\u0074\u0072a\u0069\u006c\u0065\u0072\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");};_cbg .Log .Trace ("\u0078\u0072\u0065\u0066\u0020\u006d\u006f\u0072\u0065 \u003a\u0020\u0025\u0073",_gbgc );
+};_cbg .Log .Trace ("\u0045\u004f\u0046 p\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u0078\u0072\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u0021");if _afbb ._afffc ==nil {_aedec :=XrefTypeTableEntry ;_afbb ._afffc =&_aedec ;};return _gedc ,nil ;};
+func (_gfa *PdfCrypt )saveCryptFilters (_cca *PdfObjectDictionary )error {if _gfa ._fbf .V < 4{return _a .New ("\u0063\u0061\u006e\u0020\u006f\u006e\u006c\u0079\u0020\u0062\u0065 \u0075\u0073\u0065\u0064\u0020\u0077\u0069\u0074\u0068\u0020V\u003e\u003d\u0034");
+};_bbga :=MakeDict ();_cca .Set ("\u0043\u0046",_bbga );for _cdf ,_geb :=range _gfa ._gde {if _cdf =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{continue ;};_dfe :=_abd (_geb ,"");_bbga .Set (PdfObjectName (_cdf ),_dfe );};_cca .Set ("\u0053\u0074\u0072\u0046",MakeName (_gfa ._ade ));
+_cca .Set ("\u0053\u0074\u006d\u0046",MakeName (_gfa ._gef ));return nil ;};
+
+// GetIntVal returns the int value represented by the PdfObject directly or indirectly if contained within an
+// indirect object. On type mismatch the found bool flag returned is false and a nil pointer is returned.
+func GetIntVal (obj PdfObject )(_ggfff int ,_cefd bool ){_efge ,_cefd :=TraceToDirectObject (obj ).(*PdfObjectInteger );if _cefd &&_efge !=nil {return int (*_efge ),true ;};return 0,false ;};var _aceg =_a .New ("\u0045\u004f\u0046\u0020\u006e\u006f\u0074\u0020\u0066\u006f\u0075\u006e\u0064");
+
+
+// Write outputs the object as it is to be written to file.
+func (_cgeefg *PdfObjectReference )Write ()[]byte {return _dae (func (_gcac *_d .Buffer ){_gcac .WriteString (_b .FormatInt (_cgeefg .ObjectNumber ,10));_gcac .WriteString ("\u0020");_gcac .WriteString (_b .FormatInt (_cgeefg .GenerationNumber ,10));_gcac .WriteString ("\u0020\u0052");
+});};const _aagf =32<<(^uint (0)>>63);
+
+// GetObjectNums returns a sorted list of object numbers of the PDF objects in the file.
+func (_aacab *PdfParser )GetObjectNums ()[]int {var _cfga []int ;for _ ,_cfad :=range _aacab ._becb .ObjectMap {_cfga =append (_cfga ,_cfad .ObjectNumber );};_dc .Ints (_cfga );return _cfga ;};func _daa (_dfaf *PdfObjectStream ,_dbadd *PdfObjectDictionary )(*JBIG2Encoder ,error ){const _bgba ="\u006ee\u0077\u004a\u0042\u0049G\u0032\u0044\u0065\u0063\u006fd\u0065r\u0046r\u006f\u006d\u0053\u0074\u0072\u0065\u0061m";
+_aaec :=NewJBIG2Encoder ();_bggb :=_dfaf .PdfObjectDictionary ;if _bggb ==nil {return _aaec ,nil ;};if _dbadd ==nil {_cadg :=_bggb .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");if _cadg !=nil {switch _gcd :=_cadg .(type ){case *PdfObjectDictionary :_dbadd =_gcd ;
+case *PdfObjectArray :if _gcd .Len ()==1{if _aabg ,_beb :=GetDict (_gcd .Get (0));_beb {_dbadd =_aabg ;};};default:_cbg .Log .Error ("\u0044\u0065\u0063\u006f\u0064\u0065P\u0061\u0072\u0061\u006d\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0064i\u0063\u0074\u0069\u006f\u006e\u0061\u0072y\u0020\u0025\u0023\u0076",_cadg );
+return nil ,_geg .Errorf (_bgba ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050a\u0072m\u0073\u0020\u0074\u0079\u0070\u0065\u003a \u0025\u0054",_gcd );};};};if _dbadd ==nil {return _aaec ,nil ;};_aaec .UpdateParams (_dbadd );
+_geff ,_dgga :=GetStream (_dbadd .Get ("\u004a\u0042\u0049G\u0032\u0047\u006c\u006f\u0062\u0061\u006c\u0073"));if !_dgga {return _aaec ,nil ;};var _cccb error ;_aaec .Globals ,_cccb =_bb .DecodeGlobals (_geff .Stream );if _cccb !=nil {_cccb =_geg .Wrap (_cccb ,_bgba ,"\u0063\u006f\u0072\u0072u\u0070\u0074\u0065\u0064\u0020\u006a\u0062\u0069\u0067\u0032 \u0065n\u0063\u006f\u0064\u0065\u0064\u0020\u0064a\u0074\u0061");
+_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v",_cccb );return nil ,_cccb ;};return _aaec ,nil ;};
+
+// Validate validates the page settings for the JBIG2 encoder.
+func (_fdaa JBIG2EncoderSettings )Validate ()error {const _dbdb ="\u0076a\u006ci\u0064\u0061\u0074\u0065\u0045\u006e\u0063\u006f\u0064\u0065\u0072";if _fdaa .Threshold < 0||_fdaa .Threshold > 1.0{return _geg .Errorf (_dbdb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006c\u0064\u0020\u0076a\u006c\u0075\u0065\u003a\u0020\u0027\u0025\u0076\u0027 \u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061n\u0067\u0065\u0020\u005b\u0030\u002e0\u002c\u0020\u0031.\u0030\u005d",_fdaa .Threshold );
+};if _fdaa .ResolutionX < 0{return _geg .Errorf (_dbdb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0078\u0020\u0072\u0065\u0073\u006f\u006c\u0075\u0074\u0069\u006fn\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0070\u006f\u0073\u0069\u0074\u0069\u0076\u0065 \u006f\u0072\u0020\u007a\u0065\u0072o\u0020\u0076\u0061l\u0075\u0065",_fdaa .ResolutionX );
+};if _fdaa .ResolutionY < 0{return _geg .Errorf (_dbdb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0079\u0020\u0072\u0065\u0073\u006f\u006c\u0075\u0074\u0069\u006fn\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0070\u006f\u0073\u0069\u0074\u0069\u0076\u0065 \u006f\u0072\u0020\u007a\u0065\u0072o\u0020\u0076\u0061l\u0075\u0065",_fdaa .ResolutionY );
+};if _fdaa .DefaultPixelValue !=0&&_fdaa .DefaultPixelValue !=1{return _geg .Errorf (_dbdb ,"de\u0066\u0061u\u006c\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020v\u0061\u006c\u0075\u0065\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0061\u0020\u0076\u0061\u006c\u0075\u0065\u0020\u0066o\u0072 \u0074\u0068\u0065\u0020\u0062\u0069\u0074\u003a \u007b0\u002c\u0031}",_fdaa .DefaultPixelValue );
+};if _fdaa .Compression !=JB2Generic {return _geg .Errorf (_dbdb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u0063\u006fm\u0070\u0072\u0065\u0073s\u0069\u006f\u006e\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0069\u006d\u0070\u006c\u0065\u006d\u0065\u006e\u0074\u0065\u0064\u0020\u0079\u0065\u0074");
+};return nil ;};
+
+// String returns the state of the bool as "true" or "false".
+func (_aadc *PdfObjectBool )String ()string {if *_aadc {return "\u0074\u0072\u0075\u0065";};return "\u0066\u0061\u006cs\u0065";};
+
+// PdfObjectName represents the primitive PDF name object.
+type PdfObjectName string ;
+
+// ParseDict reads and parses a PDF dictionary object enclosed with '<<' and '>>'
+func (_cafaf *PdfParser )ParseDict ()(*PdfObjectDictionary ,error ){_cbg .Log .Trace ("\u0052\u0065\u0061\u0064\u0069\u006e\u0067\u0020\u0050\u0044\u0046\u0020D\u0069\u0063\u0074\u0021");_gdbd :=MakeDict ();_gdbd ._adbe =_cafaf ;_ffce ,_ :=_cafaf ._eebc .ReadByte ();
+if _ffce !='<'{return nil ,_a .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");};_ffce ,_ =_cafaf ._eebc .ReadByte ();if _ffce !='<'{return nil ,_a .New ("\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0064\u0069\u0063\u0074");
+};for {_cafaf .skipSpaces ();_cafaf .skipComments ();_eafd ,_gcfg :=_cafaf ._eebc .Peek (2);if _gcfg !=nil {return nil ,_gcfg ;};_cbg .Log .Trace ("D\u0069c\u0074\u0020\u0070\u0065\u0065\u006b\u003a\u0020%\u0073\u0020\u0028\u0025 x\u0029\u0021",string (_eafd ),string (_eafd ));
+if (_eafd [0]=='>')&&(_eafd [1]=='>'){_cbg .Log .Trace ("\u0045\u004f\u0046\u0020\u0064\u0069\u0063\u0074\u0069o\u006e\u0061\u0072\u0079");_cafaf ._eebc .ReadByte ();_cafaf ._eebc .ReadByte ();break ;};_cbg .Log .Trace ("\u0050a\u0072s\u0065\u0020\u0074\u0068\u0065\u0020\u006e\u0061\u006d\u0065\u0021");
+_cgef ,_gcfg :=_cafaf .parseName ();_cbg .Log .Trace ("\u004be\u0079\u003a\u0020\u0025\u0073",_cgef );if _gcfg !=nil {_cbg .Log .Debug ("E\u0052\u0052\u004f\u0052\u0020\u0052e\u0074\u0075\u0072\u006e\u0069\u006e\u0067\u0020\u006ea\u006d\u0065\u0020e\u0072r\u0020\u0025\u0073",_gcfg );
+return nil ,_gcfg ;};if len (_cgef )> 4&&_cgef [len (_cgef )-4:]=="\u006e\u0075\u006c\u006c"{_gffe :=_cgef [0:len (_cgef )-4];_cbg .Log .Debug ("\u0054\u0061\u006b\u0069n\u0067\u0020\u0063\u0061\u0072\u0065\u0020\u006f\u0066\u0020n\u0075l\u006c\u0020\u0062\u0075\u0067\u0020\u0028%\u0073\u0029",_cgef );
+_cbg .Log .Debug ("\u004e\u0065\u0077\u0020ke\u0079\u0020\u0022\u0025\u0073\u0022\u0020\u003d\u0020\u006e\u0075\u006c\u006c",_gffe );_cafaf .skipSpaces ();_ffd ,_ :=_cafaf ._eebc .Peek (1);if _ffd [0]=='/'{_gdbd .Set (_gffe ,MakeNull ());continue ;};};
+_cafaf .skipSpaces ();_edga ,_gcfg :=_cafaf .parseObject ();if _gcfg !=nil {return nil ,_gcfg ;};_gdbd .Set (_cgef ,_edga );if _cbg .Log .IsLogLevel (_cbg .LogLevelTrace ){_cbg .Log .Trace ("\u0064\u0069\u0063\u0074\u005b\u0025\u0073\u005d\u0020\u003d\u0020\u0025\u0073",_cgef ,_edga .String ());
+};};_cbg .Log .Trace ("\u0072\u0065\u0074\u0075rn\u0069\u006e\u0067\u0020\u0050\u0044\u0046\u0020\u0044\u0069\u0063\u0074\u0021");return _gdbd ,nil ;};
+
+// MakeArrayFromIntegers creates an PdfObjectArray from a slice of ints, where each array element is
+// an PdfObjectInteger.
+func MakeArrayFromIntegers (vals []int )*PdfObjectArray {_cacg :=MakeArray ();for _ ,_ffbg :=range vals {_cacg .Append (MakeInteger (int64 (_ffbg )));};return _cacg ;};
+
+// Elements returns a slice of the PdfObject elements in the array.
+// Preferred over accessing the array directly as type may be changed in future major versions (v3).
+func (_gddd *PdfObjectStreams )Elements ()[]PdfObject {if _gddd ==nil {return nil ;};return _gddd ._face ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_cgdd *RunLengthEncoder )MakeDecodeParams ()PdfObject {return nil };
+
+// GetAsFloat64Slice returns the array as []float64 slice.
+// Returns an error if not entirely numeric (only PdfObjectIntegers, PdfObjectFloats).
+func (_eeacg *PdfObjectArray )GetAsFloat64Slice ()([]float64 ,error ){var _agabf []float64 ;for _ ,_bbaag :=range _eeacg .Elements (){_bcac ,_feec :=GetNumberAsFloat (TraceToDirectObject (_bbaag ));if _feec !=nil {return nil ,_ec .Errorf ("\u0061\u0072\u0072\u0061\u0079\u0020\u0065\u006c\u0065\u006d\u0065n\u0074\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u006e\u0075m\u0062\u0065\u0072");
+};_agabf =append (_agabf ,_bcac );};return _agabf ,nil ;};
+
+// TraceToDirectObject traces a PdfObject to a direct object. For example direct objects contained
+// in indirect objects (can be double referenced even).
+func TraceToDirectObject (obj PdfObject )PdfObject {if _efeg ,_edbcb :=obj .(*PdfObjectReference );_edbcb {obj =_efeg .Resolve ();};_ccggd ,_efeca :=obj .(*PdfIndirectObject );_bbagd :=0;for _efeca {obj =_ccggd .PdfObject ;_ccggd ,_efeca =GetIndirect (obj );
+_bbagd ++;if _bbagd > _dbgcd {_cbg .Log .Error ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0072\u0061\u0063\u0065\u0020\u0064\u0065p\u0074\u0068\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u0062\u0065\u0079\u006fn\u0064\u0020\u0025\u0064\u0020\u002d\u0020\u006e\u006f\u0074\u0020\u0067oi\u006e\u0067\u0020\u0064\u0065\u0065\u0070\u0065\u0072\u0021",_dbgcd );
+return nil ;};};return obj ;};
+
+// FormatWriteDirectionLTR formats a string for left-to-right rendering, handling bidirectional runs.
+func FormatWriteDirectionLTR (str string ,isLTR bool )string {_fgeg :=str ;if _fgeg ==""{return "";};_fcgdec :=_ce .Paragraph {};_ ,_cbgd :=_fcgdec .SetString (str );if _cbgd !=nil {return _fgeg ;};_cgdfd ,_cbgd :=_fcgdec .Order ();if _cbgd !=nil {return _fgeg ;
+};_dfeg :=_cgdfd .NumRuns ();_bfge :=make ([]string ,_dfeg );for _cgec :=0;_cgec < _cgdfd .NumRuns ();_cgec ++{_ggffe :=_cgdfd .Run (_cgec );_bfdb :=_ggffe .String ();if _ggffe .Direction ()==_ce .RightToLeft {_bfdb =_ce .ReverseString (_bfdb );};if isLTR {_bfge [_cgec ]=_bfdb ;
+}else {_bfge [_dfeg -1]=_bfdb ;};_dfeg --;};if len (_bfge )!=_cgdfd .NumRuns (){return str ;};_fgeg =_cg .Join (_bfge ,"");return _fgeg ;};
+
+// ToGoImage converts the JBIG2Image to the golang image.Image.
+func (_gadbda *JBIG2Image )ToGoImage ()(_bc .Image ,error ){const _ffb ="J\u0042I\u0047\u0032\u0049\u006d\u0061\u0067\u0065\u002eT\u006f\u0047\u006f\u0049ma\u0067\u0065";if _gadbda .Data ==nil {return nil ,_geg .Error (_ffb ,"\u0069\u006d\u0061\u0067e \u0064\u0061\u0074\u0061\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");
+};if _gadbda .Width ==0||_gadbda .Height ==0{return nil ,_geg .Error (_ffb ,"\u0069\u006d\u0061\u0067\u0065\u0020h\u0065\u0069\u0067\u0068\u0074\u0020\u006f\u0072\u0020\u0077\u0069\u0064\u0074h\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
+};_cbfa ,_cbgg :=_bce .NewImage (_gadbda .Width ,_gadbda .Height ,1,1,_gadbda .Data ,nil ,nil );if _cbgg !=nil {return nil ,_cbgg ;};return _cbfa ,nil ;};
+
+// GetFilterName returns the name of the encoding filter.
+func (_cgea *ASCIIHexEncoder )GetFilterName ()string {return StreamEncodingFilterNameASCIIHex };
+
+// DecodeBytes decodes a byte slice from Run length encoding.
+//
+// 7.4.5 RunLengthDecode Filter
+// The RunLengthDecode filter decodes data that has been encoded in a simple byte-oriented format based on run length.
+// The encoded data shall be a sequence of runs, where each run shall consist of a length byte followed by 1 to 128
+// bytes of data. If the length byte is in the range 0 to 127, the following length + 1 (1 to 128) bytes shall be
+// copied literally during decompression. If length is in the range 129 to 255, the following single byte shall be
+// copied 257 - length (2 to 128) times during decompression. A length value of 128 shall denote EOD.
+func (_fecd *RunLengthEncoder )DecodeBytes (encoded []byte )([]byte ,error ){_eegg :=_d .NewReader (encoded );var _edef []byte ;for {_gfdf ,_decde :=_eegg .ReadByte ();if _decde !=nil {return nil ,_decde ;};if _gfdf > 128{_gcfe ,_fab :=_eegg .ReadByte ();
+if _fab !=nil {return nil ,_fab ;};for _gag :=0;_gag < 257-int (_gfdf );_gag ++{_edef =append (_edef ,_gcfe );};}else if _gfdf < 128{for _ggfb :=0;_ggfb < int (_gfdf )+1;_ggfb ++{_bcdc ,_adca :=_eegg .ReadByte ();if _adca !=nil {return nil ,_adca ;};_edef =append (_edef ,_bcdc );
+};}else {break ;};};return _edef ,nil ;};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+// Has the Filter set and the DecodeParms.
+func (_dgbd *LZWEncoder )MakeStreamDict ()*PdfObjectDictionary {_fbdg :=MakeDict ();_fbdg .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_dgbd .GetFilterName ()));_ffe :=_dgbd .MakeDecodeParams ();if _ffe !=nil {_fbdg .Set ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073",_ffe );
+};_fbdg .Set ("E\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065",MakeInteger (int64 (_dgbd .EarlyChange )));return _fbdg ;};
+
+// NewParserWithOpts creates and initializes a new PdfParser using the provided options.
+// It creates a parser that tolerates certain non-critical PDF errors.
+// Returns a PdfParser or an error if initialization fails.
+func NewParserWithOpts (rs _de .ReadSeeker ,opts ParserOpts )(*PdfParser ,error ){_aeec :=&PdfParser {_eebc :_ca (rs ),ObjCache :make (objectCache ),_ecbe :map[int64 ]bool {},_acc :make ([]int64 ,0),_ddfac :make (map[*PdfParser ]*PdfParser ),Opts :&opts };
+_cgfd :=_aeec .initParser ();if _cgfd !=nil {return nil ,_cgfd ;};return _aeec ,nil ;};
+
+// JBIG2CompressionType defines the enum compression type used by the JBIG2Encoder.
+type JBIG2CompressionType int ;func _abd (_dgaa _bg .Filter ,_aaga _db .AuthEvent )*PdfObjectDictionary {if _aaga ==""{_aaga =_db .EventDocOpen ;};_acd :=MakeDict ();_acd .Set ("\u0054\u0079\u0070\u0065",MakeName ("C\u0072\u0079\u0070\u0074\u0046\u0069\u006c\u0074\u0065\u0072"));
+_acd .Set ("\u0041u\u0074\u0068\u0045\u0076\u0065\u006et",MakeName (string (_aaga )));_acd .Set ("\u0043\u0046\u004d",MakeName (_dgaa .Name ()));_acd .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (_dgaa .KeyLength ())));return _acd ;};
+
+
+// Decrypt an object with specified key. For numbered objects,
+// the key argument is not used and a new one is generated based
+// on the object and generation number.
+// Traverses through all the subobjects (recursive).
+//
+// Does not look up references.. That should be done prior to calling.
+func (_bdc *PdfCrypt )Decrypt (obj PdfObject ,parentObjNum ,parentGenNum int64 )error {if _bdc .isDecrypted (obj ){return nil ;};switch _bab :=obj .(type ){case *PdfIndirectObject :_bdc ._acfa [_bab ]=true ;_cbg .Log .Trace ("\u0044\u0065\u0063\u0072\u0079\u0070\u0074\u0069\u006e\u0067 \u0069\u006e\u0064\u0069\u0072\u0065\u0063t\u0020\u0025\u0064\u0020\u0025\u0064\u0020\u006f\u0062\u006a\u0021",_bab .ObjectNumber ,_bab .GenerationNumber );
+_egde :=_bab .ObjectNumber ;_cege :=_bab .GenerationNumber ;_feg :=_bdc .Decrypt (_bab .PdfObject ,_egde ,_cege );if _feg !=nil {return _feg ;};return nil ;case *PdfObjectStream :_bdc ._acfa [_bab ]=true ;_eeb :=_bab .PdfObjectDictionary ;if _bdc ._cbbgb .R !=5{if _aga ,_bcef :=_eeb .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );
+_bcef &&*_aga =="\u0058\u0052\u0065\u0066"{return nil ;};};_gbecg :=_bab .ObjectNumber ;_cfd :=_bab .GenerationNumber ;_cbg .Log .Trace ("\u0044e\u0063\u0072\u0079\u0070t\u0069\u006e\u0067\u0020\u0073t\u0072e\u0061m\u0020\u0025\u0064\u0020\u0025\u0064\u0020!",_gbecg ,_cfd );
+_ebg :=_gbb ;if _bdc ._fbf .V >=4{_ebg =_bdc ._gef ;_cbg .Log .Trace ("\u0074\u0068\u0069\u0073.s\u0074\u0072\u0065\u0061\u006d\u0046\u0069\u006c\u0074\u0065\u0072\u0020\u003d\u0020%\u0073",_bdc ._gef );if _dagd ,_dfaa :=_eeb .Get ("\u0046\u0069\u006c\u0074\u0065\u0072").(*PdfObjectArray );
+_dfaa {if _bdgb ,_fge :=GetName (_dagd .Get (0));_fge {if *_bdgb =="\u0043\u0072\u0079p\u0074"{_ebg ="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079";if _gbg ,_aea :=_eeb .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073").(*PdfObjectDictionary );
+_aea {if _ccgd ,_cff :=_gbg .Get ("\u004e\u0061\u006d\u0065").(*PdfObjectName );_cff {if _ ,_abb :=_bdc ._gde [string (*_ccgd )];_abb {_cbg .Log .Trace ("\u0055\u0073\u0069\u006eg \u0073\u0074\u0072\u0065\u0061\u006d\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020%\u0073",*_ccgd );
+_ebg =string (*_ccgd );};};};};};};_cbg .Log .Trace ("\u0077\u0069\u0074\u0068\u0020\u0025\u0073\u0020\u0066i\u006c\u0074\u0065\u0072",_ebg );if _ebg =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{return nil ;};};_ggga :=_bdc .Decrypt (_eeb ,_gbecg ,_cfd );
+if _ggga !=nil {return _ggga ;};_aff ,_ggga :=_bdc .makeKey (_ebg ,uint32 (_gbecg ),uint32 (_cfd ),_bdc ._dbg );if _ggga !=nil {return _ggga ;};_bab .Stream ,_ggga =_bdc .decryptBytes (_bab .Stream ,_ebg ,_aff );if _ggga !=nil {return _ggga ;};_eeb .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (len (_bab .Stream ))));
+return nil ;case *PdfObjectString :_cbg .Log .Trace ("\u0044e\u0063r\u0079\u0070\u0074\u0069\u006eg\u0020\u0073t\u0072\u0069\u006e\u0067\u0021");_ggdd :=_gbb ;if _bdc ._fbf .V >=4{_cbg .Log .Trace ("\u0077\u0069\u0074\u0068\u0020\u0025\u0073\u0020\u0066i\u006c\u0074\u0065\u0072",_bdc ._ade );
+if _bdc ._ade =="\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"{return nil ;};_ggdd =_bdc ._ade ;};_bca ,_bbef :=_bdc .makeKey (_ggdd ,uint32 (parentObjNum ),uint32 (parentGenNum ),_bdc ._dbg );if _bbef !=nil {return _bbef ;};_gegb :=_bab .Str ();_eddea :=make ([]byte ,len (_gegb ));
+for _gbd :=0;_gbd < len (_gegb );_gbd ++{_eddea [_gbd ]=_gegb [_gbd ];};if len (_eddea )> 0{_cbg .Log .Trace ("\u0044e\u0063\u0072\u0079\u0070\u0074\u0020\u0073\u0074\u0072\u0069\u006eg\u003a\u0020\u0025\u0073\u0020\u003a\u0020\u0025\u0020\u0078",_eddea ,_eddea );
+_eddea ,_bbef =_bdc .decryptBytes (_eddea ,_ggdd ,_bca );if _bbef !=nil {return _bbef ;};};_bab ._efga =string (_eddea );return nil ;case *PdfObjectArray :for _ ,_ggb :=range _bab .Elements (){_gcc :=_bdc .Decrypt (_ggb ,parentObjNum ,parentGenNum );if _gcc !=nil {return _gcc ;
+};};return nil ;case *PdfObjectDictionary :_daga :=false ;if _agff :=_bab .Get ("\u0054\u0079\u0070\u0065");_agff !=nil {_cfeb ,_cgac :=_agff .(*PdfObjectName );if _cgac &&*_cfeb =="\u0053\u0069\u0067"{_daga =true ;};};for _ ,_dfcd :=range _bab .Keys (){_acb :=_bab .Get (_dfcd );
+if _daga &&string (_dfcd )=="\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u0073"{continue ;};if string (_dfcd )!="\u0050\u0061\u0072\u0065\u006e\u0074"&&string (_dfcd )!="\u0050\u0072\u0065\u0076"&&string (_dfcd )!="\u004c\u0061\u0073\u0074"{_cfec :=_bdc .Decrypt (_acb ,parentObjNum ,parentGenNum );
+if _cfec !=nil {return _cfec ;};};};return nil ;};return nil ;};
+
+// FlattenObject returns the contents of `obj`. In other words, `obj` with indirect objects replaced
+// by their values.
+// The replacements are made recursively to a depth of traceMaxDepth.
+// NOTE: Dicts are sorted to make objects with same contents have the same PDF object strings.
+func FlattenObject (obj PdfObject )PdfObject {return _gaac (obj ,0)};
+
+// NewFlateEncoder makes a new flate encoder with default parameters, predictor 1 and bits per component 8.
+func NewFlateEncoder ()*FlateEncoder {_bbag :=&FlateEncoder {};_bbag .Predictor =1;_bbag .BitsPerComponent =8;_bbag .Colors =1;_bbag .Columns =1;return _bbag ;};func (_bfg *PdfCrypt )authenticate (_gcb []byte )(bool ,error ){_bfg ._eddc =false ;_dfgb :=_bfg .securityHandler ();
+_gbec ,_gfee ,_cbbd :=_dfgb .Authenticate (&_bfg ._cbbgb ,_gcb );if _cbbd !=nil {return false ,_cbbd ;}else if _gfee ==0||len (_gbec )==0{return false ,nil ;};_bfg ._eddc =true ;_bfg ._dbg =_gbec ;return true ,nil ;};
+
+// Clear resets the array to an empty state.
+func (_facdb *PdfObjectArray )Clear (){_facdb ._gdgb =[]PdfObject {}};type cryptFilters map[string ]_bg .Filter ;
+
+// Read implementation of Read interface.
+func (_dcc *limitedReadSeeker )Read (p []byte )(_agffd int ,_gefc error ){_eaca ,_gefc :=_dcc ._bbdbf .Seek (0,_de .SeekCurrent );if _gefc !=nil {return 0,_gefc ;};_bbf :=_dcc ._cede -_eaca ;if _bbf ==0{return 0,_de .EOF ;};if _acgd :=int64 (len (p ));
+_acgd < _bbf {_bbf =_acgd ;};_abgd :=make ([]byte ,_bbf );_agffd ,_gefc =_dcc ._bbdbf .Read (_abgd );copy (p ,_abgd );return _agffd ,_gefc ;};
+
+// Buffered returns the number of bytes currently buffered.
+func (_dfg *bufferedReadSeeker )Buffered ()int {return _dfg ._fba .Buffered ()};func _dedgf (_efeccc *PdfObjectDictionary )(_ceed *_bce .ImageBase ){var (_agfdd *PdfObjectInteger ;_fdcd bool ;);if _agfdd ,_fdcd =_efeccc .Get ("\u0057\u0069\u0064t\u0068").(*PdfObjectInteger );
+_fdcd {_ceed =&_bce .ImageBase {Width :int (*_agfdd )};}else {return nil ;};if _agfdd ,_fdcd =_efeccc .Get ("\u0048\u0065\u0069\u0067\u0068\u0074").(*PdfObjectInteger );_fdcd {_ceed .Height =int (*_agfdd );};if _agfdd ,_fdcd =_efeccc .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074").(*PdfObjectInteger );
+_fdcd {_ceed .BitsPerComponent =int (*_agfdd );};if _agfdd ,_fdcd =_efeccc .Get ("\u0043o\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073").(*PdfObjectInteger );_fdcd {_ceed .ColorComponents =int (*_agfdd );};return _ceed ;};
+
+// Write outputs the object as it is to be written to file.
+func (_bada *PdfObjectName )Write ()[]byte {return _dae (func (_ddeeb *_d .Buffer ){if len (*_bada )> 127{_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u003a \u004e\u0061\u006d\u0065\u0020t\u006fo\u0020l\u006f\u006e\u0067\u0020\u0028\u0025\u0073)",*_bada );
+};_ddeeb .WriteString ("\u002f");for _fcgde :=0;_fcgde < len (*_bada );_fcgde ++{_cadgb :=(*_bada )[_fcgde ];if !IsPrintable (_cadgb )||_cadgb =='#'||IsDelimiter (_cadgb ){_ec .Fprintf (_ddeeb ,"\u0023\u0025\u002e2\u0078",_cadgb );}else {_ddeeb .WriteByte (_cadgb );
+};};});};func (_acac *PdfParser )parsePdfVersion ()(int ,int ,error ){var _ecbd int64 =20;_bcaeb :=make ([]byte ,_ecbd );_acac ._eebc .Seek (0,_de .SeekStart );_acac ._eebc .Read (_bcaeb );var _deff error ;var _ggfg ,_ffag int ;if _cfca :=_eeaf .FindStringSubmatch (string (_bcaeb ));
+len (_cfca )< 3{if _ggfg ,_ffag ,_deff =_acac .seekPdfVersionTopDown ();_deff !=nil {_cbg .Log .Debug ("F\u0061\u0069\u006c\u0065\u0064\u0020\u0072\u0065\u0063\u006f\u0076\u0065\u0072\u0079\u0020\u002d\u0020\u0075n\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066\u0069nd\u0020\u0076\u0065r\u0073i\u006f\u006e");
+return 0,0,_deff ;};_acac ._eebc ._aag ,_deff =_fgde (_acac ._eebc ._aag ,_acac .GetFileOffset ()-8);if _deff !=nil {return 0,0,_deff ;};}else {if _ggfg ,_deff =_b .Atoi (_cfca [1]);_deff !=nil {return 0,0,_deff ;};if _ffag ,_deff =_b .Atoi (_cfca [2]);
+_deff !=nil {return 0,0,_deff ;};_acac .SetFileOffset (0);};_acac ._eebc ._fba =_eb .NewReader (_acac ._eebc ._aag );_cbg .Log .Debug ("\u0050\u0064\u0066\u0020\u0076\u0065\u0072\u0073\u0069\u006f\u006e\u0020%\u0064\u002e\u0025\u0064",_ggfg ,_ffag );return _ggfg ,_ffag ,nil ;
+};
+
+// IsPrintable checks if a character is printable.
+// Regular characters that are outside the range EXCLAMATION MARK(21h)
+// (!) to TILDE (7Eh) (~) should be written using the hexadecimal notation.
+func IsPrintable (c byte )bool {return 0x21<=c &&c <=0x7E};
+
+// DecodeStream returns the passed in stream as a slice of bytes.
+// The purpose of the method is to satisfy the StreamEncoder interface.
+func (_cfea *RawEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return streamObj .Stream ,nil ;};
+
+// GetFilterName returns the name of the encoding filter.
+func (_ced *FlateEncoder )GetFilterName ()string {return StreamEncodingFilterNameFlate };
+
+// HeaderCommentBytes gets the header comment bytes.
+func (_ega ParserMetadata )HeaderCommentBytes ()[4]byte {return _ega ._bge };
+
+// NewLZWEncoder makes a new LZW encoder with default parameters.
+func NewLZWEncoder ()*LZWEncoder {_eabbc :=&LZWEncoder {};_eabbc .Predictor =1;_eabbc .BitsPerComponent =8;_eabbc .Colors =1;_eabbc .Columns =1;_eabbc .EarlyChange =1;return _eabbc ;};type xrefType int ;
+
+// GetFloatVal returns the float64 value represented by the PdfObject directly or indirectly if contained within an
+// indirect object. On type mismatch the found bool flag returned is false and a nil pointer is returned.
+func GetFloatVal (obj PdfObject )(_fdaf float64 ,_efff bool ){_bcfga ,_efff :=TraceToDirectObject (obj ).(*PdfObjectFloat );if _efff {return float64 (*_bcfga ),true ;};return 0,false ;};func (_fcada *PdfParser )rebuildXrefTable ()error {_ffdf :=XrefTable {};
+_ffdf .ObjectMap =map[int ]XrefObject {};_cgggcg :=make ([]int ,0,len (_fcada ._becb .ObjectMap ));for _aebe :=range _fcada ._becb .ObjectMap {_cgggcg =append (_cgggcg ,_aebe );};_dc .Ints (_cgggcg );for _ ,_efae :=range _cgggcg {_degf :=_fcada ._becb .ObjectMap [_efae ];
+_gbce ,_ ,_fbbcc :=_fcada .lookupByNumberWrapper (_efae ,false );if _fbbcc !=nil {_cbg .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020U\u006e\u0061\u0062\u006ce t\u006f l\u006f\u006f\u006b\u0020\u0075\u0070\u0020ob\u006a\u0065\u0063\u0074\u0020\u0028\u0025s\u0029",_fbbcc );
+_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0058\u0072\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u0020\u0063\u006fm\u0070\u006c\u0065\u0074\u0065\u006c\u0079\u0020\u0062\u0072\u006f\u006b\u0065\u006e\u0020\u002d\u0020\u0061\u0074\u0074\u0065\u006d\u0070\u0074\u0069\u006e\u0067\u0020\u0074\u006f \u0072\u0065\u0070\u0061\u0069r\u0020");
+_cgbbf ,_fcfc :=_fcada .repairRebuildXrefsTopDown ();if _fcfc !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0046\u0061\u0069\u006c\u0065\u0064\u0020\u0078\u0072\u0065\u0066\u0020\u0072\u0065\u0062\u0075\u0069l\u0064\u0020\u0072\u0065\u0070a\u0069\u0072 \u0028\u0025\u0073\u0029",_fcfc );
+return _fcfc ;};_fcada ._becb =*_cgbbf ;_cbg .Log .Debug ("\u0052e\u0070\u0061\u0069\u0072e\u0064\u0020\u0078\u0072\u0065f\u0020t\u0061b\u006c\u0065\u0020\u0062\u0075\u0069\u006ct");return nil ;};_baae ,_dbfc ,_fbbcc :=_aee (_gbce );if _fbbcc !=nil {return _fbbcc ;
+};_degf .ObjectNumber =int (_baae );_degf .Generation =int (_dbfc );_ffdf .ObjectMap [int (_baae )]=_degf ;};_fcada ._becb =_ffdf ;_cbg .Log .Debug ("N\u0065w\u0020\u0078\u0072\u0065\u0066\u0020\u0074\u0061b\u006c\u0065\u0020\u0062ui\u006c\u0074");_bcc (_fcada ._becb );
+return nil ;};
+
+// GetName returns the *PdfObjectName represented by the PdfObject directly or indirectly within an indirect
+// object. On type mismatch the found bool flag is false and a nil pointer is returned.
+func GetName (obj PdfObject )(_caccd *PdfObjectName ,_bebf bool ){_caccd ,_bebf =TraceToDirectObject (obj ).(*PdfObjectName );return _caccd ,_bebf ;};
+
+// IsOctalDigit checks if a character can be part of an octal digit string.
+func IsOctalDigit (c byte )bool {return '0'<=c &&c <='7'};
+
+// PdfObjectFloat represents the primitive PDF floating point numerical object.
+type PdfObjectFloat float64 ;
+
+// GetUpdatedObjects returns pdf objects which were updated from the specific version (from prevParser).
+func (_abea *PdfParser )GetUpdatedObjects (prevParser *PdfParser )(map[int64 ]PdfObject ,error ){if prevParser ==nil {return nil ,_a .New ("\u0070\u0072e\u0076\u0069\u006f\u0075\u0073\u0020\u0070\u0061\u0072\u0073\u0065\u0072\u0020\u0063\u0061\u006e\u0027\u0074\u0020\u0062\u0065\u0020nu\u006c\u006c");
+};_cgeef ,_gedba :=_abea .getNumbersOfUpdatedObjects (prevParser );if _gedba !=nil {return nil ,_gedba ;};_baafd :=make (map[int64 ]PdfObject );for _ ,_ggab :=range _cgeef {if _gdebe ,_fcedb :=_abea .LookupByNumber (_ggab );_fcedb ==nil {_baafd [int64 (_ggab )]=_gdebe ;
+}else {return nil ,_fcedb ;};};return _baafd ,nil ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_gadbd *MultiEncoder )MakeDecodeParams ()PdfObject {if len (_gadbd ._acg )==0{return nil ;};if len (_gadbd ._acg )==1{return _gadbd ._acg [0].MakeDecodeParams ();};_dcaa :=MakeArray ();_bfbd :=true ;for _ ,_cggc :=range _gadbd ._acg {_cafa :=_cggc .MakeDecodeParams ();
+if _cafa ==nil {_dcaa .Append (MakeNull ());}else {_bfbd =false ;_dcaa .Append (_cafa );};};if _bfbd {return nil ;};return _dcaa ;};const (_edgfa =0;_def =1;_daf =2;_ggf =3;_fbfa =4;);
+
+// EncodeBytes encodes slice of bytes into JBIG2 encoding format.
+// The input 'data' must be an image. In order to Decode it a user is responsible to
+// load the codec ('png', 'jpg').
+// Returns jbig2 single page encoded document byte slice. The encoder uses DefaultPageSettings
+// to encode given image.
+func (_gdfg *JBIG2Encoder )EncodeBytes (data []byte )([]byte ,error ){const _bcdb ="\u004aB\u0049\u0047\u0032\u0045\u006e\u0063\u006f\u0064\u0065\u0072\u002eE\u006e\u0063\u006f\u0064\u0065\u0042\u0079\u0074\u0065\u0073";if _gdfg .ColorComponents !=1||_gdfg .BitsPerComponent !=1{return nil ,_geg .Errorf (_bcdb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0069\u006e\u0070\u0075\u0074\u0020\u0069\u006d\u0061\u0067\u0065\u002e\u0020\u004a\u0042\u0049G\u0032\u0020E\u006e\u0063o\u0064\u0065\u0072\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020bi\u006e\u0061\u0072\u0079\u0020\u0069\u006d\u0061\u0067e\u0073\u0020\u0064\u0061\u0074\u0061");
+};var (_gcbec *_fe .Bitmap ;_dgab error ;);_aedc :=(_gdfg .Width *_gdfg .Height )==len (data );if _aedc {_gcbec ,_dgab =_fe .NewWithUnpaddedData (_gdfg .Width ,_gdfg .Height ,data );}else {_gcbec ,_dgab =_fe .NewWithData (_gdfg .Width ,_gdfg .Height ,data );
+};if _dgab !=nil {return nil ,_dgab ;};_ebce :=_gdfg .DefaultPageSettings ;if _dgab =_ebce .Validate ();_dgab !=nil {return nil ,_geg .Wrap (_dgab ,_bcdb ,"");};if _gdfg ._beffg ==nil {_gdfg ._beffg =_fed .InitEncodeDocument (_ebce .FileMode );};switch _ebce .Compression {case JB2Generic :if _dgab =_gdfg ._beffg .AddGenericPage (_gcbec ,_ebce .DuplicatedLinesRemoval );
+_dgab !=nil {return nil ,_geg .Wrap (_dgab ,_bcdb ,"");};case JB2SymbolCorrelation :return nil ,_geg .Error (_bcdb ,"s\u0079\u006d\u0062\u006f\u006c\u0020\u0063\u006f\u0072r\u0065\u006c\u0061\u0074\u0069\u006f\u006e e\u006e\u0063\u006f\u0064i\u006e\u0067\u0020\u006e\u006f\u0074\u0020\u0069\u006dpl\u0065\u006de\u006e\u0074\u0065\u0064\u0020\u0079\u0065\u0074");
+case JB2SymbolRankHaus :return nil ,_geg .Error (_bcdb ,"\u0073y\u006d\u0062o\u006c\u0020\u0072a\u006e\u006b\u0020\u0068\u0061\u0075\u0073 \u0065\u006e\u0063\u006f\u0064\u0069n\u0067\u0020\u006e\u006f\u0074\u0020\u0069\u006d\u0070\u006c\u0065m\u0065\u006e\u0074\u0065\u0064\u0020\u0079\u0065\u0074");
+default:return nil ,_geg .Error (_bcdb ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069d\u0020c\u006f\u006d\u0070\u0072\u0065\u0073\u0073i\u006f\u006e");};return _gdfg .Encode ();};
+
+// ParserOpts defines configuration options for Parser.
+// These options allow setting customization flags to control parsing behaviors.
+type ParserOpts struct{
+
+// RelaxedMode enables tolerant parsing by ignoring certain non-critical PDF errors.
+// When set to true, the parser will attempt to continue processing despite certain
+// structural errors such as:
+// - Missing or invalid /XRefStm entries
+// - Non-/Page or non-/Pages objects found in the page tree (/Kids array)
+RelaxedMode bool ;};
+
+// GetFileOffset returns the current file offset, accounting for buffered position.
+func (_edddd *PdfParser )GetFileOffset ()int64 {return _edddd ._eebc .GetFileOffset ()};
+
+// Set sets the dictionary's key -> val mapping entry. Overwrites if key already set.
+func (_beeab *PdfObjectDictionary )Set (key PdfObjectName ,val PdfObject ){_beeab .setWithLock (key ,val ,true );};
+
+// DecodeStream decodes a DCT encoded stream and returns the result as a
+// slice of bytes.
+func (_afdf *DCTEncoder )DecodeStream (streamObj *PdfObjectStream )([]byte ,error ){return _afdf .DecodeBytes (streamObj .Stream );};
+
+// GetXrefTable returns the PDFs xref table.
+func (_abceb *PdfParser )GetXrefTable ()XrefTable {return _abceb ._becb };
+
+// ReadByte reads a single byte from the buffered reader.
+func (_fbg *bufferedReadSeeker )ReadByte ()(byte ,error ){_edb ,_fbb :=_fbg ._fba .ReadByte ();if _fbb !=nil {return 0,_fbb ;};return _edb ,nil ;};
+
+// String returns a descriptive information string about the encryption method used.
+func (_ggg *PdfCrypt )String ()string {if _ggg ==nil {return "";};_ebfgg :=_ggg ._fbf .Filter +"\u0020\u002d\u0020";if _ggg ._fbf .V ==0{_ebfgg +="\u0055\u006e\u0064\u006fcu\u006d\u0065\u006e\u0074\u0065\u0064\u0020\u0061\u006c\u0067\u006f\u0072\u0069\u0074h\u006d";
+}else if _ggg ._fbf .V ==1{_ebfgg +="\u0052\u0043\u0034:\u0020\u0034\u0030\u0020\u0062\u0069\u0074\u0073";}else if _ggg ._fbf .V ==2{_ebfgg +=_ec .Sprintf ("\u0052\u0043\u0034:\u0020\u0025\u0064\u0020\u0062\u0069\u0074\u0073",_ggg ._fbf .Length );}else if _ggg ._fbf .V ==3{_ebfgg +="U\u006e\u0070\u0075\u0062li\u0073h\u0065\u0064\u0020\u0061\u006cg\u006f\u0072\u0069\u0074\u0068\u006d";
+}else if _ggg ._fbf .V >=4{_ebfgg +=_ec .Sprintf ("\u0053\u0074r\u0065\u0061\u006d\u0020f\u0069\u006ct\u0065\u0072\u003a\u0020\u0025\u0073\u0020\u002d \u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0066\u0069\u006c\u0074\u0065r\u003a\u0020\u0025\u0073",_ggg ._gef ,_ggg ._ade );
+_ebfgg +="\u003b\u0020C\u0072\u0079\u0070t\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0073\u003a";for _bbae ,_gcf :=range _ggg ._gde {_ebfgg +=_ec .Sprintf ("\u0020\u002d\u0020\u0025\u0073\u003a\u0020\u0025\u0073 \u0028\u0025\u0064\u0029",_bbae ,_gcf .Name (),_gcf .KeyLength ());
+};};_cgbe :=_ggg .GetAccessPermissions ();_ebfgg +=_ec .Sprintf ("\u0020\u002d\u0020\u0025\u0023\u0076",_cgbe );return _ebfgg ;};
+
+// Write outputs the object as it is to be written to file.
+func (_gbdc *PdfObjectArray )Write ()[]byte {return _dae (func (_eaba *_d .Buffer ){_eaba .WriteString ("\u005b");for _edaf ,_beeb :=range _gbdc .Elements (){_eaba .Write (_beeb .Write ());if _edaf < (_gbdc .Len ()-1){_eaba .WriteString ("\u0020");};};
+_eaba .WriteString ("\u005d");});};
+
+// Write outputs the object as it is to be written to file.
+func (_affbb *PdfObjectNull )Write ()[]byte {return []byte ("\u006e\u0075\u006c\u006c")};
+
+// ParseNumber parses a numeric objects from a buffered stream.
+// Section 7.3.3.
+// Integer or Float.
+//
+// An integer shall be written as one or more decimal digits optionally
+// preceded by a sign. The value shall be interpreted as a signed
+// decimal integer and shall be converted to an integer object.
+//
+// A real value shall be written as one or more decimal digits with an
+// optional sign and a leading, trailing, or embedded PERIOD (2Eh)
+// (decimal point). The value shall be interpreted as a real number
+// and shall be converted to a real object.
+//
+// Regarding exponential numbers: 7.3.3 Numeric Objects:
+// A conforming writer shall not use the PostScript syntax for numbers
+// with non-decimal radices (such as 16#FFFE) or in exponential format
+// (such as 6.02E23).
+// Nonetheless, we sometimes get numbers with exponential format, so
+// we will support it in the reader (no confusion with other types, so
+// no compromise).
+func ParseNumber (buf *_eb .Reader )(PdfObject ,error ){_fcaag :=false ;_dfde :=true ;var _ggfgf _d .Buffer ;for {if _cbg .Log .IsLogLevel (_cbg .LogLevelTrace ){_cbg .Log .Trace ("\u0050\u0061\u0072\u0073in\u0067\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020\u0022\u0025\u0073\u0022",_ggfgf .String ());
+};_cdbe ,_abdac :=buf .Peek (1);if _abdac ==_de .EOF {break ;};if _abdac !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0025\u0073",_abdac );return nil ,_abdac ;};if _dfde &&(_cdbe [0]=='-'||_cdbe [0]=='+'){_cfadb ,_ :=buf .ReadByte ();
+_ggfgf .WriteByte (_cfadb );_dfde =false ;}else if IsDecimalDigit (_cdbe [0]){_edff ,_ :=buf .ReadByte ();_ggfgf .WriteByte (_edff );}else if _cdbe [0]=='.'{_decf ,_ :=buf .ReadByte ();_ggfgf .WriteByte (_decf );_fcaag =true ;}else if _cdbe [0]=='e'||_cdbe [0]=='E'{_bddef ,_ :=buf .ReadByte ();
+_ggfgf .WriteByte (_bddef );_fcaag =true ;_dfde =true ;}else {break ;};};var _adcf PdfObject ;if _fcaag {_gaad ,_bbee :=_b .ParseFloat (_ggfgf .String (),64);if _bbee !=nil {_cbg .Log .Debug ("\u0045\u0072r\u006f\u0072\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u006e\u0075\u006d\u0062\u0065\u0072\u0020\u0025v\u0020\u0065\u0072\u0072\u003d\u0025v\u002e\u0020\u0055\u0073\u0069\u006e\u0067\u0020\u0030\u002e\u0030\u002e\u0020\u004fu\u0074\u0070u\u0074\u0020\u006d\u0061y\u0020\u0062\u0065\u0020\u0069n\u0063\u006f\u0072\u0072\u0065\u0063\u0074",_ggfgf .String (),_bbee );
+_gaad =0.0;};_ecedd :=PdfObjectFloat (_gaad );_adcf =&_ecedd ;}else {_ddedc ,_efbb :=_b .ParseInt (_ggfgf .String (),10,64);if _efbb !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0070\u0061\u0072\u0073\u0069\u006e\u0067\u0020\u006e\u0075\u006db\u0065\u0072\u0020\u0025\u0076\u0020\u0065\u0072\u0072\u003d%\u0076\u002e\u0020\u0055\u0073\u0069\u006e\u0067\u0020\u0030\u002e\u0020\u004f\u0075\u0074\u0070\u0075\u0074 \u006d\u0061\u0079\u0020\u0062\u0065 \u0069\u006ec\u006f\u0072r\u0065c\u0074",_ggfgf .String (),_efbb );
+_ddedc =0;};_ggcc :=PdfObjectInteger (_ddedc );_adcf =&_ggcc ;};return _adcf ,nil ;};func _becd (_bdfe _bce .Image )*JBIG2Image {_dddg :=_bdfe .Base ();return &JBIG2Image {Data :_dddg .Data ,Width :_dddg .Width ,Height :_dddg .Height ,HasPadding :true };
+};
+
+// Set sets the PdfObject at index i of the streams. An error is returned if the index is outside bounds.
+func (_ffdb *PdfObjectStreams )Set (i int ,obj PdfObject )error {if i < 0||i >=len (_ffdb ._face ){return _a .New ("\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0062o\u0075\u006e\u0064\u0073");};_ffdb ._face [i ]=obj ;return nil ;};
+
+// NewParserFromString is used for testing purposes.
+func NewParserFromString (txt string )*PdfParser {_eeadb :=_d .NewReader ([]byte (txt ));_eegge :=&PdfParser {ObjCache :objectCache {},_eebc :_ca (_eeadb ),_fbfd :int64 (len (txt )),_ecbe :map[int64 ]bool {},_ddfac :make (map[*PdfParser ]*PdfParser )};
+_eegge ._becb .ObjectMap =make (map[int ]XrefObject );return _eegge ;};
+
+// ParserMetadata is the parser based metadata information about document.
+// The data here could be used on document verification.
+type ParserMetadata struct{_aba int ;_fee bool ;_bge [4]byte ;_fcff bool ;_bdcc bool ;_ecb bool ;_fgd bool ;_aacg bool ;_bdf bool ;};
+
+// StreamEncoder represents the interface for all PDF stream encoders.
+type StreamEncoder interface{GetFilterName ()string ;MakeDecodeParams ()PdfObject ;MakeStreamDict ()*PdfObjectDictionary ;UpdateParams (_bccg *PdfObjectDictionary );EncodeBytes (_bega []byte )([]byte ,error );DecodeBytes (_ddb []byte )([]byte ,error );
+DecodeStream (_ggbb *PdfObjectStream )([]byte ,error );};func (_eggcd *limitedReadSeeker )getError (_bddb int64 )error {switch {case _bddb < 0:return _ec .Errorf ("\u0075\u006e\u0065\u0078\u0070\u0065\u0063\u0074\u0065\u0064 \u006e\u0065\u0067\u0061\u0074\u0069\u0076e\u0020\u006f\u0066\u0066\u0073\u0065\u0074\u003a\u0020\u0025\u0064",_bddb );
+case _bddb > _eggcd ._cede :return _ec .Errorf ("u\u006e\u0065\u0078\u0070ec\u0074e\u0064\u0020\u006f\u0066\u0066s\u0065\u0074\u003a\u0020\u0025\u0064",_bddb );};return nil ;};
+
+// PdfObjectNull represents the primitive PDF null object.
+type PdfObjectNull struct{};func _fdge (_ebeg *PdfObjectStream )(*MultiEncoder ,error ){_ccag :=NewMultiEncoder ();_fbded :=_ebeg .PdfObjectDictionary ;if _fbded ==nil {return _ccag ,nil ;};var _dcfab *PdfObjectDictionary ;var _gab []PdfObject ;_cbdd :=_fbded .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");
+if _cbdd !=nil {_dfad ,_eddca :=_cbdd .(*PdfObjectDictionary );if _eddca {_dcfab =_dfad ;};_fcedf ,_cebeg :=_cbdd .(*PdfObjectArray );if _cebeg {for _ ,_beffc :=range _fcedf .Elements (){_beffc =TraceToDirectObject (_beffc );if _ffcg ,_dafc :=_beffc .(*PdfObjectDictionary );
+_dafc {_gab =append (_gab ,_ffcg );}else {_gab =append (_gab ,MakeDict ());};};};};_cbdd =_fbded .Get ("\u0046\u0069\u006c\u0074\u0065\u0072");if _cbdd ==nil {return nil ,_ec .Errorf ("\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u006d\u0069s\u0073\u0069\u006e\u0067");
+};_dcdbg ,_ebdbg :=_cbdd .(*PdfObjectArray );if !_ebdbg {return nil ,_ec .Errorf ("m\u0075\u006c\u0074\u0069\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0063\u0061\u006e\u0020\u006f\u006el\u0079\u0020\u0062\u0065\u0020\u006d\u0061\u0064\u0065\u0020fr\u006f\u006d\u0020a\u0072r\u0061\u0079");
+};for _dbeg ,_eddg :=range _dcdbg .Elements (){_ceba ,_facd :=_eddg .(*PdfObjectName );if !_facd {return nil ,_ec .Errorf ("\u006d\u0075l\u0074\u0069\u0020\u0066i\u006c\u0074e\u0072\u0020\u0061\u0072\u0072\u0061\u0079\u0020e\u006c\u0065\u006d\u0065\u006e\u0074\u0020\u006e\u006f\u0074\u0020\u0061 \u006e\u0061\u006d\u0065");
+};var _cfae PdfObject ;if _dcfab !=nil {_cfae =_dcfab ;}else {if len (_gab )> 0{if _dbeg >=len (_gab ){return nil ,_ec .Errorf ("\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0065\u006c\u0065\u006d\u0065n\u0074\u0073\u0020\u0069\u006e\u0020d\u0065\u0063\u006f\u0064\u0065\u0020\u0070\u0061\u0072\u0061\u006d\u0073\u0020a\u0072\u0072\u0061\u0079");
+};_cfae =_gab [_dbeg ];};};var _fcgc *PdfObjectDictionary ;if _aceb ,_afa :=_cfae .(*PdfObjectDictionary );_afa {_fcgc =_aceb ;};_cbg .Log .Trace ("\u004e\u0065\u0078t \u006e\u0061\u006d\u0065\u003a\u0020\u0025\u0073\u002c \u0064p\u003a \u0025v\u002c\u0020\u0064\u0050\u0061\u0072\u0061\u006d\u0073\u003a\u0020\u0025\u0076",*_ceba ,_cfae ,_fcgc );
+switch *_ceba {case StreamEncodingFilterNameFlate :_eaadf ,_bgab :=_ebb (_ebeg ,_fcgc );if _bgab !=nil {return nil ,_bgab ;};_ccag .AddEncoder (_eaadf );case StreamEncodingFilterNameLZW :_fdea ,_fgfe :=_abdb (_ebeg ,_fcgc );if _fgfe !=nil {return nil ,_fgfe ;
+};_ccag .AddEncoder (_fdea );case StreamEncodingFilterNameASCIIHex :_gbfa :=NewASCIIHexEncoder ();_ccag .AddEncoder (_gbfa );case StreamEncodingFilterNameASCII85 :_ggcgad :=NewASCII85Encoder ();_ccag .AddEncoder (_ggcgad );case StreamEncodingFilterNameDCT :_ggadc ,_acfd :=_baaf (_ebeg ,_ccag );
+if _acfd !=nil {return nil ,_acfd ;};_ccag .AddEncoder (_ggadc );_cbg .Log .Trace ("A\u0064d\u0065\u0064\u0020\u0044\u0043\u0054\u0020\u0065n\u0063\u006f\u0064\u0065r.\u002e\u002e");_cbg .Log .Trace ("\u004du\u006ct\u0069\u0020\u0065\u006e\u0063o\u0064\u0065r\u003a\u0020\u0025\u0023\u0076",_ccag );
+case StreamEncodingFilterNameCCITTFax :_cgaa ,_ebed :=_eaaa (_ebeg ,_fcgc );if _ebed !=nil {return nil ,_ebed ;};_ccag .AddEncoder (_cgaa );default:_cbg .Log .Error ("U\u006e\u0073\u0075\u0070po\u0072t\u0065\u0064\u0020\u0066\u0069l\u0074\u0065\u0072\u0020\u0025\u0073",*_ceba );
+return nil ,_ec .Errorf ("\u0069\u006eva\u006c\u0069\u0064 \u0066\u0069\u006c\u0074er \u0069n \u006d\u0075\u006c\u0074\u0069\u0020\u0066il\u0074\u0065\u0072\u0020\u0061\u0072\u0072a\u0079");};};return _ccag ,nil ;};type limitedReadSeeker struct{_bbdbf _de .ReadSeeker ;
+_cede int64 ;};func _dddbb (_ *PdfObjectStream ,_ *PdfObjectDictionary )(*RunLengthEncoder ,error ){return NewRunLengthEncoder (),nil ;};
+
+// Set sets the PdfObject at index i of the array. An error is returned if the index is outside bounds.
+func (_egbc *PdfObjectArray )Set (i int ,obj PdfObject )error {if i < 0||i >=len (_egbc ._gdgb ){return _a .New ("\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0062o\u0075\u006e\u0064\u0073");};_egbc ._gdgb [i ]=obj ;return nil ;};
+
+// IsEncrypted checks if the document is encrypted. A bool flag is returned indicating the result.
+// First time when called, will check if the Encrypt dictionary is accessible through the trailer dictionary.
+// If encrypted, prepares a crypt datastructure which can be used to authenticate and decrypt the document.
+// On failure, an error is returned.
+func (_efaca *PdfParser )IsEncrypted ()(bool ,error ){if _efaca ._feefe !=nil {return true ,nil ;}else if _efaca ._dgbb ==nil {return false ,nil ;};_cbg .Log .Trace ("\u0043\u0068\u0065c\u006b\u0069\u006e\u0067 \u0065\u006e\u0063\u0072\u0079\u0070\u0074i\u006f\u006e\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0021");
+_bggf :=_efaca ._dgbb .Get ("\u0045n\u0063\u0072\u0079\u0070\u0074");if _bggf ==nil {return false ,nil ;};_cbg .Log .Trace ("\u0049\u0073\u0020\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0065\u0064\u0021");var (_dcee *PdfObjectDictionary ;);switch _ceef :=_bggf .(type ){case *PdfObjectDictionary :_dcee =_ceef ;
+case *PdfObjectReference :_cbg .Log .Trace ("\u0030\u003a\u0020\u004c\u006f\u006f\u006b\u0020\u0075\u0070\u0020\u0072e\u0066\u0020\u0025\u0071",_ceef );_acfgf ,_bcee :=_efaca .LookupByReference (*_ceef );_cbg .Log .Trace ("\u0031\u003a\u0020%\u0071",_acfgf );
+if _bcee !=nil {return false ,_bcee ;};_daegg ,_gdff :=_acfgf .(*PdfIndirectObject );if !_gdff {_cbg .Log .Debug ("E\u006e\u0063\u0072\u0079\u0070\u0074\u0069\u006f\u006e\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u006eo\u0074\u0020\u0061\u006e\u0020\u0069\u006e\u0064\u0069\u0072ec\u0074\u0020\u006fb\u006ae\u0063\u0074");
+return false ,_a .New ("\u0074\u0079p\u0065\u0020\u0063h\u0065\u0063\u006b\u0020\u0065\u0072\u0072\u006f\u0072");};_cfge ,_gdff :=_daegg .PdfObject .(*PdfObjectDictionary );_efaca ._fcaf =_daegg ;_cbg .Log .Trace ("\u0032\u003a\u0020%\u0071",_cfge );if !_gdff {return false ,_a .New ("\u0074\u0072a\u0069\u006c\u0065\u0072 \u0045\u006ec\u0072\u0079\u0070\u0074\u0020\u006f\u0062\u006ae\u0063\u0074\u0020\u006e\u006f\u006e\u0020\u0064\u0069\u0063\u0074\u0069o\u006e\u0061\u0072\u0079");
+};_dcee =_cfge ;case *PdfObjectNull :_cbg .Log .Debug ("\u0045\u006e\u0063\u0072\u0079\u0070\u0074 \u0069\u0073\u0020a\u0020\u006e\u0075l\u006c\u0020o\u0062\u006a\u0065\u0063\u0074\u002e \u0046il\u0065\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0062\u0065\u0020\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0065\u0064\u002e");
+return false ,nil ;default:return false ,_ec .Errorf ("u\u006es\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064 \u0074\u0079\u0070\u0065: \u0025\u0054",_ceef );};_edad ,_dcaag :=PdfCryptNewDecrypt (_efaca ,_dcee ,_efaca ._dgbb );if _dcaag !=nil {return false ,_dcaag ;
+};for _ ,_ffff :=range []string {"\u0045n\u0063\u0072\u0079\u0070\u0074"}{_bbgd :=_efaca ._dgbb .Get (PdfObjectName (_ffff ));if _bbgd ==nil {continue ;};switch _defg :=_bbgd .(type ){case *PdfObjectReference :_edad ._cdd [int (_defg .ObjectNumber )]=struct{}{};
+case *PdfIndirectObject :_edad ._acfa [_defg ]=true ;_edad ._cdd [int (_defg .ObjectNumber )]=struct{}{};};};_efaca ._feefe =_edad ;_cbg .Log .Trace ("\u0043\u0072\u0079\u0070\u0074\u0065\u0072\u0020\u006f\u0062\u006a\u0065c\u0074\u0020\u0025\u0062",_edad );
+return true ,nil ;};
+
+// GetFilterName returns the name of the encoding filter.
+func (_aecb *JPXEncoder )GetFilterName ()string {return StreamEncodingFilterNameJPX };func (_cfbe *PdfCrypt )newEncryptDict ()*PdfObjectDictionary {_dge :=MakeDict ();_dge .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName ("\u0053\u0074\u0061\u006e\u0064\u0061\u0072\u0064"));
+_dge .Set ("\u0056",MakeInteger (int64 (_cfbe ._fbf .V )));_dge .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (_cfbe ._fbf .Length )));return _dge ;};
+
+// EncodeJBIG2Image encodes 'img' into jbig2 encoded bytes stream, using default encoder settings.
+func (_ccd *JBIG2Encoder )EncodeJBIG2Image (img *JBIG2Image )([]byte ,error ){const _fedgc ="c\u006f\u0072\u0065\u002eEn\u0063o\u0064\u0065\u004a\u0042\u0049G\u0032\u0049\u006d\u0061\u0067\u0065";if _dcbe :=_ccd .AddPageImage (img ,&_ccd .DefaultPageSettings );
+_dcbe !=nil {return nil ,_geg .Wrap (_dcbe ,_fedgc ,"");};return _ccd .Encode ();};
+
+// Inspect analyzes the document object structure. Returns a map of object types (by name) with the instance count
+// as value.
+func (_agdb *PdfParser )Inspect ()(map[string ]int ,error ){return _agdb .inspect ()};
+
+// GetPreviousRevisionReadSeeker returns ReadSeeker for the previous version of the Pdf document.
+func (_edbg *PdfParser )GetPreviousRevisionReadSeeker ()(_de .ReadSeeker ,error ){if _bedd :=_edbg .seekToEOFMarker (_edbg ._fbfd -_bcbc );_bedd !=nil {return nil ,_bedd ;};_dffb ,_cbfc :=_edbg ._eebc .Seek (0,_de .SeekCurrent );if _cbfc !=nil {return nil ,_cbfc ;
+};_dffb +=_bcbc ;return _fdcc (_edbg ._eebc ,_dffb );};
+
+// EncodeBytes DCT encodes the passed in slice of bytes.
+func (_afeg *DCTEncoder )EncodeBytes (data []byte )([]byte ,error ){var _gdeec _bc .Image ;if _afeg .ColorComponents ==1&&_afeg .BitsPerComponent ==8{_gdeec =&_bc .Gray {Rect :_bc .Rect (0,0,_afeg .Width ,_afeg .Height ),Pix :data ,Stride :_bce .BytesPerLine (_afeg .Width ,_afeg .BitsPerComponent ,_afeg .ColorComponents )};
+}else {var _gdb error ;_gdeec ,_gdb =_bce .NewImage (_afeg .Width ,_afeg .Height ,_afeg .BitsPerComponent ,_afeg .ColorComponents ,data ,nil ,nil );if _gdb !=nil {return nil ,_gdb ;};};_cfbcb :=_gc .Options {};_cfbcb .Quality =_afeg .Quality ;var _fgae _d .Buffer ;
+if _cgda :=_gc .Encode (&_fgae ,_gdeec ,&_cfbcb );_cgda !=nil {return nil ,_cgda ;};return _fgae .Bytes (),nil ;};
+
+// Str returns the string value of the PdfObjectString. Defined in addition to String() function to clarify that
+// this function returns the underlying string directly, whereas the String function technically could include
+// debug info.
+func (_gcfba *PdfObjectString )Str ()string {return _gcfba ._efga };
+
+// Implement the Read and Seek methods.
+func (_edd *bufferedReadSeeker )Read (p []byte )(int ,error ){return _edd ._fba .Read (p )};
+
+// MakeNull creates an PdfObjectNull.
+func MakeNull ()*PdfObjectNull {_cggf :=PdfObjectNull {};return &_cggf };func (_bgdcg *PdfParser )inspect ()(map[string ]int ,error ){_cbg .Log .Trace ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u0049\u004e\u0053P\u0045\u0043\u0054\u0020\u002d\u002d\u002d\u002d\u002d\u002d-\u002d\u002d\u002d");
+_cbg .Log .Trace ("X\u0072\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u003a");_aedfc :=map[string ]int {};_cgag :=0;_gbfb :=0;var _gfbfa []int ;for _aagag :=range _bgdcg ._becb .ObjectMap {_gfbfa =append (_gfbfa ,_aagag );};_dc .Ints (_gfbfa );_acec :=0;
+for _ ,_aeac :=range _gfbfa {_ebca :=_bgdcg ._becb .ObjectMap [_aeac ];if _ebca .ObjectNumber ==0{continue ;};_cgag ++;_cbg .Log .Trace ("\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d");_cbg .Log .Trace ("\u004c\u006f\u006f\u006bi\u006e\u0067\u0020\u0075\u0070\u0020\u006f\u0062\u006a\u0065c\u0074 \u006e\u0075\u006d\u0062\u0065\u0072\u003a \u0025\u0064",_ebca .ObjectNumber );
+_bbfa ,_fgaee :=_bgdcg .LookupByNumber (_ebca .ObjectNumber );if _fgaee !=nil {_cbg .Log .Trace ("\u0045\u0052\u0052\u004f\u0052\u003a \u0046\u0061\u0069\u006c\u0020\u0074\u006f\u0020\u006c\u006f\u006f\u006b\u0075p\u0020\u006f\u0062\u006a\u0020\u0025\u0064 \u0028\u0025\u0073\u0029",_ebca .ObjectNumber ,_fgaee );
+_gbfb ++;continue ;};_cbg .Log .Trace ("\u006fb\u006a\u003a\u0020\u0025\u0073",_bbfa );_edcg ,_efad :=_bbfa .(*PdfIndirectObject );if _efad {_cbg .Log .Trace ("\u0049N\u0044 \u004f\u004f\u0042\u004a\u0020\u0025\u0064\u003a\u0020\u0025\u0073",_ebca .ObjectNumber ,_edcg );
+_bbdcg ,_bgeff :=_edcg .PdfObject .(*PdfObjectDictionary );if _bgeff {if _addfb ,_babfa :=_bbdcg .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );_babfa {_gafb :=string (*_addfb );_cbg .Log .Trace ("\u002d\u002d\u002d\u003e\u0020\u004f\u0062\u006a\u0020\u0074\u0079\u0070e\u003a\u0020\u0025\u0073",_gafb );
+_ ,_dcbdc :=_aedfc [_gafb ];if _dcbdc {_aedfc [_gafb ]++;}else {_aedfc [_gafb ]=1;};}else if _dedbc ,_badfc :=_bbdcg .Get ("\u0053u\u0062\u0074\u0079\u0070\u0065").(*PdfObjectName );_badfc {_edege :=string (*_dedbc );_cbg .Log .Trace ("-\u002d-\u003e\u0020\u004f\u0062\u006a\u0020\u0073\u0075b\u0074\u0079\u0070\u0065: \u0025\u0073",_edege );
+_ ,_gdgcd :=_aedfc [_edege ];if _gdgcd {_aedfc [_edege ]++;}else {_aedfc [_edege ]=1;};};if _affcdc ,_cbcaa :=_bbdcg .Get ("\u0053").(*PdfObjectName );_cbcaa &&*_affcdc =="\u004a\u0061\u0076\u0061\u0053\u0063\u0072\u0069\u0070\u0074"{_ ,_fedc :=_aedfc ["\u004a\u0061\u0076\u0061\u0053\u0063\u0072\u0069\u0070\u0074"];
+if _fedc {_aedfc ["\u004a\u0061\u0076\u0061\u0053\u0063\u0072\u0069\u0070\u0074"]++;}else {_aedfc ["\u004a\u0061\u0076\u0061\u0053\u0063\u0072\u0069\u0070\u0074"]=1;};};};}else if _abcg ,_ecgbg :=_bbfa .(*PdfObjectStream );_ecgbg {if _dfga ,_aeecg :=_abcg .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );
+_aeecg {_cbg .Log .Trace ("\u002d\u002d\u003e\u0020\u0053\u0074\u0072\u0065\u0061\u006d\u0020o\u0062\u006a\u0065\u0063\u0074\u0020\u0074\u0079\u0070\u0065:\u0020\u0025\u0073",*_dfga );_ecbg :=string (*_dfga );_aedfc [_ecbg ]++;};}else {_eacg ,_cdggf :=_bbfa .(*PdfObjectDictionary );
+if _cdggf {_bdgc ,_eabdg :=_eacg .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );if _eabdg {_edba :=string (*_bdgc );_cbg .Log .Trace ("\u002d-\u002d \u006f\u0062\u006a\u0020\u0074\u0079\u0070\u0065\u0020\u0025\u0073",_edba );_aedfc [_edba ]++;};};
+_cbg .Log .Trace ("\u0044\u0049\u0052\u0045\u0043\u0054\u0020\u004f\u0042\u004a\u0020\u0025d\u003a\u0020\u0025\u0073",_ebca .ObjectNumber ,_bbfa );};_acec ++;};_cbg .Log .Trace ("\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u0045\u004fF\u0020\u0049\u004e\u0053\u0050\u0045\u0043T\u0020\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d\u002d");
+_cbg .Log .Trace ("\u003d=\u003d\u003d\u003d\u003d\u003d");_cbg .Log .Trace ("\u004f\u0062j\u0065\u0063\u0074 \u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064",_cgag );_cbg .Log .Trace ("\u0046\u0061\u0069\u006c\u0065\u0064\u0020\u006c\u006f\u006f\u006b\u0075p\u003a\u0020\u0025\u0064",_gbfb );
+for _beaf ,_dbgg :=range _aedfc {_cbg .Log .Trace ("\u0025\u0073\u003a\u0020\u0025\u0064",_beaf ,_dbgg );};_cbg .Log .Trace ("\u003d=\u003d\u003d\u003d\u003d\u003d");if len (_bgdcg ._becb .ObjectMap )< 1{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0054\u0068\u0069\u0073 \u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074 \u0069s\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0028\u0078\u0072\u0065\u0066\u0020\u0074\u0061\u0062l\u0065\u0020\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0021\u0029");
+return nil ,_ec .Errorf ("\u0069\u006ev\u0061\u006c\u0069\u0064 \u0064\u006fc\u0075\u006d\u0065\u006e\u0074\u0020\u0028\u0078r\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u0020\u006d\u0069\u0073s\u0069\u006e\u0067\u0029");};_eeae ,_dbade :=_aedfc ["\u0046\u006f\u006e\u0074"];
+if !_dbade ||_eeae < 2{_cbg .Log .Trace ("\u0054\u0068\u0069s \u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020i\u0073 \u0070r\u006fb\u0061\u0062\u006c\u0079\u0020\u0073\u0063\u0061\u006e\u006e\u0065\u0064\u0021");}else {_cbg .Log .Trace ("\u0054\u0068\u0069\u0073\u0020\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u0020\u0069\u0073\u0020\u0076\u0061\u006c\u0069\u0064\u0020\u0066o\u0072\u0020\u0065\u0078\u0074r\u0061\u0063t\u0069\u006f\u006e\u0021");
+};return _aedfc ,nil ;};
+
+// PdfObjectReference represents the primitive PDF reference object.
+type PdfObjectReference struct{_afgde *PdfParser ;ObjectNumber int64 ;GenerationNumber int64 ;};
+
+// IsDelimiter checks if a character represents a delimiter.
+func IsDelimiter (c byte )bool {return c =='('||c ==')'||c =='<'||c =='>'||c =='['||c ==']'||c =='{'||c =='}'||c =='/'||c =='%';};var _gead =_ee .MustCompile ("\u005c\u0073\u002a\u0078\u0072\u0065\u0066\u005c\u0073\u002a");
+
+// Elements returns a slice of the PdfObject elements in the array.
+func (_gcab *PdfObjectArray )Elements ()[]PdfObject {if _gcab ==nil {return nil ;};return _gcab ._gdgb ;};var _dddf =_ee .MustCompile ("\u0028\u005c\u0064\u002b\u0029\u005c\u0073\u002b\u0028\u005c\u0064+\u0029\u005c\u0073\u002b\u0028\u005b\u006e\u0066\u005d\u0029\\\u0073\u002a\u0024");
+
+
+// ToInt64Slice returns a slice of all array elements as an int64 slice. An error is returned if the
+// array non-integer objects. Each element can only be PdfObjectInteger.
+func (_ddfb *PdfObjectArray )ToInt64Slice ()([]int64 ,error ){var _dgfc []int64 ;for _ ,_ccgaf :=range _ddfb .Elements (){if _cbcb ,_dcbdb :=_ccgaf .(*PdfObjectInteger );_dcbdb {_dgfc =append (_dgfc ,int64 (*_cbcb ));}else {return nil ,ErrTypeError ;};
+};return _dgfc ,nil ;};
+
+// Len returns the number of elements in the array.
+func (_aaa *PdfObjectArray )Len ()int {if _aaa ==nil {return 0;};return len (_aaa ._gdgb );};func (_adgc *PdfParser )resolveReference (_acdd *PdfObjectReference )(PdfObject ,bool ,error ){_aabb ,_abcdc :=_adgc .ObjCache [int (_acdd .ObjectNumber )];if _abcdc {return _aabb ,true ,nil ;
+};_cdgd ,_bgfb :=_adgc .LookupByReference (*_acdd );if _bgfb !=nil {return nil ,false ,_bgfb ;};_adgc .ObjCache [int (_acdd .ObjectNumber )]=_cdgd ;return _cdgd ,false ,nil ;};
+
+// GetStream returns the *PdfObjectStream represented by the PdfObject. On type mismatch the found bool flag is
+// false and a nil pointer is returned.
+func GetStream (obj PdfObject )(_acfb *PdfObjectStream ,_faab bool ){obj =ResolveReference (obj );_acfb ,_faab =obj .(*PdfObjectStream );return _acfb ,_faab ;};
+
+// Resolve resolves the reference and returns the indirect or stream object.
+// If the reference cannot be resolved, a *PdfObjectNull object is returned.
+func (_ecdd *PdfObjectReference )Resolve ()PdfObject {if _ecdd ._afgde ==nil {return MakeNull ();};_gcge ,_ ,_baadg :=_ecdd ._afgde .resolveReference (_ecdd );if _baadg !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0072\u0065\u0073\u006f\u006cv\u0069\u006e\u0067\u0020\u0072\u0065\u0066\u0065r\u0065n\u0063\u0065\u003a\u0020\u0025\u0076\u0020\u002d\u0020\u0072\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067 \u006e\u0075\u006c\u006c\u0020\u006f\u0062\u006a\u0065\u0063\u0074",_baadg );
+return MakeNull ();};if _gcge ==nil {_cbg .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020\u0072\u0065\u0073ol\u0076\u0069\u006e\u0067\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063\u0065:\u0020\u006ei\u006c\u0020\u006fb\u006a\u0065\u0063\u0074\u0020\u002d\u0020\u0072\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067 \u0061\u0020nu\u006c\u006c\u0020o\u0062\u006a\u0065\u0063\u0074");
+return MakeNull ();};return _gcge ;};func (_efe *PdfParser )lookupObjectViaOS (_cfb int ,_fga int )(PdfObject ,error ){var _bf *_d .Reader ;var _fd objectStream ;var _cgg bool ;_fd ,_cgg =_efe ._ffbc [_cfb ];if !_cgg {_cab ,_fcb :=_efe .LookupByNumber (_cfb );
+if _fcb !=nil {_cbg .Log .Debug ("\u004d\u0069ss\u0069\u006e\u0067 \u006f\u0062\u006a\u0065ct \u0073tr\u0065\u0061\u006d\u0020\u0077\u0069\u0074h \u006e\u0075\u006d\u0062\u0065\u0072\u0020%\u0064",_cfb );return nil ,_fcb ;};_cga ,_afc :=_cab .(*PdfObjectStream );
+if !_afc {return nil ,_a .New ("i\u006e\u0076\u0061\u006cid\u0020o\u0062\u006a\u0065\u0063\u0074 \u0073\u0074\u0072\u0065\u0061\u006d");};if _efe ._feefe !=nil &&!_efe ._feefe .isDecrypted (_cga ){return nil ,_a .New ("\u006e\u0065\u0065\u0064\u0020\u0074\u006f\u0020\u0064\u0065\u0063r\u0079\u0070\u0074\u0020\u0074\u0068\u0065\u0020\u0073\u0074r\u0065\u0061\u006d");
+};_feda :=_cga .PdfObjectDictionary ;_cbg .Log .Trace ("\u0073o\u0020\u0064\u003a\u0020\u0025\u0073\n",_feda .String ());_ece ,_afc :=_feda .Get ("\u0054\u0079\u0070\u0065").(*PdfObjectName );if !_afc {_cbg .Log .Debug ("\u0045\u0052R\u004f\u0052\u003a\u0020\u004f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0061\u006c\u0077\u0061\u0079\u0073\u0020\u0068\u0061\u0076\u0065\u0020\u0061\u0020\u0054\u0079\u0070\u0065");
+return nil ,_a .New ("\u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0074\u0072\u0065a\u006d\u0020\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020T\u0079\u0070\u0065");};if _cg .ToLower (string (*_ece ))!="\u006f\u0062\u006a\u0073\u0074\u006d"{_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u004f\u0062\u006a\u0065\u0063\u0074\u0020\u0073\u0074\u0072\u0065a\u006d\u0020\u0074\u0079\u0070\u0065\u0020s\u0068\u0061\u006c\u006c\u0020\u0061\u006c\u0077\u0061\u0079\u0073 \u0062\u0065\u0020\u004f\u0062\u006a\u0053\u0074\u006d\u0020\u0021");
+return nil ,_a .New ("\u006f\u0062\u006a\u0065c\u0074\u0020\u0073\u0074\u0072\u0065\u0061\u006d\u0020\u0074y\u0070e\u0020\u0021\u003d\u0020\u004f\u0062\u006aS\u0074\u006d");};N ,_afc :=_feda .Get ("\u004e").(*PdfObjectInteger );if !_afc {return nil ,_a .New ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u004e\u0020i\u006e\u0020\u0073\u0074\u0072\u0065\u0061m\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079");
+};_gga ,_afc :=_feda .Get ("\u0046\u0069\u0072s\u0074").(*PdfObjectInteger );if !_afc {return nil ,_a .New ("\u0069\u006e\u0076al\u0069\u0064\u0020\u0046\u0069\u0072\u0073\u0074\u0020i\u006e \u0073t\u0072e\u0061\u006d\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079");
+};_cbg .Log .Trace ("\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0073\u0020\u006eu\u006d\u0062\u0065\u0072\u0020\u006f\u0066 \u006f\u0062\u006a\u0065\u0063\u0074\u0073\u003a\u0020\u0025\u0064",_ece ,*N );_dca ,_fcb :=DecodeStream (_cga );if _fcb !=nil {return nil ,_fcb ;
+};_cbg .Log .Trace ("D\u0065\u0063\u006f\u0064\u0065\u0064\u003a\u0020\u0025\u0073",_dca );_afcf :=_efe .GetFileOffset ();defer func (){_efe .SetFileOffset (_afcf )}();_bf =_d .NewReader (_dca );_efe ._eebc ._fba =_eb .NewReader (_bf );_cbg .Log .Trace ("\u0050a\u0072s\u0069\u006e\u0067\u0020\u006ff\u0066\u0073e\u0074\u0020\u006d\u0061\u0070");
+_cef :=map[int ]int64 {};for _gafa :=0;_gafa < int (*N );_gafa ++{_efe .skipSpaces ();_bfb ,_aac :=_efe .parseNumber ();if _aac !=nil {return nil ,_aac ;};_cbb ,_ag :=_bfb .(*PdfObjectInteger );if !_ag {return nil ,_a .New ("\u0069\u006e\u0076al\u0069\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074 \u0073t\u0072e\u0061m\u0020\u006f\u0066\u0066\u0073\u0065\u0074\u0020\u0074\u0061\u0062\u006c\u0065");
+};_efe .skipSpaces ();_bfb ,_aac =_efe .parseNumber ();if _aac !=nil {return nil ,_aac ;};_gad ,_ag :=_bfb .(*PdfObjectInteger );if !_ag {return nil ,_a .New ("\u0069\u006e\u0076al\u0069\u0064\u0020\u006f\u0062\u006a\u0065\u0063\u0074 \u0073t\u0072e\u0061m\u0020\u006f\u0066\u0066\u0073\u0065\u0074\u0020\u0074\u0061\u0062\u006c\u0065");
+};_cbg .Log .Trace ("\u006f\u0062j\u0020\u0025\u0064 \u006f\u0066\u0066\u0073\u0065\u0074\u0020\u0025\u0064",*_cbb ,*_gad );_cef [int (*_cbb )]=int64 (*_gga +*_gad );};_fd =objectStream {N :int (*N ),_dga :_dca ,_fbd :_cef };_efe ._ffbc [_cfb ]=_fd ;}else {_bba :=_efe .GetFileOffset ();
+defer func (){_efe .SetFileOffset (_bba )}();_bf =_d .NewReader (_fd ._dga );_efe ._eebc ._fba =_eb .NewReader (_bf );};_cc :=_fd ._fbd [_fga ];_cbg .Log .Trace ("\u0041\u0043\u0054\u0055AL\u0020\u006f\u0066\u0066\u0073\u0065\u0074\u005b\u0025\u0064\u005d\u0020\u003d\u0020%\u0064",_fga ,_cc );
+_bf .Seek (_cc ,_de .SeekStart );_efe ._eebc ._fba =_eb .NewReader (_bf );_cgb ,_ :=_efe ._eebc ._fba .Peek (100);_cbg .Log .Trace ("\u004f\u0042\u004a\u0020\u0070\u0065\u0065\u006b\u0020\u0022\u0025\u0073\u0022",string (_cgb ));_fdf ,_gac :=_efe .parseObject ();
+if _gac !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020\u0046\u0061\u0069\u006c \u0074\u006f\u0020\u0072\u0065\u0061\u0064 \u006f\u0062\u006a\u0065\u0063\u0074\u0020\u0028\u0025\u0073\u0029",_gac );return nil ,_gac ;};if _fdf ==nil {return nil ,_a .New ("o\u0062\u006a\u0065\u0063t \u0063a\u006e\u006e\u006f\u0074\u0020b\u0065\u0020\u006e\u0075\u006c\u006c");
+};_fbdd :=PdfIndirectObject {};_fbdd .ObjectNumber =int64 (_fga );_fbdd .PdfObject =_fdf ;_fbdd ._afgde =_efe ;return &_fbdd ,nil ;};
+
+// Get returns the i-th element of the array or nil if out of bounds (by index).
+func (_acagc *PdfObjectArray )Get (i int )PdfObject {if _acagc ==nil ||i >=len (_acagc ._gdgb )||i < 0{return nil ;};return _acagc ._gdgb [i ];};
+
+// NewJBIG2Encoder creates a new JBIG2Encoder.
+func NewJBIG2Encoder ()*JBIG2Encoder {return &JBIG2Encoder {_beffg :_fed .InitEncodeDocument (false )}};func (_ggede *PdfParser )parseBool ()(PdfObjectBool ,error ){_cfg ,_cadf :=_ggede ._eebc .Peek (4);if _cadf !=nil {return PdfObjectBool (false ),_cadf ;
+};if (len (_cfg )>=4)&&(string (_cfg [:4])=="\u0074\u0072\u0075\u0065"){_ggede ._eebc .Discard (4);return PdfObjectBool (true ),nil ;};_cfg ,_cadf =_ggede ._eebc .Peek (5);if _cadf !=nil {return PdfObjectBool (false ),_cadf ;};if (len (_cfg )>=5)&&(string (_cfg [:5])=="\u0066\u0061\u006cs\u0065"){_ggede ._eebc .Discard (5);
+return PdfObjectBool (false ),nil ;};return PdfObjectBool (false ),_a .New ("\u0075n\u0065\u0078\u0070\u0065c\u0074\u0065\u0064\u0020\u0062o\u006fl\u0065a\u006e\u0020\u0073\u0074\u0072\u0069\u006eg");};func (_abgde *PdfParser )checkLinearizedInformation (_dgfd *PdfObjectDictionary )(bool ,error ){var _cedb error ;
+_abgde ._gadba ,_cedb =GetNumberAsInt64 (_dgfd .Get ("\u004c"));if _cedb !=nil {return false ,_cedb ;};_cedb =_abgde .seekToEOFMarker (_abgde ._gadba );switch _cedb {case nil :return true ,nil ;case _aceg :return false ,nil ;default:return false ,_cedb ;
+};};func _baaf (_aed *PdfObjectStream ,_daggb *MultiEncoder )(*DCTEncoder ,error ){_cfdf :=NewDCTEncoder ();_adee :=_aed .PdfObjectDictionary ;if _adee ==nil {return _cfdf ,nil ;};_cfed :=_aed .Stream ;if _daggb !=nil {_gdec ,_ggbf :=_daggb .DecodeBytes (_cfed );
+if _ggbf !=nil {return nil ,_ggbf ;};_cfed =_gdec ;};_dadb :=_d .NewReader (_cfed );_feeff ,_fedf :=_gc .DecodeConfig (_dadb );if _fedf !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072or\u0020\u0064\u0065\u0063\u006f\u0064\u0069\u006e\u0067\u0020\u0066\u0069\u006c\u0065\u003a\u0020\u0025\u0073",_fedf );
+return nil ,_fedf ;};switch _feeff .ColorModel {case _be .RGBAModel :_cfdf .BitsPerComponent =8;_cfdf .ColorComponents =3;_cfdf .Decode =[]float64 {0.0,1.0,0.0,1.0,0.0,1.0};case _be .RGBA64Model :_cfdf .BitsPerComponent =16;_cfdf .ColorComponents =3;_cfdf .Decode =[]float64 {0.0,1.0,0.0,1.0,0.0,1.0};
+case _be .GrayModel :_cfdf .BitsPerComponent =8;_cfdf .ColorComponents =1;_cfdf .Decode =[]float64 {0.0,1.0};case _be .Gray16Model :_cfdf .BitsPerComponent =16;_cfdf .ColorComponents =1;_cfdf .Decode =[]float64 {0.0,1.0};case _be .CMYKModel :_cfdf .BitsPerComponent =8;
+_cfdf .ColorComponents =4;_cfdf .Decode =[]float64 {0.0,1.0,0.0,1.0,0.0,1.0,0.0,1.0};case _be .YCbCrModel :_cfdf .BitsPerComponent =8;_cfdf .ColorComponents =3;_cfdf .Decode =[]float64 {0.0,1.0,0.0,1.0,0.0,1.0};default:return nil ,_a .New ("\u0075\u006e\u0073up\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0063\u006f\u006c\u006f\u0072\u0020\u006d\u006f\u0064\u0065\u006c");
+};_cfdf .Width =_feeff .Width ;_cfdf .Height =_feeff .Height ;_cbg .Log .Trace ("\u0044\u0043T\u0020\u0045\u006ec\u006f\u0064\u0065\u0072\u003a\u0020\u0025\u002b\u0076",_cfdf );_cfdf .Quality =DefaultJPEGQuality ;_eede ,_eefe :=GetArray (_adee .Get ("\u0044\u0065\u0063\u006f\u0064\u0065"));
+if _eefe {_bbdc ,_ffgf :=_eede .ToFloat64Array ();if _ffgf !=nil {return _cfdf ,_ffgf ;};_cfdf .Decode =_bbdc ;};return _cfdf ,nil ;};
+
+// CCITTFaxEncoder implements Group3 and Group4 facsimile (fax) encoder/decoder.
+type CCITTFaxEncoder struct{K int ;EndOfLine bool ;EncodedByteAlign bool ;Columns int ;Rows int ;EndOfBlock bool ;BlackIs1 bool ;DamagedRowsBeforeError int ;};
+
+// Bytes returns the PdfObjectString content as a []byte array.
+func (_acdg *PdfObjectString )Bytes ()[]byte {return []byte (_acdg ._efga )};
+
+// EncodeBytes encodes data into ASCII85 encoded format.
+func (_cedd *ASCII85Encoder )EncodeBytes (data []byte )([]byte ,error ){var _ecgf _d .Buffer ;for _ecc :=0;_ecc < len (data );_ecc +=4{_gbaf :=data [_ecc ];_ecda :=1;_dfdd :=byte (0);if _ecc +1< len (data ){_dfdd =data [_ecc +1];_ecda ++;};_ceee :=byte (0);
+if _ecc +2< len (data ){_ceee =data [_ecc +2];_ecda ++;};_affc :=byte (0);if _ecc +3< len (data ){_affc =data [_ecc +3];_ecda ++;};_fabc :=(uint32 (_gbaf )<<24)|(uint32 (_dfdd )<<16)|(uint32 (_ceee )<<8)|uint32 (_affc );if _fabc ==0{_ecgf .WriteByte ('z');
+}else {_dage :=_cedd .base256Tobase85 (_fabc );for _ ,_bdgbe :=range _dage [:_ecda +1]{_ecgf .WriteByte (_bdgbe +'!');};};};_ecgf .WriteString ("\u007e\u003e");return _ecgf .Bytes (),nil ;};
+
+// Get returns the PdfObject corresponding to the specified key.
+// Returns a nil value if the key is not set.
+func (_efecc *PdfObjectDictionary )Get (key PdfObjectName )PdfObject {_efecc ._dfdgf .Lock ();defer _efecc ._dfdgf .Unlock ();_ccfcf ,_effdf :=_efecc ._cdab [key ];if !_effdf {return nil ;};return _ccfcf ;};
+
+// NewCompliancePdfParser creates a new PdfParser that will parse input reader with the focus on extracting more metadata, which
+// might affect performance of the regular PdfParser this function.
+func NewCompliancePdfParser (rs _de .ReadSeeker )(_bgc *PdfParser ,_adea error ){_bgc =&PdfParser {_eebc :_ca (rs ),ObjCache :make (objectCache ),_ecbe :map[int64 ]bool {},_cbce :true ,_ddfac :make (map[*PdfParser ]*PdfParser )};if _adea =_bgc .parseDetailedHeader ();
+_adea !=nil {return nil ,_adea ;};if _bgc ._dgbb ,_adea =_bgc .loadXrefs ();_adea !=nil {_cbg .Log .Debug ("\u0045\u0052RO\u0052\u003a\u0020F\u0061\u0069\u006c\u0065d t\u006f l\u006f\u0061\u0064\u0020\u0078\u0072\u0065f \u0074\u0061\u0062\u006c\u0065\u0021\u0020%\u0073",_adea );
+return nil ,_adea ;};_cbg .Log .Trace ("T\u0072\u0061\u0069\u006c\u0065\u0072\u003a\u0020\u0025\u0073",_bgc ._dgbb );if len (_bgc ._becb .ObjectMap )==0{return nil ,_ec .Errorf ("\u0065\u006d\u0070\u0074\u0079\u0020\u0058\u0052\u0045\u0046\u0020t\u0061\u0062\u006c\u0065\u0020\u002d\u0020\u0049\u006e\u0076a\u006c\u0069\u0064");
+};return _bgc ,nil ;};
+
+// Discard discards the next n bytes from the buffered reader.
+func (_fbaf *bufferedReadSeeker )Discard (n int )(int ,error ){return _fbaf ._fba .Discard (n )};
+
+// HasInvalidSeparationAfterXRef implements core.ParserMetadata interface.
+func (_fgad ParserMetadata )HasInvalidSeparationAfterXRef ()bool {return _fgad ._bdf };
+
+// Keys returns the list of keys in the dictionary.
+// If `d` is nil returns a nil slice.
+func (_fdgea *PdfObjectDictionary )Keys ()[]PdfObjectName {if _fdgea ==nil {return nil ;};return _fdgea ._ggegg ;};
+
+// Len returns the number of elements in the streams.
+func (_fgbd *PdfObjectStreams )Len ()int {if _fgbd ==nil {return 0;};return len (_fgbd ._face );};
+
+// RawEncoder implements Raw encoder/decoder (no encoding, pass through)
+type RawEncoder struct{};
+
+// NewParser creates a new parser for a PDF file via ReadSeeker. Loads the cross reference stream and trailer.
+// An error is returned on failure.
+func NewParser (rs _de .ReadSeeker )(*PdfParser ,error ){_acfae :=&PdfParser {_eebc :_ca (rs ),ObjCache :make (objectCache ),_ecbe :map[int64 ]bool {},_acc :make ([]int64 ,0),_ddfac :make (map[*PdfParser ]*PdfParser )};_cdgg :=_acfae .initParser ();if _cdgg !=nil {return nil ,_cdgg ;
+};return _acfae ,nil ;};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_ebfd *RawEncoder )MakeStreamDict ()*PdfObjectDictionary {return MakeDict ()};var _bcd =_ea .Pool {New :func ()interface{}{return new (_d .Buffer )}};func (_ggbba *PdfObjectFloat )String ()string {return _ec .Sprintf ("\u0025\u0066",*_ggbba )};
+
+// GetFilterName returns the name of the encoding filter.
+func (_agfdb *ASCII85Encoder )GetFilterName ()string {return StreamEncodingFilterNameASCII85 };
+
+// GetInt returns the *PdfObjectBool object that is represented by a PdfObject either directly or indirectly
+// within an indirect object. The bool flag indicates whether a match was found.
+func GetInt (obj PdfObject )(_ddeg *PdfObjectInteger ,_acgde bool ){_ddeg ,_acgde =TraceToDirectObject (obj ).(*PdfObjectInteger );return _ddeg ,_acgde ;};
+
+// SetFileOffset sets the file to an offset position and resets buffer.
+func (_fddb *PdfParser )SetFileOffset (offset int64 ){_fddb ._eebc .SetFileOffset (offset )};
+
+// RGBToGrayscale converts RGB color values to grayscale using the standard luminance formula.
+//
+// Parameters r, g, b are expected to be integers in the range [0, 255].
+//
+// The coefficient used in the formula to convert RGB values to grayscale.
+// This formula is based on the luminance perception of the human eye,
+// which is more sensitive to green light and less sensitive to blue light.
+// The full formula is: [ gray = 0.299 * R + 0.587 * G + 0.114 * B ]
+//
+// This implementation uses integer arithmetic for better performance by using
+// scaled coefficients: 299, 587, 114 (scaled by 1000).
+func RGBToGrayscale (r ,g ,b int )int {_cfdbf :=299*r +587*g +114*b ;return _cfdbf /1000};
+
+// MultiEncoder supports serial encoding.
+type MultiEncoder struct{_acg []StreamEncoder };func _facec (_ddec string )(int ,int ,error ){_ffdg :=_ddfff .FindStringSubmatch (_ddec );if len (_ffdg )< 3{return 0,0,_a .New ("\u0075\u006e\u0061b\u006c\u0065\u0020\u0074\u006f\u0020\u0064\u0065\u0074\u0065\u0063\u0074\u0020\u0069\u006e\u0064\u0069\u0072\u0065\u0063\u0074\u0020\u006f\u0062\u006a\u0065\u0063\u0074\u0020s\u0069\u0067\u006e\u0061\u0074\u0075\u0072\u0065");
+};_feba ,_ :=_b .Atoi (_ffdg [1]);_gecda ,_ :=_b .Atoi (_ffdg [2]);return _feba ,_gecda ,nil ;};
+
+// GetString returns the *PdfObjectString represented by the PdfObject directly or indirectly within an indirect
+// object. On type mismatch the found bool flag is false and a nil pointer is returned.
+func GetString (obj PdfObject )(_fbaff *PdfObjectString ,_bfba bool ){_fbaff ,_bfba =TraceToDirectObject (obj ).(*PdfObjectString );return _fbaff ,_bfba ;};
+
+// DecodeBytes returns the passed in slice of bytes.
+// The purpose of the method is to satisfy the StreamEncoder interface.
+func (_bcadd *RawEncoder )DecodeBytes (encoded []byte )([]byte ,error ){return encoded ,nil };
+
+// GetNameVal returns the string value represented by the PdfObject directly or indirectly if
+// contained within an indirect object. On type mismatch the found bool flag returned is false and
+// an empty string is returned.
+func GetNameVal (obj PdfObject )(_bceb string ,_bbcdb bool ){_efdb ,_bbcdb :=TraceToDirectObject (obj ).(*PdfObjectName );if _bbcdb {return string (*_efdb ),true ;};return ;};func _aaf (_egf *_db .StdEncryptDict ,_ddc *PdfObjectDictionary ){_ddc .Set ("\u0052",MakeInteger (int64 (_egf .R )));
+_ddc .Set ("\u0050",MakeInteger (int64 (_egf .P )));_ddc .Set ("\u004f",MakeStringFromBytes (_egf .O ));_ddc .Set ("\u0055",MakeStringFromBytes (_egf .U ));if _egf .R >=5{_ddc .Set ("\u004f\u0045",MakeStringFromBytes (_egf .OE ));_ddc .Set ("\u0055\u0045",MakeStringFromBytes (_egf .UE ));
+_ddc .Set ("\u0045n\u0063r\u0079\u0070\u0074\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061",MakeBool (_egf .EncryptMetadata ));if _egf .R > 5{_ddc .Set ("\u0050\u0065\u0072m\u0073",MakeStringFromBytes (_egf .Perms ));};};};
+
+// ReadBytes reads until the first occurrence of delim in the buffered reader.
+func (_ceb *bufferedReadSeeker )ReadBytes (delim byte )([]byte ,error ){_ada ,_bced :=_ceb ._fba .ReadBytes (delim );if _bced !=nil {return nil ,_bced ;};return _ada ,nil ;};func (_babdc *PdfParser )repairRebuildXrefsTopDown ()(*XrefTable ,error ){if _babdc ._gbag {return nil ,_ec .Errorf ("\u0072\u0065\u0070\u0061\u0069\u0072\u0020\u0066\u0061\u0069\u006c\u0065\u0064");
+};_babdc ._gbag =true ;_babdc ._eebc .Seek (0,_de .SeekStart );_aeebd :=20;_aadg :=make ([]byte ,_aeebd );_egdea :=XrefTable {};_egdea .ObjectMap =make (map[int ]XrefObject );for {_fcgdcc ,_cfdb :=_babdc ._eebc .ReadByte ();if _cfdb !=nil {if _cfdb ==_de .EOF {break ;
+}else {return nil ,_cfdb ;};};if _fcgdcc =='j'&&_aadg [_aeebd -1]=='b'&&_aadg [_aeebd -2]=='o'&&IsWhiteSpace (_aadg [_aeebd -3]){_dcea :=_aeebd -4;for IsWhiteSpace (_aadg [_dcea ])&&_dcea > 0{_dcea --;};if _dcea ==0||!IsDecimalDigit (_aadg [_dcea ]){continue ;
+};for IsDecimalDigit (_aadg [_dcea ])&&_dcea > 0{_dcea --;};if _dcea ==0||!IsWhiteSpace (_aadg [_dcea ]){continue ;};for IsWhiteSpace (_aadg [_dcea ])&&_dcea > 0{_dcea --;};if _dcea ==0||!IsDecimalDigit (_aadg [_dcea ]){continue ;};for IsDecimalDigit (_aadg [_dcea ])&&_dcea > 0{_dcea --;
+};if _dcea ==0{continue ;};_bfcg :=_babdc .GetFileOffset ()-int64 (_aeebd -_dcea );_dacd :=append (_aadg [_dcea +1:],_fcgdcc );_gcbb ,_acdb ,_ecgc :=_facec (string (_dacd ));if _ecgc !=nil {_cbg .Log .Debug ("\u0055\u006e\u0061\u0062\u006c\u0065 \u0074\u006f\u0020\u0070\u0061\u0072\u0073\u0065\u0020\u006f\u0062\u006a\u0065c\u0074\u0020\u006e\u0075\u006d\u0062\u0065r\u003a\u0020\u0025\u0076",_ecgc );
+return nil ,_ecgc ;};if _cegf ,_aagcf :=_egdea .ObjectMap [_gcbb ];!_aagcf ||_cegf .Generation <=_acdb {_aedee :=XrefObject {};_aedee .XType =XrefTypeTableEntry ;_aedee .ObjectNumber =_gcbb ;_aedee .Generation =_acdb ;_aedee .Offset =_bfcg ;_egdea .ObjectMap [_gcbb ]=_aedee ;
+};};_aadg =append (_aadg [1:_aeebd ],_fcgdcc );};_babdc ._febe =nil ;return &_egdea ,nil ;};
+
+// EqualObjects returns true if `obj1` and `obj2` have the same contents.
+//
+// NOTE: It is a good idea to flatten obj1 and obj2 with FlattenObject before calling this function
+// so that contents, rather than references, can be compared.
+func EqualObjects (obj1 ,obj2 PdfObject )bool {return _gcfbf (obj1 ,obj2 ,0)};type objectStream struct{N int ;_dga []byte ;_fbd map[int ]int64 ;};
+
+// MakeDecodeParams makes a new instance of an encoding dictionary based on
+// the current encoder settings.
+func (_bgef *LZWEncoder )MakeDecodeParams ()PdfObject {if _bgef .Predictor > 1{_acad :=MakeDict ();_acad .Set ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr",MakeInteger (int64 (_bgef .Predictor )));if _bgef .BitsPerComponent !=8{_acad .Set ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074",MakeInteger (int64 (_bgef .BitsPerComponent )));
+};if _bgef .Columns !=1{_acad .Set ("\u0043o\u006c\u0075\u006d\u006e\u0073",MakeInteger (int64 (_bgef .Columns )));};if _bgef .Colors !=1{_acad .Set ("\u0043\u006f\u006c\u006f\u0072\u0073",MakeInteger (int64 (_bgef .Colors )));};return _acad ;};return nil ;
+};
+
+// RegisterCustomStreamEncoder register a custom encoder handler for certain filter.
+func RegisterCustomStreamEncoder (filterName string ,customStreamEncoder StreamEncoder ){_aedeef .Store (filterName ,customStreamEncoder );};
+
+// GetFilterName returns the name of the encoding filter.
+func (_dfce *CCITTFaxEncoder )GetFilterName ()string {return StreamEncodingFilterNameCCITTFax };func _cagb ()string {return _cbg .Version };
+
+// GetObjectStreams returns the *PdfObjectStreams represented by the PdfObject. On type mismatch the found bool flag is
+// false and a nil pointer is returned.
+func GetObjectStreams (obj PdfObject )(_deffd *PdfObjectStreams ,_fcdc bool ){_deffd ,_fcdc =obj .(*PdfObjectStreams );return _deffd ,_fcdc ;};
+
+// JBIG2Encoder implements both jbig2 encoder and the decoder. The encoder allows to encode
+// provided images (best used document scans) in multiple way. By default it uses single page generic
+// encoder. It allows to store lossless data as a single segment.
+// In order to store multiple image pages use the 'FileMode' which allows to store more pages within single jbig2 document.
+// WIP: In order to obtain better compression results the encoder would allow to encode the input in a
+// lossy or lossless way with a component (symbol) mode. It divides the image into components.
+// Then checks if any component is 'similar' to the others and maps them together. The symbol classes are stored
+// in the dictionary. Then the encoder creates text regions which uses the related symbol classes to fill it's space.
+// The similarity is defined by the 'Threshold' variable (default: 0.95). The less the value is, the more components
+// matches to single class, thus the compression is better, but the result might become lossy.
+type JBIG2Encoder struct{
+
+// These values are required to be set for the 'EncodeBytes' method.
+// ColorComponents defines the number of color components for provided image.
+ColorComponents int ;
+
+// BitsPerComponent is the number of bits that stores per color component
+BitsPerComponent int ;
+
+// Width is the width of the image to encode
+Width int ;
+
+// Height is the height of the image to encode.
+Height int ;_beffg *_fed .Document ;
+
+// Globals are the JBIG2 global segments.
+Globals _bb .Globals ;
+
+// IsChocolateData defines if the data is encoded such that
+// binary data '1' means black and '0' white.
+// otherwise the data is called vanilla.
+// Naming convention taken from: 'https://en.wikipedia.org/wiki/Binary_image#Interpretation'
+IsChocolateData bool ;
+
+// DefaultPageSettings are the settings parameters used by the jbig2 encoder.
+DefaultPageSettings JBIG2EncoderSettings ;};type objectStreams map[int ]objectStream ;
+
+// JBIG2Image is the image structure used by the jbig2 encoder. Its Data must be in a
+// 1 bit per component and 1 component per pixel (1bpp). In order to create binary image
+// use GoImageToJBIG2 function. If the image data contains the row bytes padding set the HasPadding to true.
+type JBIG2Image struct{
+
+// Width and Height defines the image boundaries.
+Width ,Height int ;
+
+// Data is the byte slice data for the input image
+Data []byte ;
+
+// HasPadding is the attribute that defines if the last byte of the data in the row contains
+// 0 bits padding.
+HasPadding bool ;};
+
+// String returns a string describing `streams`.
+func (_gbdeb *PdfObjectStreams )String ()string {return _ec .Sprintf ("\u004f\u0062j\u0065\u0063\u0074 \u0073\u0074\u0072\u0065\u0061\u006d\u0020\u0025\u0064",_gbdeb .ObjectNumber );};var _eeaf =_ee .MustCompile ("\u0025P\u0044F\u002d\u0028\u005c\u0064\u0029\u005c\u002e\u0028\u005c\u0064\u0029");
+
+
+// JPXEncoder implements JPX encoder/decoder (dummy, for now)
+// FIXME: implement
+type JPXEncoder struct{};
+
+// IsHexadecimal checks if the PdfObjectString contains Hexadecimal data.
+func (_eecd *PdfObjectString )IsHexadecimal ()bool {return _eecd ._fcgeb };
+
+// GetCrypter returns the PdfCrypt instance which has information about the PDFs encryption.
+func (_egdeg *PdfParser )GetCrypter ()*PdfCrypt {return _egdeg ._feefe };func (_eaff *PdfCrypt )decryptBytes (_beg []byte ,_cebe string ,_ead []byte )([]byte ,error ){_cbg .Log .Trace ("\u0044\u0065\u0063\u0072\u0079\u0070\u0074\u0020\u0062\u0079\u0074\u0065\u0073");
+_eac ,_fcc :=_eaff ._gde [_cebe ];if !_fcc {return nil ,_ec .Errorf ("\u0075n\u006b\u006e\u006f\u0077n\u0020\u0063\u0072\u0079\u0070t\u0020f\u0069l\u0074\u0065\u0072\u0020\u0028\u0025\u0073)",_cebe );};return _eac .DecryptBytes (_beg ,_ead );};
+
+// GetStringVal returns the string value represented by the PdfObject directly or indirectly if
+// contained within an indirect object. On type mismatch the found bool flag returned is false and
+// an empty string is returned.
+func GetStringVal (obj PdfObject )(_gabb string ,_badeb bool ){_dcce ,_badeb :=TraceToDirectObject (obj ).(*PdfObjectString );if _badeb {return _dcce .Str (),true ;};return ;};
+
+// LZWEncoder provides LZW encoding/decoding functionality.
+type LZWEncoder struct{Predictor int ;BitsPerComponent int ;
+
+// For predictors
+Columns int ;Colors int ;
+
+// LZW algorithm setting.
+EarlyChange int ;};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_cabad *RunLengthEncoder )MakeStreamDict ()*PdfObjectDictionary {_feed :=MakeDict ();_feed .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_cabad .GetFilterName ()));return _feed ;};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_baace *CCITTFaxEncoder )UpdateParams (params *PdfObjectDictionary ){if _cffa ,_ffgfb :=GetNumberAsInt64 (params .Get ("\u004b"));_ffgfb ==nil {_baace .K =int (_cffa );};if _dbda ,_ddab :=GetNumberAsInt64 (params .Get ("\u0043o\u006c\u0075\u006d\u006e\u0073"));
+_ddab ==nil {_baace .Columns =int (_dbda );}else if _dbda ,_ddab =GetNumberAsInt64 (params .Get ("\u0057\u0069\u0064t\u0068"));_ddab ==nil {_baace .Columns =int (_dbda );};if _adcgg ,_dagde :=GetNumberAsInt64 (params .Get ("\u0042\u006c\u0061\u0063\u006b\u0049\u0073\u0031"));
+_dagde ==nil {_baace .BlackIs1 =_adcgg > 0;}else {if _dbacf ,_adbga :=GetBoolVal (params .Get ("\u0042\u006c\u0061\u0063\u006b\u0049\u0073\u0031"));_adbga {_baace .BlackIs1 =_dbacf ;}else {if _efd ,_ecf :=GetArray (params .Get ("\u0044\u0065\u0063\u006f\u0064\u0065"));
+_ecf {_eea ,_cfef :=_efd .ToIntegerArray ();if _cfef ==nil {_baace .BlackIs1 =_eea [0]==1&&_eea [1]==0;};};};};if _fafe ,_dcfa :=GetNumberAsInt64 (params .Get ("\u0045\u006ec\u006f\u0064\u0065d\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e"));_dcfa ==nil {_baace .EncodedByteAlign =_fafe > 0;
+}else {if _fdcb ,_daeb :=GetBoolVal (params .Get ("\u0045\u006ec\u006f\u0064\u0065d\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e"));_daeb {_baace .EncodedByteAlign =_fdcb ;};};if _fggg ,_bcdcg :=GetNumberAsInt64 (params .Get ("\u0045n\u0064\u004f\u0066\u004c\u0069\u006ee"));
+_bcdcg ==nil {_baace .EndOfLine =_fggg > 0;}else {if _bcaf ,_fded :=GetBoolVal (params .Get ("\u0045n\u0064\u004f\u0066\u004c\u0069\u006ee"));_fded {_baace .EndOfLine =_bcaf ;};};if _adfa ,_ccga :=GetNumberAsInt64 (params .Get ("\u0052\u006f\u0077\u0073"));
+_ccga ==nil {_baace .Rows =int (_adfa );}else if _adfa ,_ccga =GetNumberAsInt64 (params .Get ("\u0048\u0065\u0069\u0067\u0068\u0074"));_ccga ==nil {_baace .Rows =int (_adfa );};if _bfdc ,_eabc :=GetNumberAsInt64 (params .Get ("\u0045\u006e\u0064\u004f\u0066\u0042\u006c\u006f\u0063\u006b"));
+_eabc ==nil {_baace .EndOfBlock =_bfdc > 0;}else {if _ded ,_aabd :=GetBoolVal (params .Get ("\u0045\u006e\u0064\u004f\u0066\u0042\u006c\u006f\u0063\u006b"));_aabd {_baace .EndOfBlock =_ded ;};};if _eddb ,_baeb :=GetNumberAsInt64 (params .Get ("\u0044\u0061\u006d\u0061ge\u0064\u0052\u006f\u0077\u0073\u0042\u0065\u0066\u006f\u0072\u0065\u0045\u0072\u0072o\u0072"));
+_baeb !=nil {_baace .DamagedRowsBeforeError =int (_eddb );};};
+
+// GetFilterName returns the name of the encoding filter.
+func (_dfd *DCTEncoder )GetFilterName ()string {return StreamEncodingFilterNameDCT };
+
+// Merge merges in key/values from another dictionary. Overwriting if has same keys.
+// The mutated dictionary (d) is returned in order to allow method chaining.
+func (_fcbfg *PdfObjectDictionary )Merge (another *PdfObjectDictionary )*PdfObjectDictionary {if another !=nil {for _ ,_daec :=range another .Keys (){_beaba :=another .Get (_daec );_fcbfg .Set (_daec ,_beaba );};};return _fcbfg ;};
+
+// UpdateParams updates the parameter values of the encoder.
+// Implements StreamEncoder interface.
+func (_aagb *JBIG2Encoder )UpdateParams (params *PdfObjectDictionary ){_gebf ,_bbaad :=GetNumberAsInt64 (params .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074"));if _bbaad ==nil {_aagb .BitsPerComponent =int (_gebf );
+};_gaaf ,_bbaad :=GetNumberAsInt64 (params .Get ("\u0057\u0069\u0064t\u0068"));if _bbaad ==nil {_aagb .Width =int (_gaaf );};_aede ,_bbaad :=GetNumberAsInt64 (params .Get ("\u0048\u0065\u0069\u0067\u0068\u0074"));if _bbaad ==nil {_aagb .Height =int (_aede );
+};_acdf ,_bbaad :=GetNumberAsInt64 (params .Get ("\u0043o\u006co\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073"));if _bbaad ==nil {_aagb .ColorComponents =int (_acdf );};};
+
+// NewASCII85Encoder makes a new ASCII85 encoder.
+func NewASCII85Encoder ()*ASCII85Encoder {_gaaa :=&ASCII85Encoder {};return _gaaa };
+
+// EncodeBytes returns the passed in slice of bytes.
+// The purpose of the method is to satisfy the StreamEncoder interface.
+func (_dcb *RawEncoder )EncodeBytes (data []byte )([]byte ,error ){return data ,nil };
+
+// ReadBytesAt reads byte content at specific offset and length within the PDF.
+func (_ebaf *PdfParser )ReadBytesAt (offset ,len int64 )([]byte ,error ){_bcbg :=_ebaf .GetFileOffset ();_ ,_aaba :=_ebaf ._eebc .Seek (offset ,_de .SeekStart );if _aaba !=nil {return nil ,_aaba ;};_eeff :=make ([]byte ,len );_ ,_aaba =_de .ReadAtLeast (_ebaf ._eebc ,_eeff ,int (len ));
+if _aaba !=nil {return nil ,_aaba ;};_ebaf .SetFileOffset (_bcbg );return _eeff ,nil ;};
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+func (_gegf *CCITTFaxEncoder )MakeStreamDict ()*PdfObjectDictionary {_eeee :=MakeDict ();_eeee .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_gegf .GetFilterName ()));_eeee .SetIfNotNil ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073",_gegf .MakeDecodeParams ());
+return _eeee ;};func (_gfegc *PdfParser )parseDetailedHeader ()(_cfa error ){_gfegc ._eebc .Seek (0,_de .SeekStart );_dgb :=20;_ace :=make ([]byte ,_dgb );var (_afea bool ;_bcf int ;);for {_afca ,_fbad :=_gfegc ._eebc .ReadByte ();if _fbad !=nil {if _fbad ==_de .EOF {break ;
+}else {return _fbad ;};};if IsDecimalDigit (_afca )&&_ace [_dgb -1]=='.'&&IsDecimalDigit (_ace [_dgb -2])&&_ace [_dgb -3]=='-'&&_ace [_dgb -4]=='F'&&_ace [_dgb -5]=='D'&&_ace [_dgb -6]=='P'&&_ace [_dgb -7]=='%'{_gfegc ._dbdbf =Version {Major :int (_ace [_dgb -2]-'0'),Minor :int (_afca -'0')};
+_gfegc ._eabdd ._aba =_bcf -7;_afea =true ;break ;};_bcf ++;_ace =append (_ace [1:_dgb ],_afca );};if !_afea {return _ec .Errorf ("n\u006f \u0066\u0069\u006c\u0065\u0020\u0068\u0065\u0061d\u0065\u0072\u0020\u0066ou\u006e\u0064");};_eec ,_cfa :=_gfegc ._eebc .ReadByte ();
+if _cfa ==_de .EOF {return _ec .Errorf ("\u006eo\u0074\u0020\u0061\u0020\u0076\u0061\u006c\u0069\u0064\u0020\u0050d\u0066\u0020\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074");};if _cfa !=nil {return _cfa ;};_gfegc ._eabdd ._fee =_eec =='\n';_eec ,_cfa =_gfegc ._eebc .ReadByte ();
+if _cfa !=nil {return _ec .Errorf ("\u006e\u006f\u0074\u0020a\u0020\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0064\u0066 \u0064o\u0063\u0075\u006d\u0065\u006e\u0074\u003a \u0025\u0077",_cfa );};if _eec !='%'{return nil ;};_ebc :=make ([]byte ,4);_ ,_cfa =_gfegc ._eebc .Read (_ebc );
+if _cfa !=nil {return _ec .Errorf ("\u006e\u006f\u0074\u0020a\u0020\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0064\u0066 \u0064o\u0063\u0075\u006d\u0065\u006e\u0074\u003a \u0025\u0077",_cfa );};_gfegc ._eabdd ._bge =[4]byte {_ebc [0],_ebc [1],_ebc [2],_ebc [3]};
+return nil ;};func (_fad *PdfParser )parseName ()(PdfObjectName ,error ){var _befd _d .Buffer ;_gdeb :=false ;for {_bdgf ,_faee :=_fad ._eebc .Peek (1);if _faee ==_de .EOF {break ;};if _faee !=nil {return PdfObjectName (_befd .String ()),_faee ;};if !_gdeb {switch _bdgf [0]{case '/':_gdeb =true ;
+_fad ._eebc .ReadByte ();case '%':_fad .readComment ();_fad .skipSpaces ();default:_cbg .Log .Debug ("\u0045\u0052\u0052\u004f\u0052\u0020N\u0061\u006d\u0065\u0020\u0073\u0074\u0061\u0072\u0074\u0069\u006e\u0067\u0020w\u0069\u0074\u0068\u0020\u0025\u0073\u0020(\u0025\u0020\u0078\u0029",_bdgf ,_bdgf );
+return PdfObjectName (_befd .String ()),_ec .Errorf ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u006ea\u006d\u0065:\u0020\u0028\u0025\u0063\u0029",_bdgf [0]);};}else {if IsWhiteSpace (_bdgf [0]){break ;}else if (_bdgf [0]=='/')||(_bdgf [0]=='[')||(_bdgf [0]=='(')||(_bdgf [0]==']')||(_bdgf [0]=='<')||(_bdgf [0]=='>'){break ;
+}else if _bdgf [0]=='#'{_cccff ,_afae :=_fad ._eebc .Peek (3);if _afae !=nil {return PdfObjectName (_befd .String ()),_afae ;};_dggc ,_afae :=_c .DecodeString (string (_cccff [1:3]));if _afae !=nil {_cbg .Log .Debug ("\u0045\u0052\u0052\u004fR\u003a\u0020\u0049\u006ev\u0061\u006c\u0069d\u0020\u0068\u0065\u0078\u0020\u0066o\u006c\u006co\u0077\u0069\u006e\u0067 \u0027\u0023\u0027\u002c \u0063\u006f\u006e\u0074\u0069n\u0075\u0069\u006e\u0067\u0020\u0075\u0073i\u006e\u0067\u0020\u006c\u0069t\u0065\u0072\u0061\u006c\u0020\u002d\u0020\u004f\u0075t\u0070\u0075\u0074\u0020\u006d\u0061\u0079\u0020\u0062\u0065\u0020\u0069\u006e\u0063\u006f\u0072\u0072\u0065\u0063\u0074");
+_befd .WriteByte ('#');_fad ._eebc .Discard (1);continue ;};_fad ._eebc .Discard (3);_befd .Write (_dggc );}else {_cagg ,_ :=_fad ._eebc .ReadByte ();_befd .WriteByte (_cagg );};};};return PdfObjectName (_befd .String ()),nil ;};func _gbe (_ffc int )cryptFilters {return cryptFilters {_gbb :_bg .NewFilterV2 (_ffc )}};
+const (StreamEncodingFilterNameFlate ="F\u006c\u0061\u0074\u0065\u0044\u0065\u0063\u006f\u0064\u0065";StreamEncodingFilterNameLZW ="\u004cZ\u0057\u0044\u0065\u0063\u006f\u0064e";StreamEncodingFilterNameDCT ="\u0044C\u0054\u0044\u0065\u0063\u006f\u0064e";
+StreamEncodingFilterNameRunLength ="\u0052u\u006eL\u0065\u006e\u0067\u0074\u0068\u0044\u0065\u0063\u006f\u0064\u0065";StreamEncodingFilterNameASCIIHex ="\u0041\u0053\u0043\u0049\u0049\u0048\u0065\u0078\u0044e\u0063\u006f\u0064\u0065";StreamEncodingFilterNameASCII85 ="\u0041\u0053\u0043\u0049\u0049\u0038\u0035\u0044\u0065\u0063\u006f\u0064\u0065";
+StreamEncodingFilterNameCCITTFax ="\u0043\u0043\u0049\u0054\u0054\u0046\u0061\u0078\u0044e\u0063\u006f\u0064\u0065";StreamEncodingFilterNameJBIG2 ="J\u0042\u0049\u0047\u0032\u0044\u0065\u0063\u006f\u0064\u0065";StreamEncodingFilterNameJPX ="\u004aP\u0058\u0044\u0065\u0063\u006f\u0064e";
+StreamEncodingFilterNameRaw ="\u0052\u0061\u0077";);
+
+// ReadAtLeast reads at least n bytes into slice p.
+// Returns the number of bytes read (should always be == n), and an error on failure.
+func (_eaa *bufferedReadSeeker )ReadAtLeast (p []byte ,n int )(int ,error ){_ef :=n ;_dde :=0;for _ef > 0{_gb ,_fc :=_eaa .Read (p [n -_dde :]);if _fc !=nil {return _dde ,_fc ;};_dde ++;_ef -=_gb ;};return _dde ,nil ;};
+
+// MakeInteger creates a PdfObjectInteger from an int64.
+func MakeInteger (val int64 )*PdfObjectInteger {_ecfg :=PdfObjectInteger (val );return &_ecfg };
+
+// GetIndirect returns the *PdfIndirectObject represented by the PdfObject. On type mismatch the found bool flag is
+// false and a nil pointer is returned.
+func GetIndirect (obj PdfObject )(_decge *PdfIndirectObject ,_bgff bool ){obj =ResolveReference (obj );_decge ,_bgff =obj .(*PdfIndirectObject );return _decge ,_bgff ;};
+
+// EncodeStream encodes the stream data using the encoded specified by the stream's dictionary.
+func EncodeStream (streamObj *PdfObjectStream )error {_cbg .Log .Trace ("\u0045\u006e\u0063\u006f\u0064\u0065\u0020\u0073\u0074\u0072\u0065\u0061\u006d");_aeefd ,_gaef :=NewEncoderFromStream (streamObj );if _gaef !=nil {_cbg .Log .Debug ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0064\u0065\u0063\u006fd\u0069\u006e\u0067\u0020\u0066\u0061\u0069\u006c\u0065\u0064:\u0020\u0025\u0076",_gaef );
+return _gaef ;};if _agfaf ,_dfaac :=_aeefd .(*LZWEncoder );_dfaac {_agfaf .EarlyChange =0;streamObj .Set ("E\u0061\u0072\u006c\u0079\u0043\u0068\u0061\u006e\u0067\u0065",MakeInteger (0));};_cbg .Log .Trace ("\u0045\u006e\u0063\u006f\u0064\u0065\u0072\u003a\u0020\u0025\u002b\u0076\u000a",_aeefd );
+_ffga ,_gaef :=_aeefd .EncodeBytes (streamObj .Stream );if _gaef !=nil {_cbg .Log .Debug ("\u0053\u0074\u0072\u0065\u0061\u006d\u0020\u0065\u006e\u0063\u006fd\u0069\u006e\u0067\u0020\u0066\u0061\u0069\u006c\u0065\u0064:\u0020\u0025\u0076",_gaef );return _gaef ;
+};streamObj .Stream =_ffga ;streamObj .Set ("\u004c\u0065\u006e\u0067\u0074\u0068",MakeInteger (int64 (len (_ffga ))));return nil ;};
+
+// ToFloat64Array returns a slice of all elements in the array as a float64 slice. An error is
+// returned if the array contains non-numeric objects (each element can be either PdfObjectInteger
+// or PdfObjectFloat).
+func (_accge *PdfObjectArray )ToFloat64Array ()([]float64 ,error ){var _dbfd []float64 ;for _ ,_aefb :=range _accge .Elements (){switch _cdadf :=_aefb .(type ){case *PdfObjectInteger :_dbfd =append (_dbfd ,float64 (*_cdadf ));case *PdfObjectFloat :_dbfd =append (_dbfd ,float64 (*_cdadf ));
+default:return nil ,ErrTypeError ;};};return _dbfd ,nil ;};var _abag =_ee .MustCompile ("\u005e\u005b\\\u002b\u002d\u002e\u005d*\u0028\u005b0\u002d\u0039\u002e\u005d\u002b\u0029\u005b\u0065E\u005d\u005b\u005c\u002b\u002d\u002e\u005d\u002a\u0028\u005b\u0030\u002d9\u002e\u005d\u002b\u0029");
+
+
+// ResolveReferencesDeep recursively traverses through object `o`, looking up and replacing
+// references with indirect objects.
+// Optionally a map of already deep-resolved objects can be provided via `traversed`. The `traversed` map
+// is updated while traversing the objects to avoid traversing same objects multiple times.
+func ResolveReferencesDeep (o PdfObject ,traversed map[PdfObject ]struct{})error {if traversed ==nil {traversed =map[PdfObject ]struct{}{};};return _dbb (o ,0,traversed );};
+
+// Seek sets the offset for the next Read to offset, interpreted according to whence:
+// 0 means relative to the start of the file,
+// 1 means relative to the current offset, and 2 means relative to the end.
+func (_bd *bufferedReadSeeker )Seek (offset int64 ,whence int )(int64 ,error ){_deg ,_gdd :=_bd ._aag .Seek (offset ,whence );if _gdd !=nil {return _deg ,_gdd ;};_bd ._fba =_eb .NewReader (_bd ._aag );return _deg ,nil ;};
+
+// DecodeImages decodes the page images from the jbig2 'encoded' data input.
+// The jbig2 document may contain multiple pages, thus the function can return multiple
+// images. The images order corresponds to the page number.
+func (_gcef *JBIG2Encoder )DecodeImages (encoded []byte )([]_bc .Image ,error ){const _eged ="\u004aB\u0049\u0047\u0032\u0045n\u0063\u006f\u0064\u0065\u0072.\u0044e\u0063o\u0064\u0065\u0049\u006d\u0061\u0067\u0065s";_bfbf ,_dfef :=_gge .Decode (encoded ,_gge .Parameters {},_gcef .Globals .ToDocumentGlobals ());
+if _dfef !=nil {return nil ,_geg .Wrap (_dfef ,_eged ,"");};_faag ,_dfef :=_bfbf .PageNumber ();if _dfef !=nil {return nil ,_geg .Wrap (_dfef ,_eged ,"");};_beee :=[]_bc .Image {};var _ggaf _bc .Image ;for _fbcg :=1;_fbcg <=_faag ;_fbcg ++{_ggaf ,_dfef =_bfbf .DecodePageImage (_fbcg );
+if _dfef !=nil {return nil ,_geg .Wrapf (_dfef ,_eged ,"\u0070\u0061\u0067\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_fbcg );};_beee =append (_beee ,_ggaf );};return _beee ,nil ;};
+
+// XrefObject defines a cross reference entry which is a map between object number (with generation number) and the
+// location of the actual object, either as a file offset (xref table entry), or as a location within an xref
+// stream object (xref object stream).
+type XrefObject struct{XType xrefType ;ObjectNumber int ;Generation int ;
+
+// For normal xrefs (defined by OFFSET)
+Offset int64 ;
+
+// For xrefs to object streams.
+OsObjNumber int ;OsObjIndex int ;};const (JB2Generic JBIG2CompressionType =iota ;JB2SymbolCorrelation ;JB2SymbolRankHaus ;);
+
+// EncodeBytes ASCII encodes the passed in slice of bytes.
+func (_bbdb *ASCIIHexEncoder )EncodeBytes (data []byte )([]byte ,error ){var _abca _d .Buffer ;for _ ,_cbad :=range data {_abca .WriteString (_ec .Sprintf ("\u0025\u002e\u0032X\u0020",_cbad ));};_abca .WriteByte ('>');return _abca .Bytes (),nil ;};
+
+// GetAccessPermissions returns the PDF access permissions as an AccessPermissions object.
+func (_dad *PdfCrypt )GetAccessPermissions ()_db .Permissions {return _dad ._cbbgb .P };
+
+// MakeIndirectObject creates an PdfIndirectObject with a specified direct object PdfObject.
+func MakeIndirectObject (obj PdfObject )*PdfIndirectObject {_agee :=&PdfIndirectObject {};_agee .PdfObject =obj ;return _agee ;};
+
+// Update updates multiple keys and returns the dictionary back so can be used in a chained fashion.
+func (_faef *PdfObjectDictionary )Update (objmap map[string ]PdfObject )*PdfObjectDictionary {_faef ._dfdgf .Lock ();defer _faef ._dfdgf .Unlock ();for _cbbdf ,_efaa :=range objmap {_faef .setWithLock (PdfObjectName (_cbbdf ),_efaa ,false );};return _faef ;
+};func (_cea *PdfParser )lookupByNumberWrapper (_egd int ,_agf bool )(PdfObject ,bool ,error ){_faf ,_ecg ,_gbc :=_cea .lookupByNumber (_egd ,_agf );if _gbc !=nil {return nil ,_ecg ,_gbc ;};if !_ecg &&_cea ._feefe !=nil &&_cea ._feefe ._eddc &&!_cea ._feefe .isDecrypted (_faf ){_fff :=_cea ._feefe .Decrypt (_faf ,0,0);
+if _fff !=nil {return nil ,_ecg ,_fff ;};};return _faf ,_ecg ,nil ;};
+
+// GetArray returns the *PdfObjectArray represented by the PdfObject directly or indirectly within an indirect
+// object. On type mismatch the found bool flag is false and a nil pointer is returned.
+func GetArray (obj PdfObject )(_geebb *PdfObjectArray ,_cdfcg bool ){_geebb ,_cdfcg =TraceToDirectObject (obj ).(*PdfObjectArray );return _geebb ,_cdfcg ;};
+
+// GetFilterName returns the name of the encoding filter.
+func (_acef *LZWEncoder )GetFilterName ()string {return StreamEncodingFilterNameLZW };
+
+// HasNonConformantStream implements core.ParserMetadata.
+func (_fgea ParserMetadata )HasNonConformantStream ()bool {return _fgea ._fgd };
+
+// SetImage sets the image base for given flate encoder.
+func (_fcfb *FlateEncoder )SetImage (img *_bce .ImageBase ){_fcfb ._dfgc =img };
+
+// GetRevision returns PdfParser for the specific version of the Pdf document.
+func (_edgg *PdfParser )GetRevision (revisionNumber int )(*PdfParser ,error ){_deba :=_edgg ._bcae ;if _deba ==revisionNumber {return _edgg ,nil ;};if _deba < revisionNumber {return nil ,_a .New ("\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064\u0020\u0072\u0065\u0076\u0069\u0073i\u006fn\u004e\u0075\u006d\u0062\u0065\u0072\u0020\u0076\u0065\u0072\u0073\u0069\u006f\u006e");
+};if _edgg ._bcce [revisionNumber ]!=nil {return _edgg ._bcce [revisionNumber ],nil ;};_bgeed :=_edgg ;for ;_deba > revisionNumber ;_deba --{_gdfge ,_dbace :=_bgeed .GetPreviousRevisionParser ();if _dbace !=nil {return nil ,_dbace ;};_edgg ._bcce [_deba -1]=_gdfge ;
+_edgg ._ddfac [_bgeed ]=_gdfge ;_bgeed =_gdfge ;};return _bgeed ,nil ;};func _egb (_fbde *_db .StdEncryptDict ,_eef *PdfObjectDictionary )error {R ,_fec :=_eef .Get ("\u0052").(*PdfObjectInteger );if !_fec {return _a .New ("\u0065\u006e\u0063\u0072y\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006ea\u0072y\u0020\u006d\u0069\u0073\u0073\u0069\u006eg\u0020\u0052");
+};if *R < 2||*R > 6{return _ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0052 \u0028\u0025\u0064\u0029",*R );};_fbde .R =int (*R );O ,_fec :=_eef .GetString ("\u004f");if !_fec {return _a .New ("\u0065\u006e\u0063\u0072y\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006ea\u0072y\u0020\u006d\u0069\u0073\u0073\u0069\u006eg\u0020\u004f");
+};if _fbde .R ==5||_fbde .R ==6{if len (O )< 48{return _ec .Errorf ("\u004c\u0065\u006e\u0067th\u0028\u004f\u0029\u0020\u003c\u0020\u0034\u0038\u0020\u0028\u0025\u0064\u0029",len (O ));};}else if len (O )!=32{return _ec .Errorf ("L\u0065n\u0067\u0074\u0068\u0028\u004f\u0029\u0020\u0021=\u0020\u0033\u0032\u0020(%\u0064\u0029",len (O ));
+};_fbde .O =[]byte (O );U ,_fec :=_eef .GetString ("\u0055");if !_fec {return _a .New ("\u0065\u006e\u0063\u0072y\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006ea\u0072y\u0020\u006d\u0069\u0073\u0073\u0069\u006eg\u0020\u0055");};if _fbde .R ==5||_fbde .R ==6{if len (U )< 48{return _ec .Errorf ("\u004c\u0065\u006e\u0067th\u0028\u0055\u0029\u0020\u003c\u0020\u0034\u0038\u0020\u0028\u0025\u0064\u0029",len (U ));
+};}else if len (U )!=32{_cbg .Log .Debug ("\u0057\u0061r\u006e\u0069\u006e\u0067\u003a\u0020\u004c\u0065\u006e\u0067\u0074\u0068\u0028\u0055\u0029\u0020\u0021\u003d\u0020\u0033\u0032\u0020(%\u0064\u0029",len (U ));};_fbde .U =[]byte (U );if _fbde .R >=5{OE ,_bdg :=_eef .GetString ("\u004f\u0045");
+if !_bdg {return _a .New ("\u0065\u006ec\u0072\u0079\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u006d\u0069\u0073\u0073\u0069\u006eg \u004f\u0045");}else if len (OE )!=32{return _ec .Errorf ("L\u0065\u006e\u0067\u0074h(\u004fE\u0029\u0020\u0021\u003d\u00203\u0032\u0020\u0028\u0025\u0064\u0029",len (OE ));
+};_fbde .OE =[]byte (OE );UE ,_bdg :=_eef .GetString ("\u0055\u0045");if !_bdg {return _a .New ("\u0065\u006ec\u0072\u0079\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079\u0020\u006d\u0069\u0073\u0073\u0069\u006eg \u0055\u0045");
+}else if len (UE )!=32{return _ec .Errorf ("L\u0065\u006e\u0067\u0074h(\u0055E\u0029\u0020\u0021\u003d\u00203\u0032\u0020\u0028\u0025\u0064\u0029",len (UE ));};_fbde .UE =[]byte (UE );};P ,_fec :=_eef .Get ("\u0050").(*PdfObjectInteger );if !_fec {return _a .New ("\u0065\u006e\u0063\u0072\u0079\u0070\u0074 \u0064\u0069\u0063t\u0069\u006f\u006e\u0061r\u0079\u0020\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0070\u0065\u0072\u006d\u0069\u0073\u0073\u0069\u006f\u006e\u0073\u0020\u0061\u0074\u0074\u0072");
+};_fbde .P =_db .Permissions (*P );if _fbde .R ==6{Perms ,_bccf :=_eef .GetString ("\u0050\u0065\u0072m\u0073");if !_bccf {return _a .New ("\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006ea\u0072y\u0020\u006d\u0069\u0073\u0073\u0069\u006e\u0067\u0020\u0050\u0065\u0072\u006d\u0073");
+}else if len (Perms )!=16{return _ec .Errorf ("\u004ce\u006e\u0067\u0074\u0068\u0028\u0050\u0065\u0072\u006d\u0073\u0029 \u0021\u003d\u0020\u0031\u0036\u0020\u0028\u0025\u0064\u0029",len (Perms ));};_fbde .Perms =[]byte (Perms );};if _afg ,_fbff :=_eef .Get ("\u0045n\u0063r\u0079\u0070\u0074\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061").(*PdfObjectBool );
+_fbff {_fbde .EncryptMetadata =bool (*_afg );}else {_fbde .EncryptMetadata =true ;};return nil ;};
+
+// MakeEncodedString creates a PdfObjectString with encoded content, which can be either
+// UTF-16BE or PDFDocEncoding depending on whether `utf16BE` is true or false respectively.
+func MakeEncodedString (s string ,utf16BE bool )*PdfObjectString {if utf16BE {var _bdbb _d .Buffer ;_bdbb .Write ([]byte {0xFE,0xFF});_bdbb .WriteString (_ga .StringToUTF16 (s ));return &PdfObjectString {_efga :_bdbb .String (),_fcgeb :true };};return &PdfObjectString {_efga :string (_ga .StringToPDFDocEncoding (s )),_fcgeb :false };
+};func _eabba (_eeeef int )int {_eacf :=_eeeef >>(_aagf -1);return (_eeeef ^_eacf )-_eacf };
+
+// MakeStreamDict makes a new instance of an encoding dictionary for a stream object.
+// Has the Filter set. Some other parameters are generated elsewhere.
+func (_bgg *DCTEncoder )MakeStreamDict ()*PdfObjectDictionary {_eeca :=MakeDict ();_eeca .Set ("\u0046\u0069\u006c\u0074\u0065\u0072",MakeName (_bgg .GetFilterName ()));return _eeca ;};var _geade =_ee .MustCompile ("\u005e\u005b\u005c\u002b\u002d\u002e\u005d\u002a\u0028\u005b\u0030\u002d9\u002e\u005d\u002b\u0029");
+
+
+// Clear resets the dictionary to an empty state.
+func (_baee *PdfObjectDictionary )Clear (){_baee ._ggegg =[]PdfObjectName {};_baee ._cdab =map[PdfObjectName ]PdfObject {};_baee ._dfdgf =&_ea .Mutex {};};func (_ebag *PdfParser )skipComments ()error {if _ ,_dbfb :=_ebag .skipSpaces ();_dbfb !=nil {return _dbfb ;
+};_ecca :=true ;for {_gcfb ,_ddaa :=_ebag ._eebc .Peek (1);if _ddaa !=nil {_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072\u0020\u0025\u0073",_ddaa .Error ());return _ddaa ;};if _ecca &&_gcfb [0]!='%'{return nil ;};_ecca =false ;if (_gcfb [0]!='\r')&&(_gcfb [0]!='\n'){_ebag ._eebc .ReadByte ();
+}else {break ;};};return _ebag .skipComments ();};
+
+// PdfParser parses a PDF file and provides access to the object structure of the PDF.
+type PdfParser struct{_dbdbf Version ;_eebc *bufferedReadSeeker ;_fbfd int64 ;_becb XrefTable ;_cecac int64 ;_afffc *xrefType ;_ffbc objectStreams ;_dgbb *PdfObjectDictionary ;_feefe *PdfCrypt ;_fcaf *PdfIndirectObject ;_gbag bool ;ObjCache objectCache ;
+_febe map[int ]bool ;_ecbe map[int64 ]bool ;_eabdd ParserMetadata ;_cbce bool ;_acc []int64 ;_bcae int ;_cbca bool ;_gadba int64 ;_ddfac map[*PdfParser ]*PdfParser ;_bcce []*PdfParser ;
+
+// Opts holds different parsing options.
+Opts *ParserOpts ;};
+
+// EncryptInfo contains an information generated by the document encrypter.
+type EncryptInfo struct{Version ;
+
+// Encrypt is an encryption dictionary that contains all necessary parameters.
+// It should be stored in all copies of the document trailer.
+Encrypt *PdfObjectDictionary ;
+
+// ID0 and ID1 are IDs used in the trailer. Older algorithms such as RC4 uses them for encryption.
+ID0 ,ID1 string ;};func _bcc (_beab XrefTable ){_cbg .Log .Debug ("\u003dX\u003d\u0058\u003d\u0058\u003d");_cbg .Log .Debug ("X\u0072\u0065\u0066\u0020\u0074\u0061\u0062\u006c\u0065\u003a");_edbe :=0;for _ ,_cgc :=range _beab .ObjectMap {_cbg .Log .Debug ("i\u002b\u0031\u003a\u0020\u0025\u0064 \u0028\u006f\u0062\u006a\u0020\u006eu\u006d\u003a\u0020\u0025\u0064\u0020\u0067e\u006e\u003a\u0020\u0025\u0064\u0029\u0020\u002d\u003e\u0020%\u0064",_edbe +1,_cgc .ObjectNumber ,_cgc .Generation ,_cgc .Offset );
+_edbe ++;};};func _ebb (_edbc *PdfObjectStream ,_cbd *PdfObjectDictionary )(*FlateEncoder ,error ){_agcb :=NewFlateEncoder ();_eab :=_edbc .PdfObjectDictionary ;if _eab ==nil {return _agcb ,nil ;};_agcb ._dfgc =_dedgf (_eab );if _cbd ==nil {_dbaca :=TraceToDirectObject (_eab .Get ("D\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073"));
+switch _gged :=_dbaca .(type ){case *PdfObjectArray :if _gged .Len ()!=1{_cbg .Log .Debug ("\u0045\u0072\u0072\u006f\u0072:\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073\u0020a\u0072\u0072\u0061\u0079\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u0021\u003d\u0020\u0031\u0020\u0028\u0025\u0064\u0029",_gged .Len ());
+return nil ,_a .New ("\u0072\u0061\u006e\u0067\u0065\u0020\u0063\u0068\u0065\u0063\u006b\u0020e\u0072\u0072\u006f\u0072");};if _aaef ,_ddca :=GetDict (_gged .Get (0));_ddca {_cbd =_aaef ;};case *PdfObjectDictionary :_cbd =_gged ;case *PdfObjectNull ,nil :default:_cbg .Log .Debug ("E\u0072\u0072\u006f\u0072\u003a\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073\u0020n\u006f\u0074\u0020\u0061\u0020\u0064\u0069\u0063\u0074\u0069on\u0061\u0072\u0079 \u0028%\u0054\u0029",_dbaca );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061li\u0064\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073");};};if _cbd ==nil {return _agcb ,nil ;};_cbg .Log .Trace ("\u0064\u0065\u0063\u006f\u0064\u0065\u0020\u0070\u0061\u0072\u0061\u006ds\u003a\u0020\u0025\u0073",_cbd .String ());
+_gcbe :=_cbd .Get ("\u0050r\u0065\u0064\u0069\u0063\u0074\u006fr");if _gcbe ==nil {_cbg .Log .Debug ("E\u0072\u0072o\u0072\u003a\u0020\u0050\u0072\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u0020\u006d\u0069\u0073\u0073\u0069\u006e\u0067 \u0066\u0072\u006f\u006d\u0020\u0044\u0065\u0063\u006f\u0064\u0065\u0050\u0061\u0072\u006d\u0073 \u002d\u0020\u0043\u006f\u006e\u0074\u0069\u006e\u0075\u0065\u0020\u0077\u0069t\u0068\u0020\u0064\u0065\u0066\u0061\u0075\u006c\u0074\u0020\u00281\u0029");
+}else {_dcaf ,_egg :=_gcbe .(*PdfObjectInteger );if !_egg {_cbg .Log .Debug ("E\u0072\u0072\u006f\u0072\u003a\u0020\u0050\u0072\u0065d\u0069\u0063\u0074\u006f\u0072\u0020\u0073pe\u0063\u0069\u0066\u0069e\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u006f\u0074 n\u0075\u006de\u0072\u0069\u0063\u0020\u0028\u0025\u0054\u0029",_gcbe );
+return nil ,_ec .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0050\u0072\u0065\u0064i\u0063\u0074\u006f\u0072");};_agcb .Predictor =int (*_dcaf );};_gcbe =_cbd .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");
+if _gcbe !=nil {_fbc ,_cfaa :=_gcbe .(*PdfObjectInteger );if !_cfaa {_cbg .Log .Debug ("\u0045\u0052\u0052O\u0052\u003a\u0020\u0049n\u0076\u0061\u006c\u0069\u0064\u0020\u0042i\u0074\u0073\u0050\u0065\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");
+return nil ,_ec .Errorf ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020\u0042\u0069\u0074\u0073\u0050e\u0072\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074");};_agcb .BitsPerComponent =int (*_fbc );if _agcb .BitsPerComponent !=_agcb ._dfgc .BitsPerComponent {_cbg .Log .Debug ("\u0057A\u0052\u004e\u0049\u004eG\u003a \u0042\u0069\u0074\u0073\u0050\u0065\u0072\u0043\u006fm\u0070\u006f\u006e\u0065\u006e\u0074\u0020\u006di\u0073\u006d\u0061\u0074\u0063\u0068\u0020\u0077\u0069\u0074\u0068 \u0069\u006d\u0061\u0067\u0065\u0020\u0028\u0025\u0064\u002f%\u0064\u0029\u002c\u0020\u0075\u0073\u0069\u006e\u0067\u0020\u0042\u0069\u0074\u0073\u0050\u0065\u0072\u0043\u006fm\u0070\u006f\u006e\u0065\u006e\u0074\u0020\u0066\u0072\u006f\u006d\u0020i\u006da\u0067\u0065",_agcb .BitsPerComponent ,_agcb ._dfgc .BitsPerComponent );
+_agcb .BitsPerComponent =_agcb ._dfgc .BitsPerComponent ;};};if _agcb .Predictor > 1{_agcb .Columns =1;_gcbe =_cbd .Get ("\u0043o\u006c\u0075\u006d\u006e\u0073");if _gcbe !=nil {_cbbb ,_cabb :=_gcbe .(*PdfObjectInteger );if !_cabb {return nil ,_ec .Errorf ("\u0070r\u0065\u0064\u0069\u0063\u0074\u006f\u0072\u0020\u0063\u006f\u006cu\u006d\u006e\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064");
+};_agcb .Columns =int (*_cbbb );};_agcb .Colors =1;_gcbe =_cbd .Get ("\u0043\u006f\u006c\u006f\u0072\u0073");if _gcbe !=nil {_ffg ,_fgf :=_gcbe .(*PdfObjectInteger );if !_fgf {return nil ,_ec .Errorf ("\u0070\u0072\u0065d\u0069\u0063\u0074\u006fr\u0020\u0063\u006f\u006c\u006f\u0072\u0073 \u006e\u006f\u0074\u0020\u0061\u006e\u0020\u0069\u006e\u0074\u0065\u0067\u0065\u0072");
+};_agcb .Colors =int (*_ffg );};};return _agcb ,nil ;};
+
+// Reset resets the buffered reader with a new io.Reader.
+func (_efc *bufferedReadSeeker )Reset (r _de .Reader ){_efc ._fba .Reset (r )};
+
+// ResolveReference resolves reference if `o` is a *PdfObjectReference and returns the object referenced to.
+// Otherwise returns back `o`.
+func ResolveReference (obj PdfObject )PdfObject {if _fffef ,_ggba :=obj .(*PdfObjectReference );_ggba {return _fffef .Resolve ();};return obj ;};func (_cgf *JBIG2Image )toBitmap ()(_gcda *_fe .Bitmap ,_eggc error ){const _efce ="\u004a\u0042\u0049\u00472I\u006d\u0061\u0067\u0065\u002e\u0074\u006f\u0042\u0069\u0074\u006d\u0061\u0070";
+if _cgf .Data ==nil {return nil ,_geg .Error (_efce ,"\u0069\u006d\u0061\u0067e \u0064\u0061\u0074\u0061\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _cgf .Width ==0||_cgf .Height ==0{return nil ,_geg .Error (_efce ,"\u0069\u006d\u0061\u0067\u0065\u0020h\u0065\u0069\u0067\u0068\u0074\u0020\u006f\u0072\u0020\u0077\u0069\u0064\u0074h\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
+};if _cgf .HasPadding {_gcda ,_eggc =_fe .NewWithData (_cgf .Width ,_cgf .Height ,_cgf .Data );}else {_gcda ,_eggc =_fe .NewWithUnpaddedData (_cgf .Width ,_cgf .Height ,_cgf .Data );};if _eggc !=nil {return nil ,_geg .Wrap (_eggc ,_efce ,"");};return _gcda ,nil ;
+};
+
+// String returns the PDF version as a string. Implements interface fmt.Stringer.
+func (_efeb Version )String ()string {return _ec .Sprintf ("\u00250\u0064\u002e\u0025\u0030\u0064",_efeb .Major ,_efeb .Minor );};
+
+// String returns a string describing `stream`.
+func (_dggab *PdfObjectStream )String ()string {return _ec .Sprintf ("O\u0062j\u0065\u0063\u0074\u0020\u0073\u0074\u0072\u0065a\u006d\u0020\u0025\u0064: \u0025\u0073",_dggab .ObjectNumber ,_dggab .PdfObjectDictionary );};
+
+// UpdateParams updates the parameter values of the encoder.
+func (_ggff *RawEncoder )UpdateParams (params *PdfObjectDictionary ){}; \ No newline at end of file
diff --git a/unipdf/core/security/crypt/crypt.go b/unipdf/core/security/crypt/crypt.go
new file mode 100644
index 0000000..cf341ef
--- /dev/null
+++ b/unipdf/core/security/crypt/crypt.go
@@ -0,0 +1,135 @@
+//
+// 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 crypt ;import (_e "crypto/aes";_ef "crypto/cipher";_db "crypto/md5";_ab "crypto/rand";_d "crypto/rc4";_f "fmt";_dc "github.com/unidoc/unipdf/v4/common";_da "github.com/unidoc/unipdf/v4/core/security";_c "io";);func init (){_dba ("\u0041\u0045\u0053V\u0032",_cd )};
+
+
+// Name implements Filter interface.
+func (filterAESV2 )Name ()string {return "\u0041\u0045\u0053V\u0032"};
+
+// PDFVersion implements Filter interface.
+func (_abc filterV2 )PDFVersion ()[2]int {return [2]int {}};func (filterIdentity )DecryptBytes (p []byte ,okey []byte )([]byte ,error ){return p ,nil };func (filterAES )EncryptBytes (buf []byte ,okey []byte )([]byte ,error ){_cg ,_eab :=_e .NewCipher (okey );
+if _eab !=nil {return nil ,_eab ;};_dc .Log .Trace ("A\u0045\u0053\u0020\u0045nc\u0072y\u0070\u0074\u0020\u0028\u0025d\u0029\u003a\u0020\u0025\u0020\u0078",len (buf ),buf );const _af =_e .BlockSize ;_bg :=_af -len (buf )%_af ;for _g :=0;_g < _bg ;_g ++{buf =append (buf ,byte (_bg ));
+};_dc .Log .Trace ("\u0050a\u0064d\u0065\u0064\u0020\u0074\u006f \u0025\u0064 \u0062\u0079\u0074\u0065\u0073",len (buf ));_ac :=make ([]byte ,_af +len (buf ));_ed :=_ac [:_af ];if _ ,_gb :=_c .ReadFull (_ab .Reader ,_ed );_gb !=nil {return nil ,_gb ;};
+_cbe :=_ef .NewCBCEncrypter (_cg ,_ed );_cbe .CryptBlocks (_ac [_af :],buf );buf =_ac ;_dc .Log .Trace ("\u0074\u006f\u0020(\u0025\u0064\u0029\u003a\u0020\u0025\u0020\u0078",len (buf ),buf );return buf ,nil ;};
+
+// KeyLength implements Filter interface.
+func (filterAESV2 )KeyLength ()int {return 128/8};
+
+// NewFilterAESV2 creates an AES-based filter with a 128 bit key (AESV2).
+func NewFilterAESV2 ()Filter {_cb ,_abb :=_cd (FilterDict {});if _abb !=nil {_dc .Log .Error ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0063\u006f\u0075l\u0064\u0020\u006e\u006f\u0074\u0020\u0063re\u0061\u0074\u0065\u0020A\u0045\u0053\u0020\u0056\u0032\u0020\u0063\u0072\u0079pt\u0020\u0066i\u006c\u0074\u0065\u0072\u003a\u0020\u0025\u0076",_abb );
+return filterAESV2 {};};return _cb ;};func (filterAES )DecryptBytes (buf []byte ,okey []byte )([]byte ,error ){_ga ,_acc :=_e .NewCipher (okey );if _acc !=nil {return nil ,_acc ;};if len (buf )< 16{_dc .Log .Debug ("\u0045R\u0052\u004f\u0052\u0020\u0041\u0045\u0053\u0020\u0069\u006e\u0076a\u006c\u0069\u0064\u0020\u0062\u0075\u0066\u0020\u0025\u0073",buf );
+return buf ,_f .Errorf ("\u0041\u0045\u0053\u003a B\u0075\u0066\u0020\u006c\u0065\u006e\u0020\u003c\u0020\u0031\u0036\u0020\u0028\u0025d\u0029",len (buf ));};_gc :=buf [:16];buf =buf [16:];if len (buf )%16!=0{_dc .Log .Debug ("\u0020\u0069\u0076\u0020\u0028\u0025\u0064\u0029\u003a\u0020\u0025\u0020\u0078",len (_gc ),_gc );
+_dc .Log .Debug ("\u0062\u0075\u0066\u0020\u0028\u0025\u0064\u0029\u003a\u0020\u0025\u0020\u0078",len (buf ),buf );return buf ,_f .Errorf ("\u0041\u0045\u0053\u0020\u0062\u0075\u0066\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u006e\u006f\u0074\u0020\u006d\u0075\u006c\u0074\u0069p\u006c\u0065\u0020\u006f\u0066 \u0031\u0036 \u0028\u0025\u0064\u0029",len (buf ));
+};_cc :=_ef .NewCBCDecrypter (_ga ,_gc );_dc .Log .Trace ("A\u0045\u0053\u0020\u0044ec\u0072y\u0070\u0074\u0020\u0028\u0025d\u0029\u003a\u0020\u0025\u0020\u0078",len (buf ),buf );_dc .Log .Trace ("\u0063\u0068\u006f\u0070\u0020\u0041\u0045\u0053\u0020\u0044\u0065c\u0072\u0079\u0070\u0074\u0020\u0028\u0025\u0064\u0029\u003a \u0025\u0020\u0078",len (buf ),buf );
+_cc .CryptBlocks (buf ,buf );_dc .Log .Trace ("\u0074\u006f\u0020(\u0025\u0064\u0029\u003a\u0020\u0025\u0020\u0078",len (buf ),buf );if len (buf )==0{_dc .Log .Trace ("\u0045\u006d\u0070\u0074\u0079\u0020b\u0075\u0066\u002c\u0020\u0072\u0065\u0074\u0075\u0072\u006e\u0069\u006e\u0067 \u0065\u006d\u0070\u0074\u0079\u0020\u0073t\u0072\u0069\u006e\u0067");
+return buf ,nil ;};_edb :=int (buf [len (buf )-1]);if _edb > len (buf ){_dc .Log .Debug ("\u0049\u006c\u006c\u0065g\u0061\u006c\u0020\u0070\u0061\u0064\u0020\u006c\u0065\u006eg\u0074h\u0020\u0028\u0025\u0064\u0020\u003e\u0020%\u0064\u0029",_edb ,len (buf ));
+return buf ,_f .Errorf ("\u0069n\u0076a\u006c\u0069\u0064\u0020\u0070a\u0064\u0020l\u0065\u006e\u0067\u0074\u0068");};buf =buf [:len (buf )-_edb ];return buf ,nil ;};func (filterIdentity )MakeKey (objNum ,genNum uint32 ,fkey []byte )([]byte ,error ){return fkey ,nil };
+
+
+// KeyLength implements Filter interface.
+func (_abae filterV2 )KeyLength ()int {return _abae ._eef };func init (){_dba ("\u0041\u0045\u0053V\u0033",_eag )};
+
+// HandlerVersion implements Filter interface.
+func (filterAESV3 )HandlerVersion ()(V ,R int ){V ,R =5,6;return ;};var _ Filter =filterAESV3 {};
+
+// MakeKey implements Filter interface.
+func (filterAESV3 )MakeKey (_ ,_ uint32 ,ekey []byte )([]byte ,error ){return ekey ,nil };
+
+// MakeKey implements Filter interface.
+func (_cag filterV2 )MakeKey (objNum ,genNum uint32 ,ekey []byte )([]byte ,error ){return _bf (objNum ,genNum ,ekey ,false );};
+
+// Name implements Filter interface.
+func (filterAESV3 )Name ()string {return "\u0041\u0045\u0053V\u0033"};func (filterIdentity )PDFVersion ()[2]int {return [2]int {}};
+
+// HandlerVersion implements Filter interface.
+func (filterAESV2 )HandlerVersion ()(V ,R int ){V ,R =4,4;return ;};
+
+// HandlerVersion implements Filter interface.
+func (_abbb filterV2 )HandlerVersion ()(V ,R int ){V ,R =2,3;return ;};func _cd (_ca FilterDict )(Filter ,error ){if _ca .Length ==128{_dc .Log .Debug ("\u0041\u0045S\u0056\u0032\u0020c\u0072\u0079\u0070\u0074\u0020f\u0069\u006c\u0074\u0065\u0072 l\u0065\u006e\u0067\u0074\u0068\u0020\u0061\u0070\u0070\u0065\u0061\u0072\u0073\u0020\u0074\u006f\u0020\u0062e\u0020i\u006e\u0020\u0062\u0069\u0074\u0073 ra\u0074\u0068\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0062\u0079te\u0073 \u002d\u0020\u0061\u0073s\u0075m\u0069n\u0067\u0020b\u0069\u0074s \u0028\u0025\u0064\u0029",_ca .Length );
+_ca .Length /=8;};if _ca .Length !=0&&_ca .Length !=16{return nil ,_f .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0041\u0045\u0053\u0056\u0032\u0020\u0063\u0072\u0079\u0070\u0074\u0020\u0066\u0069\u006c\u0074e\u0072\u0020\u006c\u0065\u006eg\u0074\u0068 \u0028\u0025\u0064\u0029",_ca .Length );
+};return filterAESV2 {},nil ;};type filterAES struct{};func (filterIdentity )HandlerVersion ()(V ,R int ){return ;};
+
+// NewFilterV2 creates a RC4-based filter with a specified key length (in bytes).
+func NewFilterV2 (length int )Filter {_aba ,_ee :=_cga (FilterDict {Length :length });if _ee !=nil {_dc .Log .Error ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0063\u006f\u0075l\u0064\u0020\u006e\u006f\u0074\u0020\u0063re\u0061\u0074\u0065\u0020R\u0043\u0034\u0020\u0056\u0032\u0020\u0063\u0072\u0079pt\u0020\u0066i\u006c\u0074\u0065\u0072\u003a\u0020\u0025\u0076",_ee );
+return filterV2 {_eef :length };};return _aba ;};func init (){_dba ("\u0056\u0032",_cga )};
+
+// EncryptBytes implements Filter interface.
+func (filterV2 )EncryptBytes (buf []byte ,okey []byte )([]byte ,error ){_ad ,_cgf :=_d .NewCipher (okey );if _cgf !=nil {return nil ,_cgf ;};_dc .Log .Trace ("\u0052\u00434\u0020\u0045\u006ec\u0072\u0079\u0070\u0074\u003a\u0020\u0025\u0020\u0078",buf );
+_ad .XORKeyStream (buf ,buf );_dc .Log .Trace ("\u0074o\u003a\u0020\u0025\u0020\u0078",buf );return buf ,nil ;};
+
+// Name implements Filter interface.
+func (filterV2 )Name ()string {return "\u0056\u0032"};type filterIdentity struct{};func (filterIdentity )Name ()string {return "\u0049\u0064\u0065\u006e\u0074\u0069\u0074\u0079"};
+
+// MakeKey implements Filter interface.
+func (filterAESV2 )MakeKey (objNum ,genNum uint32 ,ekey []byte )([]byte ,error ){return _bf (objNum ,genNum ,ekey ,true );};
+
+// Filter is a common interface for crypt filter methods.
+type Filter interface{
+
+// Name returns a name of the filter that should be used in CFM field of Encrypt dictionary.
+Name ()string ;
+
+// KeyLength returns a length of the encryption key in bytes.
+KeyLength ()int ;
+
+// PDFVersion reports the minimal version of PDF document that introduced this filter.
+PDFVersion ()[2]int ;
+
+// HandlerVersion reports V and R parameters that should be used for this filter.
+HandlerVersion ()(V ,R int );
+
+// MakeKey generates a object encryption key based on file encryption key and object numbers.
+// Used only for legacy filters - AESV3 doesn't change the key for each object.
+MakeKey (_bb ,_ce uint32 ,_ff []byte )([]byte ,error );
+
+// EncryptBytes encrypts a buffer using object encryption key, as returned by MakeKey.
+// Implementation may reuse a buffer and encrypt data in-place.
+EncryptBytes (_cbd []byte ,_fcd []byte )([]byte ,error );
+
+// DecryptBytes decrypts a buffer using object encryption key, as returned by MakeKey.
+// Implementation may reuse a buffer and decrypt data in-place.
+DecryptBytes (_cda []byte ,_abf []byte )([]byte ,error );};
+
+// PDFVersion implements Filter interface.
+func (filterAESV2 )PDFVersion ()[2]int {return [2]int {1,5}};
+
+// KeyLength implements Filter interface.
+func (filterAESV3 )KeyLength ()int {return 256/8};func _gaf (_fgd string )(filterFunc ,error ){_fgf :=_ege [_fgd ];if _fgf ==nil {return nil ,_f .Errorf ("\u0075\u006e\u0073\u0075p\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u0063\u0072\u0079p\u0074 \u0066\u0069\u006c\u0074\u0065\u0072\u003a \u0025\u0071",_fgd );
+};return _fgf ,nil ;};type filterAESV3 struct{filterAES };func (filterIdentity )EncryptBytes (p []byte ,okey []byte )([]byte ,error ){return p ,nil };type filterAESV2 struct{filterAES };func _bf (_bd ,_fb uint32 ,_dd []byte ,_ec bool )([]byte ,error ){_dde :=make ([]byte ,len (_dd )+5);
+copy (_dde ,_dd );for _gf :=0;_gf < 3;_gf ++{_fc :=byte ((_bd >>uint32 (8*_gf ))&0xff);_dde [_gf +len (_dd )]=_fc ;};for _fd :=0;_fd < 2;_fd ++{_fgg :=byte ((_fb >>uint32 (8*_fd ))&0xff);_dde [_fd +len (_dd )+3]=_fgg ;};if _ec {_dde =append (_dde ,0x73);
+_dde =append (_dde ,0x41);_dde =append (_dde ,0x6C);_dde =append (_dde ,0x54);};_gd :=_db .New ();_gd .Write (_dde );_dca :=_gd .Sum (nil );if len (_dd )+5< 16{return _dca [0:len (_dd )+5],nil ;};return _dca ,nil ;};var _ Filter =filterAESV2 {};type filterFunc func (_ge FilterDict )(Filter ,error );
+func _dba (_fgga string ,_abd filterFunc ){if _ ,_gee :=_ege [_fgga ];_gee {panic ("\u0061l\u0072e\u0061\u0064\u0079\u0020\u0072e\u0067\u0069s\u0074\u0065\u0072\u0065\u0064");};_ege [_fgga ]=_abd ;};var _ Filter =filterV2 {};
+
+// PDFVersion implements Filter interface.
+func (filterAESV3 )PDFVersion ()[2]int {return [2]int {2,0}};var (_ege =make (map[string ]filterFunc ););
+
+// DecryptBytes implements Filter interface.
+func (filterV2 )DecryptBytes (buf []byte ,okey []byte )([]byte ,error ){_cf ,_cdg :=_d .NewCipher (okey );if _cdg !=nil {return nil ,_cdg ;};_dc .Log .Trace ("\u0052\u00434\u0020\u0044\u0065c\u0072\u0079\u0070\u0074\u003a\u0020\u0025\u0020\u0078",buf );
+_cf .XORKeyStream (buf ,buf );_dc .Log .Trace ("\u0074o\u003a\u0020\u0025\u0020\u0078",buf );return buf ,nil ;};type filterV2 struct{_eef int };
+
+// NewFilterAESV3 creates an AES-based filter with a 256 bit key (AESV3).
+func NewFilterAESV3 ()Filter {_b ,_ea :=_eag (FilterDict {});if _ea !=nil {_dc .Log .Error ("E\u0052\u0052\u004f\u0052\u003a\u0020\u0063\u006f\u0075l\u0064\u0020\u006e\u006f\u0074\u0020\u0063re\u0061\u0074\u0065\u0020A\u0045\u0053\u0020\u0056\u0033\u0020\u0063\u0072\u0079pt\u0020\u0066i\u006c\u0074\u0065\u0072\u003a\u0020\u0025\u0076",_ea );
+return filterAESV3 {};};return _b ;};func _cga (_aca FilterDict )(Filter ,error ){if _aca .Length %8!=0{return nil ,_f .Errorf ("\u0063\u0072\u0079p\u0074\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u006e\u006f\u0074\u0020\u006d\u0075\u006c\u0074\u0069\u0070\u006c\u0065\u0020o\u0066\u0020\u0038\u0020\u0028\u0025\u0064\u0029",_aca .Length );
+};if _aca .Length < 5||_aca .Length > 16{if _aca .Length ==40||_aca .Length ==64||_aca .Length ==128{_dc .Log .Debug ("\u0053\u0054\u0041\u004e\u0044AR\u0044\u0020V\u0049\u004f\u004c\u0041\u0054\u0049\u004f\u004e\u003a\u0020\u0043\u0072\u0079\u0070\u0074\u0020\u004c\u0065\u006e\u0067\u0074\u0068\u0020\u0061\u0070\u0070\u0065\u0061\u0072s\u0020\u0074\u006f \u0062\u0065\u0020\u0069\u006e\u0020\u0062\u0069\u0074\u0073\u0020\u0072\u0061t\u0068\u0065\u0072\u0020\u0074h\u0061\u006e\u0020\u0062\u0079\u0074\u0065\u0073\u0020-\u0020\u0061s\u0073u\u006d\u0069\u006e\u0067\u0020\u0062\u0069t\u0073\u0020\u0028\u0025\u0064\u0029",_aca .Length );
+_aca .Length /=8;}else {return nil ,_f .Errorf ("\u0063\u0072\u0079\u0070\u0074\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u006c\u0065\u006e\u0067\u0074h\u0020\u006e\u006f\u0074\u0020\u0069\u006e \u0072\u0061\u006e\u0067\u0065\u0020\u0034\u0030\u0020\u002d\u00201\u0032\u0038\u0020\u0062\u0069\u0074\u0020\u0028\u0025\u0064\u0029",_aca .Length );
+};};return filterV2 {_eef :_aca .Length },nil ;};
+
+// NewFilter creates CryptFilter from a corresponding dictionary.
+func NewFilter (d FilterDict )(Filter ,error ){_dg ,_bgb :=_gaf (d .CFM );if _bgb !=nil {return nil ,_bgb ;};_aad ,_bgb :=_dg (d );if _bgb !=nil {return nil ,_bgb ;};return _aad ,nil ;};
+
+// NewIdentity creates an identity filter that bypasses all data without changes.
+func NewIdentity ()Filter {return filterIdentity {}};func _eag (_eaa FilterDict )(Filter ,error ){if _eaa .Length ==256{_dc .Log .Debug ("\u0041\u0045S\u0056\u0033\u0020c\u0072\u0079\u0070\u0074\u0020f\u0069\u006c\u0074\u0065\u0072 l\u0065\u006e\u0067\u0074\u0068\u0020\u0061\u0070\u0070\u0065\u0061\u0072\u0073\u0020\u0074\u006f\u0020\u0062e\u0020i\u006e\u0020\u0062\u0069\u0074\u0073 ra\u0074\u0068\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u0062\u0079te\u0073 \u002d\u0020\u0061\u0073s\u0075m\u0069n\u0067\u0020b\u0069\u0074s \u0028\u0025\u0064\u0029",_eaa .Length );
+_eaa .Length /=8;};if _eaa .Length !=0&&_eaa .Length !=32{return nil ,_f .Errorf ("\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0041\u0045\u0053\u0056\u0033\u0020\u0063\u0072\u0079\u0070\u0074\u0020\u0066\u0069\u006c\u0074e\u0072\u0020\u006c\u0065\u006eg\u0074\u0068 \u0028\u0025\u0064\u0029",_eaa .Length );
+};return filterAESV3 {},nil ;};
+
+// FilterDict represents information from a CryptFilter dictionary.
+type FilterDict struct{CFM string ;AuthEvent _da .AuthEvent ;Length int ;};func (filterIdentity )KeyLength ()int {return 0}; \ No newline at end of file
diff --git a/unipdf/core/security/security.go b/unipdf/core/security/security.go
new file mode 100644
index 0000000..278e568
--- /dev/null
+++ b/unipdf/core/security/security.go
@@ -0,0 +1,127 @@
+//
+// 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 security ;import (_aa "bytes";_gg "crypto/aes";_c "crypto/cipher";_ae "crypto/md5";_cf "crypto/rand";_fa "crypto/rc4";_ca "crypto/sha256";_ge "crypto/sha512";_e "encoding/binary";_f "errors";_fg "fmt";_be "github.com/unidoc/unipdf/v4/common";_g "hash";
+_b "io";_ef "math";);func (_dc *ecbEncrypter )CryptBlocks (dst ,src []byte ){if len (src )%_dc ._efd !=0{_be .Log .Error ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0045\u0043\u0042\u0020\u0065\u006e\u0063\u0072\u0079\u0070\u0074\u003a \u0069\u006e\u0070\u0075\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u0075\u006c\u006c\u0020\u0062\u006c\u006f\u0063\u006b\u0073");
+return ;};if len (dst )< len (src ){_be .Log .Error ("\u0045R\u0052\u004fR\u003a\u0020\u0045C\u0042\u0020\u0065\u006e\u0063\u0072\u0079p\u0074\u003a\u0020\u006f\u0075\u0074p\u0075\u0074\u0020\u0073\u006d\u0061\u006c\u006c\u0065\u0072\u0020t\u0068\u0061\u006e\u0020\u0069\u006e\u0070\u0075\u0074");
+return ;};for len (src )> 0{_dc ._ga .Encrypt (dst ,src [:_dc ._efd ]);src =src [_dc ._efd :];dst =dst [_dc ._efd :];};};func (_eef stdHandlerR4 )alg3Key (R int ,_cbg []byte )[]byte {_bb :=_ae .New ();_ad :=_eef .paddedPass (_cbg );_bb .Write (_ad );if R >=3{for _gc :=0;
+_gc < 50;_gc ++{_db :=_bb .Sum (nil );_bb =_ae .New ();_bb .Write (_db );};};_ceg :=_bb .Sum (nil );if R ==2{_ceg =_ceg [0:5];}else {_ceg =_ceg [0:_eef .Length /8];};return _ceg ;};
+
+// GenerateParams generates and sets O and U parameters for the encryption dictionary.
+// It expects R, P and EncryptMetadata fields to be set.
+func (_fgg stdHandlerR4 )GenerateParams (d *StdEncryptDict ,opass ,upass []byte )([]byte ,error ){O ,_bbd :=_fgg .alg3 (d .R ,upass ,opass );if _bbd !=nil {_be .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0045r\u0072\u006f\u0072\u0020\u0067\u0065\u006ee\u0072\u0061\u0074\u0069\u006e\u0067 \u004f\u0020\u0066\u006f\u0072\u0020\u0065\u006e\u0063\u0072\u0079p\u0074\u0069\u006f\u006e\u0020\u0028\u0025\u0073\u0029",_bbd );
+return nil ,_bbd ;};d .O =O ;_be .Log .Trace ("\u0067\u0065\u006e\u0020\u004f\u003a\u0020\u0025\u0020\u0078",O );_bdb :=_fgg .alg2 (d ,upass );U ,_bbd :=_fgg .alg5 (_bdb ,upass );if _bbd !=nil {_be .Log .Debug ("\u0045R\u0052\u004fR\u003a\u0020\u0045r\u0072\u006f\u0072\u0020\u0067\u0065\u006ee\u0072\u0061\u0074\u0069\u006e\u0067 \u004f\u0020\u0066\u006f\u0072\u0020\u0065\u006e\u0063\u0072\u0079p\u0074\u0069\u006f\u006e\u0020\u0028\u0025\u0073\u0029",_bbd );
+return nil ,_bbd ;};d .U =U ;_be .Log .Trace ("\u0067\u0065\u006e\u0020\u0055\u003a\u0020\u0025\u0020\u0078",U );return _bdb ,nil ;};
+
+// Permissions is a bitmask of access permissions for a PDF file.
+type Permissions uint32 ;func (_dg stdHandlerR4 )alg3 (R int ,_geed ,_eec []byte )([]byte ,error ){var _ba []byte ;if len (_eec )> 0{_ba =_dg .alg3Key (R ,_eec );}else {_ba =_dg .alg3Key (R ,_geed );};_cc ,_cfg :=_fa .NewCipher (_ba );if _cfg !=nil {return nil ,_f .New ("\u0066a\u0069l\u0065\u0064\u0020\u0072\u0063\u0034\u0020\u0063\u0069\u0070\u0068");
+};_dd :=_dg .paddedPass (_geed );_bgd :=make ([]byte ,len (_dd ));_cc .XORKeyStream (_bgd ,_dd );if R >=3{_fe :=make ([]byte ,len (_ba ));for _cbe :=0;_cbe < 19;_cbe ++{for _fd :=0;_fd < len (_ba );_fd ++{_fe [_fd ]=_ba [_fd ]^byte (_cbe +1);};_ggag ,_ab :=_fa .NewCipher (_fe );
+if _ab !=nil {return nil ,_f .New ("\u0066a\u0069l\u0065\u0064\u0020\u0072\u0063\u0034\u0020\u0063\u0069\u0070\u0068");};_ggag .XORKeyStream (_bgd ,_bgd );};};return _bgd ,nil ;};func _fc (_bg ,_cfd string ,_ee int ,_gee []byte )error {if len (_gee )< _ee {return errInvalidField {Func :_bg ,Field :_cfd ,Exp :_ee ,Got :len (_gee )};
+};return nil ;};func (_ag *ecbEncrypter )BlockSize ()int {return _ag ._efd };func (_gf *ecbDecrypter )BlockSize ()int {return _gf ._efd };
+
+// StdEncryptDict is a set of additional fields used in standard encryption dictionary.
+type StdEncryptDict struct{R int ;P Permissions ;EncryptMetadata bool ;O ,U []byte ;OE ,UE []byte ;Perms []byte ;};type stdHandlerR6 struct{};type errInvalidField struct{Func string ;Field string ;Exp int ;Got int ;};func (_caff stdHandlerR6 )alg8 (_dace *StdEncryptDict ,_gfbf []byte ,_cbeb []byte )error {if _gffb :=_fc ("\u0061\u006c\u0067\u0038","\u004b\u0065\u0079",32,_gfbf );
+_gffb !=nil {return _gffb ;};var _cgd [16]byte ;if _ ,_gac :=_b .ReadFull (_cf .Reader ,_cgd [:]);_gac !=nil {return _gac ;};_bbdgc :=_cgd [0:8];_fbag :=_cgd [8:16];_aaad :=make ([]byte ,len (_cbeb )+len (_bbdgc ));_af :=copy (_aaad ,_cbeb );copy (_aaad [_af :],_bbdgc );
+_dfg ,_dde :=_caff .alg2b (_dace .R ,_aaad ,_cbeb ,nil );if _dde !=nil {return _dde ;};U :=make ([]byte ,len (_dfg )+len (_bbdgc )+len (_fbag ));_af =copy (U ,_dfg [:32]);_af +=copy (U [_af :],_bbdgc );copy (U [_af :],_fbag );_dace .U =U ;_af =len (_cbeb );
+copy (_aaad [_af :],_fbag );_dfg ,_dde =_caff .alg2b (_dace .R ,_aaad ,_cbeb ,nil );if _dde !=nil {return _dde ;};_beb ,_dde :=_geg (_dfg [:32]);if _dde !=nil {return _dde ;};_beaa :=make ([]byte ,_gg .BlockSize );_abd :=_c .NewCBCEncrypter (_beb ,_beaa );
+UE :=make ([]byte ,32);_abd .CryptBlocks (UE ,_gfbf [:32]);_dace .UE =UE ;return nil ;};
+
+// NewHandlerR4 creates a new standard security handler for R<=4.
+func NewHandlerR4 (id0 string ,length int )StdHandler {return stdHandlerR4 {ID0 :id0 ,Length :length }};func _bbda (_bfa []byte )([]byte ,error ){_dcgb :=_ca .New ();_dcgb .Write (_bfa );return _dcgb .Sum (nil ),nil ;};type ecbDecrypter ecb ;func (_dbf stdHandlerR6 )alg12 (_fgge *StdEncryptDict ,_bgf []byte )([]byte ,error ){if _cfge :=_fc ("\u0061\u006c\u00671\u0032","\u0055",48,_fgge .U );
+_cfge !=nil {return nil ,_cfge ;};if _aaaaf :=_fc ("\u0061\u006c\u00671\u0032","\u004f",48,_fgge .O );_aaaaf !=nil {return nil ,_aaaaf ;};_afc :=make ([]byte ,len (_bgf )+8+48);_bec :=copy (_afc ,_bgf );_bec +=copy (_afc [_bec :],_fgge .O [32:40]);_bec +=copy (_afc [_bec :],_fgge .U [0:48]);
+_gce ,_aff :=_dbf .alg2b (_fgge .R ,_afc ,_bgf ,_fgge .U [0:48]);if _aff !=nil {return nil ,_aff ;};_gce =_gce [:32];if !_aa .Equal (_gce ,_fgge .O [:32]){return nil ,nil ;};return _gce ,nil ;};
+
+// NewHandlerR6 creates a new standard security handler for R=5 and R=6.
+func NewHandlerR6 ()StdHandler {return stdHandlerR6 {}};const (EventDocOpen =AuthEvent ("\u0044o\u0063\u004f\u0070\u0065\u006e");EventEFOpen =AuthEvent ("\u0045\u0046\u004f\u0070\u0065\u006e"););var _ StdHandler =stdHandlerR4 {};
+
+// AuthEvent is an event type that triggers authentication.
+type AuthEvent string ;type ecb struct{_ga _c .Block ;_efd int ;};func _ff (_de _c .Block )_c .BlockMode {return (*ecbEncrypter )(_d (_de ))};func _gdb (_adc []byte ,_agc int ){_gfe :=_agc ;for _gfe < len (_adc ){copy (_adc [_gfe :],_adc [:_gfe ]);_gfe *=2;
+};};func _geg (_ecg []byte )(_c .Block ,error ){_bdbe ,_bba :=_gg .NewCipher (_ecg );if _bba !=nil {_be .Log .Error ("\u0045\u0052\u0052\u004f\u0052\u003a\u0020\u0063\u006f\u0075\u006c\u0064\u0020\u006e\u006f\u0074\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020A\u0045\u0053\u0020\u0063\u0069p\u0068\u0065r\u003a\u0020\u0025\u0076",_bba );
+return nil ,_bba ;};return _bdbe ,nil ;};func _gfb (_gba ,_dac ,_agd []byte )([]byte ,error ){var (_bab ,_efg ,_ebf _g .Hash ;);_bab =_ca .New ();_geegf :=make ([]byte ,64);_dbg :=_bab ;_dbg .Write (_gba );K :=_dbg .Sum (_geegf [:0]);_fga :=make ([]byte ,64*(127+64+48));
+_ccg :=func (_ int )([]byte ,error ){_bbe :=len (_dac )+len (K )+len (_agd );_dae :=_fga [:_bbe ];_gdd :=copy (_dae ,_dac );_gdd +=copy (_dae [_gdd :],K [:]);_gdd +=copy (_dae [_gdd :],_agd );if _gdd !=_bbe {_be .Log .Error ("E\u0052\u0052\u004f\u0052\u003a\u0020u\u006e\u0065\u0078\u0070\u0065\u0063t\u0065\u0064\u0020\u0072\u006f\u0075\u006ed\u0020\u0069\u006e\u0070\u0075\u0074\u0020\u0073\u0069\u007ae\u002e");
+return nil ,_f .New ("\u0077\u0072\u006f\u006e\u0067\u0020\u0073\u0069\u007a\u0065");};K1 :=_fga [:_bbe *64];_gdb (K1 ,_bbe );_gdfe ,_fecc :=_geg (K [0:16]);if _fecc !=nil {return nil ,_fecc ;};_fgaf :=_c .NewCBCEncrypter (_gdfe ,K [16:32]);_fgaf .CryptBlocks (K1 ,K1 );
+E :=K1 ;_ddb :=0;for _cdf :=0;_cdf < 16;_cdf ++{_ddb +=int (E [_cdf ]%3);};var _gdbc _g .Hash ;switch _ddb %3{case 0:_gdbc =_bab ;case 1:if _efg ==nil {_efg =_ge .New384 ();};_gdbc =_efg ;case 2:if _ebf ==nil {_ebf =_ge .New ();};_gdbc =_ebf ;};_gdbc .Reset ();
+_gdbc .Write (E );K =_gdbc .Sum (_geegf [:0]);return E ,nil ;};for _cdg :=0;;{E ,_gcb :=_ccg (_cdg );if _gcb !=nil {return nil ,_gcb ;};_fcb :=E [len (E )-1];_cdg ++;if _cdg >=64&&_fcb <=uint8 (_cdg -32){break ;};};return K [:32],nil ;};var _ StdHandler =stdHandlerR6 {};
+func (_bbad stdHandlerR6 )alg11 (_ac *StdEncryptDict ,_fdd []byte )([]byte ,error ){if _def :=_fc ("\u0061\u006c\u00671\u0031","\u0055",48,_ac .U );_def !=nil {return nil ,_def ;};_aab :=make ([]byte ,len (_fdd )+8);_cbf :=copy (_aab ,_fdd );_cbf +=copy (_aab [_cbf :],_ac .U [32:40]);
+_cgaa ,_cafg :=_bbad .alg2b (_ac .R ,_aab ,_fdd ,nil );if _cafg !=nil {return nil ,_cafg ;};_cgaa =_cgaa [:32];if !_aa .Equal (_cgaa ,_ac .U [:32]){return nil ,nil ;};return _cgaa ,nil ;};func (_eefg stdHandlerR6 )alg10 (_fcd *StdEncryptDict ,_bbg []byte )error {if _dcf :=_fc ("\u0061\u006c\u00671\u0030","\u004b\u0065\u0079",32,_bbg );
+_dcf !=nil {return _dcf ;};_gbc :=uint64 (uint32 (_fcd .P ))|(_ef .MaxUint32 <<32);Perms :=make ([]byte ,16);_e .LittleEndian .PutUint64 (Perms [:8],_gbc );if _fcd .EncryptMetadata {Perms [8]='T';}else {Perms [8]='F';};copy (Perms [9:12],"\u0061\u0064\u0062");
+if _ ,_cde :=_b .ReadFull (_cf .Reader ,Perms [12:16]);_cde !=nil {return _cde ;};_aed ,_cad :=_geg (_bbg [:32]);if _cad !=nil {return _cad ;};_ggg :=_ff (_aed );_ggg .CryptBlocks (Perms ,Perms );_fcd .Perms =Perms [:16];return nil ;};func (_eea stdHandlerR4 )alg5 (_dggd []byte ,_ []byte )([]byte ,error ){_da :=_ae .New ();
+_da .Write ([]byte (_dcg ));_da .Write ([]byte (_eea .ID0 ));_abg :=_da .Sum (nil );_be .Log .Trace ("\u0061\u006c\u0067\u0035");_be .Log .Trace ("\u0065k\u0065\u0079\u003a\u0020\u0025\u0020x",_dggd );_be .Log .Trace ("\u0049D\u003a\u0020\u0025\u0020\u0078",_eea .ID0 );
+if len (_abg )!=16{return nil ,_f .New ("\u0068a\u0073\u0068\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u0020\u006eo\u0074\u0020\u0031\u0036\u0020\u0062\u0079\u0074\u0065\u0073");};_aadc ,_gdf :=_fa .NewCipher (_dggd );if _gdf !=nil {return nil ,_f .New ("\u0066a\u0069l\u0065\u0064\u0020\u0072\u0063\u0034\u0020\u0063\u0069\u0070\u0068");
+};_cag :=make ([]byte ,16);_aadc .XORKeyStream (_cag ,_abg );_bca :=make ([]byte ,len (_dggd ));for _eg :=0;_eg < 19;_eg ++{for _egf :=0;_egf < len (_dggd );_egf ++{_bca [_egf ]=_dggd [_egf ]^byte (_eg +1);};_aadc ,_gdf =_fa .NewCipher (_bca );if _gdf !=nil {return nil ,_f .New ("\u0066a\u0069l\u0065\u0064\u0020\u0072\u0063\u0034\u0020\u0063\u0069\u0070\u0068");
+};_aadc .XORKeyStream (_cag ,_cag );_be .Log .Trace ("\u0069\u0020\u003d\u0020\u0025\u0064\u002c\u0020\u0065\u006b\u0065\u0079:\u0020\u0025\u0020\u0078",_eg ,_bca );_be .Log .Trace ("\u0069\u0020\u003d\u0020\u0025\u0064\u0020\u002d\u003e\u0020\u0025\u0020\u0078",_eg ,_cag );
+};_gdg :=make ([]byte ,32);for _aba :=0;_aba < 16;_aba ++{_gdg [_aba ]=_cag [_aba ];};_ ,_gdf =_cf .Read (_gdg [16:32]);if _gdf !=nil {return nil ,_f .New ("\u0066a\u0069\u006c\u0065\u0064 \u0074\u006f\u0020\u0067\u0065n\u0020r\u0061n\u0064\u0020\u006e\u0075\u006d\u0062\u0065r");
+};return _gdg ,nil ;};
+
+// Allowed checks if a set of permissions can be granted.
+func (_gfa Permissions )Allowed (p2 Permissions )bool {return _gfa &p2 ==p2 };func (_aaf stdHandlerR4 )alg7 (_dcca *StdEncryptDict ,_bdc []byte )([]byte ,error ){_abe :=_aaf .alg3Key (_dcca .R ,_bdc );_eff :=make ([]byte ,len (_dcca .O ));if _dcca .R ==2{_fgf ,_gag :=_fa .NewCipher (_abe );
+if _gag !=nil {return nil ,_f .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0063\u0069\u0070\u0068\u0065\u0072");};_fgf .XORKeyStream (_eff ,_dcca .O );}else if _dcca .R >=3{_dce :=append ([]byte {},_dcca .O ...);for _fba :=0;_fba < 20;_fba ++{_gcc :=append ([]byte {},_abe ...);
+for _fcc :=0;_fcc < len (_abe );_fcc ++{_gcc [_fcc ]^=byte (19-_fba );};_daf ,_fbab :=_fa .NewCipher (_gcc );if _fbab !=nil {return nil ,_f .New ("\u0066\u0061\u0069\u006c\u0065\u0064\u0020\u0063\u0069\u0070\u0068\u0065\u0072");};_daf .XORKeyStream (_eff ,_dce );
+_dce =append ([]byte {},_eff ...);};}else {return nil ,_f .New ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020R");};_fec ,_eab :=_aaf .alg6 (_dcca ,_eff );if _eab !=nil {return nil ,nil ;};return _fec ,nil ;};
+
+// Authenticate implements StdHandler interface.
+func (_fbdc stdHandlerR6 )Authenticate (d *StdEncryptDict ,pass []byte )([]byte ,Permissions ,error ){return _fbdc .alg2a (d ,pass );};func (_gca stdHandlerR4 )alg4 (_cbd []byte ,_ []byte )([]byte ,error ){_gfad ,_dgg :=_fa .NewCipher (_cbd );if _dgg !=nil {return nil ,_f .New ("\u0066a\u0069l\u0065\u0064\u0020\u0072\u0063\u0034\u0020\u0063\u0069\u0070\u0068");
+};_caf :=[]byte (_dcg );_dcc :=make ([]byte ,len (_caf ));_gfad .XORKeyStream (_dcc ,_caf );return _dcc ,nil ;};func (_dba stdHandlerR6 )alg13 (_dcae *StdEncryptDict ,_aabf []byte )error {if _aca :=_fc ("\u0061\u006c\u00671\u0033","\u004b\u0065\u0079",32,_aabf );
+_aca !=nil {return _aca ;};if _fbd :=_fc ("\u0061\u006c\u00671\u0033","\u0050\u0065\u0072m\u0073",16,_dcae .Perms );_fbd !=nil {return _fbd ;};_ada :=make ([]byte ,16);copy (_ada ,_dcae .Perms [:16]);_fdf ,_ecd :=_gg .NewCipher (_aabf [:32]);if _ecd !=nil {return _ecd ;
+};_fbae :=_cd (_fdf );_fbae .CryptBlocks (_ada ,_ada );if !_aa .Equal (_ada [9:12],[]byte ("\u0061\u0064\u0062")){return _f .New ("\u0064\u0065\u0063o\u0064\u0065\u0064\u0020p\u0065\u0072\u006d\u0069\u0073\u0073\u0069o\u006e\u0073\u0020\u0061\u0072\u0065\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064");
+};_gdgd :=Permissions (_e .LittleEndian .Uint32 (_ada [0:4]));if _gdgd !=_dcae .P {return _f .New ("\u0070\u0065r\u006d\u0069\u0073\u0073\u0069\u006f\u006e\u0073\u0020\u0076\u0061\u006c\u0069\u0064\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0061il\u0065\u0064");
+};var _acb bool ;switch _ada [8]{case 'T':_acb =true ;case 'F':_acb =false ;default:return _f .New ("\u0064\u0065\u0063\u006f\u0064\u0065\u0064 \u006d\u0065\u0074a\u0064\u0061\u0074\u0061 \u0065\u006e\u0063\u0072\u0079\u0070\u0074\u0069\u006f\u006e\u0020\u0066\u006c\u0061\u0067\u0020\u0069\u0073\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064");
+};if _acb !=_dcae .EncryptMetadata {return _f .New ("\u006d\u0065t\u0061\u0064\u0061\u0074a\u0020\u0065n\u0063\u0072\u0079\u0070\u0074\u0069\u006f\u006e \u0076\u0061\u006c\u0069\u0064\u0061\u0074\u0069\u006f\u006e\u0020\u0066a\u0069\u006c\u0065\u0064");
+};return nil ;};func _cd (_gga _c .Block )_c .BlockMode {return (*ecbDecrypter )(_d (_gga ))};
+
+// Authenticate implements StdHandler interface.
+func (_aae stdHandlerR4 )Authenticate (d *StdEncryptDict ,pass []byte )([]byte ,Permissions ,error ){_be .Log .Trace ("\u0044\u0065b\u0075\u0067\u0067\u0069n\u0067\u0020a\u0075\u0074\u0068\u0065\u006e\u0074\u0069\u0063a\u0074\u0069\u006f\u006e\u0020\u002d\u0020\u006f\u0077\u006e\u0065\u0072 \u0070\u0061\u0073\u0073");
+_deg ,_ecc :=_aae .alg7 (d ,pass );if _ecc !=nil {return nil ,0,_ecc ;};if _deg !=nil {_be .Log .Trace ("\u0074h\u0069\u0073\u002e\u0061u\u0074\u0068\u0065\u006e\u0074i\u0063a\u0074e\u0064\u0020\u003d\u0020\u0054\u0072\u0075e");return _deg ,PermOwner ,nil ;
+};_be .Log .Trace ("\u0044\u0065bu\u0067\u0067\u0069n\u0067\u0020\u0061\u0075the\u006eti\u0063\u0061\u0074\u0069\u006f\u006e\u0020- \u0075\u0073\u0065\u0072\u0020\u0070\u0061s\u0073");_deg ,_ecc =_aae .alg6 (d ,pass );if _ecc !=nil {return nil ,0,_ecc ;
+};if _deg !=nil {_be .Log .Trace ("\u0074h\u0069\u0073\u002e\u0061u\u0074\u0068\u0065\u006e\u0074i\u0063a\u0074e\u0064\u0020\u003d\u0020\u0054\u0072\u0075e");return _deg ,d .P ,nil ;};return nil ,0,nil ;};const _dcg ="\x28\277\116\136\x4e\x75\x8a\x41\x64\000\x4e\x56\377"+"\xfa\001\010\056\x2e\x00\xb6\xd0\x68\076\x80\x2f\014"+"\251\xfe\x64\x53\x69\172";
+func (_ded *ecbDecrypter )CryptBlocks (dst ,src []byte ){if len (src )%_ded ._efd !=0{_be .Log .Error ("\u0045\u0052\u0052\u004f\u0052:\u0020\u0045\u0043\u0042\u0020\u0064\u0065\u0063\u0072\u0079\u0070\u0074\u003a \u0069\u006e\u0070\u0075\u0074\u0020\u006e\u006f\u0074\u0020\u0066\u0075\u006c\u006c\u0020\u0062\u006c\u006f\u0063\u006b\u0073");
+return ;};if len (dst )< len (src ){_be .Log .Error ("\u0045R\u0052\u004fR\u003a\u0020\u0045C\u0042\u0020\u0064\u0065\u0063\u0072\u0079p\u0074\u003a\u0020\u006f\u0075\u0074p\u0075\u0074\u0020\u0073\u006d\u0061\u006c\u006c\u0065\u0072\u0020t\u0068\u0061\u006e\u0020\u0069\u006e\u0070\u0075\u0074");
+return ;};for len (src )> 0{_ded ._ga .Decrypt (dst ,src [:_ded ._efd ]);src =src [_ded ._efd :];dst =dst [_ded ._efd :];};};func (_agcg stdHandlerR6 )alg2b (R int ,_abf ,_cfe ,_eee []byte )([]byte ,error ){if R ==5{return _bbda (_abf );};return _gfb (_abf ,_cfe ,_eee );
+};const (PermOwner =Permissions (_ef .MaxUint32 );PermPrinting =Permissions (1<<2);PermModify =Permissions (1<<3);PermExtractGraphics =Permissions (1<<4);PermAnnotate =Permissions (1<<5);PermFillForms =Permissions (1<<8);PermDisabilityExtract =Permissions (1<<9);
+PermRotateInsert =Permissions (1<<10);PermFullPrintQuality =Permissions (1<<11););func (_cage stdHandlerR4 )alg6 (_bge *StdEncryptDict ,_ffe []byte )([]byte ,error ){var (_gb []byte ;_aac error ;);_cffe :=_cage .alg2 (_bge ,_ffe );if _bge .R ==2{_gb ,_aac =_cage .alg4 (_cffe ,_ffe );
+}else if _bge .R >=3{_gb ,_aac =_cage .alg5 (_cffe ,_ffe );}else {return nil ,_f .New ("\u0069n\u0076\u0061\u006c\u0069\u0064\u0020R");};if _aac !=nil {return nil ,_aac ;};_be .Log .Trace ("\u0063\u0068\u0065\u0063k:\u0020\u0025\u0020\u0078\u0020\u003d\u003d\u0020\u0025\u0020\u0078\u0020\u003f",string (_gb ),string (_bge .U ));
+_gfg :=_gb ;_geeg :=_bge .U ;if _bge .R >=3{if len (_gfg )> 16{_gfg =_gfg [0:16];};if len (_geeg )> 16{_geeg =_geeg [0:16];};};if !_aa .Equal (_gfg ,_geeg ){return nil ,nil ;};return _cffe ,nil ;};func (_fcf stdHandlerR4 )alg2 (_eb *StdEncryptDict ,_cff []byte )[]byte {_be .Log .Trace ("\u0061\u006c\u0067\u0032");
+_gff :=_fcf .paddedPass (_cff );_ebd :=_ae .New ();_ebd .Write (_gff );_ebd .Write (_eb .O );var _ced [4]byte ;_e .LittleEndian .PutUint32 (_ced [:],uint32 (_eb .P ));_ebd .Write (_ced [:]);_be .Log .Trace ("\u0067o\u0020\u0050\u003a\u0020\u0025\u0020x",_ced );
+_ebd .Write ([]byte (_fcf .ID0 ));_be .Log .Trace ("\u0074\u0068\u0069\u0073\u002e\u0052\u0020\u003d\u0020\u0025d\u0020\u0065\u006e\u0063\u0072\u0079\u0070t\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061\u0020\u0025\u0076",_eb .R ,_eb .EncryptMetadata );
+if (_eb .R >=4)&&!_eb .EncryptMetadata {_ebd .Write ([]byte {0xff,0xff,0xff,0xff});};_cg :=_ebd .Sum (nil );if _eb .R >=3{_ebd =_ae .New ();for _cga :=0;_cga < 50;_cga ++{_ebd .Reset ();_ebd .Write (_cg [0:_fcf .Length /8]);_cg =_ebd .Sum (nil );};};if _eb .R >=3{return _cg [0:_fcf .Length /8];
+};return _cg [0:5];};func (_gcce stdHandlerR6 )alg2a (_cfa *StdEncryptDict ,_bf []byte )([]byte ,Permissions ,error ){if _fcg :=_fc ("\u0061\u006c\u00672\u0061","\u004f",48,_cfa .O );_fcg !=nil {return nil ,0,_fcg ;};if _aaaa :=_fc ("\u0061\u006c\u00672\u0061","\u0055",48,_cfa .U );
+_aaaa !=nil {return nil ,0,_aaaa ;};if len (_bf )> 127{_bf =_bf [:127];};_ffc ,_bgb :=_gcce .alg12 (_cfa ,_bf );if _bgb !=nil {return nil ,0,_bgb ;};var (_dfe []byte ;_abga []byte ;_ebb []byte ;);var _dedg Permissions ;if len (_ffc )!=0{_dedg =PermOwner ;
+_bea :=make ([]byte ,len (_bf )+8+48);_dfa :=copy (_bea ,_bf );_dfa +=copy (_bea [_dfa :],_cfa .O [40:48]);copy (_bea [_dfa :],_cfa .U [0:48]);_dfe =_bea ;_abga =_cfa .OE ;_ebb =_cfa .U [0:48];}else {_ffc ,_bgb =_gcce .alg11 (_cfa ,_bf );if _bgb ==nil &&len (_ffc )==0{_ffc ,_bgb =_gcce .alg11 (_cfa ,[]byte (""));
+};if _bgb !=nil {return nil ,0,_bgb ;}else if len (_ffc )==0{return nil ,0,nil ;};_dedg =_cfa .P ;_bbdg :=make ([]byte ,len (_bf )+8);_efb :=copy (_bbdg ,_bf );copy (_bbdg [_efb :],_cfa .U [40:48]);_dfe =_bbdg ;_abga =_cfa .UE ;_ebb =nil ;};if _bgbd :=_fc ("\u0061\u006c\u00672\u0061","\u004b\u0065\u0079",32,_abga );
+_bgbd !=nil {return nil ,0,_bgbd ;};_abga =_abga [:32];_cae ,_bgb :=_gcce .alg2b (_cfa .R ,_dfe ,_bf ,_ebb );if _bgb !=nil {return nil ,0,_bgb ;};_bad ,_bgb :=_gg .NewCipher (_cae [:32]);if _bgb !=nil {return nil ,0,_bgb ;};_bgg :=make ([]byte ,_gg .BlockSize );
+_dad :=_c .NewCBCDecrypter (_bad ,_bgg );_eeb :=make ([]byte ,32);_dad .CryptBlocks (_eeb ,_abga );if _cfa .R ==5{return _eeb ,_dedg ,nil ;};_bgb =_gcce .alg13 (_cfa ,_eeb );if _bgb !=nil {return nil ,0,_bgb ;};return _eeb ,_dedg ,nil ;};func (stdHandlerR4 )paddedPass (_fb []byte )[]byte {_ec :=make ([]byte ,32);
+_cac :=copy (_ec ,_fb );for ;_cac < 32;_cac ++{_ec [_cac ]=_dcg [_cac -len (_fb )];};return _ec ;};func (_cea stdHandlerR6 )alg9 (_eae *StdEncryptDict ,_fbabb []byte ,_cegc []byte )error {if _gae :=_fc ("\u0061\u006c\u0067\u0039","\u004b\u0065\u0079",32,_fbabb );
+_gae !=nil {return _gae ;};if _fgac :=_fc ("\u0061\u006c\u0067\u0039","\u0055",48,_eae .U );_fgac !=nil {return _fgac ;};var _ggb [16]byte ;if _ ,_egd :=_b .ReadFull (_cf .Reader ,_ggb [:]);_egd !=nil {return _egd ;};_bagc :=_ggb [0:8];_ddea :=_ggb [8:16];
+_dda :=_eae .U [:48];_ebdb :=make ([]byte ,len (_cegc )+len (_bagc )+len (_dda ));_eeg :=copy (_ebdb ,_cegc );_eeg +=copy (_ebdb [_eeg :],_bagc );_eeg +=copy (_ebdb [_eeg :],_dda );_aadg ,_ccd :=_cea .alg2b (_eae .R ,_ebdb ,_cegc ,_dda );if _ccd !=nil {return _ccd ;
+};O :=make ([]byte ,len (_aadg )+len (_bagc )+len (_ddea ));_eeg =copy (O ,_aadg [:32]);_eeg +=copy (O [_eeg :],_bagc );_eeg +=copy (O [_eeg :],_ddea );_eae .O =O ;_eeg =len (_cegc );_eeg +=copy (_ebdb [_eeg :],_ddea );_aadg ,_ccd =_cea .alg2b (_eae .R ,_ebdb ,_cegc ,_dda );
+if _ccd !=nil {return _ccd ;};_gfd ,_ccd :=_geg (_aadg [:32]);if _ccd !=nil {return _ccd ;};_efbb :=make ([]byte ,_gg .BlockSize );_fbac :=_c .NewCBCEncrypter (_gfd ,_efbb );OE :=make ([]byte ,32);_fbac .CryptBlocks (OE ,_fbabb [:32]);_eae .OE =OE ;return nil ;
+};type ecbEncrypter ecb ;
+
+// StdHandler is an interface for standard security handlers.
+type StdHandler interface{
+
+// GenerateParams uses owner and user passwords to set encryption parameters and generate an encryption key.
+// It assumes that R, P and EncryptMetadata are already set.
+GenerateParams (_bc *StdEncryptDict ,_dca ,_cb []byte )([]byte ,error );
+
+// Authenticate uses encryption dictionary parameters and the password to calculate
+// the document encryption key. It also returns permissions that should be granted to a user.
+// In case of failed authentication, it returns empty key and zero permissions with no error.
+Authenticate (_ce *StdEncryptDict ,_cda []byte )([]byte ,Permissions ,error );};func (_gd errInvalidField )Error ()string {return _fg .Sprintf ("\u0025s\u003a\u0020e\u0078\u0070\u0065\u0063t\u0065\u0064\u0020%\u0073\u0020\u0066\u0069\u0065\u006c\u0064\u0020\u0074o \u0062\u0065\u0020%\u0064\u0020b\u0079\u0074\u0065\u0073\u002c\u0020g\u006f\u0074 \u0025\u0064",_gd .Func ,_gd .Field ,_gd .Exp ,_gd .Got );
+};func _d (_aad _c .Block )*ecb {return &ecb {_ga :_aad ,_efd :_aad .BlockSize ()}};
+
+// GenerateParams is the algorithm opposite to alg2a (R>=5).
+// It generates U,O,UE,OE,Perms fields using AESv3 encryption.
+// There is no algorithm number assigned to this function in the spec.
+// It expects R, P and EncryptMetadata fields to be set.
+func (_abef stdHandlerR6 )GenerateParams (d *StdEncryptDict ,opass ,upass []byte )([]byte ,error ){_dgga :=make ([]byte ,32);if _ ,_eaf :=_b .ReadFull (_cf .Reader ,_dgga );_eaf !=nil {return nil ,_eaf ;};d .U =nil ;d .O =nil ;d .UE =nil ;d .OE =nil ;d .Perms =nil ;
+if len (upass )> 127{upass =upass [:127];};if len (opass )> 127{opass =opass [:127];};if _ffb :=_abef .alg8 (d ,_dgga ,upass );_ffb !=nil {return nil ,_ffb ;};if _ebfd :=_abef .alg9 (d ,_dgga ,opass );_ebfd !=nil {return nil ,_ebfd ;};if d .R ==5{return _dgga ,nil ;
+};if _aef :=_abef .alg10 (d ,_dgga );_aef !=nil {return nil ,_aef ;};return _dgga ,nil ;};type stdHandlerR4 struct{Length int ;ID0 string ;}; \ No newline at end of file