// // 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 imagerender ;import (_fg "errors";_f "fmt";_ad "github.com/golang/freetype/raster";_ea "github.com/unidoc/unipdf/v3/common";_ag "github.com/unidoc/unipdf/v3/internal/transform";_ee "github.com/unidoc/unipdf/v3/render/internal/context";_ae "golang.org/x/image/draw";_eab "golang.org/x/image/font";_b "golang.org/x/image/math/f64";_ef "golang.org/x/image/math/fixed";_g "image";_cd "image/color";_a "image/draw";_cf "math";_e "sort";_cb "strings";);func _gdd (_caed float64 ,_geac stops )_cd .Color {if _caed <=0.0||len (_geac )==1{return _geac [0]._cde ;};_egbg :=_geac [len (_geac )-1];if _caed >=_egbg ._faa {return _egbg ._cde ;};for _eefc ,_cefb :=range _geac [1:]{if _caed < _cefb ._faa {_caed =(_caed -_geac [_eefc ]._faa )/(_cefb ._faa -_geac [_eefc ]._faa );return _fba (_geac [_eefc ]._cde ,_cefb ._cde ,_caed );};};return _egbg ._cde ;};func (_gfae *Context )fill (_cge _ad .Painter ){_geea :=_gfae ._gfe ;if _gfae ._bee {_geea =make (_ad .Path ,len (_gfae ._gfe ));copy (_geea ,_gfae ._gfe );_geea .Add1 (_fdff (_gfae ._ggg ));};_cbdb :=_gfae ._ada ;_cbdb .UseNonZeroWinding =_gfae ._ged ==_ee .FillRuleWinding ;_cbdb .Clear ();_cbdb .AddPath (_geea );_cbdb .Rasterize (_cge );};func (_agb *Context )InvertMask (){if _agb ._eg ==nil {_agb ._eg =_g .NewAlpha (_agb ._ba .Bounds ());}else {for _cdbb ,_geed :=range _agb ._eg .Pix {_agb ._eg .Pix [_cdbb ]=255-_geed ;};};};func _be (_ca ,_bec ,_aea ,_cbg ,_efe ,_fb ,_ac float64 )(_fbf ,_fe float64 ){_eaf :=1-_ac ;_gf :=_eaf *_eaf ;_cbd :=2*_eaf *_ac ;_acb :=_ac *_ac ;_fbf =_gf *_ca +_cbd *_aea +_acb *_efe ;_fe =_gf *_bec +_cbd *_cbg +_acb *_fb ;return ;};func _bgcg (_fegf ,_fdf ,_beg ,_cfd float64 )_ee .Gradient {_begc :=&linearGradient {_egeea :_fegf ,_dea :_fdf ,_fbg :_beg ,_cddg :_cfd };return _begc ;};func _gbbbd (_dfa _g .Image )*_g .RGBA {_bcf :=_dfa .Bounds ();_cab :=_g .NewRGBA (_bcf );_a .Draw (_cab ,_bcf ,_dfa ,_bcf .Min ,_a .Src );return _cab ;};func (_adc *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_adc .MoveTo (x1 ,y1 );_adc .LineTo (x2 ,y2 )};func (_afa *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_afa ._bee {_afa .MoveTo (x1 ,y1 );};_dff ,_cda :=_afa ._daa .X ,_afa ._daa .Y ;x1 ,y1 =_afa .Transform (x1 ,y1 );x2 ,y2 =_afa .Transform (x2 ,y2 );x3 ,y3 =_afa .Transform (x3 ,y3 );_dceg :=_abd (_dff ,_cda ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_fgd :=_fdff (_afa ._daa );for _ ,_ffb :=range _dceg [1:]{_egf :=_fdff (_ffb );if _egf ==_fgd {continue ;};_fgd =_egf ;_afa ._dg .Add1 (_egf );_afa ._gfe .Add1 (_egf );_afa ._daa =_ffb ;};};func (_gggf *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_eae ,_ggdf ,_eaad ,_fgb :=x ,x +r ,x +w -r ,x +w ;_adg ,_dcb ,_ece ,_abb :=y ,y +r ,y +h -r ,y +h ;_gggf .NewSubPath ();_gggf .MoveTo (_ggdf ,_adg );_gggf .LineTo (_eaad ,_adg );_gggf .DrawArc (_eaad ,_dcb ,r ,_ccg (270),_ccg (360));_gggf .LineTo (_fgb ,_ece );_gggf .DrawArc (_eaad ,_ece ,r ,_ccg (0),_ccg (90));_gggf .LineTo (_ggdf ,_abb );_gggf .DrawArc (_ggdf ,_ece ,r ,_ccg (90),_ccg (180));_gggf .LineTo (_eae ,_dcb );_gggf .DrawArc (_ggdf ,_dcb ,r ,_ccg (180),_ccg (270));_gggf .ClosePath ();};func _bdcf (_adbd *_g .RGBA ,_efcc *_g .Alpha ,_febb _ee .Pattern )*patternPainter {return &patternPainter {_adbd ,_efcc ,_febb };};func _fba (_gcbe ,_cbbc _cd .Color ,_cacb float64 )_cd .Color {_geb ,_ebb ,_ccbc ,_ggaeb :=_gcbe .RGBA ();_dgc ,_fefe ,_gfc ,_ecca :=_cbbc .RGBA ();return _cd .RGBA {_geaf (_geb ,_dgc ,_cacb ),_geaf (_ebb ,_fefe ,_cacb ),_geaf (_ccbc ,_gfc ,_cacb ),_geaf (_ggaeb ,_ecca ,_cacb )};};func (_fee *Context )FillPreserve (){var _ced _ad .Painter ;if _fee ._eg ==nil {if _geg ,_affa :=_fee ._cea .(*solidPattern );_affa {_db :=_ad .NewRGBAPainter (_fee ._ba );_db .SetColor (_geg ._cafa );_ced =_db ;};};if _ced ==nil {_ced =_bdcf (_fee ._ba ,_fee ._eg ,_fee ._cea );};_fee .fill (_ced );};func (_bgf *Context )LineTo (x ,y float64 ){if !_bgf ._bee {_bgf .MoveTo (x ,y );}else {x ,y =_bgf .Transform (x ,y );_egb :=_ag .NewPoint (x ,y );_bdd :=_fdff (_egb );_bgf ._dg .Add1 (_bdd );_bgf ._gfe .Add1 (_bdd );_bgf ._daa =_egb ;};};func (_ggd *Context )SetLineCap (lineCap _ee .LineCap ){_ggd ._baf =lineCap };func (_dcbe *Context )MeasureString (s string ,face _eab .Face )(_abcg ,_feba float64 ){_cfedg :=&_eab .Drawer {Face :face };_agf :=_cfedg .MeasureString (s );return float64 (_agf >>6),_dcbe ._eag .Tf .Size ;};type solidPattern struct{_cafa _cd .Color };func (_gea *Context )SetFillRGBA (r ,g ,b ,a float64 ){_dce :=_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_gea ._aff =_dce ;_gea ._cea =_fcf (_dce );};func _ffa (_cgc ,_gfa ,_eafe ,_fa ,_cad ,_eed ,_bc ,_da ,_cgb float64 )(_gc ,_cgcb float64 ){_dd :=1-_cgb ;_edb :=_dd *_dd *_dd ;_ede :=3*_dd *_dd *_cgb ;_gg :=3*_dd *_cgb *_cgb ;_fgc :=_cgb *_cgb *_cgb ;_gc =_edb *_cgc +_ede *_eafe +_gg *_cad +_fgc *_bc ;_cgcb =_edb *_gfa +_ede *_fa +_gg *_eed +_fgc *_da ;return ;};func (_bbf *Context )SetMatrix (m _ag .Matrix ){_bbf ._ceac =m };func (_cdbd *Context )SetStrokeStyle (pattern _ee .Pattern ){_cdbd ._abc =pattern };func (_cfe *Context )SetRGBA255 (r ,g ,b ,a int ){_cfe ._aff =_cd .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_cfe .setFillAndStrokeColor (_cfe ._aff );};func (_aed *Context )TextState ()*_ee .TextState {return _aed ._eag };func (_bfb *Context )Push (){_fgf :=*_bfb ;_bfb ._fga =append (_bfb ._fga ,&_fgf )};type circle struct{_egd ,_deag ,_dee float64 };func (_ccf *Context )SetHexColor (x string ){_cbb ,_add ,_eacf ,_gge :=_bdeb (x );_ccf .SetRGBA255 (_cbb ,_add ,_eacf ,_gge );};type patternPainter struct{_ade *_g .RGBA ;_bba *_g .Alpha ;_gff _ee .Pattern ;};func (_gee *Context )SetRGBA (r ,g ,b ,a float64 ){_gee ._aff =_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_gee .setFillAndStrokeColor (_gee ._aff );};func NewContext (width ,height int )*Context {return NewContextForRGBA (_g .NewRGBA (_g .Rect (0,0,width ,height )));};func (_acdc *Context )drawRegularPolygon (_eee int ,_cedb ,_gcbd ,_efd ,_dae float64 ){_acc :=2*_cf .Pi /float64 (_eee );_dae -=_cf .Pi /2;if _eee %2==0{_dae +=_acc /2;};_acdc .NewSubPath ();for _beb :=0;_beb < _eee ;_beb ++{_gde :=_dae +_acc *float64 (_beb );_acdc .LineTo (_cedb +_efd *_cf .Cos (_gde ),_gcbd +_efd *_cf .Sin (_gde ));};_acdc .ClosePath ();};func (_gcb *Context )joiner ()_ad .Joiner {switch _gcb ._aaa {case _ee .LineJoinBevel :return _ad .BevelJoiner ;case _ee .LineJoinRound :return _ad .RoundJoiner ;};return nil ;};func (_fcb *Context )drawString (_dbb *_g .RGBA ,_gce string ,_ddff _eab .Face ,_fea ,_dbf float64 ){_cdaa :=&_eab .Drawer {Dst :_dbb ,Src :_g .NewUniform (_fcb ._aff ),Face :_ddff ,Dot :_fdff (_ag .NewPoint (_fea ,_dbf ))};_eaab :=rune (-1);for _ ,_aag :=range _gce {if _eaab >=0{_cdaa .Dot .X +=_cdaa .Face .Kern (_eaab ,_aag );};_cdd ,_egbd ,_egbdc ,_dag ,_cbge :=_cdaa .Face .Glyph (_cdaa .Dot ,_aag );if !_cbge {continue ;};_bae :=_cdd .Sub (_cdd .Min );_gcba :=_ae .BiLinear ;_fdd :=_fcb ._ceac .Clone ().Translate (float64 (_cdd .Min .X ),float64 (_cdd .Min .Y ));_aecg :=_b .Aff3 {_fdd [0],_fdd [3],_fdd [6],_fdd [1],_fdd [4],_fdd [7]};_gcba .Transform (_cdaa .Dst ,_aecg ,_cdaa .Src ,_bae ,_ae .Over ,&_ae .Options {SrcMask :_egbd ,SrcMaskP :_egbdc });_cdaa .Dot .X +=_dag ;_eaab =_aag ;};};func NewContextForImage (im _g .Image )*Context {return NewContextForRGBA (_gbbbd (im ))};func (_eeag *solidPattern )ColorAt (x ,y int )_cd .Color {return _eeag ._cafa };func (_fcg *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_bbd :=_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_fcg ._abc =_fcf (_bbd );};func (_cbba *Context )NewSubPath (){if _cbba ._bee {_cbba ._gfe .Add1 (_fdff (_cbba ._ggg ));};_cbba ._bee =false ;};func (_eabb *Context )Stroke (){_eabb .StrokePreserve ();_eabb .ClearPath ()};func _dcg (_bdf _ad .Path )[][]_ag .Point {var _ebg [][]_ag .Point ;var _cadd []_ag .Point ;var _bbcb ,_fbe float64 ;for _ageb :=0;_ageb < len (_bdf );{switch _bdf [_ageb ]{case 0:if len (_cadd )> 0{_ebg =append (_ebg ,_cadd );_cadd =nil ;};_ffd :=_geec (_bdf [_ageb +1]);_ebba :=_geec (_bdf [_ageb +2]);_cadd =append (_cadd ,_ag .NewPoint (_ffd ,_ebba ));_bbcb ,_fbe =_ffd ,_ebba ;_ageb +=4;case 1:_cfef :=_geec (_bdf [_ageb +1]);_dec :=_geec (_bdf [_ageb +2]);_cadd =append (_cadd ,_ag .NewPoint (_cfef ,_dec ));_bbcb ,_fbe =_cfef ,_dec ;_ageb +=4;case 2:_gggff :=_geec (_bdf [_ageb +1]);_efcf :=_geec (_bdf [_ageb +2]);_baec :=_geec (_bdf [_ageb +3]);_cfeb :=_geec (_bdf [_ageb +4]);_eagg :=_bf (_bbcb ,_fbe ,_gggff ,_efcf ,_baec ,_cfeb );_cadd =append (_cadd ,_eagg ...);_bbcb ,_fbe =_baec ,_cfeb ;_ageb +=6;case 3:_bce :=_geec (_bdf [_ageb +1]);_eggd :=_geec (_bdf [_ageb +2]);_dbe :=_geec (_bdf [_ageb +3]);_ggef :=_geec (_bdf [_ageb +4]);_fcgb :=_geec (_bdf [_ageb +5]);_cbdc :=_geec (_bdf [_ageb +6]);_aef :=_abd (_bbcb ,_fbe ,_bce ,_eggd ,_dbe ,_ggef ,_fcgb ,_cbdc );_cadd =append (_cadd ,_aef ...);_bbcb ,_fbe =_fcgb ,_cbdc ;_ageb +=8;default:_ea .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_bdf );return _ebg ;};};if len (_cadd )> 0{_ebg =append (_ebg ,_cadd );};return _ebg ;};func (_fbc *Context )MoveTo (x ,y float64 ){if _fbc ._bee {_fbc ._gfe .Add1 (_fdff (_fbc ._ggg ));};x ,y =_fbc .Transform (x ,y );_deb :=_ag .NewPoint (x ,y );_edg :=_fdff (_deb );_fbc ._dg .Start (_edg );_fbc ._gfe .Start (_edg );_fbc ._ggg =_deb ;_fbc ._daa =_deb ;_fbc ._bee =true ;};func _deced (_bgcd float64 )_ef .Int26_6 {return _ef .Int26_6 (_bgcd *64)};func (_afg *Context )ClearPath (){_afg ._dg .Clear ();_afg ._gfe .Clear ();_afg ._bee =false };func (_eb *Context )Height ()int {return _eb ._bef };func (_ecc *Context )DrawStringAnchored (s string ,face _eab .Face ,x ,y ,ax ,ay float64 ){_fef ,_fefb :=_ecc .MeasureString (s ,face );x -=ax *_fef ;y +=ay *_fefb ;if _ecc ._eg ==nil {_ecc .drawString (_ecc ._ba ,s ,face ,x ,y );}else {_gga :=_g .NewRGBA (_g .Rect (0,0,_ecc ._ddd ,_ecc ._bef ));_ecc .drawString (_gga ,s ,face ,x ,y );_ae .DrawMask (_ecc ._ba ,_ecc ._ba .Bounds (),_gga ,_g .Point {},_ecc ._eg ,_g .Point {},_ae .Over );};};func (_adab *Context )SetFillRule (fillRule _ee .FillRule ){_adab ._ged =fillRule };func (_baa *surfacePattern )ColorAt (x ,y int )_cd .Color {_aeae :=_baa ._gdde .Bounds ();switch _baa ._affac {case _fagb :if y >=_aeae .Dy (){return _cd .Transparent ;};case _egdg :if x >=_aeae .Dx (){return _cd .Transparent ;};case _bece :if x >=_aeae .Dx ()||y >=_aeae .Dy (){return _cd .Transparent ;};};x =x %_aeae .Dx ()+_aeae .Min .X ;y =y %_aeae .Dy ()+_aeae .Min .Y ;return _baa ._gdde .At (x ,y );};func (_dcc *Context )DrawImage (im _g .Image ,x ,y int ){_dcc .DrawImageAnchored (im ,x ,y ,0,0)};func NewContextForRGBA (im *_g .RGBA )*Context {_gb :=im .Bounds ().Size ().X ;_becc :=im .Bounds ().Size ().Y ;return &Context {_ddd :_gb ,_bef :_becc ,_ada :_ad .NewRasterizer (_gb ,_becc ),_ba :im ,_aff :_cd .Transparent ,_cea :_bcc ,_abc :_fd ,_eeg :1,_ged :_ee .FillRuleWinding ,_ceac :_ag .IdentityMatrix (),_eag :_ee .NewTextState ()};};func _abd (_eac ,_ge ,_acd ,_ce ,_bg ,_agc ,_aeg ,_acg float64 )[]_ag .Point {_afe :=(_cf .Hypot (_acd -_eac ,_ce -_ge )+_cf .Hypot (_bg -_acd ,_agc -_ce )+_cf .Hypot (_aeg -_bg ,_acg -_agc ));_ggf :=int (_afe +0.5);if _ggf < 4{_ggf =4;};_ffg :=float64 (_ggf )-1;_dac :=make ([]_ag .Point ,_ggf );for _bb :=0;_bb < _ggf ;_bb ++{_eafa :=float64 (_bb )/_ffg ;_ga ,_bd :=_ffa (_eac ,_ge ,_acd ,_ce ,_bg ,_agc ,_aeg ,_acg ,_eafa );_dac [_bb ]=_ag .NewPoint (_ga ,_bd );};return _dac ;};func _fdff (_fbag _ag .Point )_ef .Point26_6 {return _ef .Point26_6 {X :_deced (_fbag .X ),Y :_deced (_fbag .Y )};};func (_gede *Context )FillPattern ()_ee .Pattern {return _gede ._cea };func (_afd *Context )Rotate (angle float64 ){_afd ._ceac =_afd ._ceac .Rotate (angle )};func (_gdg *Context )stroke (_edd _ad .Painter ){_eaa :=_gdg ._dg ;if len (_gdg ._bag )> 0{_eaa =_ffgg (_eaa ,_gdg ._bag ,_gdg ._bbb );}else {_eaa =_agcd (_dcg (_eaa ));};_ffae :=_gdg ._ada ;_ffae .UseNonZeroWinding =true ;_ffae .Clear ();_ffae .AddStroke (_eaa ,_deced (_gdg ._eeg ),_gdg .capper (),_gdg .joiner ());_ffae .Rasterize (_edd );};func _fcf (_afgc _cd .Color )_ee .Pattern {return &solidPattern {_cafa :_afgc }};func (_accd *Context )Pop (){_ccc :=*_accd ;_gaec :=_accd ._fga ;_caf :=_gaec [len (_gaec )-1];*_accd =*_caf ;_accd ._dg =_ccc ._dg ;_accd ._gfe =_ccc ._gfe ;_accd ._ggg =_ccc ._ggg ;_accd ._daa =_ccc ._daa ;_accd ._bee =_ccc ._bee ;_accd ._eag =_ccc ._eag ;};func (_feg *Context )DrawImageAnchored (im _g .Image ,x ,y int ,ax ,ay float64 ){_fcd :=im .Bounds ().Size ();x -=int (ax *float64 (_fcd .X ));y -=int (ay *float64 (_fcd .Y ));_ggfc :=_ae .BiLinear ;_cbgg :=_feg ._ceac .Clone ().Translate (float64 (x ),float64 (y ));_afba :=_b .Aff3 {_cbgg [0],_cbgg [3],_cbgg [6],_cbgg [1],_cbgg [4],_cbgg [7]};if _feg ._eg ==nil {_ggfc .Transform (_feg ._ba ,_afba ,im ,im .Bounds (),_ae .Over ,nil );}else {_ggfc .Transform (_feg ._ba ,_afba ,im ,im .Bounds (),_ae .Over ,&_ae .Options {DstMask :_feg ._eg ,DstMaskP :_g .Point {}});};};func (_ccb *Context )ClosePath (){if _ccb ._bee {_egg :=_fdff (_ccb ._ggg );_ccb ._dg .Add1 (_egg );_ccb ._gfe .Add1 (_egg );_ccb ._daa =_ccb ._ggg ;};};type linearGradient struct{_egeea ,_dea ,_fbg ,_cddg float64 ;_daeg stops ;};func (_dge *Context )SetRGB (r ,g ,b float64 ){_dge .SetRGBA (r ,g ,b ,1)};func _bf (_cac ,_eea ,_d ,_ff ,_cc ,_aa float64 )[]_ag .Point {_ab :=(_cf .Hypot (_d -_cac ,_ff -_eea )+_cf .Hypot (_cc -_d ,_aa -_ff ));_af :=int (_ab +0.5);if _af < 4{_af =4;};_df :=float64 (_af )-1;_age :=make ([]_ag .Point ,_af );for _cg :=0;_cg < _af ;_cg ++{_cdb :=float64 (_cg )/_df ;_ed ,_fc :=_be (_cac ,_eea ,_d ,_ff ,_cc ,_aa ,_cdb );_age [_cg ]=_ag .NewPoint (_ed ,_fc );};return _age ;};func (_gfb stops )Less (i ,j int )bool {return _gfb [i ]._faa < _gfb [j ]._faa };func (_ffbe *Context )RotateAbout (angle ,x ,y float64 ){_ffbe .Translate (x ,y );_ffbe .Rotate (angle );_ffbe .Translate (-x ,-y );};type stop struct{_faa float64 ;_cde _cd .Color ;};func (_beea *Context )ShearAbout (sx ,sy ,x ,y float64 ){_beea .Translate (x ,y );_beea .Shear (sx ,sy );_beea .Translate (-x ,-y );};func (_eaeg *Context )Shear (x ,y float64 ){_eaeg ._ceac .Shear (x ,y )};func (_adga *Context )Matrix ()_ag .Matrix {return _adga ._ceac };func _ddg (_bbfg [][]_ag .Point ,_gda []float64 ,_cacd float64 )[][]_ag .Point {var _cbgf [][]_ag .Point ;if len (_gda )==0{return _bbfg ;};if len (_gda )==1{_gda =append (_gda ,_gda [0]);};for _ ,_bab :=range _bbfg {if len (_bab )< 2{continue ;};_ddb :=_bab [0];_dfg :=1;_ebf :=0;_bde :=0.0;if _cacd !=0{var _cbdg float64 ;for _ ,_aeca :=range _gda {_cbdg +=_aeca ;};_cacd =_cf .Mod (_cacd ,_cbdg );if _cacd < 0{_cacd +=_cbdg ;};for _fca ,_edgf :=range _gda {_cacd -=_edgf ;if _cacd < 0{_ebf =_fca ;_bde =_edgf +_cacd ;break ;};};};var _dece []_ag .Point ;_dece =append (_dece ,_ddb );for _dfg < len (_bab ){_bcg :=_gda [_ebf ];_badg :=_bab [_dfg ];_acdf :=_ddb .Distance (_badg );_afad :=_bcg -_bde ;if _acdf > _afad {_efg :=_afad /_acdf ;_dacg :=_ddb .Interpolate (_badg ,_efg );_dece =append (_dece ,_dacg );if _ebf %2==0&&len (_dece )> 1{_cbgf =append (_cbgf ,_dece );};_dece =nil ;_dece =append (_dece ,_dacg );_bde =0;_ddb =_dacg ;_ebf =(_ebf +1)%len (_gda );}else {_dece =append (_dece ,_badg );_ddb =_badg ;_bde +=_acdf ;_dfg ++;};};if _ebf %2==0&&len (_dece )> 1{_cbgf =append (_cbgf ,_dece );};};return _cbgf ;};func (_daf *Context )SetDashOffset (offset float64 ){_daf ._bbb =offset };func (_eef *Context )Identity (){_eef ._ceac =_ag .IdentityMatrix ()};func (_dffd *Context )DrawRectangle (x ,y ,w ,h float64 ){_dffd .NewSubPath ();_dffd .MoveTo (x ,y );_dffd .LineTo (x +w ,y );_dffd .LineTo (x +w ,y +h );_dffd .LineTo (x ,y +h );_dffd .ClosePath ();};func _ffgg (_abdc _ad .Path ,_eefa []float64 ,_efca float64 )_ad .Path {return _agcd (_ddg (_dcg (_abdc ),_eefa ,_efca ));};func _dgec (_ecga ,_fgbgf ,_cba ,_aae ,_gaee ,_acca float64 )_ee .Gradient {_dcd :=circle {_ecga ,_fgbgf ,_cba };_bed :=circle {_aae ,_gaee ,_acca };_cedbe :=circle {_aae -_ecga ,_gaee -_fgbgf ,_acca -_cba };_fab :=_edba (_cedbe ._egd ,_cedbe ._deag ,-_cedbe ._dee ,_cedbe ._egd ,_cedbe ._deag ,_cedbe ._dee );var _gcd float64 ;if _fab !=0{_gcd =1.0/_fab ;};_dda :=-_dcd ._dee ;_dgfd :=&radialGradient {_bga :_dcd ,_gab :_bed ,_dgf :_cedbe ,_eacc :_fab ,_gdgb :_gcd ,_aeab :_dda };return _dgfd ;};func (_ddc *radialGradient )AddColorStop (offset float64 ,color _cd .Color ){_ddc ._dagg =append (_ddc ._dagg ,stop {_faa :offset ,_cde :color });_e .Sort (_ddc ._dagg );};func (_gbc *Context )Transform (x ,y float64 )(_ggae ,_dccg float64 ){return _gbc ._ceac .Transform (x ,y );};func (_bgc *Context )SetDash (dashes ...float64 ){_bgc ._bag =dashes };func (_cfed *Context )capper ()_ad .Capper {switch _cfed ._baf {case _ee .LineCapButt :return _ad .ButtCapper ;case _ee .LineCapRound :return _ad .RoundCapper ;case _ee .LineCapSquare :return _ad .SquareCapper ;};return nil ;};type radialGradient struct{_bga ,_gab ,_dgf circle ;_eacc ,_gdgb float64 ;_aeab float64 ;_dagg stops ;};func (_egee *Context )SetMask (mask *_g .Alpha )error {if mask .Bounds ().Size ()!=_egee ._ba .Bounds ().Size (){return _fg .New ("\u006d\u0061\u0073\u006b\u0020\u0073i\u007a\u0065\u0020\u006d\u0075\u0073\u0074\u0020\u006d\u0061\u0074\u0063\u0068 \u0063\u006f\u006e\u0074\u0065\u0078\u0074 \u0073\u0069\u007a\u0065");};_egee ._eg =mask ;return nil ;};func (_afb *Context )setFillAndStrokeColor (_dc _cd .Color ){_afb ._aff =_dc ;_afb ._cea =_fcf (_dc );_afb ._abc =_fcf (_dc );};func _edba (_dfb ,_cef ,_dffdg ,_effe ,_cgcg ,_ggea float64 )float64 {return _dfb *_effe +_cef *_cgcg +_dffdg *_ggea ;};func (_ddf *Context )DrawCircle (x ,y ,r float64 ){_ddf .NewSubPath ();_ddf .DrawEllipticalArc (x ,y ,r ,r ,0,2*_cf .Pi );_ddf .ClosePath ();};func (_gd *Context )SetRGB255 (r ,g ,b int ){_gd .SetRGBA255 (r ,g ,b ,255)};type Context struct{_ddd int ;_bef int ;_ada *_ad .Rasterizer ;_ba *_g .RGBA ;_eg *_g .Alpha ;_aff _cd .Color ;_cea _ee .Pattern ;_abc _ee .Pattern ;_dg _ad .Path ;_gfe _ad .Path ;_ggg _ag .Point ;_daa _ag .Point ;_bee bool ;_bag []float64 ;_bbb float64 ;_eeg float64 ;_baf _ee .LineCap ;_aaa _ee .LineJoin ;_ged _ee .FillRule ;_ceac _ag .Matrix ;_eag *_ee .TextState ;_fga []*Context ;};func (_fec *Context )Clear (){_cce :=_g .NewUniform (_fec ._aff );_ae .Draw (_fec ._ba ,_fec ._ba .Bounds (),_cce ,_g .Point {},_ae .Src );};func (_agg *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_agg ._bee {_agg .MoveTo (x1 ,y1 );};x1 ,y1 =_agg .Transform (x1 ,y1 );x2 ,y2 =_agg .Transform (x2 ,y2 );_feb :=_ag .NewPoint (x1 ,y1 );_ead :=_ag .NewPoint (x2 ,y2 );_eff :=_fdff (_feb );_gcf :=_fdff (_ead );_agg ._dg .Add2 (_eff ,_gcf );_agg ._gfe .Add2 (_eff ,_gcf );_agg ._daa =_ead ;};func (_adfb stops )Len ()int {return len (_adfb )};type repeatOp int ;func (_aec *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_aec .NewSubPath ();_aec .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_cf .Pi );_aec .ClosePath ();};func (_gddf *patternPainter )Paint (ss []_ad .Span ,done bool ){_ega :=_gddf ._ade .Bounds ();for _ ,_cafe :=range ss {if _cafe .Y < _ega .Min .Y {continue ;};if _cafe .Y >=_ega .Max .Y {return ;};if _cafe .X0 < _ega .Min .X {_cafe .X0 =_ega .Min .X ;};if _cafe .X1 > _ega .Max .X {_cafe .X1 =_ega .Max .X ;};if _cafe .X0 >=_cafe .X1 {continue ;};const _agd =1<<16-1;_eedb :=_cafe .Y -_gddf ._ade .Rect .Min .Y ;_bcee :=_cafe .X0 -_gddf ._ade .Rect .Min .X ;_agag :=(_cafe .Y -_gddf ._ade .Rect .Min .Y )*_gddf ._ade .Stride +(_cafe .X0 -_gddf ._ade .Rect .Min .X )*4;_bca :=_agag +(_cafe .X1 -_cafe .X0 )*4;for _gbbb ,_abe :=_agag ,_bcee ;_gbbb < _bca ;_gbbb ,_abe =_gbbb +4,_abe +1{_dadg :=_cafe .Alpha ;if _gddf ._bba !=nil {_dadg =_dadg *uint32 (_gddf ._bba .AlphaAt (_abe ,_eedb ).A )/255;if _dadg ==0{continue ;};};_dbef :=_gddf ._gff .ColorAt (_abe ,_eedb );_cdc ,_edga ,_gac ,_beed :=_dbef .RGBA ();_dafa :=uint32 (_gddf ._ade .Pix [_gbbb +0]);_bdc :=uint32 (_gddf ._ade .Pix [_gbbb +1]);_gbca :=uint32 (_gddf ._ade .Pix [_gbbb +2]);_def :=uint32 (_gddf ._ade .Pix [_gbbb +3]);_dca :=(_agd -(_beed *_dadg /_agd ))*0x101;_gddf ._ade .Pix [_gbbb +0]=uint8 ((_dafa *_dca +_cdc *_dadg )/_agd >>8);_gddf ._ade .Pix [_gbbb +1]=uint8 ((_bdc *_dca +_edga *_dadg )/_agd >>8);_gddf ._ade .Pix [_gbbb +2]=uint8 ((_gbca *_dca +_gac *_dadg )/_agd >>8);_gddf ._ade .Pix [_gbbb +3]=uint8 ((_def *_dca +_beed *_dadg )/_agd >>8);};};};func (_adbb *linearGradient )AddColorStop (offset float64 ,color _cd .Color ){_adbb ._daeg =append (_adbb ._daeg ,stop {_faa :offset ,_cde :color });_e .Sort (_adbb ._daeg );};func _eefd (_afbe _g .Image ,_gebf repeatOp )_ee .Pattern {return &surfacePattern {_gdde :_afbe ,_affac :_gebf };};func _bdeb (_fdfc string )(_bgfe ,_ecf ,_eada ,_gad int ){_fdfc =_cb .TrimPrefix (_fdfc ,"\u0023");_gad =255;if len (_fdfc )==3{_eaag :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_f .Sscanf (_fdfc ,_eaag ,&_bgfe ,&_ecf ,&_eada );_bgfe |=_bgfe <<4;_ecf |=_ecf <<4;_eada |=_eada <<4;};if len (_fdfc )==6{_efgg :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_f .Sscanf (_fdfc ,_efgg ,&_bgfe ,&_ecf ,&_eada );};if len (_fdfc )==8{_bbdac :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_f .Sscanf (_fdfc ,_bbdac ,&_bgfe ,&_ecf ,&_eada ,&_gad );};return ;};func (_fbd *Context )SetLineWidth (lineWidth float64 ){_fbd ._eeg =lineWidth };func (_adb *Context )Image ()_g .Image {return _adb ._ba };func _geec (_fcbg _ef .Int26_6 )float64 {const _abef ,_defe =6,1<<6-1;if _fcbg >=0{return float64 (_fcbg >>_abef )+float64 (_fcbg &_defe )/64;};_fcbg =-_fcbg ;if _fcbg >=0{return -(float64 (_fcbg >>_abef )+float64 (_fcbg &_defe )/64);};return 0;};func (_aga *Context )Scale (x ,y float64 ){_aga ._ceac =_aga ._ceac .Scale (x ,y )};func (_dafb *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_dafb .Translate (x ,y );_dafb .Scale (sx ,sy );_dafb .Translate (-x ,-y );};func (_bbg *Context )SetLineJoin (lineJoin _ee .LineJoin ){_bbg ._aaa =lineJoin };func (_gaf *Context )DrawString (s string ,face _eab .Face ,x ,y float64 ){_gaf .DrawStringAnchored (s ,face ,x ,y ,0,0);};func (_eagf *Context )SetFillStyle (pattern _ee .Pattern ){if _ege ,_eec :=pattern .(*solidPattern );_eec {_eagf ._aff =_ege ._cafa ;};_eagf ._cea =pattern ;};func (_gggd *Context )ClipPreserve (){_cbe :=_g .NewAlpha (_g .Rect (0,0,_gggd ._ddd ,_gggd ._bef ));_efc :=_ad .NewAlphaOverPainter (_cbe );_gggd .fill (_efc );if _gggd ._eg ==nil {_gggd ._eg =_cbe ;}else {_fgda :=_g .NewAlpha (_g .Rect (0,0,_gggd ._ddd ,_gggd ._bef ));_ae .DrawMask (_fgda ,_fgda .Bounds (),_cbe ,_g .Point {},_gggd ._eg ,_g .Point {},_ae .Over );_gggd ._eg =_fgda ;};};func _ccg (_fdab float64 )float64 {return _fdab *_cf .Pi /180};func (_gbb *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _adf =16;for _bbc :=0;_bbc < _adf ;_bbc ++{_fbce :=float64 (_bbc +0)/_adf ;_abg :=float64 (_bbc +1)/_adf ;_aac :=angle1 +(angle2 -angle1 )*_fbce ;_abdf :=angle1 +(angle2 -angle1 )*_abg ;_dgd :=x +rx *_cf .Cos (_aac );_agea :=y +ry *_cf .Sin (_aac );_gfee :=x +rx *_cf .Cos ((_aac +_abdf )/2);_eagd :=y +ry *_cf .Sin ((_aac +_abdf )/2);_faf :=x +rx *_cf .Cos (_abdf );_gae :=y +ry *_cf .Sin (_abdf );_abf :=2*_gfee -_dgd /2-_faf /2;_ace :=2*_eagd -_agea /2-_gae /2;if _bbc ==0{if _gbb ._bee {_gbb .LineTo (_dgd ,_agea );}else {_gbb .MoveTo (_dgd ,_agea );};};_gbb .QuadraticTo (_abf ,_ace ,_faf ,_gae );};};func _agcd (_acef [][]_ag .Point )_ad .Path {var _dad _ad .Path ;for _ ,_aad :=range _acef {var _aagf _ef .Point26_6 ;for _edbb ,_ccd :=range _aad {_ecb :=_fdff (_ccd );if _edbb ==0{_dad .Start (_ecb );}else {_adbe :=_ecb .X -_aagf .X ;_fcga :=_ecb .Y -_aagf .Y ;if _adbe < 0{_adbe =-_adbe ;};if _fcga < 0{_fcga =-_fcga ;};if _adbe +_fcga > 8{_dad .Add1 (_ecb );};};_aagf =_ecb ;};};return _dad ;};func (_dfff *Context )DrawPoint (x ,y ,r float64 ){_dfff .Push ();_ecaa ,_fff :=_dfff .Transform (x ,y );_dfff .Identity ();_dfff .DrawCircle (_ecaa ,_fff ,r );_dfff .Pop ();};func (_fefa *Context )Translate (x ,y float64 ){_fefa ._ceac =_fefa ._ceac .Translate (x ,y )};const (_bbe repeatOp =iota ;_fagb ;_egdg ;_bece ;);func (_egfg *Context )SetPixel (x ,y int ){_egfg ._ba .Set (x ,y ,_egfg ._aff )};func (_debe stops )Swap (i ,j int ){_debe [i ],_debe [j ]=_debe [j ],_debe [i ]};func (_aeb *Context )StrokePreserve (){var _becb _ad .Painter ;if _aeb ._eg ==nil {if _gedc ,_agcg :=_aeb ._abc .(*solidPattern );_agcg {_cae :=_ad .NewRGBAPainter (_aeb ._ba );_cae .SetColor (_gedc ._cafa );_becb =_cae ;};};if _becb ==nil {_becb =_bdcf (_aeb ._ba ,_aeb ._eg ,_aeb ._abc );};_aeb .stroke (_becb );};func (_ecg *Context )ResetClip (){_ecg ._eg =nil };func (_fag *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_fag .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func (_dbd *Context )AsMask ()*_g .Alpha {_cec :=_g .NewAlpha (_dbd ._ba .Bounds ());_ae .Draw (_cec ,_dbd ._ba .Bounds (),_dbd ._ba ,_g .Point {},_ae .Src );return _cec ;};func (_bea *radialGradient )ColorAt (x ,y int )_cd .Color {if len (_bea ._dagg )==0{return _cd .Transparent ;};_ffaef ,_cdea :=float64 (x )+0.5-_bea ._bga ._egd ,float64 (y )+0.5-_bea ._bga ._deag ;_aba :=_edba (_ffaef ,_cdea ,_bea ._bga ._dee ,_bea ._dgf ._egd ,_bea ._dgf ._deag ,_bea ._dgf ._dee );_cff :=_edba (_ffaef ,_cdea ,-_bea ._bga ._dee ,_ffaef ,_cdea ,_bea ._bga ._dee );if _bea ._eacc ==0{if _aba ==0{return _cd .Transparent ;};_fda :=0.5*_cff /_aba ;if _fda *_bea ._dgf ._dee >=_bea ._aeab {return _gdd (_fda ,_bea ._dagg );};return _cd .Transparent ;};_bfa :=_edba (_aba ,_bea ._eacc ,0,_aba ,-_cff ,0);if _bfa >=0{_dbfg :=_cf .Sqrt (_bfa );_eabc :=(_aba +_dbfg )*_bea ._gdgb ;_dddg :=(_aba -_dbfg )*_bea ._gdgb ;if _eabc *_bea ._dgf ._dee >=_bea ._aeab {return _gdd (_eabc ,_bea ._dagg );}else if _dddg *_bea ._dgf ._dee >=_bea ._aeab {return _gdd (_dddg ,_bea ._dagg );};};return _cd .Transparent ;};type surfacePattern struct{_gdde _g .Image ;_affac repeatOp ;};func (_ebd *Context )Fill (){_ebd .FillPreserve ();_ebd .ClearPath ()};var (_bcc =_fcf (_cd .White );_fd =_fcf (_cd .Black ););func _geaf (_fgdd ,_ffad uint32 ,_gfg float64 )uint8 {return uint8 (int32 (float64 (_fgdd )*(1.0-_gfg )+float64 (_ffad )*_gfg )>>8);};func (_gba *linearGradient )ColorAt (x ,y int )_cd .Color {if len (_gba ._daeg )==0{return _cd .Transparent ;};_bad ,_ffgc :=float64 (x ),float64 (y );_bfe ,_aage ,_gfag ,_bbda :=_gba ._egeea ,_gba ._dea ,_gba ._fbg ,_gba ._cddg ;_fgbg ,_dagc :=_gfag -_bfe ,_bbda -_aage ;if _dagc ==0&&_fgbg !=0{return _gdd ((_bad -_bfe )/_fgbg ,_gba ._daeg );};if _fgbg ==0&&_dagc !=0{return _gdd ((_ffgc -_aage )/_dagc ,_gba ._daeg );};_deg :=_fgbg *(_bad -_bfe )+_dagc *(_ffgc -_aage );if _deg < 0{return _gba ._daeg [0]._cde ;};_afgd :=_cf .Hypot (_fgbg ,_dagc );_bcd :=((_bad -_bfe )*-_dagc +(_ffgc -_aage )*_fgbg )/(_afgd *_afgd );_edgc ,_dbba :=_bfe +_bcd *-_dagc ,_aage +_bcd *_fgbg ;_fffc :=_cf .Hypot (_bad -_edgc ,_ffgc -_dbba )/_afgd ;return _gdd (_fffc ,_gba ._daeg );};func (_ec *Context )LineWidth ()float64 {return _ec ._eeg };func (_cdf *Context )StrokePattern ()_ee .Pattern {return _cdf ._abc };func (_eaaa *Context )Clip (){_eaaa .ClipPreserve ();_eaaa .ClearPath ()};func (_de *Context )Width ()int {return _de ._ddd };type stops []stop ;func (_eca *Context )SetColor (c _cd .Color ){_eca .setFillAndStrokeColor (c )};