media:cpp dist - v1

This commit is contained in:
lovebird 2026-04-14 10:10:45 +02:00
parent cb3e596736
commit 89b451fbf6
70 changed files with 7816 additions and 1063 deletions

View File

@ -0,0 +1,805 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,809 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[0.2235 0.2431 0.2745] SC
/DeviceRGB {} cs
[0.2235 0.2431 0.2745] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,818 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[3.125494 0 0 3.12478 0.0072969 0] cm
/DeviceRGB {} CS
[1 1 1] SC
/DeviceRGB {} cs
[1 1 1] sc
0 0 3162.1621 843.23718 re
f
Q
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[0.2235 0.2431 0.2745] SC
/DeviceRGB {} cs
[0.2235 0.2431 0.2745] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,809 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[1 1 1] SC
/DeviceRGB {} cs
[1 1 1] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -17,6 +17,9 @@
},
{
"path": "../media"
},
{
"path": "../acl"
}
],
"settings": {}

View File

@ -1,229 +1,229 @@
cmake_minimum_required(VERSION 3.20)
project(media-image-service
VERSION 0.1.0
DESCRIPTION "Polymech image resize service (CLI, REST, IPC) libvips"
LANGUAGES CXX
)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# MSVC: UTF-8 source/execution charset so wide string literals (L"...") match UTF-8 in .cpp files.
if(MSVC)
add_compile_options(/utf-8)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Windows: official libvips dev tree (see scripts/fetch-vips-windows.ps1) vips-dev-* under third_party/
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK)
list(APPEND CMAKE_PREFIX_PATH ${_MEDIA_VIPS_SDK})
endif()
endif()
include(FetchContent)
set(JSON_BuildTests OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
cli11
GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
GIT_TAG v2.4.2
GIT_SHALLOW TRUE
)
FetchContent_Declare(
asio
GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
GIT_TAG asio-1-28-0
GIT_SHALLOW TRUE
)
FetchContent_Declare(
nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
GIT_SHALLOW TRUE
)
FetchContent_Declare(
cpp_httplib
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
GIT_TAG v0.16.3
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(cli11 asio nlohmann_json cpp_httplib)
# libcurl HTTP(S) URL inputs (minimal static build; SChannel on Windows, OpenSSL on Linux).
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
FetchContent_Declare(
CURL
URL https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)
set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
if(WIN32)
set(CURL_USE_OPENSSL OFF CACHE BOOL "" FORCE)
set(CURL_USE_SCHANNEL ON CACHE BOOL "" FORCE)
else()
set(CURL_USE_SCHANNEL OFF CACHE BOOL "" FORCE)
set(CURL_USE_OPENSSL ON CACHE BOOL "" FORCE)
endif()
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
set(CURL_BROTLI OFF CACHE BOOL "" FORCE)
set(CURL_ZSTD OFF CACHE BOOL "" FORCE)
set(USE_NGHTTP2 OFF CACHE BOOL "" FORCE)
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE)
set(CURL_USE_LIBPSL OFF CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(CURL)
# PicoSHA2 header-only SHA256 for cache keys.
FetchContent_Declare(
picosha2
GIT_REPOSITORY https://github.com/okdshin/PicoSHA2.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(picosha2)
if(NOT picosha2_POPULATED)
FetchContent_Populate(picosha2)
endif()
# p-ranav/glob same as packages/kbot/cpp (glob / rglob for **).
FetchContent_Declare(
pranav_glob
GIT_REPOSITORY https://github.com/p-ranav/glob.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(pranav_glob)
if(NOT pranav_glob_POPULATED)
FetchContent_Populate(pranav_glob)
endif()
add_library(pranav_glob STATIC ${pranav_glob_SOURCE_DIR}/source/glob.cpp)
target_include_directories(pranav_glob PUBLIC ${pranav_glob_SOURCE_DIR}/include)
target_compile_features(pranav_glob PUBLIC cxx_std_17)
if(MSVC)
target_compile_options(pranav_glob PRIVATE /permissive-)
endif()
# laserpants/dotenv-cpp load .env (same pattern as packages/kbot/cpp).
FetchContent_Declare(
laserpants_dotenv
GIT_REPOSITORY https://github.com/laserpants/dotenv-cpp.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(laserpants_dotenv)
if(NOT laserpants_dotenv_POPULATED)
FetchContent_Populate(laserpants_dotenv)
endif()
add_library(laserpants_dotenv INTERFACE)
target_include_directories(laserpants_dotenv INTERFACE ${laserpants_dotenv_SOURCE_DIR}/include)
add_library(laserpants::dotenv ALIAS laserpants_dotenv)
find_package(Vips REQUIRED)
add_executable(media-img
src/main.cpp
src/core/cache.cpp
src/core/glob_paths.cpp
src/core/output_path.cpp
src/core/resize.cpp
src/core/url_fetch.cpp
src/http/serve.cpp
src/ipc/ipc_serve.cpp
)
if(WIN32)
target_sources(media-img PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/register_explorer.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_ui.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_progress_ui.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/ui_singleton.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/media-img-win.manifest"
)
endif()
target_include_directories(media-img PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${asio_SOURCE_DIR}/asio/include
${picosha2_SOURCE_DIR}
)
target_compile_definitions(media-img PRIVATE
ASIO_STANDALONE
ASIO_NO_DEPRECATED
CPPHTTPLIB_NO_EXCEPTIONS=0
)
if(WIN32)
target_compile_definitions(media-img PRIVATE
_WIN32_WINNT=0x0A00
NOMINMAX
)
endif()
target_link_libraries(media-img PRIVATE
CLI11::CLI11
nlohmann_json::nlohmann_json
httplib::httplib
laserpants::dotenv
pranav_glob
CURL::libcurl
Vips::vips
)
# GObject (g_object_ref / g_object_unref) not re-exported through libvips import lib on MSVC.
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK_LIST)
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
if(EXISTS "${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib")
target_link_libraries(media-img PRIVATE
"${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib"
"${_MEDIA_VIPS_SDK}/lib/libglib-2.0.lib"
)
endif()
endif()
endif()
if(UNIX AND NOT APPLE)
target_link_libraries(media-img PRIVATE pthread)
endif()
target_compile_definitions(media-img PRIVATE
"MEDIA_IMG_VERSION=\"${PROJECT_VERSION}\""
)
# Runtime: libvips and deps are DLLs next to media-img.exe (Windows dev bundle bin/).
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK_LIST)
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
if(EXISTS "${_MEDIA_VIPS_SDK}/bin")
add_custom_command(
TARGET media-img
POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${_MEDIA_VIPS_SDK}/bin"
"${CMAKE_SOURCE_DIR}/dist"
COMMENT "Copy libvips DLLs to dist/"
)
endif()
endif()
endif()
cmake_minimum_required(VERSION 3.20)
project(media-image-service
VERSION 0.1.0
DESCRIPTION "Polymech image resize service (CLI, REST, IPC) libvips"
LANGUAGES CXX
)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/dist")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# MSVC: UTF-8 source/execution charset so wide string literals (L"...") match UTF-8 in .cpp files.
if(MSVC)
add_compile_options(/utf-8)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Windows: official libvips dev tree (see scripts/fetch-vips-windows.ps1) vips-dev-* under third_party/
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK)
list(APPEND CMAKE_PREFIX_PATH ${_MEDIA_VIPS_SDK})
endif()
endif()
include(FetchContent)
set(JSON_BuildTests OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
cli11
GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
GIT_TAG v2.4.2
GIT_SHALLOW TRUE
)
FetchContent_Declare(
asio
GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
GIT_TAG asio-1-28-0
GIT_SHALLOW TRUE
)
FetchContent_Declare(
nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
GIT_SHALLOW TRUE
)
FetchContent_Declare(
cpp_httplib
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
GIT_TAG v0.16.3
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(cli11 asio nlohmann_json cpp_httplib)
# libcurl HTTP(S) URL inputs (minimal static build; SChannel on Windows, OpenSSL on Linux).
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
FetchContent_Declare(
CURL
URL https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)
set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
if(WIN32)
set(CURL_USE_OPENSSL OFF CACHE BOOL "" FORCE)
set(CURL_USE_SCHANNEL ON CACHE BOOL "" FORCE)
else()
set(CURL_USE_SCHANNEL OFF CACHE BOOL "" FORCE)
set(CURL_USE_OPENSSL ON CACHE BOOL "" FORCE)
endif()
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
set(CURL_BROTLI OFF CACHE BOOL "" FORCE)
set(CURL_ZSTD OFF CACHE BOOL "" FORCE)
set(USE_NGHTTP2 OFF CACHE BOOL "" FORCE)
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE)
set(CURL_USE_LIBPSL OFF CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(CURL)
# PicoSHA2 header-only SHA256 for cache keys.
FetchContent_Declare(
picosha2
GIT_REPOSITORY https://github.com/okdshin/PicoSHA2.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(picosha2)
if(NOT picosha2_POPULATED)
FetchContent_Populate(picosha2)
endif()
# p-ranav/glob same as packages/kbot/cpp (glob / rglob for **).
FetchContent_Declare(
pranav_glob
GIT_REPOSITORY https://github.com/p-ranav/glob.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(pranav_glob)
if(NOT pranav_glob_POPULATED)
FetchContent_Populate(pranav_glob)
endif()
add_library(pranav_glob STATIC ${pranav_glob_SOURCE_DIR}/source/glob.cpp)
target_include_directories(pranav_glob PUBLIC ${pranav_glob_SOURCE_DIR}/include)
target_compile_features(pranav_glob PUBLIC cxx_std_17)
if(MSVC)
target_compile_options(pranav_glob PRIVATE /permissive-)
endif()
# laserpants/dotenv-cpp load .env (same pattern as packages/kbot/cpp).
FetchContent_Declare(
laserpants_dotenv
GIT_REPOSITORY https://github.com/laserpants/dotenv-cpp.git
GIT_TAG master
GIT_SHALLOW TRUE
)
FetchContent_GetProperties(laserpants_dotenv)
if(NOT laserpants_dotenv_POPULATED)
FetchContent_Populate(laserpants_dotenv)
endif()
add_library(laserpants_dotenv INTERFACE)
target_include_directories(laserpants_dotenv INTERFACE ${laserpants_dotenv_SOURCE_DIR}/include)
add_library(laserpants::dotenv ALIAS laserpants_dotenv)
find_package(Vips REQUIRED)
add_executable(pm-image
src/main.cpp
src/core/cache.cpp
src/core/glob_paths.cpp
src/core/output_path.cpp
src/core/resize.cpp
src/core/url_fetch.cpp
src/http/serve.cpp
src/ipc/ipc_serve.cpp
)
if(WIN32)
target_sources(pm-image PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/register_explorer.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_ui.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_progress_ui.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/ui_singleton.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/media-img-win.manifest"
)
endif()
target_include_directories(pm-image PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${asio_SOURCE_DIR}/asio/include
${picosha2_SOURCE_DIR}
)
target_compile_definitions(pm-image PRIVATE
ASIO_STANDALONE
ASIO_NO_DEPRECATED
CPPHTTPLIB_NO_EXCEPTIONS=0
)
if(WIN32)
target_compile_definitions(pm-image PRIVATE
_WIN32_WINNT=0x0A00
NOMINMAX
)
endif()
target_link_libraries(pm-image PRIVATE
CLI11::CLI11
nlohmann_json::nlohmann_json
httplib::httplib
laserpants::dotenv
pranav_glob
CURL::libcurl
Vips::vips
)
# GObject (g_object_ref / g_object_unref) not re-exported through libvips import lib on MSVC.
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK_LIST)
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
if(EXISTS "${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib")
target_link_libraries(pm-image PRIVATE
"${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib"
"${_MEDIA_VIPS_SDK}/lib/libglib-2.0.lib"
)
endif()
endif()
endif()
if(UNIX AND NOT APPLE)
target_link_libraries(pm-image PRIVATE pthread)
endif()
target_compile_definitions(pm-image PRIVATE
"MEDIA_IMG_VERSION=\"${PROJECT_VERSION}\""
)
# Runtime: libvips and deps are DLLs next to pm-image.exe (Windows dev bundle bin/).
if(WIN32)
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
if(_MEDIA_VIPS_SDK_LIST)
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
if(EXISTS "${_MEDIA_VIPS_SDK}/bin")
add_custom_command(
TARGET pm-image
POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${_MEDIA_VIPS_SDK}/bin"
"${CMAKE_SOURCE_DIR}/dist"
COMMENT "Copy libvips DLLs to dist/"
)
endif()
endif()
endif()

View File

@ -1,6 +1,6 @@
# media-img (C++)
# pm-image (C++)
CMake-based **`media-img`** binary: **CLI**, **HTTP REST** (`serve`), and **line-delimited JSON IPC** (`ipc`). Image processing uses **libvips** — the same engine as **[Sharp](https://sharp.pixelplumbing.com/)** (Node.js), exposed with a similar option model. Optional **`.env`** is loaded from the working directory ([laserpants/dotenv-cpp](https://github.com/laserpants/dotenv-cpp)).
CMake-based **`pm-image`** binary: **CLI**, **HTTP REST** (`serve`), and **line-delimited JSON IPC** (`ipc`). Image processing uses **libvips** — the same engine as **[Sharp](https://sharp.pixelplumbing.com/)** (Node.js), exposed with a similar option model. Optional **`.env`** is loaded from the working directory ([laserpants/dotenv-cpp](https://github.com/laserpants/dotenv-cpp)).
- **API reference (underlying library):** [libvips `VipsImage`](https://www.libvips.org/API/current/class.Image.html)
@ -48,7 +48,7 @@ cmake --preset release
cmake --build --preset release
```
Binary: **`dist/media-img`** (`.exe` on Windows).
Binary: **`dist/pm-image`** (`.exe` on Windows).
### Windows installer (NSIS)
@ -58,16 +58,16 @@ From `packages/media/cpp`, after a release build:
npm run build:installer
```
Produces **`dist/media-img-Setup.exe`**, installs `media-img.exe`, libvips DLLs, `vips-modules-8.18`, and `scripts/explorer-resize.ps1`, and prepends the install directory to the **user** `PATH`. Uninstaller is registered under Add/Remove Programs.
Produces **`dist/pm-image-Setup.exe`**, installs `pm-image.exe`, libvips DLLs, `vips-modules-8.18`, and `scripts/explorer-resize.ps1`, and prepends the install directory to the **user** `PATH`. Uninstaller is registered under Add/Remove Programs.
### Explorer context menu (`media-img register-explorer`)
### Explorer context menu (`pm-image register-explorer`)
Implemented in **C++** (Windows registry). The NSIS installer runs `media-img.exe register-explorer` after copying files; uninstall runs `register-explorer --unregister --no-refresh-shell`.
Implemented in **C++** (Windows registry). The NSIS installer runs `pm-image.exe register-explorer` after copying files; uninstall runs `register-explorer --unregister --no-refresh-shell`.
```bash
media-img register-explorer
media-img register-explorer --dry
media-img register-explorer --unregister
pm-image register-explorer
pm-image register-explorer --dry
pm-image register-explorer --unregister
```
Registers a **PM-Media** cascading menu on image extensions (including **`.avif`**, **`.arw`**, **`.webp`**, TIFF, etc.), on **folders**, and on the **folder background** (empty area). **Resize** presets (default widths **1980, 1200, 800, 400**): **in place** or **copy** as `${SRC_NAME}_${width}${SRC_EXT}`. **Convert to JPG** writes `${SRC_NAME}_converted.jpg` via `explorer-convert.ps1`. Override widths with `--widths 1920,800`.
@ -76,9 +76,9 @@ Under `SystemFileAssociations`, each extension is registered as **`.ext`**, **`.
Defaults: **`--media-bin`** = this executable; **`--explorer-script`** / **`--explorer-convert-script`** = `<exe_dir>\\scripts\\explorer-*.ps1`, or `packages/media/scripts\\…` from a dev `cpp\\dist` build.
`pm-media register-explorer` forwards argv to `media-img.exe` for convenience.
`pm-media register-explorer` forwards argv to `pm-image.exe` for convenience.
Context menus run `powershell.exe -WindowStyle Hidden`; re-run `media-img register-explorer` after updates so registry command lines refresh.
Context menus run `powershell.exe -WindowStyle Hidden`; re-run `pm-image register-explorer` after updates so registry command lines refresh.
## Formats — same idea as Sharp / libvips
@ -95,7 +95,7 @@ Sharp wraps libvips: **decode → process → encode**. We do the same with `vip
## Sharp-like options (`resize` / JSON)
| Sharp concept | `media-img` / JSON field | Notes |
| Sharp concept | `pm-image` / JSON field | Notes |
|---------------|---------------------------|--------|
| `resize.fit` | `fit` | `inside`, `cover`, `contain`, `fill`, `outside` |
| `resize.position` | `position` | `centre`, `attention`, `entropy`, … → libvips *interesting* |
@ -109,7 +109,7 @@ Sharp wraps libvips: **decode → process → encode**. We do the same with `vip
| `flip` / `flop` | `flip` / `flop` | |
| Letterbox | `background` | `#rrggbb` for `contain` |
**Windows:** `media-img resize --ui` opens a **native Win32** dialog to choose input/output paths, max dimensions, fit mode, quality, and enlargement / autorotate / strip options. Other CLI flags seed the dialog; **`--src` / `--dst` are not allowed** with `--ui`. If you cancel, the command exits without processing.
**Windows:** `pm-image resize --ui` opens a **native Win32** dialog to choose input/output paths, max dimensions, fit mode, quality, and enlargement / autorotate / strip options. Other CLI flags seed the dialog; **`--src` / `--dst` are not allowed** with `--ui`. If you cancel, the command exits without processing.
**REST** `POST /v1/resize` and **IPC** use the same JSON keys as the table, plus the fields in the **“Batch paths & cache”** section below.
@ -141,10 +141,10 @@ Use this when **one** `resize` invocation (CLI, or a single REST/IPC request) sh
**CLI:** use positional `input`/`output` or `--src` / `--dst` together. You can omit `output` only when `input` is a single path or URL (not a multi-match glob).
```bash
./dist/media-img resize './photos/**/*.jpg' ./out/
./dist/media-img resize --src './shots/*.png' --dst ./thumbs/
pm-image resize './photos/**/*.jpg' ./out/
pm-image resize --src './shots/*.png' --dst ./thumbs/
# URL → ./200.jpg under cwd (picsum path segment "200", default extension .jpg)
./dist/media-img resize 'https://picsum.photos/200' --max-width 400 --url-timeout 30
pm-image resize 'https://picsum.photos/200' --max-width 400 --url-timeout 30
```
**JSON:** same strings in `"input"` and `"output"`. When `expand_glob` is true (default), glob expansion runs when the pattern contains `*`, `?`, or `**`.
@ -162,8 +162,8 @@ Placeholders are expanded **after** inputs are resolved (glob or single file). E
Use cases: write beside each source (`${SRC_DIR}/out/${SRC_NAME}.webp`), suffix stems (`${SRC_NAME}_thumb.jpg`), or change extension via `format` / path.
```bash
./dist/media-img resize --src ./photo.jpg --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
./dist/media-img resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}.webp' --max-width 1920
pm-image resize --src ./photo.jpg --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
pm-image resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}.webp' --max-width 1920
```
**REST / IPC** — same strings in JSON (escape quotes in shell as needed):
@ -209,13 +209,13 @@ All **resize** options (`max_width`, `fit`, …) participate in the same JSON bo
### `serve` example with cache and glob
```bash
./dist/media-img serve --host 127.0.0.1 -p 8080 --cache-dir /var/cache/media-img
pm-image serve --host 127.0.0.1 -p 8080 --cache-dir /var/cache/pm-image
```
```bash
curl -s -X POST http://127.0.0.1:8080/v1/resize \
-H 'Content-Type: application/json' \
-d '{"input":"/data/in/*.jpg","output":"/data/out/","max_width":400,"cache":true,"cache_dir":"/var/cache/media-img"}'
-d '{"input":"/data/in/*.jpg","output":"/data/out/","max_width":400,"cache":true,"cache_dir":"/var/cache/pm-image"}'
```
## Concurrency
@ -225,33 +225,33 @@ curl -s -X POST http://127.0.0.1:8080/v1/resize \
## CLI examples
Paths below use Unix style; on Windows run `dist\media-img.exe` and use `.\` or full paths as needed.
Paths below use Unix style; on Windows run `pm-image.exe` and use `.\` or full paths as needed.
### Help and version
```bash
./dist/media-img --help
./dist/media-img resize --help
./dist/media-img -v
pm-image --help
pm-image resize --help
pm-image -v
```
### `resize` — fit inside a box (default), write WebP / AVIF by extension
```bash
# Max 800×600, stay inside the box, Lanczos3 (default), write JPEG quality 85 (default)
./dist/media-img resize photo.jpg out.jpg --max-width 800 --max-height 600
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600
# Same, explicit quality
./dist/media-img resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
# WebP output (quality applies)
./dist/media-img resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
pm-image resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
# AVIF output (quality applies; needs HEIF/AVIF support in your libvips build)
./dist/media-img resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
pm-image resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
# Force output format when the path has no extension you trust
./dist/media-img resize in.tif /tmp/out --format webp --max-width 512
pm-image resize in.tif /tmp/out --format webp --max-width 512
```
### `resize` — square images (1:1)
@ -266,16 +266,16 @@ Use the **same** `--max-width` and `--max-height` (that value is the square side
```bash
# 512×512 crop-to-square (avatars, thumbnails)
./dist/media-img resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
pm-image resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
# 1080×1080 WebP, smart crop on subject
./dist/media-img resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
pm-image resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
# Square canvas, no crop — padded bands with a colour
./dist/media-img resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
pm-image resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
# Exact square by stretching (rare)
./dist/media-img resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
pm-image resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
```
**REST / IPC JSON:** e.g. `"max_width": 512, "max_height": 512, "fit": "cover", "position": "attention"`.
@ -284,20 +284,20 @@ Use the **same** `--max-width` and `--max-height` (that value is the square side
```bash
# Cover: fill 1200×630, crop centre (use --position attention for smart crop)
./dist/media-img resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
pm-image resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
# Contain: fit inside 800×600 canvas, letterbox with a background
./dist/media-img resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
pm-image resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
# EXIF autorotate (default), then rotate 90° CCW, vertical flip
./dist/media-img resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
pm-image resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
```
### `serve` — HTTP REST
```bash
# Default: http://127.0.0.1:8080 — GET /health, POST /v1/resize with JSON body
./dist/media-img serve --host 127.0.0.1 -p 8080
pm-image serve --host 127.0.0.1 -p 8080
```
Example resize request (paths must be readable/writable by the server process):
@ -314,7 +314,7 @@ Optional: `"cache":false`, `"expand_glob":false`, `"cache_dir":"..."` — see **
### `ipc` — one JSON line per connection (TCP; Unix socket on Linux/macOS)
```bash
./dist/media-img ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
pm-image ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
# elsewhere: send a single line, read one line back, e.g.
# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true}
```
@ -327,7 +327,7 @@ Requires **`KBOT_EXE`** pointing at the kbot executable; remaining args are pass
```bash
export KBOT_EXE=/path/to/kbot # Windows: set KBOT_EXE=C:\path\to\kbot.exe
./dist/media-img kbot ai --prompt "hello"
pm-image kbot ai --prompt "hello"
```
## Tests
@ -336,7 +336,7 @@ export KBOT_EXE=/path/to/kbot # Windows: set KBOT_EXE=C:\path\to\kbot.exe
npm run test:media
```
Requires a built `dist/media-img` **linked against libvips** and fixture PNGs (`npm run generate:assets` if missing).
Requires a built `dist/pm-image` **linked against libvips** and fixture PNGs (`npm run generate:assets` if missing).
The suite covers **REST**, **IPC (TCP)**, optional **Unix socket** on non-Windows, **destination templates** (`npm run test:media:templates`), and **recursive glob + `${SRC_DIR}` / `${SRC_NAME}`** (`npm run test:media:glob` — outputs under `tests/assets/glob-in/**/out/`, gitignored, for manual inspection).

View File

@ -0,0 +1,290 @@
{
"app": {
"name": "Polymech Image Resizer",
"context_menu": "PM-Media",
"description": "Command line tool to resize images",
"url": "https://service.polymech.info/user/cgo/pages/polymech-media-tools",
"trailing_slash": false,
"favicon": "/branding/logo/web/Favicons/iphone_512.png"
},
"site": {
"title": "Polymech",
"base_url": "https://service.polymech.info/",
"canonical_url": "https://service.polymech.info/",
"description": "Polymech Media Platform",
"base_path": "/",
"trailing_slash": false,
"favicon": "/images/favicon.png",
"logo": "/branding/logo/web/Favicons/iphone_512.png",
"logo_darkmode": "/images/logo-darkmode.png",
"logo_width": "150",
"logo_height": "33",
"logo_text": "Astrofront",
"image": {
"default": "/images/default-image.png",
"error": "/images/error-image.png",
"alt": "Astrofront"
}
},
"i18n": {
"store": "${OSR_ROOT}/i18n-store/store-${LANG}.json",
"cache": true,
"source_language": "en",
"asset_path": "${SRC_DIR}/${SRC_NAME}-${DST_LANG}${SRC_EXT}"
},
"core": {
"logging_namespace": "polymech-site",
"translate_content": true,
"languages": [
"en",
"de",
"es",
"it",
"fr"
],
"languages_prod": [
"en",
"es",
"fr",
"it",
"de"
],
"rtl_languages": [
"ar"
],
"osr_root": "${OSR_ROOT}"
},
"footer_left": [
{
"href": "/user/cgo/pages/about-contact",
"text": "Contact"
},
{
"href": "https://forum.polymech.info/",
"text": "Forum"
},
{
"href": "https://service.polymech.info/app/filebrowser/machines?mode=thumb",
"text": "Files"
},
{
"href": "https://git.polymech.info/explore/repos",
"text": "Github"
},
{
"href": "https://discord.gg/A68ChG9hnN",
"text": "Discord"
},
{
"href": "https://service.polymech.info/support-chat",
"text": "Support Chat (Instant Quotes)"
}
],
"footer_email": [
{
"href": "https://service.polymech.info/user/3bb4cfbf-318b-44d3-a9d3-35680e738421/pages/about-contact",
"text": "Contact"
},
{
"href": "https://forum.polymech.info/",
"text": "Forum"
},
{
"href": "https://service.polymech.info/app/filebrowser/machines?mode=thumb",
"text": "Files"
},
{
"href": "https://git.polymech.info/explore/repos",
"text": "Github"
},
{
"href": "https://discord.gg/A68ChG9hnN",
"text": "Discord"
},
{
"href": "https://service.polymech.info/support-chat",
"text": "Support Chat (Instant Quotes)"
}
],
"email": {
"languages": [
"en",
"de",
"es",
"it",
"fr"
]
},
"footer_right": [],
"settings": {
"search": true,
"account": true,
"sticky_header": true,
"theme_switcher": true,
"default_theme": "system"
},
"params": {
"contact_form_action": "#",
"copyright": "Designed And Developed by [Themefisher](https://themefisher.com/)"
},
"navigation": {
"top": [
{
"href": "/${LANG}",
"text": "Home"
},
{
"href": "https://service.polymech.info/",
"text": "Media"
},
{
"href": "https://forum.polymech.info/",
"text": "Forum"
},
{
"href": "https://polymech.info/${LANG}/resources",
"text": "Resources"
}
]
},
"navigation_button": {
"enable": true,
"label": "Get Started",
"link": "https://github.com/themefisher/astrofront"
},
"ecommerce": {
"brand": "Polymech",
"currencySymbol": "E",
"currencyCode": "EUR"
},
"impressum": {
"company": "Polymech S.L.",
"representative": "Guenter Volkmar Baumgart",
"address": "Poligono Can Clapers, Carrer Can Peric 11, 1B, 08181 Sentmenat, Barcelona, Spain",
"email": "info@polymech.info",
"phone": "+34 691 952 287",
"vat_id": "ES-Y0100830N",
"register": "Registro Mercantil de Barcelona",
"responsible_content": "Guenter Volkmar Baumgart (§ 18 Abs. 2 MStV)"
},
"metadata": {
"country": "Spain",
"city": "Barcelona",
"author": "Polymech",
"author_bio": "I am in, if its true",
"author_url": "https://service.polymech.info/",
"image": "/branding/logo/web/Favicons/iphone_512.png",
"description": "Polymech is a plastic prototyping company that offers product design services.",
"keywords": "Plastic, Prototyping, Product Design, Opensource"
},
"shopify": {
"currencySymbol": "",
"currencyCode": "EU",
"collections": {
"hero_slider": "hidden-homepage-carousel",
"featured_products": "featured-products"
}
},
"pages": {
"home": {
"hero": "https://assets.polymech.info/machines//assets/newsletter/common/products/extruders/overview-3.jpg",
"_blog": {
"store": "resources"
}
}
},
"dev": {
"file_server": "localhost:5000"
},
"features": {
"show_description": false,
"show_license": true,
"show_renderings": true,
"show_tabs": false,
"show_gallery": true,
"show_files": true,
"show_specs": true,
"show_checkout": true,
"show_contact": true,
"show_3d_preview": true,
"show_resources": true,
"show_debug": false,
"show_samples": true,
"show_readme": false,
"show_related": true,
"show_showcase": true,
"show_screenshots": true
},
"retail": {
"products": "site-prod",
"library_branch": "site-prod",
"projects_branch": "projects",
"compile_cache": false,
"media_cache": true,
"log_level_i18n_product_assets": "info",
"convert_product_media": true,
"translate_product_assets": false,
"populate_product_defaults": true
},
"osrl": {
"env": "astro-release",
"env_dev": "astro-debug",
"module_name": "polymech.io",
"lang_flavor": "osr",
"product_profile": "./src/app/profile.json"
},
"products": {
"root": "${OSR_ROOT}/products",
"howto_migration": "./data/last.json",
"glob": "**/config.json",
"enabled": "${OSR_ROOT}/products/config/machines.json"
},
"defaults": {
"image_url": "https://picsum.photos/640/640",
"license": "CERN Open Source Hardware License",
"contact": "sales@plastic-hub.com"
},
"assets": {
"local": false,
"glob": "*.+(JPG|jpg|jpeg|png|PNG|gif)",
"cad_url": "${OSR_MACHINES_ASSETS_URL}/${file}",
"url": "${OSR_MACHINES_ASSETS_URL}/products/${product_rel_min}/${file}",
"item_url_r": "${OSR_MACHINES_ASSETS_URL}/${ITEM_REL}/${assetPath}/${filePath}",
"item_url": "http://${FILE_SERVER_DEV}/${ITEM_REL}/${assetPath}/${filePath}"
},
"optimization": {
"image_settings": {
"gallery": {
"show_title": true,
"show_description": false,
"sizes_thumb": "(min-width: 120px) 120px, 120vw",
"sizes_large": "(min-width: 1024px) 1024px, 1024vw",
"sizes_regular": "(min-width: 400px) 400px, 400vw"
},
"lightbox": {
"show_title": true,
"show_description": true,
"sizes_thumb": "(min-width: 120px) 120px, 120vw",
"sizes_large": "(min-width: 1024px) 1024px, 1024vw",
"sizes_regular": "(min-width: 400px) 400px, 400vw"
}
},
"presets": {
"slow": {
"sizes_medium": "(min-width: 100px) 100px, 100vw",
"sizes_thumbs": "(min-width: 80px) 80px, 80vw",
"sizes_large": "(min-width: 320px) 320px, 320vw"
},
"medium": {
"sizes_medium": "(min-width: 400px) 400px, 400vw",
"sizes_thumbs": "(min-width: 120px) 120px, 120vw",
"sizes_large": "(min-width: 1024px) 1024px, 1024vw"
},
"fast": {
"sizes_medium": "(min-width: 1024px) 1024px, 1024vw",
"sizes_thumbs": "(min-width: 180px) 180px, 180vw",
"sizes_large": "(min-width: 1200px) 1200px, 1200vw"
}
}
}
}

View File

@ -0,0 +1,805 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,809 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[0.2235 0.2431 0.2745] SC
/DeviceRGB {} cs
[0.2235 0.2431 0.2745] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,818 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[3.125494 0 0 3.12478 0.0072969 0] cm
/DeviceRGB {} CS
[1 1 1] SC
/DeviceRGB {} cs
[1 1 1] sc
0 0 3162.1621 843.23718 re
f
Q
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[0.2235 0.2431 0.2745] SC
/DeviceRGB {} cs
[0.2235 0.2431 0.2745] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

View File

@ -0,0 +1,809 @@
%!PS-Adobe-3.0 EPSF-3.0
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
%%Creator: Chromium
%%LanguageLevel: 3
%%DocumentSuppliedResources: (atend)
%%BoundingBox: 0 0 2372 634
%%HiResBoundingBox: 0 0 2371.9199 633.12
%%DocumentSuppliedResources: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset xpdf 3.00 0
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
/xpdf 75 dict def xpdf begin
% PDF special state
/pdfDictSize 15 def
/pdfSetup {
/setpagedevice where {
pop 2 dict begin
/Policies 1 dict dup begin /PageSize 6 def end def
{ /Duplex true def } if
currentdict end setpagedevice
} {
pop
} ifelse
} def
/pdfSetupPaper {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
/pdfStartPage {
pdfDictSize dict begin
/pdfFillCS [] def
/pdfFillXform {} def
/pdfStrokeCS [] def
/pdfStrokeXform {} def
/pdfFill [0] def
/pdfStroke [0] def
/pdfFillOP false def
/pdfStrokeOP false def
/pdfOPM false def
/pdfLastFill false def
/pdfLastStroke false def
/pdfTextMat [1 0 0 1 0 0] def
/pdfFontSize 0 def
/pdfCharSpacing 0 def
/pdfTextRender 0 def
/pdfPatternCS false def
/pdfTextRise 0 def
/pdfWordSpacing 0 def
/pdfHorizScaling 1 def
/pdfTextClipPath [] def
} def
/pdfEndPage { end } def
% PDF color state
/opm { dup /pdfOPM exch def
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
setcolorspace } def
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
setcolorspace } def
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
dup /pdfFill exch def aload pop pdfFillXform setcolor
/pdfLastFill true def /pdfLastStroke false def } def
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
/pdfLastStroke true def /pdfLastFill false def } def
/op { /pdfFillOP exch def
pdfLastFill { pdfFillOP setoverprint } if } def
/OP { /pdfStrokeOP exch def
pdfLastStroke { pdfStrokeOP setoverprint } if } def
/fCol {
pdfLastFill not {
pdfFillCS setcolorspace
pdfFill aload pop pdfFillXform setcolor
pdfFillOP setoverprint
/pdfLastFill true def /pdfLastStroke false def
} if
} def
/sCol {
pdfLastStroke not {
pdfStrokeCS setcolorspace
pdfStroke aload pop pdfStrokeXform setcolor
pdfStrokeOP setoverprint
/pdfLastStroke true def /pdfLastFill false def
} if
} def
% build a font
/pdfMakeFont {
4 3 roll findfont
4 2 roll matrix scale makefont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/Encoding exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16 {
exch findfont
dup length dict begin
{ 1 index /FID ne { def } { pop pop } ifelse } forall
/WMode exch def
currentdict
end
definefont pop
} def
/pdfMakeFont16L3 {
1 index /CIDFont resourcestatus {
pop pop 1 index /CIDFont findresource /CIDFontType known
} {
false
} ifelse
{
0 eq { /Identity-H } { /Identity-V } ifelse
exch 1 array astore composefont pop
} {
pdfMakeFont16
} ifelse
} def
% graphics state operators
/q { gsave pdfDictSize dict begin } def
/Q {
end grestore
/pdfLastFill where {
pop
pdfLastFill {
pdfFillOP setoverprint
} {
pdfStrokeOP setoverprint
} ifelse
} if
/pdfOPM where {
pop
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
} if
} def
/cm { concat } def
/d { setdash } def
/i { setflat } def
/j { setlinejoin } def
/J { setlinecap } def
/M { setmiterlimit } def
/w { setlinewidth } def
% path segment operators
/m { moveto } def
/l { lineto } def
/c { curveto } def
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath } def
/h { closepath } def
% path painting operators
/S { sCol stroke } def
/Sf { fCol stroke } def
/f { fCol fill } def
/f* { fCol eofill } def
% clipping operators
/W { clip newpath } def
/W* { eoclip newpath } def
/Ws { strokepath clip newpath } def
% text state operators
/Tc { /pdfCharSpacing exch def } def
/Tf { dup /pdfFontSize exch def
dup pdfHorizScaling mul exch matrix scale
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
exch findfont exch makefont setfont } def
/Tr { /pdfTextRender exch def } def
/Tp { /pdfPatternCS exch def } def
/Ts { /pdfTextRise exch def } def
/Tw { /pdfWordSpacing exch def } def
/Tz { /pdfHorizScaling exch def } def
% text positioning operators
/Td { pdfTextMat transform moveto } def
/Tm { /pdfTextMat exch def } def
% text string operators
/xyshow where {
pop
/xyshow2 {
dup length array
0 2 2 index length 1 sub {
2 index 1 index 2 copy get 3 1 roll 1 add get
pdfTextMat dtransform
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
} for
exch pop
xyshow
} def
}{
/xyshow2 {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval show moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval show moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/cshow where {
pop
/xycp {
0 3 2 roll
{
pop pop currentpoint 3 2 roll
1 string dup 0 4 3 roll put false charpath moveto
2 copy get 2 index 2 index 1 add get
pdfTextMat dtransform rmoveto
2 add
} exch cshow
pop pop
} def
}{
/xycp {
currentfont /FontType get 0 eq {
0 2 3 index length 1 sub {
currentpoint 4 index 3 index 2 getinterval false charpath moveto
2 copy get 2 index 3 2 roll 1 add get
pdfTextMat dtransform rmoveto
} for
} {
0 1 3 index length 1 sub {
currentpoint 4 index 3 index 1 getinterval false charpath moveto
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
pdfTextMat dtransform rmoveto
} for
} ifelse
pop pop
} def
} ifelse
/Tj {
fCol
0 pdfTextRise pdfTextMat dtransform rmoveto
currentpoint 4 2 roll
pdfTextRender 1 and 0 eq {
2 copy xyshow2
} if
pdfTextRender 3 and dup 1 eq exch 2 eq or {
3 index 3 index moveto
2 copy
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
xycp currentpoint stroke moveto
} if
pdfTextRender 4 and 0 ne {
4 2 roll moveto xycp
/pdfTextClipPath [ pdfTextClipPath aload pop
{/moveto cvx}
{/lineto cvx}
{/curveto cvx}
{/closepath cvx}
pathforall ] def
currentpoint newpath moveto
} {
pop pop pop pop
} ifelse
0 pdfTextRise neg pdfTextMat dtransform rmoveto
} def
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
pdfTextMat dtransform rmoveto } def
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
pdfTextMat dtransform rmoveto } def
/Tclip { pdfTextClipPath cvx exec clip newpath
/pdfTextClipPath [] def } def
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
/pdfTextClipPath [] def } def
% Level 2/3 image operators
/pdfImBuf 100 string def
/pdfImStr {
2 copy exch length lt {
2 copy get exch 1 add exch
} {
()
} ifelse
} def
/skipEOD {
{ currentfile pdfImBuf readline
not { pop exit } if
(%-EOD-) eq { exit } if } loop
} def
/pdfIm { image skipEOD } def
/pdfMask {
/ReusableStreamDecode filter
skipEOD
/maskStream exch def
} def
/pdfMaskEnd { maskStream closefile } def
/pdfMaskInit {
/maskArray exch def
/maskIdx 0 def
} def
/pdfMaskSrc {
maskIdx maskArray length lt {
maskArray maskIdx get
/maskIdx maskIdx 1 add def
} {
()
} ifelse
} def
/pdfImM { fCol imagemask skipEOD } def
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
/pdfImClip {
gsave
0 2 4 index length 1 sub {
dup 4 index exch 2 copy
get 5 index div put
1 add 3 index exch 2 copy
get 3 index div put
} for
pop pop rectclip
} def
/pdfImClipEnd { grestore } def
% shading operators
/colordelta {
false 0 1 3 index length 1 sub {
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
pop true
} if
} for
exch pop exch pop
} def
/funcCol { func n array astore } def
/funcSH {
dup 0 eq {
true
} {
dup 6 eq {
false
} {
4 index 4 index funcCol dup
6 index 4 index funcCol dup
3 1 roll colordelta 3 1 roll
5 index 5 index funcCol dup
3 1 roll colordelta 3 1 roll
6 index 8 index funcCol dup
3 1 roll colordelta 3 1 roll
colordelta or or or
} ifelse
} ifelse
{
1 add
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
6 index 6 index 4 index 4 index 4 index funcSH
2 index 6 index 6 index 4 index 4 index funcSH
6 index 2 index 4 index 6 index 4 index funcSH
5 3 roll 3 2 roll funcSH pop pop
} {
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
funcCol sc
dup 4 index exch mat transform m
3 index 3 index mat transform l
1 index 3 index mat transform l
mat transform l pop pop h f*
} ifelse
} def
/axialCol {
dup 0 lt {
pop t0
} {
dup 1 gt {
pop t1
} {
dt mul t0 add
} ifelse
} ifelse
func n array astore
} def
/axialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index axialCol 2 index axialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index axialSH
exch 3 2 roll axialSH
} {
pop 2 copy add 0.5 mul
axialCol sc
exch dup dx mul x0 add exch dy mul y0 add
3 2 roll dup dx mul x0 add exch dy mul y0 add
dx abs dy abs ge {
2 copy yMin sub dy mul dx div add yMin m
yMax sub dy mul dx div add yMax l
2 copy yMax sub dy mul dx div add yMax l
yMin sub dy mul dx div add yMin l
h f*
} {
exch 2 copy xMin sub dx mul dy div add xMin exch m
xMax sub dx mul dy div add xMax exch l
exch 2 copy xMax sub dx mul dy div add xMax exch l
xMin sub dx mul dy div add xMin exch l
h f*
} ifelse
} ifelse
} def
/radialCol {
dup t0 lt {
pop t0
} {
dup t1 gt {
pop t1
} if
} ifelse
func n array astore
} def
/radialSH {
dup 0 eq {
true
} {
dup 8 eq {
false
} {
2 index dt mul t0 add radialCol
2 index dt mul t0 add radialCol colordelta
} ifelse
} ifelse
{
1 add 3 1 roll 2 copy add 0.5 mul
dup 4 3 roll exch 4 index radialSH
exch 3 2 roll radialSH
} {
pop 2 copy add 0.5 mul dt mul t0 add
radialCol sc
encl {
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
0 360 arc h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
360 0 arcn h f
} {
2 copy
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arcn
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arcn h
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a1 a2 arc
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
a2 a1 arc h f
} ifelse
} ifelse
} def
end
%%EndResource
/CIDInit /ProcSet findresource begin
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-H def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
10 dict begin
begincmap
/CMapType 1 def
/CMapName /Identity-V def
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/WMode 1 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
0 usefont
1 begincidrange
<0000> <ffff> 0
endcidrange
endcmap
currentdict CMapName exch /CMap defineresource pop
end
end
%%EndProlog
%%BeginSetup
xpdf begin
%%EndSetup
pdfStartPage
%%EndPageSetup
[] 0 d
1 i
0 j
0 J
10 M
1 w
/DeviceGray {} cs
[0] sc
/DeviceGray {} CS
[0] SC
false op
false OP
{} settransfer
0 0 2371.9199 633.12 re
W
q
[0.24 0 0 -0.24 0 633.12] cm
q
0 0 9883.333 2634.9304 re
W*
q
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
/DeviceRGB {} CS
[0.9725 0.7098 0] SC
/DeviceRGB {} cs
[0.9725 0.7098 0] sc
1313.30005 1890.9 m
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
1201.19995 1579.30005 l
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
h
f
1472.19995 1127.30005 m
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
h
1241.59998 1248.90002 m
1275.09998 1251.70007 l
1279 1252.00012 l
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
h
f
Q
q
[76.117943 0 0 76.100548 2395.657 642.07141] cm
/DeviceRGB {} CS
[1 1 1] SC
/DeviceRGB {} cs
[1 1 1] sc
6.9 5.84 m
8.2733 5.84 9.3566 6.18 10.15 6.86 c
10.943399 7.54 11.34 8.520001 11.34 9.8 c
11.34 11.04 10.94666 12.01 10.16 12.71 c
9.37334 13.41 8.286699 13.76 6.9 13.76 c
3.74 13.76 l
3.74 20 l
1.819999 20 l
1.819999 5.84 l
6.9 5.84 l
6.9 5.84 l
h
6.34 12.08 m
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
3.739999 7.51998 l
3.739999 12.079981 l
6.339999 12.079981 l
6.34 12.08 l
h
15.16 4.88 m
15.16 20 l
13.36 20 l
13.36 4.88 l
15.16 4.88 l
h
21.82 10.28 m
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
25.780001 18.459938 l
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
24.26 19.999939 l
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
24.16 18.559938 l
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
24.100002 14.119937 l
24.100002 13.779937 l
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
18.060003 11.679956 l
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
21.82 10.28 l
h
19.360001 17.26 m
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
24.100002 15.440001 l
23.080002 15.440001 l
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
19.360001 17.26 l
h
31.6 10.28 m
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
33.439999 12.90004 l
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
28.960001 17.440037 l
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
28.23 14.483337 28 13.906717 28 13.200018 c
28 12.320018 28.34 11.616718 29.02 11.090018 c
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
31.6 10.28 l
h
39.779999 7.86 m
39.77998 10.520001 l
42.359978 10.520001 l
42.359978 12.08 l
39.779976 12.08 l
39.779976 16.639999 l
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
42.419971 19.919998 l
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
37.979969 12.079979 l
35.899971 12.079979 l
35.899971 10.51998 l
37.979973 10.51998 l
37.979973 7.85998 l
39.779972 7.85998 l
39.779999 7.86 l
h
45.740002 5.8 m
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
45.740002 5.8 l
h
46.639999 10.520001 m
46.639999 20 l
44.84 20 l
44.84 10.520001 l
46.639999 10.520001 l
h
54 10.3 m
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
56.279999 13.04 l
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
57.599998 18.780001 l
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
54 10.3 l
h
61.52 5.84 m
61.52 11.72 l
68.860001 11.72 l
68.860001 5.84 l
70.779999 5.84 l
70.779999 20 l
68.860001 20 l
68.860001 13.520001 l
61.52 13.520001 l
61.52 20 l
59.599998 20 l
59.599998 5.84 l
61.519997 5.84 l
61.52 5.84 l
h
75.760002 10.520001 m
75.760002 16.200001 l
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
80.559998 10.520001 l
82.360001 10.520001 l
82.360001 20 l
80.559998 20 l
80.559998 18.540001 l
80.519997 18.540001 l
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
73.959999 10.520002 l
75.760002 10.520002 l
75.760002 10.520001 l
h
86.879997 4.88 m
86.88002 11.88 l
86.920021 11.88 l
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
86.880028 18.639999 l
86.880028 20 l
85.080025 20 l
85.080025 4.88 l
86.880028 4.88 l
86.879997 4.88 l
h
86.879997 15.26 m
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
86.879997 15.26 l
h
f
Q
Q
Q
showpage
%%PageTrailer
pdfEndPage
%%Trailer
end
%%DocumentSuppliedResources:
%%EOF

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Binary file not shown.

BIN
packages/media/cpp/dist/pm-image.exe vendored Normal file

Binary file not shown.

BIN
packages/media/cpp/dist/pm-image.pdb vendored Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -98,17 +98,17 @@ If you bind beyond `127.0.0.1`, open the port in `firewalld` / `ufw` as usual.
## Windows: running as a service
`media-img.exe` does **not** register with the Windows Service Control Manager by itself. Use a **service wrapper** that runs your command line as a service.
`pm-image.exe` does **not** register with the Windows Service Control Manager by itself. Use a **service wrapper** that runs your command line as a service.
### Option A — NSSM (Non-Sucking Service Manager)
1. Install [NSSM](https://nssm.cc/).
2. Either run **`media-img.exe` directly** or use **[`scripts/run-media-img.ps1`](../scripts/run-media-img.ps1)** with `MEDIA_IMG_*` env vars (see [Wrapper scripts](#wrapper-scripts-ports-via-environment)).
2. Either run **`pm-image.exe` directly** or use **[`scripts/run-media-img.ps1`](../scripts/run-media-img.ps1)** with `MEDIA_IMG_*` env vars (see [Wrapper scripts](#wrapper-scripts-ports-via-environment)).
**Direct executable:**
```powershell
nssm install MediaImgServe "C:\Apps\media\media-img.exe"
nssm install MediaImgServe "C:\Apps\media\pm-image.exe"
nssm set MediaImgServe AppDirectory "C:\Apps\media"
nssm set MediaImgServe AppParameters "serve --host 127.0.0.1 --port 8080 --cache-dir C:\Apps\media\cache\images"
nssm set MediaImgServe AppStdout "C:\Apps\media\logs\serve.log"
@ -121,11 +121,11 @@ nssm start MediaImgServe
### Option B — WinSW
Use [WinSW](https://github.com/winsw/winsw) with an XML that points `executable` to `media-img.exe` and passes `serve` arguments in `arguments`.
Use [WinSW](https://github.com/winsw/winsw) with an XML that points `executable` to `pm-image.exe` and passes `serve` arguments in `arguments`.
### Option C — Task Scheduler
Not a true service, but often enough: run `media-img.exe serve ...` at logon or startup with “Run whether user is logged on or not”. No SCM integration; fewer recovery options than NSSM.
Not a true service, but often enough: run `pm-image.exe serve ...` at logon or startup with “Run whether user is logged on or not”. No SCM integration; fewer recovery options than NSSM.
### Firewall
@ -147,7 +147,7 @@ The repo includes small wrappers so you can set **bind address, port, and cache
| Variable | Meaning |
|----------|---------|
| `MEDIA_IMG_CMD` | `serve` (default) or `ipc` |
| `MEDIA_IMG_BIN` | Path to `media-img` / `media-img.exe` (optional; scripts default to `PATH` or `dist/` next to the script) |
| `MEDIA_IMG_BIN` | Path to `media-img` / `pm-image.exe` (optional; scripts default to `PATH` or `dist/` next to the script) |
| `MEDIA_IMG_HOST` | Bind address (default `127.0.0.1`) |
| `MEDIA_IMG_PORT` | TCP port — default **8080** for `serve`, **9333** for `ipc` |
| `MEDIA_IMG_CACHE_DIR` | Passed as `--cache-dir` if set |

View File

@ -0,0 +1,237 @@
# pm-image: Fast image resizing for CLI, servers, and Windows Explorer
**pm-image** is a native **C++** image toolkit built on **libvips** — the same high-performance engine behind tools like **Sharp** (Node.js). One binary gives you a **command-line interface**, an **HTTP REST** server, and **line-delimited JSON IPC** for automation. On Windows, optional **Explorer** integration adds right-click **resize** and **convert** workflows without opening another app.
Whether you batch photos for the web, power a local resize API, or shrink folders of RAW and HEIC files from the desktop, pm-image keeps pipelines predictable: **decode → process → encode**, with **Sharp-like** options (fit modes, quality, metadata stripping, smart crop) and optional **disk caching** so repeat jobs stay instant.
---
[Download - Windows - AMD 64](https://service.polymech.info/api/vfs/get/software/pm-image-resize/v1.zip?t=1776153671416&download=1) | [Source Code](https://git.polymech.info/polymech/mono/src/branch/master/packages/media)
## Who is this for?
- **Developers** who want a **single native binary** (no Node runtime) for resize jobs in scripts, CI, or sidecar services.
- **Windows power users** who want **context-menu** resize presets and JPG conversion from File Explorer.
- **Integrators** who need **REST** (`POST /v1/resize`) or **IPC** (one JSON line per request) with the same JSON schema as the CLI.
---
## How to resize images (quick start)
### 1. Command line — one file
Install or build **pm-image**, then run `resize` with input and output paths. By default, the image **fits inside** your max width and height **without enlarging** (unless you allow enlargement).
```bash
pm-image resize photo.jpg out.jpg --max-width 1920 --max-height 1080
```
- **Quality** (JPEG, WebP, AVIF): use `-q` / `quality` (for example `-q 85`).
- **Output format**: use the **destination extension** (`.webp`, `.avif`, `.jpg`) or `--format` when the path is ambiguous.
### 2. Fit modes — not every resize is “shrink to fit”
| Goal | What to use |
|------|-------------|
| **Fit inside a box** (keep aspect ratio, no crop) | Default behavior with `--max-width` / `--max-height`; optional `--fit inside` style semantics via `fit` in JSON. |
| **Square avatar or thumbnail (crop)** | Same `--max-width` and `--max-height` (e.g. 512), `--fit cover`, optional `--position attention` or `entropy` for smarter crops. |
| **Square with padding (no crop)** | `--fit contain` plus `--background '#rrggbb'` for letterboxing. |
| **Exact dimensions by stretching** | `--fit fill` (distorts if aspect ratios differ). |
Examples (see the package README for full flag lists):
```bash
# Thumbnail: 400×400 cover crop
pm-image resize in.jpg thumb.jpg --fit cover --max-width 400 --max-height 400
# Padded square on a dark canvas
pm-image resize wide.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
```
### 3. Batch paths and folders
- Use **globs** (`*`, `?`, `**`) in the input to process many files in one invocation.
- Point output to a **directory** (often with a trailing `/` or `\`) or use **templates** like `${SRC_DIR}`, `${SRC_NAME}`, `${SRC_FILE_EXT}` to mirror or rename outputs per file.
```bash
pm-image resize './photos/**/*.jpg' ./out/
pm-image resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
```
### 4. HTTP API
Start the server (`serve`), then `POST` JSON to `/v1/resize` with `input`, `output`, and the same resize fields as the CLI (`max_width`, `max_height`, `fit`, `quality`, etc.). Paths must be readable and writable by the server process.
### 5. Windows — resize from Explorer
After **`pm-image register-explorer`** (or the NSIS installer), use the **PM-Media** menu on images or folders for preset widths, **in place** or **copy**, plus **convert to JPG**. Override preset widths with `--widths` when registering.
### 6. Optional: Windows GUI
On Windows, `pm-image resize --ui` opens a **native** dialog to pick files and options (no `--src` / `--dst` with `--ui`).
---
## Features at a glance
- **libvips-backed** resizing, rotation, flip/flop, EXIF **autorotate**, metadata **strip** (defaults match common web workflows).
- **Formats**: JPEG, PNG, WebP, TIFF; **AVIF / HEIC** when your libvips build includes HEIF; other formats depend on libvips loaders/savers.
- **HTTP(S) URLs** as `input` (fetched via libcurl) for download-and-resize pipelines.
- **Output cache**: SHA-256 keyed by path, size, mtime, and options — cache hits skip re-encoding.
For prerequisites, build steps, installer, and the full option tables, see the **[C++ README](../README.md)**.
---
## FAQ (questions and answers)
### What is pm-image?
**pm-image** is a CMake-built executable that exposes image resizing and related operations through **CLI**, **`serve` (REST)**, and **`ipc` (JSON lines)**. Processing uses **libvips**, aligned with a **Sharp-like** option model for familiarity.
### Is pm-image the same as Sharp?
No — **Sharp** is a **Node.js** library; **pm-image** is a **standalone native** program. Both lean on **libvips**, so concepts like `fit`, `position`, `kernel`, and quality map closely. See the READMEs “Sharp-like options” table for field names (`without_enlargement`, `strip_metadata`, etc.).
### How do I resize an image to an exact width?
Use **`--max-width`** (and optionally **`--max-height`**). The image scales **down** (or up if you allow enlargement) to respect those bounds and the chosen **`fit`** mode. For a fixed **width-only** workflow, set a large `max_height` or use JSON/`resize` options that match your desired behavior.
### How do I resize without losing quality?
**Resizing always re-encodes** for raster formats; “lossless” depends on format:
- For **JPEG**, use a high **`-q`** (e.g. 9095) and avoid repeated saves.
- For **PNG**, resizing may still recompress; use **PNG compression** settings as needed.
- Prefer **WebP** or **AVIF** with tuned **quality** for smaller files at a given visual fidelity.
**without enlargement** defaults to **true**, so small images are not upscaled unless you opt in.
### How do I batch resize images in a folder?
Use a **glob** for `input` and a **directory** or **template** for `output`. Multiple matches are processed in one command; see **Batch paths & cache** in the README for rules on trailing slashes and `${SRC_*}` variables.
### Can I resize images from URLs?
Yes. Pass an **`http://` or `https://`** URL as `input`. Redirects are followed; timeouts and redirect limits are configurable (`--url-timeout`, `--url-max-redirects`).
### Does pm-image work on Windows?
Yes. Use the **vips dev bundle** (`npm run setup:vips` from the package), build **pm-image**, and optionally install **NSIS** output for **`pm-image-setup.exe`**, PATH, DLLs, and Explorer scripts. **register-explorer** adds context menus for resize and convert.
### How does caching work?
When enabled, outputs are stored under a **cache directory** (default under the process working directory), keyed by a **SHA-256** hash of input identity, file metadata, and **all** resize options. Identical jobs reuse cached bytes without running libvips again.
### What is IPC for?
**ipc** accepts **one JSON object per line** over TCP (or a Unix socket on non-Windows), ideal for **local daemons** or tools that want a simple request/response channel without HTTP overhead.
### Where is the full API reference?
- **CLI**: `pm-image --help`, `pm-image resize --help`.
- **Library-level image API** (underlying engine): [libvips `VipsImage`](https://www.libvips.org/API/current/class.Image.html).
---
## Related documentation
## CLI examples
Paths below use Unix style; on Windows run `pm-image.exe` and use `.\` or full paths as needed.
### Help and version
```bash
pm-image --help
pm-image resize --help
pm-image -v
```
### `resize` — fit inside a box (default), write WebP / AVIF by extension
```bash
# Max 800×600, stay inside the box, Lanczos3 (default), write JPEG quality 85 (default)
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600
# Same, explicit quality
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
# WebP output (quality applies)
pm-image resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
# AVIF output (quality applies; needs HEIF/AVIF support in your libvips build)
pm-image resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
# Force output format when the path has no extension you trust
pm-image resize in.tif /tmp/out --format webp --max-width 512
```
### `resize` — square images (1:1)
Use the **same** `--max-width` and `--max-height` (that value is the square side in pixels). Pick **`--fit`**:
| `fit` | Result |
|-------|--------|
| **`cover`** | Fills the square; crops overflow (default crop: `--position centre`, or `attention` / `entropy` for smart crop). |
| **`contain`** | Full image inside the square; **letterboxing** on two sides if needed (`--background`). |
| **`fill`** | Stretches to the square (ignores aspect ratio). |
```bash
# 512×512 crop-to-square (avatars, thumbnails)
pm-image resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
# 1080×1080 WebP, smart crop on subject
pm-image resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
# Square canvas, no crop — padded bands with a colour
pm-image resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
# Exact square by stretching (rare)
pm-image resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
```
**REST / IPC JSON:** e.g. `"max_width": 512, "max_height": 512, "fit": "cover", "position": "attention"`.
### `resize` — cover (crop), contain (letterbox), rotate / flip
```bash
# Cover: fill 1200×630, crop centre (use --position attention for smart crop)
pm-image resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
# Contain: fit inside 800×600 canvas, letterbox with a background
pm-image resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
# EXIF autorotate (default), then rotate 90° CCW, vertical flip
pm-image resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
```
### `serve` — HTTP REST
```bash
# Default: http://127.0.0.1:8080 — GET /health, POST /v1/resize with JSON body
pm-image serve --host 127.0.0.1 -p 8080
```
Example resize request (paths must be readable/writable by the server process):
```bash
curl -s http://127.0.0.1:8080/health
curl -s -X POST http://127.0.0.1:8080/v1/resize \
-H 'Content-Type: application/json' \
-d '{"input":"/path/in.png","output":"/path/out.webp","max_width":400,"quality":80}'
```
Optional: `"cache":false`, `"expand_glob":false`, `"cache_dir":"..."` — see **Batch paths & cache** above.
### `ipc` — one JSON line per connection (TCP; Unix socket on Linux/macOS)
```bash
pm-image ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
# elsewhere: send a single line, read one line back, e.g.
# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true}
```
Same JSON fields as REST (`input`, `output`, globs, `expand_glob`, `cache`, `cache_dir`, resize options).

View File

@ -4,7 +4,7 @@
; From packages/media/cpp:
; npm run build:installer
; Output: dist\media-img-Setup.exe
; Requires: NSIS 3+, CMake release build (dist\media-img.exe + vips DLLs)
; Requires: NSIS 3+, CMake release build (dist\pm-image.exe + vips DLLs)
; ============================================================================
!include "MUI2.nsh"
@ -121,16 +121,16 @@
; ---------------------------------------------------------------------------
; Metadata
; ---------------------------------------------------------------------------
!define PRODUCT_NAME "PolyMech media-img"
!define PRODUCT_NAME "PolyMech Image Resizer"
!define PRODUCT_VERSION "0.1.0"
!define PRODUCT_PUBLISHER "PolyMech"
!define PRODUCT_WEB_SITE "https://git.polymech.info/mono"
!define PRODUCT_EXE "media-img.exe"
!define PRODUCT_WEB_SITE "https://service.polymech.info/user/cgo/pages/polymech-media-tools"
!define PRODUCT_EXE "pm-image.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define ENV_KEY "Environment"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "dist\media-img-Setup.exe"
OutFile "dist\pm-images-setup.exe"
InstallDir ""
RequestExecutionLevel user
@ -214,7 +214,7 @@ Section "Install"
WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "InstallMode" "CurrentUser"
reg_done:
Call AddToPath
;Call AddToPath
DetailPrint "Registering Explorer context menu (media-img register-explorer)..."
ExecWait '"$INSTDIR\${PRODUCT_EXE}" register-explorer' $0

View File

@ -12,7 +12,7 @@ export const platform = {
/** Path to media-img binary next to orchestrator/ → ../dist/ */
export function mediaExePath(orchestratorDir = __dirname) {
const name = platform.isWin ? 'media-img.exe' : 'media-img';
const name = platform.isWin ? 'pm-image.exe' : 'media-img';
return resolve(orchestratorDir, '..', 'dist', name);
}

View File

@ -1,6 +1,6 @@
#!/usr/bin/env node
/**
* Cross-platform launcher: runs dist/media-img or dist/media-img.exe from package root.
* Cross-platform launcher: runs dist/media-img or dist/pm-image.exe from package root.
* Used by package.json convenience scripts on Linux, macOS, and Windows.
*/
import { spawnSync } from 'node:child_process';
@ -8,7 +8,7 @@ import { resolve, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const exe = process.platform === 'win32' ? 'media-img.exe' : 'media-img';
const exe = process.platform === 'win32' ? 'pm-image.exe' : 'media-img';
const bin = resolve(root, 'dist', exe);
const args = process.argv.slice(2);
const r = spawnSync(bin, args, { stdio: 'inherit' });

View File

@ -1,15 +1,15 @@
# Wrapper for NSSM, WinSW, Task Scheduler, or manual runs. Configure via environment variables.
#
# $env:MEDIA_IMG_CMD = serve | ipc (default: serve)
# $env:MEDIA_IMG_BIN = path to media-img.exe (optional)
# $env:MEDIA_IMG_BIN = path to pm-image.exe (optional)
# $env:MEDIA_IMG_HOST = bind address (default: 127.0.0.1)
# $env:MEDIA_IMG_PORT = TCP port — default 8080 for serve, 9333 for ipc
# $env:MEDIA_IMG_CACHE_DIR = optional — passed as --cache-dir
# $env:MEDIA_IMG_NO_CACHE = "1" to add --no-cache
# $env:MEDIA_IMG_IPC_UNIX = not used on Windows (IPC TCP only here)
#
# If MEDIA_IMG_BIN is unset, uses ..\dist\media-img.exe next to this script when present,
# otherwise "media-img.exe" on PATH.
# If MEDIA_IMG_BIN is unset, uses ..\dist\pm-image.exe next to this script when present,
# otherwise "pm-image.exe" on PATH.
#
# Example:
# $env:MEDIA_IMG_CMD = "serve"; $env:MEDIA_IMG_PORT = "8080"
@ -23,7 +23,7 @@ param(
$ErrorActionPreference = "Stop"
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$candidate = Join-Path $here "..\dist\media-img.exe"
$candidate = Join-Path $here "..\dist\pm-image.exe"
if ($env:MEDIA_IMG_BIN) {
$bin = $env:MEDIA_IMG_BIN
@ -32,7 +32,7 @@ elseif (Test-Path -LiteralPath $candidate) {
$bin = (Resolve-Path $candidate).Path
}
else {
$bin = "media-img.exe"
$bin = "pm-image.exe"
}
$cmd = if ($env:MEDIA_IMG_CMD) { $env:MEDIA_IMG_CMD } else { "serve" }

View File

@ -184,7 +184,7 @@ int main(int argc, char **argv) {
reg_cmd->add_flag("--unregister", reg_unregister);
reg_cmd->add_flag("--dry", reg_dry);
reg_cmd->add_flag("--no-refresh-shell", reg_no_refresh);
reg_cmd->add_option("--media-bin", reg_media_bin, "Path to media-img.exe (default: this executable)");
reg_cmd->add_option("--media-bin", reg_media_bin, "Path to pm-image.exe (default: this executable)");
reg_cmd->add_option("--explorer-script", reg_explorer_script,
"Path to explorer-resize.ps1 (default: <exe_dir>\\scripts\\explorer-resize.ps1)");
reg_cmd->add_option("--explorer-convert-script", reg_explorer_convert_script,

View File

@ -52,7 +52,7 @@ std::wstring default_media_bin() {
wchar_t buf[MAX_PATH]{};
DWORD n = GetModuleFileNameW(nullptr, buf, MAX_PATH);
if (n == 0 || n >= MAX_PATH)
return L"media-img.exe";
return L"pm-image.exe";
return std::wstring(buf, n);
}

View File

@ -9,7 +9,7 @@ struct RegisterExplorerOptions {
bool unregister{false};
bool dry{false};
bool refresh_shell{true};
/** Empty = use path of running media-img.exe */
/** Empty = use path of running pm-image.exe */
std::string media_bin;
/** Empty = <exe_dir>\\scripts\\explorer-resize.ps1 */
std::string explorer_script;

View File

@ -1,156 +1,156 @@
#include "win/ui_singleton.hpp"
#include <string>
#include <vector>
#pragma comment(lib, "User32.lib")
namespace media::win {
namespace {
HWND g_merge_input_edit{};
HWND g_bridge_hwnd{};
HANDLE g_mutex{};
static const wchar_t kBridgeClass[] = L"MediaImgUiBridge";
static const wchar_t kBridgeTitle[] = L"media-img";
std::wstring utf8_to_wide(const std::string &s) {
if (s.empty())
return L"";
int n = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), nullptr, 0);
if (n <= 0)
return L"";
std::wstring w(static_cast<size_t>(n), L'\0');
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), w.data(), n);
return w;
}
LRESULT CALLBACK bridge_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
(void)wp;
if (msg == WM_COPYDATA) {
auto *cds = reinterpret_cast<COPYDATASTRUCT *>(lp);
if (!cds || cds->dwData != 1 || !cds->lpData || cds->cbData == 0)
return FALSE;
const char *bytes = static_cast<const char *>(cds->lpData);
size_t len = cds->cbData;
while (len > 0 && bytes[len - 1] == '\0')
--len;
if (len == 0)
return TRUE;
std::string payload(bytes, bytes + len);
if (g_merge_input_edit && IsWindow(g_merge_input_edit)) {
const int n = GetWindowTextLengthW(g_merge_input_edit);
std::wstring cur;
if (n > 0) {
cur.assign(static_cast<size_t>(n) + 1, L'\0');
GetWindowTextW(g_merge_input_edit, cur.data(), n + 1);
cur.resize(static_cast<size_t>(n));
}
std::wstring add = utf8_to_wide(payload);
if (!cur.empty() && !add.empty())
cur += L';';
cur += add;
SetWindowTextW(g_merge_input_edit, cur.c_str());
}
return TRUE;
}
return DefWindowProcW(hwnd, msg, wp, lp);
}
bool register_bridge_class_once() {
static bool tried = false;
if (tried)
return true;
tried = true;
WNDCLASSEXW wc{};
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = bridge_wnd_proc;
wc.hInstance = GetModuleHandleW(nullptr);
wc.lpszClassName = kBridgeClass;
if (!RegisterClassExW(&wc)) {
if (GetLastError() != ERROR_CLASS_ALREADY_EXISTS)
return false;
}
return true;
}
} // namespace
bool try_acquire_ui_singleton_mutex() {
g_mutex = CreateMutexW(nullptr, TRUE, L"Local\\MediaImgResizeUi_v1");
if (!g_mutex)
return false;
if (GetLastError() == ERROR_ALREADY_EXISTS) {
CloseHandle(g_mutex);
g_mutex = nullptr;
return false;
}
return true;
}
void release_ui_singleton_mutex() {
if (!g_mutex)
return;
ReleaseMutex(g_mutex);
CloseHandle(g_mutex);
g_mutex = nullptr;
}
bool create_ui_singleton_bridge() {
if (g_bridge_hwnd)
return true;
if (!register_bridge_class_once())
return false;
#ifndef HWND_MESSAGE
#define HWND_MESSAGE ((HWND)(-3))
#endif
g_bridge_hwnd =
CreateWindowExW(0, kBridgeClass, kBridgeTitle, 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, GetModuleHandleW(nullptr),
nullptr);
return g_bridge_hwnd != nullptr;
}
void destroy_ui_singleton_bridge() {
if (g_bridge_hwnd) {
DestroyWindow(g_bridge_hwnd);
g_bridge_hwnd = nullptr;
}
}
void set_ui_merge_input_edit(HWND h) {
g_merge_input_edit = h;
}
void clear_ui_merge_input_edit() {
g_merge_input_edit = nullptr;
}
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths) {
HWND bridge = nullptr;
for (int i = 0; i < 80 && !bridge; ++i) {
bridge = FindWindowW(kBridgeClass, kBridgeTitle);
if (!bridge)
Sleep(25);
}
if (!bridge)
return false;
std::vector<char> buf;
buf.reserve(utf8_paths.size() + 1);
buf.assign(utf8_paths.begin(), utf8_paths.end());
buf.push_back('\0');
COPYDATASTRUCT cds{};
cds.dwData = 1;
cds.cbData = static_cast<DWORD>(buf.size());
cds.lpData = buf.data();
DWORD_PTR result = 0;
const LRESULT r =
SendMessageTimeoutW(bridge, WM_COPYDATA, 0, reinterpret_cast<LPARAM>(&cds), SMTO_ABORTIFHUNG, 15000, &result);
return r != 0;
}
} // namespace media::win
#include "win/ui_singleton.hpp"
#include <string>
#include <vector>
#pragma comment(lib, "User32.lib")
namespace media::win {
namespace {
HWND g_merge_input_edit{};
HWND g_bridge_hwnd{};
HANDLE g_mutex{};
static const wchar_t kBridgeClass[] = L"MediaImgUiBridge";
static const wchar_t kBridgeTitle[] = L"media-img";
std::wstring utf8_to_wide(const std::string &s) {
if (s.empty())
return L"";
int n = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), nullptr, 0);
if (n <= 0)
return L"";
std::wstring w(static_cast<size_t>(n), L'\0');
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), w.data(), n);
return w;
}
LRESULT CALLBACK bridge_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
(void)wp;
if (msg == WM_COPYDATA) {
auto *cds = reinterpret_cast<COPYDATASTRUCT *>(lp);
if (!cds || cds->dwData != 1 || !cds->lpData || cds->cbData == 0)
return FALSE;
const char *bytes = static_cast<const char *>(cds->lpData);
size_t len = cds->cbData;
while (len > 0 && bytes[len - 1] == '\0')
--len;
if (len == 0)
return TRUE;
std::string payload(bytes, bytes + len);
if (g_merge_input_edit && IsWindow(g_merge_input_edit)) {
const int n = GetWindowTextLengthW(g_merge_input_edit);
std::wstring cur;
if (n > 0) {
cur.assign(static_cast<size_t>(n) + 1, L'\0');
GetWindowTextW(g_merge_input_edit, cur.data(), n + 1);
cur.resize(static_cast<size_t>(n));
}
std::wstring add = utf8_to_wide(payload);
if (!cur.empty() && !add.empty())
cur += L';';
cur += add;
SetWindowTextW(g_merge_input_edit, cur.c_str());
}
return TRUE;
}
return DefWindowProcW(hwnd, msg, wp, lp);
}
bool register_bridge_class_once() {
static bool tried = false;
if (tried)
return true;
tried = true;
WNDCLASSEXW wc{};
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = bridge_wnd_proc;
wc.hInstance = GetModuleHandleW(nullptr);
wc.lpszClassName = kBridgeClass;
if (!RegisterClassExW(&wc)) {
if (GetLastError() != ERROR_CLASS_ALREADY_EXISTS)
return false;
}
return true;
}
} // namespace
bool try_acquire_ui_singleton_mutex() {
g_mutex = CreateMutexW(nullptr, TRUE, L"Local\\MediaImgResizeUi_v1");
if (!g_mutex)
return false;
if (GetLastError() == ERROR_ALREADY_EXISTS) {
CloseHandle(g_mutex);
g_mutex = nullptr;
return false;
}
return true;
}
void release_ui_singleton_mutex() {
if (!g_mutex)
return;
ReleaseMutex(g_mutex);
CloseHandle(g_mutex);
g_mutex = nullptr;
}
bool create_ui_singleton_bridge() {
if (g_bridge_hwnd)
return true;
if (!register_bridge_class_once())
return false;
#ifndef HWND_MESSAGE
#define HWND_MESSAGE ((HWND)(-3))
#endif
g_bridge_hwnd =
CreateWindowExW(0, kBridgeClass, kBridgeTitle, 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, GetModuleHandleW(nullptr),
nullptr);
return g_bridge_hwnd != nullptr;
}
void destroy_ui_singleton_bridge() {
if (g_bridge_hwnd) {
DestroyWindow(g_bridge_hwnd);
g_bridge_hwnd = nullptr;
}
}
void set_ui_merge_input_edit(HWND h) {
g_merge_input_edit = h;
}
void clear_ui_merge_input_edit() {
g_merge_input_edit = nullptr;
}
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths) {
HWND bridge = nullptr;
for (int i = 0; i < 80 && !bridge; ++i) {
bridge = FindWindowW(kBridgeClass, kBridgeTitle);
if (!bridge)
Sleep(25);
}
if (!bridge)
return false;
std::vector<char> buf;
buf.reserve(utf8_paths.size() + 1);
buf.assign(utf8_paths.begin(), utf8_paths.end());
buf.push_back('\0');
COPYDATASTRUCT cds{};
cds.dwData = 1;
cds.cbData = static_cast<DWORD>(buf.size());
cds.lpData = buf.data();
DWORD_PTR result = 0;
const LRESULT r =
SendMessageTimeoutW(bridge, WM_COPYDATA, 0, reinterpret_cast<LPARAM>(&cds), SMTO_ABORTIFHUNG, 15000, &result);
return r != 0;
}
} // namespace media::win

View File

@ -1,32 +1,32 @@
#pragma once
#include <string>
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
namespace media::win {
/** Create named mutex; returns true if this process is the primary UI instance. */
bool try_acquire_ui_singleton_mutex();
/** Release mutex from try_acquire_ui_singleton_mutex (primary only). */
void release_ui_singleton_mutex();
/** Message-only window that receives WM_COPYDATA from secondary instances. */
bool create_ui_singleton_bridge();
void destroy_ui_singleton_bridge();
/** Target edit control for merging forwarded paths (resize dialog input row). */
void set_ui_merge_input_edit(HWND h);
void clear_ui_merge_input_edit();
/**
* Find the bridge window and send UTF-8 paths (semicolon-separated) to the primary instance.
* Retries briefly to avoid races right after mutex creation.
*/
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths);
} // namespace media::win
#pragma once
#include <string>
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
namespace media::win {
/** Create named mutex; returns true if this process is the primary UI instance. */
bool try_acquire_ui_singleton_mutex();
/** Release mutex from try_acquire_ui_singleton_mutex (primary only). */
void release_ui_singleton_mutex();
/** Message-only window that receives WM_COPYDATA from secondary instances. */
bool create_ui_singleton_bridge();
void destroy_ui_singleton_bridge();
/** Target edit control for merging forwarded paths (resize dialog input row). */
void set_ui_merge_input_edit(HWND h);
void clear_ui_merge_input_edit();
/**
* Find the bridge window and send UTF-8 paths (semicolon-separated) to the primary instance.
* Retries briefly to avoid races right after mutex creation.
*/
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths);
} // namespace media::win

View File

@ -1,6 +1,5 @@
import * as CLI from 'yargs';
export declare const defaultOptions: (yargs: CLI.Argv) => any;
export declare const command = "register-explorer";
export declare const desc = "Register pm-media commands in Windows Explorer context menu for image files";
export declare const desc = "Forward to media-img.exe register-explorer (Windows; implementation is in C++)";
export declare const builder: (yargs: CLI.Argv) => any;
export declare function handler(argv: CLI.Arguments): Promise<void>;
export declare function handler(): Promise<void>;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,83 @@
# Explorer context menu: convert images to JPEG (re-encode; no resize) via media-img resize --format jpg
# Multi-select: one invocation with all paths (Player + %*).
# Keep extensions in sync with register_explorer.cpp (canonical list; matching is case-insensitive).
param(
[Parameter(Mandatory)][string]$MediaImg,
[Parameter(Mandatory, ValueFromRemainingArguments = $true)][string[]]$InputPaths
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$InputPaths = @($InputPaths | Where-Object { $_ -and $_.Trim() -ne '' })
if ($InputPaths.Length -eq 0) {
exit 1
}
$imageExtLower = @(
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.tiff', '.tif', '.jpe', '.jfif',
'.avif', '.arw'
)
function Test-ImageExt([string]$ext) {
$e = $ext.ToLowerInvariant()
return $script:imageExtLower -contains $e
}
function Invoke-MediaImg([string[]]$ArgList) {
$outF = [System.IO.Path]::GetTempFileName()
$errF = [System.IO.Path]::GetTempFileName()
try {
$p = Start-Process -FilePath $MediaImg -ArgumentList $ArgList -Wait -PassThru `
-WindowStyle Hidden -RedirectStandardOutput $outF -RedirectStandardError $errF
if ($p.ExitCode -ne 0) {
$e = if (Test-Path -LiteralPath $errF) { Get-Content -Raw -LiteralPath $errF } else { '' }
throw "media-img failed (exit $($p.ExitCode)): $e"
}
}
finally {
Remove-Item -LiteralPath $outF, $errF -ErrorAction SilentlyContinue
}
}
function Convert-OneFile([string]$File) {
$dst = '${SRC_DIR}/${SRC_NAME}_converted.jpg'
Invoke-MediaImg @(
'resize', '--src', $File, '--dst', $dst,
'--format', 'jpg', '-q', '88',
'--fit', 'inside', '--no-cache'
)
}
function Process-OnePath([string]$Path) {
if (-not (Test-Path -LiteralPath $Path)) {
exit 1
}
$item = Get-Item -LiteralPath $Path
if ($item.PSIsContainer) {
$files = Get-ChildItem -LiteralPath $Path -Recurse -File -ErrorAction Stop |
Where-Object { Test-ImageExt $_.Extension }
if (-not $files) {
exit 0
}
foreach ($f in $files) {
Convert-OneFile $f.FullName
}
}
else {
if (-not (Test-ImageExt $item.Extension)) {
exit 0
}
Convert-OneFile $item.FullName
}
}
if ($InputPaths.Length -gt 1) {
foreach ($p in $InputPaths) {
Process-OnePath $p
}
exit 0
}
Process-OnePath $InputPaths[0]
exit 0

View File

@ -0,0 +1,98 @@
# Explorer context-menu helper: resize images (single file, multiple files, or folder tree) via media-img.exe
# Multi-select: Explorer uses MultiSelectModel Player + %* — this script receives all paths in one invocation.
# Uses Start-Process -WindowStyle Hidden so no console window (VIPS stderr is redirected to a temp file).
param(
[Parameter(Mandatory)][string]$MediaImg,
[Parameter(Mandatory)][int]$MaxWidth,
[Parameter(Mandatory)][ValidateSet('InPlace', 'Copy')][string]$Mode,
[Parameter(Mandatory, ValueFromRemainingArguments = $true)][string[]]$InputPaths
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$InputPaths = @($InputPaths | Where-Object { $_ -and $_.Trim() -ne '' })
if ($InputPaths.Length -eq 0) {
exit 1
}
# Canonical list — keep in sync with register_explorer.cpp (k_canonical_ext + case-insensitive match)
$imageExt = @(
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.tiff', '.tif', '.jpe', '.jfif',
'.avif', '.arw'
)
function Test-ImageExt([string]$ext) {
$e = $ext.ToLowerInvariant()
return $script:imageExt -contains $e
}
function Invoke-MediaImgResize([string[]]$ArgList) {
$outF = [System.IO.Path]::GetTempFileName()
$errF = [System.IO.Path]::GetTempFileName()
try {
$p = Start-Process -FilePath $MediaImg -ArgumentList $ArgList -Wait -PassThru `
-WindowStyle Hidden -RedirectStandardOutput $outF -RedirectStandardError $errF
if ($p.ExitCode -ne 0) {
$e = if (Test-Path -LiteralPath $errF) { Get-Content -Raw -LiteralPath $errF } else { '' }
throw "media-img failed (exit $($p.ExitCode)): $e"
}
}
finally {
Remove-Item -LiteralPath $outF, $errF -ErrorAction SilentlyContinue
}
}
function Resize-SingleFile([string]$File) {
$w = $MaxWidth
if ($Mode -eq 'Copy') {
$dst = '${SRC_DIR}/${SRC_NAME}_' + $w + '${SRC_FILE_EXT}'
Invoke-MediaImgResize @('resize', '--src', $File, '--dst', $dst, '--max-width', "$w", '--fit', 'inside', '--no-cache')
}
else {
$ext = [System.IO.Path]::GetExtension($File)
$tmp = Join-Path $env:TEMP ('media-img-' + [Guid]::NewGuid().ToString('n') + $ext)
try {
Invoke-MediaImgResize @('resize', '--src', $File, '--dst', $tmp, '--max-width', "$w", '--fit', 'inside', '--no-cache')
Move-Item -LiteralPath $tmp -Destination $File -Force
}
finally {
if (Test-Path -LiteralPath $tmp) {
Remove-Item -LiteralPath $tmp -Force -ErrorAction SilentlyContinue
}
}
}
}
function Process-OnePath([string]$Path) {
if (-not (Test-Path -LiteralPath $Path)) {
exit 1
}
$item = Get-Item -LiteralPath $Path
if ($item.PSIsContainer) {
$files = Get-ChildItem -LiteralPath $Path -Recurse -File -ErrorAction Stop |
Where-Object { Test-ImageExt $_.Extension }
if (-not $files) {
exit 0
}
foreach ($f in $files) {
Resize-SingleFile $f.FullName
}
}
else {
if (-not (Test-ImageExt $item.Extension)) {
exit 0
}
Resize-SingleFile $item.FullName
}
}
if ($InputPaths.Length -gt 1) {
foreach ($p in $InputPaths) {
Process-OnePath $p
}
exit 0
}
Process-OnePath $InputPaths[0]
exit 0

View File

@ -0,0 +1,31 @@
# Launch media-img resize --ui once for Explorer multi-select (Player model + %*).
# Semicolon-joins paths ( ';' is invalid in Windows filenames ). Uses CreateNoWindow — no console flash.
param(
[Parameter(Mandatory)][string]$MediaImg,
[Parameter(ValueFromRemainingArguments = $true)][string[]]$Paths
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
if ($null -eq $Paths -or $Paths.Length -eq 0) {
exit 1
}
$clean = @($Paths | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' })
if ($clean.Length -eq 0) {
exit 1
}
$joined = $clean -join ';'
$p = New-Object System.Diagnostics.Process
$p.StartInfo.FileName = $MediaImg
$p.StartInfo.Arguments = "resize --ui --src `"$joined`""
$p.StartInfo.UseShellExecute = $false
$p.StartInfo.CreateNoWindow = $true
$p.StartInfo.RedirectStandardOutput = $false
$p.StartInfo.RedirectStandardError = $false
[void]$p.Start()
$p.WaitForExit()
exit $p.ExitCode

View File

@ -1,327 +1,35 @@
import * as CLI from 'yargs'
import { logger } from '../index.js'
import { spawnSync } from 'child_process'
import { existsSync } from 'fs'
import { dirname, join } from 'path'
import { fileURLToPath } from 'url'
import { cli } from '../cli.js'
import { defaults } from '../_cli.js'
import regedit, { RegistryItemPutCollection, REG_SZ_Value } from 'regedit'
import { exec } from 'child_process'
import { promisify } from 'util'
const execAsync = promisify(exec)
export const defaultOptions = (yargs: CLI.Argv) => {
return yargs.option('group', {
describe: 'Group name for the context menu items',
type: 'string',
default: 'PM-Media'
}).option('unregister', {
default: false,
describe: 'Remove the shell extensions from Explorer',
type: 'boolean'
}).option('dry', {
default: false,
describe: 'Show what would be registered without actually doing it',
type: 'boolean'
}).option('refresh-shell', {
default: true,
describe: 'Refresh Windows Shell to apply changes immediately',
type: 'boolean'
}).option('logLevel', {
describe: 'Log level : warn, info, debug, error',
type: 'string',
default: 'info'
})
function findMediaImg(): string {
if (process.env.MEDIA_IMG && process.env.MEDIA_IMG.length > 0)
return process.env.MEDIA_IMG
const pkg = join(dirname(fileURLToPath(import.meta.url)), '..', '..')
const p = join(pkg, 'cpp', 'dist', 'media-img.exe')
if (existsSync(p))
return p
return 'media-img.exe'
}
export const command = 'register-explorer'
export const desc = 'Register pm-media commands in Windows Explorer context menu for image files'
export const builder = defaultOptions
export const desc = 'Forward to media-img.exe register-explorer (Windows; implementation is in C++)'
export const builder = (yargs: CLI.Argv) => yargs.strict(false)
// Image file extensions to register with
//const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp', '.svg']
const IMAGE_EXTENSIONS = ['.jpg']
type RegType = 'REG_SZ' | 'REG_DWORD' | 'REG_DEFAULT'
interface ExplorerRegistryEntry {
keyPath: string
valueName: string
value: string
type: RegType
}
// Command mappings for Explorer context menu
const EXPLORER_COMMANDS = [
{
name: 'Convert to JPG',
command: 'pm-media',
args: 'convert --logLevel=info --src="%1" --dst="%~dpn1_converted.jpg"'
},
{
name: 'Resize Image',
command: 'pm-media',
args: 'resize --logLevel=info --src="%1" --dst="%~dpn1_resized%~x1"'
},
{
name: 'Add Watermark',
command: 'pm-media',
args: 'watermark --logLevel=info --src="%1" --watermark="${POLYMECH-ROOT}/nordin-ex/branding/logos/polymech-saw-ex.svg" --dst="${SRC_DIR}/${SRC_NAME}_watermarked.${SRC_EXT}"'
},
{
name: 'Remove Background',
command: 'pm-media',
args: 'background:remove --logLevel=info --src="%1" --dst="%~dpn1_bg_removed%~x1"'
}
]
/**
* Generate registry entries for Windows Explorer shell extensions
*/
function generateExplorerRegistryEntries(groupName: string): ExplorerRegistryEntry[] {
const entries: ExplorerRegistryEntry[] = []
for (const ext of IMAGE_EXTENSIONS) {
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
// Create the main group entry with MUIVerb and subCommands
entries.push({
keyPath: `${extKey}\\shell\\${groupName}`,
valueName: 'MUIVerb',
value: groupName,
type: 'REG_SZ'
})
entries.push({
keyPath: `${extKey}\\shell\\${groupName}`,
valueName: 'subCommands',
value: '',
type: 'REG_SZ'
})
// For each command, create the shell extension entries
for (let i = 0; i < EXPLORER_COMMANDS.length; i++) {
const cmd = EXPLORER_COMMANDS[i]
const cmdId = cmd.name.replace(/\s+/g, '').toLowerCase()
const cmdKey = `${extKey}\\shell\\${groupName}\\shell\\${cmdId}`
// Command display name using MUIVerb
entries.push({
keyPath: cmdKey,
valueName: 'MUIVerb',
value: cmd.name,
type: 'REG_SZ'
})
// Direct command execution - pm-media is a global npm command
const commandLine = `${cmd.command} ${cmd.args}`
entries.push({
keyPath: `${cmdKey}\\command`,
valueName: '',
value: commandLine,
type: 'REG_DEFAULT'
})
logger.debug(`Will create command entry: ${cmdKey}\\command = ${commandLine}`)
logger.debug(` Command parts: cmd="${cmd.command}", args="${cmd.args}"`)
}
}
return entries
}
/**
* Write registry entries for Explorer shell extensions
*/
async function writeExplorerRegistryEntries(entries: ExplorerRegistryEntry[]): Promise<void> {
return new Promise((resolve, reject) => {
// Try a different approach - batch all values for each key together
const keyGroups: { [keyPath: string]: ExplorerRegistryEntry[] } = {}
// Group entries by keyPath
for (const entry of entries) {
if (!keyGroups[entry.keyPath]) {
keyGroups[entry.keyPath] = []
}
keyGroups[entry.keyPath].push(entry)
}
const allKeys = Object.keys(keyGroups)
// Create all keys first
regedit.createKey(allKeys, (err) => {
if (err) {
logger.error('Failed to create registry keys:', err)
reject(err)
return
}
logger.debug(`✓ Created ${allKeys.length} registry keys`)
// Wait for keys to be created
setTimeout(() => {
let completed = 0
let hasError = false
// Process each key group
for (const [keyPath, keyEntries] of Object.entries(keyGroups)) {
const valuesToWrite: RegistryItemPutCollection = {
[keyPath]: {}
}
// Add all values for this key
for (const entry of keyEntries) {
const isDefault = entry.type === 'REG_DEFAULT'
const valueName = isDefault ? '___default___' : entry.valueName || '' // name is ignored for REG_DEFAULT
valuesToWrite[keyPath][valueName] = {
value: entry.value,
// IMPORTANT: use REG_DEFAULT for unnamed default
type: (isDefault ? 'REG_DEFAULT' : entry.type) as any
}
}
// Write all values for this key at once
regedit.putValue(valuesToWrite, (err) => {
completed++
if (err) {
hasError = true
logger.error(`Failed to set values for ${keyPath}:`, err)
} else {
logger.debug(`✓ Set ${keyEntries.length} values for key: ${keyPath}`)
for (const entry of keyEntries) {
const displayName = entry.type === 'REG_DEFAULT' ? '(Default)' : entry.valueName
logger.debug(` - ${displayName} = ${entry.value}`)
}
}
if (completed === allKeys.length) {
if (hasError) {
reject(new Error('Some registry values failed to set'))
} else {
resolve()
}
}
})
}
}, 500)
})
})
}
/**
* Remove registry entries for Explorer shell extensions
*/
async function removeExplorerRegistryEntries(groupName: string): Promise<void> {
const promisified = regedit.promisified
for (const ext of IMAGE_EXTENSIONS) {
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
const groupKey = `${extKey}\\shell\\${groupName}`
try {
// Check if the key exists
const result = await promisified.list([groupKey])
if (result[groupKey].exists) {
await promisified.deleteKey([groupKey])
logger.info(`✓ Removed shell extension for ${ext}`)
}
} catch (error) {
logger.debug(`Could not remove key ${groupKey}:`, error)
}
}
}
/**
* Refresh Windows Shell to apply registry changes without restarting Explorer
*/
async function refreshShell(): Promise<void> {
try {
logger.info('Refreshing Windows Shell to apply changes...')
// Use SHChangeNotify to refresh the shell
// This is much safer than killing explorer.exe
await execAsync('powershell -Command "Add-Type -TypeDefinition \'using System; using System.Runtime.InteropServices; public class Shell32 { [DllImport(\\\"shell32.dll\\\")] public static extern void SHChangeNotify(int wEventId, int uFlags, IntPtr dwItem1, IntPtr dwItem2); }\'; [Shell32]::SHChangeNotify(0x8000000, 0, [IntPtr]::Zero, [IntPtr]::Zero)"')
logger.info('✓ Windows Shell refreshed successfully')
logger.info('Context menu changes should now be visible')
} catch (error) {
logger.warn('Failed to refresh shell automatically:', error)
logger.warn('You may need to log out and log back in, or restart Windows to see the context menu changes')
}
}
export async function handler(argv: CLI.Arguments) {
export async function handler() {
defaults()
logger.settings.minLevel = argv.logLevel as any
const options = {
group: argv.group as string,
unregister: argv.unregister as boolean,
dry: argv.dry as boolean,
refreshShell: argv['refresh-shell'] as boolean
}
if (process.platform !== 'win32') {
logger.error('Windows Explorer shell extensions are only supported on Windows')
process.exit(1)
}
try {
if (options.unregister) {
logger.info(`Removing Explorer shell extensions for group: ${options.group}`)
if (options.dry) {
logger.info('\n=== DRY RUN - Extensions that would be removed ===')
for (const ext of IMAGE_EXTENSIONS) {
logger.info(` ${ext} files: Remove "${options.group}" context menu`)
}
return
}
await removeExplorerRegistryEntries(options.group)
logger.info(`✓ Successfully removed Explorer shell extensions for: ${options.group}`)
if (options.refreshShell) {
await refreshShell()
}
} else {
logger.info(`Registering Explorer shell extensions for group: ${options.group}`)
logger.info(`Target file types: ${IMAGE_EXTENSIONS.join(', ')}`)
const entries = generateExplorerRegistryEntries(options.group)
if (options.dry) {
logger.info('\n=== DRY RUN - Extensions that would be registered ===')
for (const ext of IMAGE_EXTENSIONS) {
logger.info(`\n${ext} files:`)
for (const cmd of EXPLORER_COMMANDS) {
logger.info(`${cmd.name}: ${cmd.command} ${cmd.args}`)
}
}
logger.info(`\nTotal registry entries: ${entries.length}`)
return
}
await writeExplorerRegistryEntries(entries)
logger.info(`\n=== Registration Complete ===`)
logger.info(`Registered ${EXPLORER_COMMANDS.length} commands for ${IMAGE_EXTENSIONS.length} file types`)
logger.info(`Total registry entries created: ${entries.length}`)
logger.info('\nExplorer context menu entries have been registered.')
if (options.refreshShell) {
await refreshShell()
} else {
logger.info('You may need to log out and log back in to see the changes.')
}
}
} catch (error) {
logger.error('Failed to register/unregister Explorer shell extensions:', error)
console.error('register-explorer is only supported on Windows.')
process.exit(1)
}
const exe = findMediaImg()
const args = process.argv.slice(2)
const r = spawnSync(exe, args, { stdio: 'inherit', shell: false, windowsHide: true })
process.exit(r.status === null ? 1 : r.status)
}
cli.command(command, desc, builder, handler)