[xiph-commits] r18325 - branches/spectrum-gtk3
xiphmont at svn.xiph.org
xiphmont at svn.xiph.org
Fri May 25 10:35:00 PDT 2012
Author: xiphmont
Date: 2012-05-25 10:35:00 -0700 (Fri, 25 May 2012)
New Revision: 18325
Modified:
branches/spectrum-gtk3/Makefile
branches/spectrum-gtk3/fisharray.h
branches/spectrum-gtk3/spec_panel.c
branches/spectrum-gtk3/spec_plot.c
branches/spectrum-gtk3/spec_plot.h
branches/spectrum-gtk3/spec_process.c
branches/spectrum-gtk3/version.h
Log:
In-progress gtk3 migration initial commit to branch
Modified: branches/spectrum-gtk3/Makefile
===================================================================
--- branches/spectrum-gtk3/Makefile 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/Makefile 2012-05-25 17:35:00 UTC (rev 18325)
@@ -30,7 +30,7 @@
WAVEFORM_OBJ = waveform.o wave_process.o wave_panel.o wave_plot.o io.o
OBJ = $(SPECTRUM_OBJ) $(WAVEFORM_OBJ)
-GCF = -DETCDIR=\\\"$(ETCDIR)\\\" `pkg-config --cflags gtk+-2.0` -DGTK_DISABLE_SINGLE_INCLUDES
+GCF = `pkg-config --cflags gtk+-3.0` -DETCDIR=$(ETCDIR) -DGTK_DISABLE_SINGLE_INCLUDES -DGSEAL_ENABLE #-DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE
CFLAGS := ${CFLAGS} $(GCF) $(ADD_DEF)
@@ -41,7 +41,7 @@
$(MAKE) target CFLAGS="${CFLAGS} -g -Wall -W -Wno-unused-parameter -D__NO_MATH_INLINES"
profile:
- $(MAKE) target CFLAGS="${CFLAGS} -pg -g -O3 -ffast-math" LIBS="-lgprof-helper "
+ $(MAKE) target CFLAGS="${CFLAGS} -pg -g -O3 -ffast-math"
clean:
rm -f $(OBJ) *.d *.d.* gmon.out spectrum
@@ -62,13 +62,13 @@
spectrum: $(SPECTRUM_OBJ) spectrum-wisdomrc
./touch-version
- $(LD) $(SPECTRUM_OBJ) -o spectrum $(LIBS) $(CFLAGS) `pkg-config --libs gtk+-2.0` -lpthread -lfftw3f -lm
+ $(LD) $(SPECTRUM_OBJ) -o spectrum $(LIBS) $(CFLAGS) `pkg-config --libs gtk+-3.0` -lpthread -lfftw3f -lm
waveform: $(WAVEFORM_OBJ)
./touch-version
- $(LD) $(WAVEFORM_OBJ) -o waveform $(LIBS) $(CFLAGS) `pkg-config --libs gtk+-2.0` -lpthread -lm
+ $(LD) $(WAVEFORM_OBJ) -o waveform $(LIBS) $(CFLAGS) `pkg-config --libs gtk+-3.0` -lpthread -lm
-target: spectrum waveform
+target: spectrum # waveform
install: target
$(INSTALL) -d -m 0755 $(BINDIR)
Modified: branches/spectrum-gtk3/fisharray.h
===================================================================
--- branches/spectrum-gtk3/fisharray.h 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/fisharray.h 2012-05-25 17:35:00 UTC (rev 18325)
@@ -1,276 +1,1160 @@
-/* XPM */
-static char * fisharray_xpm[] = {
-"532 25 248 2",
-" c None",
-". c #546392",
-"+ c #3B417D",
-"@ c #002174",
-"# c #65658D",
-"$ c #001A6E",
-"% c #002F7E",
-"& c #5E6990",
-"* c #47497F",
-"= c #002578",
-"- c #002878",
-"; c #003A88",
-"> c #005794",
-", c #006BA2",
-"' c #00629A",
-") c #005298",
-"! c #00508E",
-"~ c #005D9E",
-"{ c #00458C",
-"] c #004A88",
-"^ c #00348A",
-"/ c #485388",
-"( c #0B7FB5",
-"_ c #42E6E8",
-": c #58F2DA",
-"< c #69F9DC",
-"[ c #5DEFE3",
-"} c #35D4E3",
-"| c #0063A8",
-"1 c #2EC1CE",
-"2 c #67EFD7",
-"3 c #58E4DF",
-"4 c #21A2B9",
-"5 c #004E9E",
-"6 c #4BD9C3",
-"7 c #53F3D3",
-"8 c #41D7CB",
-"9 c #3ECCC7",
-"0 c #00709E",
-"a c #5CEED1",
-"b c #59F9D9",
-"c c #14B1C8",
-"d c #39C2C7",
-"e c #015F8F",
-"f c #11B4C3",
-"g c #8D898D",
-"h c #003E78",
-"i c #54FEE4",
-"j c #60FEDF",
-"k c #68FED9",
-"l c #63FBE3",
-"m c #006EB4",
-"n c #00146A",
-"o c #17497D",
-"p c #297383",
-"q c #3EA898",
-"r c #67EFC4",
-"s c #004592",
-"t c #002060",
-"u c #365C64",
-"v c #24495A",
-"w c #94D989",
-"x c #78F2BA",
-"y c #29CBC5",
-"z c #9ED2B4",
-"A c #8ADE92",
-"B c #6FF9D3",
-"C c #00246E",
-"D c #24C6C8",
-"E c #0790AD",
-"F c #00387E",
-"G c #F0DEAC",
-"H c #EFE1C5",
-"I c #D4AE54",
-"J c #EF9117",
-"K c #F3A715",
-"L c #F3AB11",
-"M c #B9C050",
-"N c #4AFCEA",
-"O c #38F2E2",
-"P c #0589B5",
-"Q c #575C8B",
-"R c #EBD29B",
-"S c #DEC89E",
-"T c #F5ECD3",
-"U c #E8B230",
-"V c #F29F1C",
-"W c #F3A817",
-"X c #C1BD4D",
-"Y c #4AFCF2",
-"Z c #A5A083",
-"` c #F8F4E6",
-" . c #DEAB4A",
-".. c #D4B24A",
-"+. c #547792",
-"@. c #F8F7EE",
-"#. c #F5F9F5",
-"$. c #32B9BE",
-"%. c #D2BE38",
-"&. c #E5B81B",
-"*. c #DAB534",
-"=. c #CDB477",
-"-. c #A3D177",
-";. c #CFB96D",
-">. c #EAEBE7",
-",. c #D0D4D0",
-"'. c #4FE3C9",
-"). c #DBDDD9",
-"!. c #E6B84A",
-"~. c #E0A934",
-"{. c #F4B520",
-"]. c #F2A020",
-"^. c #F09520",
-"/. c #79E1A0",
-"(. c #16C1DA",
-"_. c #73BEC3",
-":. c #EFDBB5",
-"<. c #EBCE8F",
-"[. c #F3B51F",
-"}. c #F3A61F",
-"|. c #B0C76B",
-"1. c #C7C7C1",
-"2. c #C6C6B6",
-"3. c #C9C43D",
-"4. c #79FDD0",
-"5. c #0C82A0",
-"6. c #819295",
-"7. c #4F5620",
-"8. c #8CC0C2",
-"9. c #9BC3C5",
-"0. c #10A0C4",
-"a. c #55F7F5",
-"b. c #F19B1F",
-"c. c #F4AC22",
-"d. c #EDC371",
-"e. c #878397",
-"f. c #33D3CD",
-"g. c #35D7D9",
-"h. c #45EFD9",
-"i. c #CBAB5F",
-"j. c #E9C453",
-"k. c #ECD070",
-"l. c #E8C266",
-"m. c #000000",
-"n. c #E9C881",
-"o. c #F4C73C",
-"p. c #F19B21",
-"q. c #5DFDEC",
-"r. c #44FCE4",
-"s. c #D7BE89",
-"t. c #F1C141",
-"u. c #747773",
-"v. c #475253",
-"w. c #E6B738",
-"x. c #F0CC3C",
-"y. c #928D84",
-"z. c #A49F50",
-"A. c #858363",
-"B. c #686C40",
-"C. c #F0B70C",
-"D. c #8D8A49",
-"E. c #32D6C9",
-"F. c #03A0B3",
-"G. c #F1CB47",
-"H. c #94D474",
-"I. c #F3A317",
-"J. c #EBC233",
-"K. c #917B2D",
-"L. c #85A2B7",
-"M. c #D79B0B",
-"N. c #F2AE0C",
-"O. c #CCC4AA",
-"P. c #B8CAA4",
-"Q. c #F2BE30",
-"R. c #F2C62E",
-"S. c #6DDDA7",
-"T. c #0CB7C2",
-"U. c #1CD0C9",
-"V. c #AAC587",
-"W. c #ADC064",
-"X. c #DDCA4F",
-"Y. c #88EEA3",
-"Z. c #C9B141",
-"`. c #63E5AC",
-" + c #193649",
-".+ c #064C74",
-"++ c #86915D",
-"@+ c #5BB579",
-"#+ c #F5CA45",
-"$+ c #D9C019",
-"%+ c #C0CB63",
-"&+ c #F2CC32",
-"*+ c #7FF3B0",
-"=+ c #717495",
-"-+ c #AFD175",
-";+ c #F2BD1A",
-">+ c #7FC77D",
-",+ c #EED382",
-"'+ c #6DC387",
-")+ c #8BCA64",
-"!+ c #88D379",
-"~+ c #7ADE92",
-"{+ c #E3CA3F",
-"]+ c #DFB715",
-"^+ c #000050",
-"/+ c #8ECA74",
-"(+ c #1888A0",
-"_+ c #64D8AE",
-":+ c #BCC73D",
-"<+ c #D1CD53",
-"[+ c #9DEA8E",
-"}+ c #16BCBE",
-"|+ c #002828",
-"1+ c #E2C53C",
-"2+ c #B8D270",
-"3+ c #8EE892",
-"4+ c #6C7EA4",
-"5+ c #001416",
-"6+ c #4CBC93",
-"7+ c #AAC575",
-"8+ c #A8B64A",
-"9+ c #A8E785",
-"0+ c #002D78",
-"a+ c #57D3C0",
-"b+ c #EF901F",
-"c+ c #45BFA1",
-"d+ c #34B2AA",
-"e+ c #73924A",
-"f+ c #779C4C",
-"g+ c #7DBDC5",
-"h+ c #F4C024",
-"i+ c #639D68",
-"j+ c #3C5244",
-"k+ c #538F71",
-"l+ c #BCB42E",
-"m+ c #577D5C",
-"n+ c #D5900B",
-"o+ c #B49972",
-"p+ c #A95E0D",
-"q+ c #C8870A",
-"r+ c #B8810A",
-"s+ c #8FA458",
-"t+ c #3FE3D5",
-"u+ c #C2960E",
-"v+ c #A29830",
-"w+ c #B0AC4C",
-"x+ c #5E684A",
-"y+ c #134663",
-" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . ",
-" + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ +
+ @ @ + ",
-" # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # & $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ & # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ #
# $ % % $ # ",
-" * = % % % % = * * = - % % % = * * = % - % % = * * = % % % % = * * = % % - % = * * = % % % - = * * = % % % % = * * - % % % % = * * = % % - % = * * = % % % % = * * = % - % % = * * = % % % % - * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = *
* = % % % % = * ",
-" & $ ; > , ' ) % $ & & $ % ; ! ~ { % $ & & $ % > ' ' % % $ & & $ % % ] ] % % $ & & $ % % ' ' > % $ & & $ % { ~ ! ; % $ & & $ % ) ' , > ; $ & & $ ; ) ' ' ] % $ & & $ % % { > ; ^ $ & & $ % % { { % % $ & & $ ^ ; > { % % $ & & $ % ] ' ' ) ; $ & & $ ; > , ' ) % $ & & $ ; > , ' ) % $ & & $ ; > , ' ) % $ & & $ ; > , ' ) % $ & & $ ; > , ' ) % $ & & $ ; > , ' ) % $
& & $ ; > , ' ) % $ & ",
-" / = ( _ : < < [ } ( = / / = ^ | 1 2 [ 3 4 5 = / / = % ' 6 7 7 8 ] % = / / = % % ! 9 9 ! % % = / / = % ] 8 7 7 6 ' % = / / = 5 4 3 [ 2 1 | ^ = / / = ( } [ < < : _ ( = / / = 0 1 a b b 2 c ; = / / = % % 0 d : 6 e % = / / = % % % f f % % % = / / = % e 6 : d 0 % % = / / = ; c 2 b b a 1 0 = / / = ( _ : < < [ } ( = / / = ( _ : < < [ } ( = / / = ( _ : < < [ } ( = / / = ( _ : < < [ } ( = / / = ( _ : < < [ } ( = / / = ( _ : < < [ } (
= / / = ( _ : < < [ } ( = / ",
-" g h 9 < b i j k k k l m n & g o p q r 2 l i j < 3 s n & & t u v q w w x k y ! % n & & n % % u z A A z u % % n & & n % ! y k x w w q v u t & & n s 3 < j i l 2 r q p o g & n m l k k k j i b < 9 h g & n ' 9 B k j i l l 1 e C # & n % % { D j j < a E o n & & n % % F p 8 8 p F % % n & & n o E a < j j D { % % n & # C e 1 l l i j k B 9 ' n & g h 9 < b i j k k k l m n & g h 9 < b i j k k k l m n & g h 9 < b i j k k k l m n & g h 9 < b i j k k k l m n & g h 9 < b i j k k k l m n & g h 9 < b i j k k k l
m n & g h 9 < b i j k k k l m n & ",
-" G H I J K L M x N j k k O P = Q R S T T U V W X x Y j k c ^ - Q Q - Z ` G .T T ..k k D ; % = Q Q = % % +. at .#.T T #. at .+.% % = Q Q = % ; D k k ..T T .G ` Z - Q Q - ^ c k j Y x X W V U T T S R Q = P O k k j N x M L K J I H G Q = { $.i j Y N r %.&.&.*.=.S Z Q { { % > d < k j -.%.;.>.+.= Q Q = % % % ,.;.'.'.;.).% % % = Q Q = +.>.;.%.-.j k < d > % { { Q Z S =.*.&.&.%.r N Y j i $.{ = Q !.~.~.J K L M x N j k k O P = Q !.~.~.J K L M x N j k k O P = Q !.~.~.J K L M x N j k k O P = Q !.~.~.J K L M x N j k k O P = Q !.~.~.J K L M x N j k k O P = Q !.~.~.J K L M x N j k k
O P = Q !.~.~.J K L M x N j k k O P = Q ",
-" H #.,. at .~.{.].^.V %./.i k k j (.n # _._. :.<. at .,.).:.[.}.^.K |.l i j 4 % n & _._. # n % :.1.).:.).2.T 3.4.7 5., , n # # n % % % 6.,.7.T T 7.,.6.% % % n # # n , , 5.7 4.3.T 2.).:.).1.:.% n # _._.& n % 4 j i l |.K ^.}.[.:.).,. at .<.:. _._. # n (.j k k i /.%.V ^.].{.~. at .,.#.H 8.D 9.# n % 0.a.N Y /.X b.^.b.c.d. at .).2.e. # k f.f.; 5.g.j A X V }.T >.>.% n # # n % % % 6.` }.h.h.}.` 6.% % % n # # n % >.>.T }.V X A j g.5.; f.f.k # e.2.). at .d.c.b.^.b.X /.Y N a.0.% n # 9.D 8. i.....I ~.{.].^.V %./.i k k j (.n # _._. ~.j.k.l.~.{.].^.V %./.i k k j (.n # _._. j.k.k.k.~.{.].^.V %./.i k k j (.n # _._. j.k.k.k.~.{.].^.V %./.i k k j (.n # _._. j.k.k.k.~.{.].^.V %./.i k k j (.n # _._. ~.j.k.l.~.{.].^.V %./.i k
k j (.n # _._. i.....I ~.{.].^.V %./.i k k j (.n # _._. ",
-" [. at .1.m.>.n.o.o.].].p.V -.q.j j l ) = e Y r.k y s.t.!.#.u.v.T w.x.}.V ^.%.q.i : ) { P k k y # = % % T y.z.H A.B.#.C.&./.6 k k 0 = # # = % % % % D.#.#.G G #.#.D.% % % % = # # = 0 k k 6 /.&.C.#.B.A.H z.y.T % % = # y k k P { ) : i q.%.^.V }.x.w.T v.u.#.!.t.s. y k r.Y e = ) l j j q.-.V p.].].o.o.n.>.m.1. at .[. $.k E.F.{ m g.N Y A V p.b.V [.G.n.).m.).s.# # = 8 k i f.D N H.I.b.b.J.i.m.>.K.% = # # = % % % % L.n.p.h.h.p.d.L.% % % % = # # = % K.>.m.i.J.b.b.I.H.N D f.i k 8 = # # s.).m.).n.G.[.V b.p.V A Y N g.m { F.E.k $. [. at .1.m.>.n.o.o.].].p.V -.q.j j l ) = e Y r.k y [.` M.M.s.n.o.o.].].p.V -.q.j j l ) = e Y r.k y N.k.k.k.k.M.o.o.].].p.V -.q.j j l ) = e Y r.k y [.k.k.k.k.n.o.o.].].p.V -.q.j j l ) = e Y r.k y N.k.k.k.k.M.o.o.].].p.V -.q.j j l ) = e Y r.k y [.` M.M.s.n.o.o.].].p.V -.q.
j j l ) = e Y r.k y [. at .1.m.>.n.o.o.].].p.V -.q.j j l ) = e Y r.k y ",
-" O.{.J.:.#.). at .!.x.G.[.b.].].b.%.A b N (.} i k k k y P.{.Q.t.T #.>.R R.G.Q.b.].^.%.S.: c T.j k k U. # n % ! 0 V.W.X.l. at .#.:.J.].W N.Y.k 0 % n # # n % % % % F Z.j.V.V.V.V.j.Z.F % % % % n # # n % 0 k Y.N.W ].J.:.#. at .l.X.W.V.0 ! % n # U.k k j T.c : S.%.^.].b.Q.G.R.R >.#.T t.Q.{.P. y k k k i } (.N b A %.b.].].b.[.G.x.!. at .).#.:.J.{.O. y < b : g.y N `.%.V p.V b.}.o.G.j.H ).#.!. +# # n % f j i i S.|.I.V V V {.G.=.T *..+% n # # n % % % % % ++Q.p././.p.o.++% % % % % n # # n % .+*.T =.G.{.V V V I.|.S.i i j f % n # # +!.#.).H j.G.o.}.b.V p.V %.`.N y g.: b < y O.{.J.:.#.). at .!.x.G.[.b.].].b.%.A b N (.} i k k k y O.{.J.:.T G @.!.x.G.[.b.].].b.%.A b N (.} i k k k y O.{.J.I ....I !.x.G.[.b.].].b.%.A b N (.} i k k k y O.{.w.d.k.k.k. .x.G.[.b.].].b.%.A b N (.} i k k k y O.{.J.I ....I !.x.G.[.b.].].b.%.A b N (.} i k k k y O.{.J.:.T G @.!.x.G.[.b.].].b.%.
A b N (.} i k k k y O.{.J.:.#.). at .!.x.G.[.b.].].b.%.A b N (.} i k k k y ",
-"8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8. T.T.%+&+R.w.R <.t.x.G.o.b.p.I.b.b.&.W.*+k k b 8. =+= % % 0 k k k S.#+l.d.#+#+Q.c.&.-+k 0 % % = =+ =+= % % % % % h *.X.r 4.4.r X.*.h % % % % % = =+ =+= % % 0 k -+&.c.Q.#+#+d.l.#+S.k k k 0 % % = =+ 8.b k k *+W.&.b.b.I.p.b.o.G.x.t.<.R w.R.&+%+T.T. 8.7 k k j H.3.$+V ].].].].].p.o.#+x.R.l.H R U x.R. at +T.8. _.B k N S.;+C.V b.b.I.].V }.G.o.G.#+H R C.>+E =+ =+= % % 0 k i %+].^.V V V V b.G.,+j.G.5.% % = =+ =+= % % % % % % z.o.p.A A p.o.z.% % % % % % = =+ =+= % % 5.G.j.,+G.b.V V V V ^.].%+i k 0 % % = =+ =+E >+C.R H #+G.o.G.}.V ].I.b.b.V C.;+S.N k B _. 8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.8.T. at +R.x.M.l.k.I R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.8.T. at +R.x.U R H l.R.x.#+o.p.].].].].
].V $+3.H.j k k 7 8.8.T. at +R.x.U R H l.R.x.#+o.p.].].].].].V $+3.H.j k k 7 8.",
-"y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 $.4.i E.%+R.x.J.R.x.G.o.{+H.A `.]+].b.V /.k k y o ^+% % % E.k E.E.7 S.j.w.%.%+w /+K %+k 5.% % % ^+ ^+% % % % 5.(+5.%._+'.E.E.'._+%.5.(+5.% % % % ^+ ^+% % % 5.k %+K /+w %+%.w.j.S.7 E.E.k E.% % % ^+ o y k k /.V b.].]+`.A H.{+o.G.x.R.J.x.R.%+E.i 4.$. 8 k k j H.^.b.].].W `.~+!+)+X.o.#+x.&+J.R.x.x.'+O 4.y f.k j x K V V V b.W !+S.A X.x.o.x.J.x.-.B '.C ^+% % % % f.j A ].].V V V I.%.x A G.A 6 % % % ^+ ^+% % % % % 9 9 >+o.].A A ].o.>+$.9 % % % % % ^+ ^+% % % 6 A G.A x %.I.V V V ].].A j f.% % % % ^+ C '.B -.x.J.x.o.x.X.A S.!+W b.V V V K x j k f. y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 y 4.O '+x.x.&.&.J.x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W
].].b.^.H.j k k 8 y 4.O '+x.x.R.J.&+x.#+o.X.)+!+~+`.W ].].b.^.H.j k k 8 ",
-"8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. T.h.i T.<+o.G.G.G.o.R.[+q.a.~+V ].b.L r k E.= =+ =+= % % E.k m.m.m.}+_+G.x k k : L %+8 % % % = =+ =+= % % % 4.4.x X.B |+m.m.|+B 1+x 4.4.% % % = =+ =+= % % % 8 %+L : k k x G._+}+m.m.m.k E.% % = =+ =+= E.k r L b.].V ~+a.q.[+R.o.G.G.G.o.<+T.i h.T. U.k j k I.].].].b.:+i l l *+x.o.#+#+#+o.o.'+Y j T.8. f.k B C.V ].p.b.I.%.q.Y Y.x.#+o.o.-.4.8 = =+ =+= % % % T.k Y &.].].b.b.I.M.k Y <+4.0 % % = =+ =+= % % % % 8 k [+o.].A A ].o.[+k 8 % % % % = =+ =+= % % 0 4.<+Y k M.I.b.b.].].&.Y k T.% % % = =+ =+= 8 4.-.o.o.#+x.Y.Y q.%.I.b.p.].V C.B k f. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.
].].].I.k j k U. 8.T.j Y '+o.o.#+#+#+o.x.*+l l i :+b.].].].I.k j k U. ",
-" f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. 4+5.N _+{+o.G.o.o.2+i < w I.b.b.V |.k k E.# # n % ! E.5+m.m.5+6+X.r 7 7 /+C.|.y - % n # # n % % f 4.x 7+F.m.m.m.m.F.7+x 4.f % % n # # n % - y |.C./+7 7 r X.6+5+m.m.5+E.! % n # # E.k k |.V b.b.I.w < i 2+o.o.G.o.{+_+N 5.4+ U.k k q.X b.].].V V 3.r r.i 3+x.#+#+#+o.2+O f. f.k j A C.V ].b.V b.8+N q.9+#+o.o.[+y 0+# # n % % T.k B |.].V b.b.V M.w Y X.a+% % n # # n % % % (+4 u Q.p.A A p.Q.u 4 (+% % % n # # n % % a+X.Y w M.V b.b.V ].|.B k T.% % n # # 0+y [+o.o.#+9+q.N 8+b.V b.].V C.A j k f. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V
].].b.X q.k k U. f.O 2+o.#+#+#+x.3+i r.r 3.V V ].].b.X q.k k U. ",
-" T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.b N 2+o.G.G.G.X.C.L b+].].V &.B k k E. # = % % T.6 6 T.c+#+G.A /.].|.k T.% = # # = % % 5.c+7+B '.6 6 '.4.7+c+5.% % = # # = % T.k |.]./.A G.#+c+T.6 6 T.% % = # E.k k B &.V ].].b+L C.X.G.G.G.o.2+N b T. U.k k j r W b.p.p.p.p.V L N.1+x.#+#+#+o.Y.j T.T. f.k k Y w I.p.p.].].V K L {.o.o.o.Y.4.d+ # = % T.k B /.}.].p.V V V c.Q.2+4.5.= # # = % % % % % {.p.A A p.{.% % % % % = # # = 5.4.2+Q.c.V V V p.].}./.B k T.% = # d+4.Y.o.o.o.{.L K V ].].p.p.I.w Y k k f. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.
p.b.W r j k k U. T.T.j Y.o.#+#+#+x.1+N.L V p.p.p.p.b.W r j k k U. ",
-" 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. g+U.U.6 X.&+&+&+h+].].&.|.i+j+k+6+i k k D # n % q a a '+X.Q.[.K L -+4.h., n # # n % % F z.|.'.a a '.|.z.F % % n # # n , h.4.-+L K [.Q.X.'+a a q % n # D k k i 6+k+j+i+|.&.].].h+&+&+&+X.6 U.U.g+ U.k k k j r -.)+f+e+W.%.K ^.].{.R.&+&+R.2+'.E.E.8. f.k k k B H.M l+X X w *.V I.L ;+Q.-.E._. # n T.k B N H.X %.%.7+N.K C.m+0 @ # # n % % % % n+K A A K n+% % % % n # # @ 0 m+C.K N.7+%.%.X H.N B k T.n # _.E.-.Q.;+L I.V *.w X X l+M H.B k k k f. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+
)+-.r j k k k U. 8.E.E.'.2+R.&+&+R.{.].^.K %.W.e+f+)+-.r j k k k U. ",
-" o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D 6.j+q+M.u+r+D._+_ } | % % | t+t+t+g+ Q = .+v+v+u+V n+q+8+7 5.F.F.- Q Q = % % % w+*.U U *.w+% % % = Q Q - F.F.5.7 8+q+n+V u+v+v+.+= Q g+t+t+t+| % % | } _ _+D.r+u+M.q+j+6. D 7 b b t+f | ^ % s } a.a./.s+r+q+q+p+o+ y : : '.T.F.5 m 1 ( _ a.D v+K.B.x+y. Q F.B B a 2 d 0.0.a.8 B.F % = Q Q = % % % h S.~+~+S.h % % % = Q Q = % F B.8 a.0.0.d 2 a B B F.Q y.x+B.K.v+D a._ ( 1 m 5 F.T.'.: : y o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s %
^ | f t+b b 7 D o+p+q+q+r+s+/.a.a.} s % ^ | f t+b b 7 D ",
-" & n % % % 5 | ~ s % % % n & 9.9.9.9. # C % 0+% ^ ^ 5 s % % % n & & n % v j+j+y+> > > ; % n & & n % % ! e v v.e ! % % n & & n % ; > > > y+j+j+v % n & & n % % % s 5 ^ ^ % 0+% C # 9.9.9.9.& n % % % s ~ | 5 % % % n & g+g+g+F % % % { ; > ~ ; % % n & & (+D > % { % ) ' ) % % n & & n % % F 0 }+}+0 F % % n & & n % % ) ' ) % { % > D (+& & n % % ; ~ > ; { % % % F g+g+g+ & n % % % 5 | ~ s % % % n & 9.9.9.9. & n % % % 5 | ~ s % % % n & 9.9.9.9. & n % % % 5 | ~ s % % % n & 9.9.9.9. & n % % % 5 | ~ s % % % n & 9.9.9.9. & n % % % 5 | ~ s % % % n & 9.9.9.9. & n % % % 5 | ~ s % %
% n & 9.9.9.9. & n % % % 5 | ~ s % % % n & 9.9.9.9. ",
-" / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % ] ] % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % % = / / = % % % % % % % %
= / / = % % % % % % % % = / ",
-" & $ % % % % % % $ & & n % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % n & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $ & & $ % % % % % % $
& & $ % % % % % % $ & ",
-" * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = * * = % % % % = *
* = % % % % = * ",
-" # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ # # $ % % $ #
# $ % % $ # ",
-" + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ + + @ @ +
+ @ @ + ",
-" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . "};
+static unsigned char fisharray[] = {
+ 137, 80, 78, 71, 13, 10, 26, 10,
+ 0, 0, 0, 13, 73, 72, 68, 82,
+ 0, 0, 2, 20, 0, 0, 0, 25,
+ 8, 6, 0, 0, 0, 105, 123, 183,
+ 18, 0, 0, 0, 6, 98, 75, 71,
+ 68, 0, 255, 0, 255, 0, 255, 160,
+ 189, 167, 147, 0, 0, 0, 9, 112,
+ 72, 89, 115, 0, 0, 11, 19, 0,
+ 0, 11, 19, 1, 0, 154, 156, 24,
+ 0, 0, 0, 7, 116, 73, 77, 69,
+ 7, 220, 5, 18, 11, 31, 5, 42,
+ 189, 115, 96, 0, 0, 32, 0, 73,
+ 68, 65, 84, 120, 218, 237, 157, 119,
+ 120, 84, 101, 214, 192, 127, 119, 106,
+ 166, 164, 207, 164, 67, 18, 66, 26,
+ 37, 4, 18, 122, 111, 75, 87, 20,
+ 212, 21, 88, 208, 117, 249, 20, 203,
+ 174, 216, 176, 177, 118, 215, 2, 226,
+ 138, 138, 44, 187, 186, 42, 226, 90,
+ 80, 17, 16, 16, 233, 134, 22, 18,
+ 32, 148, 36, 132, 132, 80, 2, 233,
+ 117, 74, 50, 237, 126, 127, 220, 100,
+ 66, 164, 152, 64, 64, 215, 157, 247,
+ 121, 120, 200, 204, 157, 123, 127, 247,
+ 188, 231, 188, 231, 158, 243, 182, 11,
+ 87, 80, 166, 222, 245, 150, 56, 245,
+ 174, 183, 68, 174, 83, 241, 240, 60,
+ 60, 15, 207, 195, 243, 240, 60, 60,
+ 15, 239, 215, 205, 19, 218, 122, 194,
+ 192, 225, 243, 197, 180, 66, 171, 244,
+ 119, 148, 134, 180, 45, 47, 8, 215,
+ 82, 56, 15, 207, 195, 243, 240, 60,
+ 60, 15, 207, 195, 243, 240, 126, 253,
+ 60, 89, 91, 126, 60, 123, 246, 66,
+ 49, 45, 183, 6, 124, 180, 224, 163,
+ 37, 45, 183, 134, 217, 179, 23, 94,
+ 179, 200, 201, 195, 243, 240, 126, 205,
+ 188, 153, 115, 222, 244, 212, 231, 111,
+ 140, 55, 115, 206, 155, 158, 250, 244,
+ 240, 60, 188, 43, 228, 181, 58, 250,
+ 24, 51, 238, 25, 113, 195, 241, 6,
+ 208, 170, 90, 30, 176, 216, 24, 211,
+ 89, 205, 134, 117, 207, 181, 107, 228,
+ 228, 230, 201, 1, 181, 234, 250, 241,
+ 180, 42, 104, 176, 53, 51, 175, 7,
+ 239, 122, 214, 103, 19, 175, 73, 198,
+ 235, 41, 95, 131, 13, 156, 252, 118,
+ 234, 243, 68, 67, 75, 219, 252, 173,
+ 235, 239, 127, 161, 253, 53, 216, 24,
+ 19, 253, 27, 108, 239, 30, 158, 135,
+ 119, 29, 120, 173, 234, 161, 152, 57,
+ 231, 77, 113, 195, 193, 42, 48, 250,
+ 65, 66, 16, 12, 234, 12, 41, 17,
+ 16, 19, 6, 90, 21, 27, 14, 86,
+ 181, 107, 100, 239, 230, 105, 85, 16,
+ 224, 7, 209, 126, 144, 20, 5, 65,
+ 62, 215, 158, 151, 16, 4, 3, 58,
+ 73, 242, 193, 181, 231, 1, 132, 107,
+ 165, 127, 215, 139, 151, 18, 33, 201,
+ 152, 16, 116, 237, 121, 65, 62, 146,
+ 238, 162, 253, 36, 93, 94, 107, 94,
+ 76, 152, 36, 223, 160, 206, 146, 124,
+ 70, 191, 107, 199, 11, 240, 107, 230,
+ 165, 68, 72, 58, 188, 30, 250, 11,
+ 242, 129, 30, 17, 160, 211, 130, 111,
+ 192, 245, 225, 5, 249, 92, 123, 251,
+ 244, 13, 144, 100, 234, 17, 113, 125,
+ 120, 90, 149, 164, 179, 38, 253, 197,
+ 132, 65, 192, 53, 180, 151, 235, 237,
+ 63, 61, 60, 15, 239, 58, 243, 126,
+ 54, 234, 24, 59, 229, 21, 113, 125,
+ 86, 53, 186, 105, 131, 233, 123, 119,
+ 10, 65, 250, 90, 252, 213, 82, 28,
+ 98, 178, 168, 201, 41, 130, 163, 95,
+ 100, 97, 94, 177, 131, 177, 73, 126,
+ 172, 95, 249, 248, 85, 69, 78, 77,
+ 60, 124, 3, 160, 71, 71, 146, 102,
+ 198, 209, 63, 73, 131, 5, 61, 118,
+ 179, 131, 61, 155, 143, 113, 226, 203,
+ 34, 200, 62, 214, 190, 60, 173, 10,
+ 82, 34, 152, 48, 47, 17, 175, 48,
+ 63, 0, 42, 207, 212, 179, 229, 225,
+ 77, 80, 100, 1, 139, 173, 253, 121,
+ 0, 209, 126, 12, 121, 186, 63, 0,
+ 219, 95, 220, 5, 39, 170, 221, 145,
+ 97, 187, 243, 194, 181, 12, 95, 56,
+ 146, 128, 8, 47, 0, 234, 207, 86,
+ 179, 246, 213, 108, 200, 56, 211, 254,
+ 188, 196, 56, 162, 167, 134, 211, 119,
+ 68, 28, 74, 157, 2, 45, 38, 118,
+ 101, 89, 201, 250, 232, 24, 28, 60,
+ 5, 53, 149, 237, 202, 211, 77, 27,
+ 76, 151, 91, 146, 72, 8, 7, 189,
+ 182, 1, 128, 170, 6, 23, 165, 38,
+ 31, 246, 44, 205, 104, 127, 251, 156,
+ 16, 71, 210, 77, 201, 36, 117, 151,
+ 227, 212, 73, 245, 233, 99, 113, 177,
+ 114, 123, 13, 229, 175, 110, 133, 178,
+ 234, 107, 99, 47, 195, 163, 232, 127,
+ 115, 34, 145, 201, 129, 212, 157, 43,
+ 225, 187, 151, 247, 33, 30, 168, 186,
+ 118, 246, 9, 248, 191, 52, 90, 170,
+ 207, 167, 54, 182, 200, 92, 218, 155,
+ 39, 36, 251, 51, 254, 201, 84, 188,
+ 67, 131, 57, 121, 160, 130, 93, 95,
+ 101, 195, 150, 194, 107, 195, 51, 250,
+ 97, 152, 55, 140, 41, 67, 124, 169,
+ 213, 74, 254, 76, 110, 174, 39, 235,
+ 144, 147, 172, 175, 15, 192, 218, 99,
+ 237, 110, 159, 215, 211, 127, 122, 120,
+ 30, 222, 47, 193, 187, 236, 193, 133,
+ 175, 46, 20, 31, 94, 91, 198, 144,
+ 55, 110, 164, 107, 119, 35, 213, 56,
+ 177, 43, 117, 232, 177, 227, 133, 205,
+ 253, 59, 187, 83, 203, 191, 30, 62,
+ 8, 43, 190, 99, 230, 45, 113, 124,
+ 180, 228, 193, 43, 18, 114, 225, 171,
+ 11, 197, 215, 182, 86, 19, 208, 69,
+ 133, 177, 183, 145, 196, 49, 221, 128,
+ 64, 28, 122, 61, 53, 114, 1, 61,
+ 118, 52, 118, 39, 85, 101, 114, 254,
+ 115, 231, 106, 216, 159, 115, 85, 188,
+ 153, 115, 222, 20, 63, 90, 119, 128,
+ 62, 131, 20, 84, 86, 88, 8, 155,
+ 53, 132, 91, 123, 214, 0, 112, 38,
+ 180, 39, 213, 250, 72, 182, 101, 148,
+ 147, 253, 210, 30, 233, 65, 95, 84,
+ 126, 245, 188, 47, 142, 65, 184, 1,
+ 128, 62, 221, 207, 114, 207, 99, 147,
+ 41, 215, 23, 0, 96, 48, 117, 226,
+ 189, 215, 190, 97, 239, 161, 48, 233,
+ 132, 246, 228, 69, 251, 145, 248, 84,
+ 95, 134, 166, 24, 240, 51, 157, 36,
+ 226, 220, 126, 0, 62, 223, 239, 203,
+ 217, 15, 183, 19, 16, 168, 101, 239,
+ 143, 14, 102, 142, 75, 190, 122, 94,
+ 207, 4, 126, 255, 193, 36, 252, 141,
+ 78, 172, 74, 57, 38, 148, 248, 58,
+ 69, 20, 38, 19, 80, 65, 246, 134,
+ 195, 148, 165, 151, 81, 121, 212, 198,
+ 99, 195, 252, 120, 120, 222, 195, 87,
+ 199, 155, 54, 158, 187, 22, 246, 64,
+ 41, 183, 184, 143, 213, 163, 194, 132,
+ 18, 165, 221, 140, 31, 114, 142, 28,
+ 42, 99, 251, 67, 171, 88, 56, 193,
+ 120, 245, 188, 27, 146, 25, 114, 111,
+ 119, 122, 118, 215, 211, 160, 84, 185,
+ 89, 190, 78, 41, 136, 79, 223, 89,
+ 198, 161, 247, 183, 33, 166, 157, 96,
+ 246, 240, 72, 150, 45, 123, 184, 93,
+ 236, 133, 32, 31, 58, 63, 55, 136,
+ 65, 253, 130, 1, 208, 216, 157, 212,
+ 153, 205, 124, 241, 209, 113, 252, 54,
+ 28, 160, 36, 189, 162, 93, 237, 19,
+ 13, 36, 14, 84, 18, 242, 167, 177,
+ 0, 20, 255, 115, 61, 217, 105, 118,
+ 176, 210, 174, 246, 25, 220, 59, 144,
+ 234, 49, 201, 220, 50, 179, 51, 222,
+ 58, 29, 86, 165, 28, 128, 31, 119,
+ 151, 112, 252, 153, 31, 161, 180, 182,
+ 93, 120, 179, 103, 47, 20, 151, 109,
+ 57, 137, 48, 48, 154, 238, 127, 28,
+ 74, 239, 1, 70, 0, 183, 111, 241,
+ 194, 134, 218, 110, 99, 255, 33, 19,
+ 219, 223, 61, 4, 223, 30, 184, 106,
+ 127, 118, 189, 253, 167, 135, 231, 225,
+ 253, 146, 188, 75, 30, 168, 46, 248,
+ 82, 20, 229, 161, 20, 101, 44, 34,
+ 252, 244, 14, 20, 65, 46, 80, 56,
+ 216, 105, 28, 202, 150, 94, 247, 146,
+ 165, 77, 38, 72, 102, 118, 131, 15,
+ 152, 52, 100, 44, 57, 132, 253, 159,
+ 59, 184, 173, 111, 32, 159, 45, 127,
+ 180, 77, 66, 150, 101, 45, 19, 235,
+ 44, 114, 130, 59, 247, 6, 160, 110,
+ 231, 31, 208, 86, 148, 35, 104, 236,
+ 100, 26, 251, 176, 174, 247, 3, 100,
+ 105, 251, 17, 36, 171, 192, 11, 27,
+ 95, 174, 174, 162, 252, 133, 237, 96,
+ 170, 228, 182, 212, 182, 243, 110, 155,
+ 241, 186, 248, 217, 190, 10, 62, 121,
+ 92, 199, 148, 169, 119, 81, 95, 186,
+ 147, 202, 140, 247, 9, 30, 254, 42,
+ 0, 39, 118, 206, 227, 237, 137, 139,
+ 0, 248, 97, 119, 21, 199, 31, 217,
+ 10, 102, 169, 167, 226, 74, 228, 187,
+ 109, 198, 235, 226, 103, 123, 42, 220,
+ 153, 223, 212, 177, 6, 150, 63, 59,
+ 3, 167, 76, 13, 117, 82, 64, 129,
+ 119, 39, 228, 174, 6, 102, 60, 187,
+ 156, 47, 215, 151, 187, 51, 179, 171,
+ 230, 233, 180, 116, 94, 48, 140, 81,
+ 253, 252, 1, 184, 127, 205, 92, 162,
+ 7, 72, 114, 150, 108, 153, 71, 64,
+ 202, 31, 241, 10, 26, 192, 202, 47,
+ 255, 197, 244, 87, 204, 87, 85, 159,
+ 232, 3, 48, 204, 31, 194, 212, 73,
+ 254, 212, 163, 162, 212, 21, 72, 146,
+ 101, 55, 227, 210, 23, 211, 171, 108,
+ 47, 162, 85, 137, 37, 208, 128, 247,
+ 128, 143, 37, 254, 241, 116, 188, 181,
+ 78, 140, 73, 179, 175, 72, 62, 229,
+ 159, 6, 147, 50, 167, 59, 201, 122,
+ 171, 59, 144, 40, 117, 233, 72, 178,
+ 28, 96, 120, 230, 187, 12, 40, 219,
+ 6, 14, 5, 142, 82, 25, 69, 29,
+ 6, 19, 158, 50, 23, 193, 121, 14,
+ 191, 78, 83, 175, 172, 62, 163, 12,
+ 244, 122, 164, 23, 157, 70, 199, 161,
+ 199, 78, 169, 43, 16, 168, 167, 67,
+ 221, 49, 238, 219, 255, 8, 129, 182,
+ 211, 0, 152, 157, 161, 212, 137, 35,
+ 241, 55, 196, 179, 43, 167, 136, 233,
+ 119, 204, 111, 59, 175, 164, 241, 148,
+ 210, 90, 72, 8, 162, 255, 125, 41,
+ 36, 247, 53, 34, 42, 157, 212, 163,
+ 98, 228, 161, 247, 232, 81, 177, 13,
+ 167, 189, 55, 225, 189, 158, 228, 222,
+ 5, 95, 240, 229, 87, 103, 219, 197,
+ 62, 1, 14, 124, 114, 51, 98, 209,
+ 191, 120, 182, 203, 12, 0, 158, 61,
+ 186, 28, 125, 231, 251, 137, 189, 249,
+ 147, 22, 61, 21, 87, 195, 155, 122,
+ 115, 24, 239, 62, 114, 11, 69, 153,
+ 47, 35, 87, 166, 115, 48, 112, 40,
+ 155, 186, 223, 131, 23, 54, 4, 187,
+ 156, 3, 123, 202, 216, 245, 78, 6,
+ 228, 148, 186, 135, 65, 110, 11, 22,
+ 219, 204, 251, 228, 223, 47, 136, 253,
+ 19, 194, 169, 42, 207, 197, 91, 216,
+ 132, 78, 126, 14, 128, 10, 85, 7,
+ 222, 233, 185, 128, 211, 222, 113, 128,
+ 23, 65, 178, 10, 76, 40, 41, 216,
+ 120, 140, 204, 5, 153, 80, 88, 126,
+ 69, 242, 157, 93, 63, 94, 180, 213,
+ 148, 2, 224, 91, 124, 250, 154, 251,
+ 79, 15, 207, 195, 251, 53, 240, 46,
+ 250, 101, 213, 201, 52, 81, 21, 146,
+ 76, 94, 94, 30, 9, 49, 29, 41,
+ 254, 246, 119, 24, 244, 229, 184, 202,
+ 192, 101, 6, 153, 214, 65, 97, 100,
+ 4, 159, 198, 220, 67, 94, 135, 81,
+ 24, 48, 187, 157, 249, 119, 59, 236,
+ 148, 78, 121, 147, 217, 55, 197, 184,
+ 51, 179, 135, 55, 239, 16, 1, 22,
+ 142, 24, 124, 113, 94, 222, 90, 209,
+ 81, 119, 12, 239, 196, 89, 228, 228,
+ 159, 66, 167, 209, 96, 112, 29, 71,
+ 113, 236, 94, 168, 1, 103, 149, 128,
+ 60, 192, 204, 166, 168, 91, 89, 157,
+ 250, 184, 59, 163, 216, 182, 252, 24,
+ 39, 22, 166, 185, 51, 23, 227, 45,
+ 41, 92, 142, 211, 34, 83, 249, 58,
+ 31, 194, 13, 84, 125, 217, 151, 156,
+ 114, 61, 134, 160, 16, 12, 174, 227,
+ 148, 203, 58, 83, 86, 146, 79, 143,
+ 184, 14, 28, 206, 185, 151, 111, 250,
+ 47, 230, 152, 69, 206, 134, 69, 25,
+ 152, 74, 26, 167, 156, 124, 182, 187,
+ 133, 124, 173, 202, 140, 26, 121, 77,
+ 229, 185, 187, 130, 185, 113, 196, 64,
+ 158, 121, 126, 50, 43, 222, 93, 13,
+ 192, 180, 123, 39, 241, 220, 95, 191,
+ 97, 213, 230, 52, 158, 249, 87, 73,
+ 243, 5, 138, 202, 175, 140, 119, 91,
+ 63, 0, 244, 193, 46, 198, 204, 77,
+ 33, 78, 235, 100, 242, 174, 7, 232,
+ 150, 240, 46, 7, 143, 157, 198, 24,
+ 28, 227, 150, 185, 188, 180, 152, 4,
+ 131, 9, 255, 169, 123, 90, 205, 107,
+ 210, 107, 217, 23, 25, 52, 101, 182,
+ 209, 15, 15, 100, 232, 140, 56, 119,
+ 198, 62, 105, 223, 43, 140, 44, 252,
+ 28, 103, 165, 14, 185, 191, 8, 190,
+ 224, 136, 123, 151, 114, 89, 103, 204,
+ 86, 43, 9, 49, 29, 169, 203, 254,
+ 16, 133, 119, 28, 254, 177, 19, 132,
+ 203, 113, 154, 244, 218, 36, 95, 208,
+ 202, 7, 25, 63, 88, 233, 54, 250,
+ 114, 116, 196, 158, 254, 129, 219, 243,
+ 223, 35, 234, 228, 25, 92, 22, 5,
+ 50, 29, 200, 140, 80, 110, 50, 16,
+ 114, 195, 247, 228, 228, 159, 34, 54,
+ 54, 22, 91, 241, 1, 252, 35, 7,
+ 94, 82, 190, 5, 91, 183, 139, 239,
+ 169, 84, 204, 115, 58, 217, 251, 209,
+ 110, 154, 244, 231, 55, 247, 119, 140,
+ 190, 173, 39, 102, 165, 25, 240, 162,
+ 71, 209, 87, 140, 61, 190, 146, 228,
+ 130, 44, 68, 155, 128, 160, 18, 145,
+ 251, 203, 105, 8, 190, 17, 93, 234,
+ 124, 78, 159, 45, 163, 172, 36, 159,
+ 109, 155, 78, 242, 196, 252, 57, 173,
+ 214, 159, 124, 233, 68, 210, 143, 152,
+ 0, 200, 184, 123, 35, 250, 177, 33,
+ 36, 222, 210, 159, 174, 241, 42, 186,
+ 20, 174, 166, 239, 137, 141, 244, 60,
+ 181, 31, 65, 45, 71, 246, 187, 53,
+ 152, 69, 201, 182, 130, 70, 45, 185,
+ 114, 123, 249, 137, 125, 206, 251, 227,
+ 77, 216, 191, 237, 207, 205, 227, 190,
+ 7, 224, 171, 117, 191, 67, 121, 195,
+ 46, 94, 125, 255, 235, 246, 177, 207,
+ 112, 3, 165, 63, 204, 1, 64, 39,
+ 148, 227, 250, 126, 34, 98, 131, 147,
+ 253, 29, 123, 178, 39, 122, 52, 71,
+ 163, 38, 113, 36, 215, 70, 246, 23,
+ 187, 48, 173, 47, 38, 101, 169, 52,
+ 244, 210, 187, 171, 30, 231, 221, 107,
+ 90, 205, 251, 219, 11, 75, 196, 161,
+ 35, 35, 49, 6, 199, 208, 33, 204,
+ 136, 121, 223, 11, 168, 75, 86, 225,
+ 172, 114, 186, 117, 118, 160, 83, 18,
+ 235, 59, 79, 225, 96, 248, 205, 64,
+ 61, 58, 187, 142, 141, 159, 237, 167,
+ 122, 209, 247, 110, 249, 250, 204, 236,
+ 199, 171, 114, 57, 247, 216, 108, 60,
+ 50, 108, 200, 37, 217, 233, 95, 204,
+ 18, 53, 234, 50, 233, 131, 67, 139,
+ 222, 94, 120, 77, 253, 103, 225, 103,
+ 169, 162, 38, 60, 18, 185, 190, 3,
+ 142, 90, 11, 245, 231, 50, 175, 41,
+ 175, 228, 199, 41, 162, 92, 223, 193,
+ 253, 217, 148, 251, 163, 135, 247, 95,
+ 164, 191, 107, 105, 159, 23, 76, 202,
+ 172, 91, 27, 41, 106, 130, 18, 201,
+ 202, 220, 71, 114, 183, 100, 106, 77,
+ 13, 104, 34, 39, 65, 64, 4, 178,
+ 248, 8, 100, 58, 64, 80, 16, 153,
+ 95, 194, 19, 155, 159, 230, 198, 67,
+ 139, 49, 139, 129, 212, 35, 101, 54,
+ 147, 6, 104, 96, 72, 18, 203, 182,
+ 150, 33, 204, 90, 36, 142, 119, 212,
+ 138, 7, 135, 68, 99, 30, 22, 68,
+ 98, 122, 218, 5, 19, 59, 178, 55,
+ 191, 42, 202, 206, 46, 192, 94, 186,
+ 17, 167, 76, 205, 242, 143, 63, 230,
+ 254, 71, 159, 68, 229, 223, 145, 58,
+ 89, 40, 206, 184, 14, 200, 253, 69,
+ 196, 122, 53, 195, 50, 215, 242, 151,
+ 29, 183, 160, 17, 189, 48, 161, 164,
+ 239, 228, 104, 105, 226, 72, 207, 78,
+ 124, 26, 21, 139, 121, 88, 208, 37,
+ 57, 45, 156, 217, 214, 50, 183, 243,
+ 84, 249, 119, 36, 125, 231, 14, 246,
+ 108, 159, 7, 42, 63, 62, 95, 241,
+ 26, 31, 173, 120, 13, 188, 59, 17,
+ 95, 183, 159, 251, 55, 78, 32, 174,
+ 50, 131, 161, 183, 197, 112, 207, 226,
+ 190, 220, 179, 184, 47, 204, 72, 101,
+ 217, 214, 178, 86, 45, 169, 249, 41,
+ 175, 169, 232, 235, 215, 16, 27, 27,
+ 203, 138, 143, 143, 96, 175, 205, 197,
+ 94, 155, 203, 138, 143, 143, 16, 27,
+ 27, 139, 190, 126, 77, 203, 139, 132,
+ 27, 218, 206, 155, 145, 234, 190, 223,
+ 161, 183, 197, 16, 87, 153, 193, 253,
+ 27, 39, 16, 95, 183, 31, 188, 59,
+ 241, 209, 138, 215, 248, 124, 197, 107,
+ 160, 242, 99, 207, 246, 121, 164, 239,
+ 220, 129, 202, 191, 99, 171, 121, 137,
+ 233, 105, 98, 83, 125, 127, 26, 21,
+ 11, 61, 59, 65, 76, 24, 125, 39,
+ 71, 99, 66, 137, 70, 244, 226, 47,
+ 59, 110, 97, 88, 230, 90, 196, 122,
+ 53, 114, 127, 17, 103, 92, 7, 234,
+ 100, 161, 168, 252, 59, 114, 255, 163,
+ 79, 178, 252, 227, 143, 113, 202, 212,
+ 216, 75, 55, 34, 59, 187, 128, 236,
+ 205, 175, 138, 151, 226, 28, 28, 18,
+ 205, 120, 71, 173, 40, 204, 90, 36,
+ 201, 55, 36, 73, 178, 181, 70, 67,
+ 55, 139, 129, 220, 120, 104, 49, 79,
+ 108, 126, 154, 200, 252, 18, 16, 26,
+ 131, 137, 248, 8, 8, 136, 64, 19,
+ 57, 137, 90, 83, 3, 201, 221, 146,
+ 201, 202, 220, 135, 38, 40, 145, 186,
+ 181, 145, 151, 148, 111, 69, 131, 131,
+ 81, 253, 252, 89, 18, 168, 224, 253,
+ 129, 113, 146, 124, 67, 251, 16, 219,
+ 215, 232, 14, 38, 134, 157, 250, 55,
+ 79, 108, 126, 154, 228, 130, 195, 128,
+ 212, 16, 101, 97, 224, 140, 140, 197,
+ 161, 244, 227, 244, 217, 50, 98, 99,
+ 226, 49, 6, 199, 48, 121, 96, 109,
+ 155, 244, 151, 155, 91, 75, 239, 174,
+ 122, 162, 187, 6, 147, 178, 116, 52,
+ 33, 163, 18, 48, 198, 250, 147, 122,
+ 244, 29, 230, 164, 189, 36, 5, 48,
+ 14, 57, 245, 17, 6, 142, 110, 89,
+ 64, 144, 49, 20, 128, 191, 79, 252,
+ 250, 202, 236, 229, 39, 246, 169, 240,
+ 235, 68, 205, 225, 101, 184, 204, 205,
+ 46, 194, 101, 150, 97, 222, 255, 58,
+ 10, 191, 78, 87, 111, 159, 225, 6,
+ 233, 94, 129, 32, 99, 40, 71, 183,
+ 44, 160, 62, 194, 128, 232, 144, 147,
+ 92, 144, 197, 156, 180, 151, 72, 61,
+ 250, 14, 198, 88, 127, 66, 70, 37,
+ 144, 178, 116, 52, 209, 93, 131, 233,
+ 221, 85, 79, 110, 110, 109, 155, 120,
+ 147, 7, 214, 98, 12, 142, 33, 54,
+ 38, 158, 211, 103, 203, 112, 40, 253,
+ 112, 70, 198, 34, 11, 147, 116, 6,
+ 144, 92, 112, 152, 39, 54, 63, 205,
+ 176, 83, 255, 6, 188, 48, 43, 205,
+ 196, 246, 53, 194, 208, 62, 208, 179,
+ 19, 239, 15, 140, 99, 73, 160, 130,
+ 81, 253, 252, 89, 209, 224, 184, 36,
+ 175, 110, 109, 164, 216, 125, 226, 34,
+ 234, 140, 243, 232, 118, 195, 119, 4,
+ 13, 94, 124, 77, 253, 103, 221, 218,
+ 72, 49, 100, 194, 183, 84, 102, 175,
+ 167, 44, 125, 25, 85, 142, 152, 107,
+ 202, 171, 253, 74, 223, 226, 97, 11,
+ 96, 173, 205, 190, 166, 242, 253, 148,
+ 247, 91, 147, 239, 122, 234, 239, 90,
+ 219, 167, 162, 9, 180, 239, 199, 207,
+ 197, 132, 154, 199, 176, 122, 7, 226,
+ 56, 179, 139, 164, 94, 195, 200, 203,
+ 207, 197, 71, 175, 166, 178, 122, 15,
+ 14, 3, 8, 162, 14, 153, 81, 196,
+ 117, 22, 4, 37, 128, 130, 27, 246,
+ 254, 135, 30, 21, 219, 88, 31, 53,
+ 141, 253, 225, 99, 168, 145, 235, 8,
+ 250, 203, 8, 34, 3, 53, 68, 118,
+ 17, 48, 112, 238, 146, 141, 111, 253,
+ 222, 229, 98, 135, 178, 167, 113, 105,
+ 252, 208, 105, 128, 186, 2, 158, 123,
+ 254, 121, 204, 181, 181, 88, 206, 174,
+ 65, 239, 107, 65, 20, 67, 17, 67,
+ 252, 17, 243, 171, 144, 233, 160, 99,
+ 118, 49, 143, 50, 145, 101, 145, 127,
+ 161, 204, 152, 130, 97, 86, 50, 245,
+ 42, 27, 83, 199, 116, 128, 198, 76,
+ 181, 78, 169, 248, 249, 76, 44, 218,
+ 15, 162, 252, 88, 155, 187, 134, 240,
+ 148, 66, 146, 181, 34, 13, 39, 63,
+ 228, 225, 71, 94, 199, 41, 83, 99,
+ 59, 181, 21, 135, 46, 30, 239, 130,
+ 10, 158, 172, 158, 135, 168, 50, 243,
+ 174, 113, 9, 133, 126, 125, 164, 139,
+ 105, 85, 44, 251, 58, 95, 186, 230,
+ 37, 50, 165, 139, 101, 126, 77, 99,
+ 211, 131, 226, 235, 49, 165, 207, 100,
+ 155, 144, 218, 252, 253, 185, 60, 134,
+ 138, 251, 24, 20, 95, 15, 26, 154,
+ 199, 170, 175, 130, 23, 85, 189, 151,
+ 215, 142, 204, 65, 176, 233, 16, 235,
+ 53, 52, 116, 138, 71, 60, 181, 149,
+ 133, 11, 215, 34, 119, 53, 80, 157,
+ 254, 56, 253, 187, 138, 28, 176, 20,
+ 178, 54, 119, 13, 12, 143, 130, 194,
+ 106, 56, 81, 125, 89, 222, 249, 117,
+ 60, 253, 209, 46, 124, 153, 228, 141,
+ 151, 77, 50, 186, 208, 19, 59, 152,
+ 125, 242, 239, 116, 204, 46, 70, 166,
+ 3, 209, 46, 135, 72, 127, 4, 81,
+ 135, 222, 247, 28, 150, 179, 187, 249,
+ 120, 233, 219, 232, 124, 124, 160, 174,
+ 0, 157, 198, 138, 224, 172, 162, 131,
+ 117, 9, 235, 247, 46, 23, 199, 246,
+ 153, 113, 1, 175, 179, 204, 12, 152,
+ 153, 242, 193, 45, 156, 60, 42, 114,
+ 178, 194, 202, 57, 65, 141, 175, 221,
+ 66, 207, 162, 13, 140, 45, 92, 65,
+ 100, 254, 57, 80, 42, 16, 148, 34,
+ 162, 93, 148, 30, 238, 10, 29, 162,
+ 96, 198, 89, 190, 135, 0, 253, 3,
+ 228, 229, 231, 18, 22, 17, 129, 245,
+ 212, 86, 28, 222, 6, 76, 107, 5,
+ 49, 199, 247, 53, 82, 7, 221, 218,
+ 130, 105, 13, 80, 35, 216, 229, 196,
+ 199, 248, 17, 23, 225, 79, 126, 223,
+ 56, 76, 166, 114, 140, 177, 254, 132,
+ 150, 108, 231, 47, 185, 11, 136, 58,
+ 121, 6, 209, 161, 68, 80, 216, 17,
+ 29, 114, 4, 181, 28, 33, 160, 209,
+ 25, 57, 178, 48, 40, 70, 185, 121,
+ 53, 121, 219, 88, 115, 80, 108, 181,
+ 254, 14, 228, 215, 19, 25, 47, 233,
+ 49, 186, 107, 48, 161, 39, 118, 48,
+ 50, 253, 99, 70, 30, 255, 178, 145,
+ 233, 148, 76, 169, 174, 130, 184, 168,
+ 98, 50, 214, 204, 67, 39, 148, 51,
+ 110, 128, 154, 71, 15, 90, 176, 157,
+ 214, 94, 185, 125, 2, 66, 213, 10,
+ 52, 150, 67, 136, 64, 106, 237, 46,
+ 247, 247, 106, 69, 58, 66, 85, 57,
+ 16, 221, 242, 132, 54, 218, 167, 170,
+ 131, 133, 113, 3, 212, 232, 132, 114,
+ 50, 214, 204, 163, 115, 240, 1, 228,
+ 165, 21, 184, 26, 229, 18, 29, 74,
+ 102, 237, 255, 152, 136, 58, 43, 155,
+ 130, 7, 113, 46, 122, 176, 59, 120,
+ 60, 144, 95, 223, 106, 222, 154, 131,
+ 63, 240, 220, 20, 1, 223, 136, 251,
+ 201, 203, 207, 197, 160, 40, 199, 230,
+ 200, 2, 57, 146, 174, 106, 78, 35,
+ 58, 104, 212, 161, 146, 123, 182, 189,
+ 198, 216, 200, 21, 252, 61, 254, 17,
+ 136, 29, 66, 226, 31, 252, 209, 235,
+ 39, 17, 19, 46, 32, 168, 69, 4,
+ 187, 28, 107, 128, 250, 2, 214, 245,
+ 246, 159, 45, 120, 231, 246, 211, 241,
+ 166, 221, 216, 107, 115, 241, 10, 29,
+ 65, 229, 182, 25, 215, 148, 87, 82,
+ 112, 6, 20, 22, 119, 134, 27, 208,
+ 97, 40, 14, 101, 237, 53, 225, 213,
+ 202, 66, 80, 215, 9, 136, 222, 205,
+ 207, 70, 243, 233, 61, 168, 163, 127,
+ 27, 242, 253, 18, 250, 187, 150, 246,
+ 41, 44, 216, 186, 93, 124, 214, 10,
+ 55, 186, 214, 177, 196, 127, 45, 46,
+ 149, 15, 245, 103, 77, 200, 163, 238,
+ 67, 225, 219, 133, 134, 147, 31, 162,
+ 85, 236, 198, 165, 242, 65, 233, 210,
+ 32, 58, 173, 56, 15, 23, 33, 40,
+ 47, 146, 28, 136, 14, 206, 69, 59,
+ 169, 86, 116, 38, 221, 175, 47, 251,
+ 186, 220, 231, 238, 142, 46, 51, 219,
+ 232, 159, 81, 229, 238, 42, 212, 175,
+ 219, 46, 2, 172, 49, 124, 72, 47,
+ 97, 63, 216, 28, 152, 106, 180, 40,
+ 195, 239, 2, 135, 9, 85, 221, 183,
+ 136, 58, 59, 130, 168, 67, 238, 48,
+ 227, 60, 124, 26, 144, 33, 243, 178,
+ 224, 170, 151, 102, 213, 155, 58, 56,
+ 216, 237, 53, 142, 172, 148, 137, 148,
+ 232, 18, 165, 9, 86, 118, 72, 217,
+ 85, 114, 65, 151, 228, 220, 71, 222,
+ 17, 23, 173, 58, 221, 98, 182, 252,
+ 61, 111, 12, 116, 31, 87, 158, 200,
+ 228, 149, 138, 247, 169, 171, 143, 70,
+ 41, 232, 240, 82, 75, 89, 167, 211,
+ 84, 134, 172, 178, 150, 26, 125, 3,
+ 123, 67, 167, 177, 161, 251, 159, 120,
+ 239, 161, 180, 22, 179, 207, 231, 222,
+ 216, 129, 69, 11, 238, 187, 60, 239,
+ 252, 226, 107, 227, 216, 188, 31, 144,
+ 27, 195, 121, 45, 246, 81, 2, 124,
+ 244, 0, 84, 214, 154, 120, 44, 239,
+ 117, 156, 101, 69, 196, 189, 58, 10,
+ 106, 46, 114, 110, 107, 121, 141, 242,
+ 141, 57, 244, 79, 250, 156, 91, 129,
+ 175, 73, 141, 43, 192, 7, 185, 94,
+ 154, 136, 86, 223, 208, 13, 187, 104,
+ 198, 219, 235, 4, 143, 7, 254, 17,
+ 123, 116, 47, 247, 181, 90, 35, 223,
+ 130, 173, 219, 197, 140, 254, 193, 248,
+ 42, 165, 207, 193, 230, 108, 146, 50,
+ 214, 208, 175, 126, 29, 250, 211, 82,
+ 176, 33, 243, 170, 199, 85, 175, 5,
+ 92, 200, 187, 117, 112, 63, 220, 5,
+ 179, 18, 155, 247, 13, 160, 208, 99,
+ 47, 250, 23, 122, 95, 11, 168, 20,
+ 100, 138, 61, 153, 88, 62, 75, 210,
+ 237, 56, 73, 127, 11, 182, 110, 23,
+ 119, 165, 248, 99, 212, 169, 220, 15,
+ 148, 212, 163, 239, 208, 187, 122, 15,
+ 126, 142, 227, 132, 158, 144, 131, 112,
+ 97, 0, 41, 218, 5, 228, 221, 194,
+ 17, 228, 26, 236, 50, 43, 50, 91,
+ 45, 22, 71, 63, 212, 145, 179, 112,
+ 212, 28, 197, 89, 248, 14, 94, 97,
+ 122, 100, 182, 90, 230, 84, 77, 96,
+ 149, 108, 28, 207, 106, 112, 219, 205,
+ 195, 155, 119, 136, 142, 129, 126, 52,
+ 40, 85, 156, 114, 249, 19, 115, 114,
+ 19, 47, 21, 62, 140, 203, 86, 139,
+ 172, 216, 15, 209, 33, 119, 203, 40,
+ 58, 53, 32, 58, 16, 212, 114, 92,
+ 177, 9, 146, 189, 42, 116, 40, 68,
+ 23, 182, 224, 103, 113, 212, 28, 69,
+ 89, 52, 151, 69, 126, 115, 121, 101,
+ 79, 50, 247, 158, 41, 110, 181, 254,
+ 202, 209, 113, 127, 198, 51, 244, 58,
+ 178, 201, 221, 29, 217, 178, 201, 201,
+ 33, 57, 1, 167, 215, 64, 236, 53,
+ 7, 241, 82, 155, 8, 95, 119, 59,
+ 166, 149, 5, 87, 110, 159, 192, 242,
+ 7, 179, 152, 156, 80, 142, 243, 112,
+ 17, 75, 71, 206, 5, 224, 238, 77,
+ 139, 144, 119, 11, 231, 155, 28, 3,
+ 51, 222, 76, 186, 120, 150, 208, 74,
+ 158, 126, 74, 39, 138, 198, 125, 74,
+ 125, 131, 30, 165, 111, 15, 228, 245,
+ 105, 112, 32, 199, 29, 40, 185, 123,
+ 69, 26, 135, 173, 50, 187, 142, 228,
+ 237, 148, 231, 48, 96, 110, 117, 251,
+ 123, 55, 34, 132, 199, 251, 30, 96,
+ 110, 245, 34, 236, 225, 139, 80, 248,
+ 118, 65, 85, 242, 44, 14, 65, 230,
+ 214, 145, 44, 47, 7, 177, 193, 9,
+ 130, 2, 65, 110, 117, 251, 22, 65,
+ 225, 196, 21, 82, 141, 76, 229, 195,
+ 83, 81, 11, 201, 143, 28, 73, 71,
+ 89, 21, 106, 187, 13, 69, 90, 181,
+ 187, 59, 249, 122, 251, 79, 128, 255,
+ 53, 222, 185, 253, 251, 241, 143, 159,
+ 142, 194, 71, 75, 113, 193, 25, 58,
+ 134, 28, 243, 212, 231, 175, 148, 39,
+ 36, 166, 167, 137, 147, 123, 233, 216,
+ 98, 14, 160, 247, 193, 79, 120, 65,
+ 179, 86, 114, 148, 182, 90, 26, 28,
+ 74, 212, 90, 17, 23, 90, 55, 172,
+ 68, 30, 200, 87, 24, 113, 106, 140,
+ 212, 234, 66, 41, 81, 135, 241, 230,
+ 142, 251, 16, 235, 53, 141, 142, 92,
+ 68, 180, 9, 44, 31, 58, 181, 5,
+ 48, 55, 183, 150, 45, 137, 189, 5,
+ 128, 94, 27, 54, 139, 99, 70, 5,
+ 144, 39, 24, 40, 200, 41, 226, 13,
+ 243, 63, 232, 101, 79, 199, 165, 242,
+ 193, 110, 177, 162, 86, 216, 113, 169,
+ 124, 220, 193, 68, 149, 92, 206, 42,
+ 109, 111, 44, 218, 142, 228, 170, 195,
+ 120, 58, 107, 14, 129, 37, 58, 68,
+ 187, 136, 160, 112, 242, 183, 17, 47,
+ 82, 213, 65, 90, 122, 185, 45, 163,
+ 156, 202, 191, 174, 167, 100, 221, 79,
+ 183, 12, 157, 44, 210, 163, 217, 9,
+ 246, 250, 116, 2, 125, 18, 252, 216,
+ 155, 35, 45, 211, 140, 238, 160, 37,
+ 172, 244, 48, 79, 159, 251, 18, 103,
+ 93, 17, 229, 106, 168, 244, 238, 202,
+ 97, 159, 56, 108, 53, 101, 204, 206,
+ 255, 144, 140, 206, 55, 240, 159, 148,
+ 199, 88, 254, 226, 174, 102, 135, 13,
+ 112, 48, 11, 248, 230, 178, 188, 38,
+ 39, 170, 87, 129, 201, 6, 59, 7,
+ 189, 199, 91, 97, 143, 81, 166, 11,
+ 231, 116, 157, 116, 188, 131, 55, 24,
+ 205, 69, 252, 249, 236, 107, 12, 248,
+ 241, 30, 247, 111, 91, 176, 90, 201,
+ 211, 79, 233, 196, 140, 167, 251, 243,
+ 251, 140, 215, 72, 57, 254, 45, 203,
+ 98, 102, 161, 242, 53, 210, 173, 246,
+ 24, 1, 117, 71, 48, 52, 128, 220,
+ 59, 156, 23, 67, 167, 114, 54, 168,
+ 27, 39, 78, 75, 17, 121, 83, 157,
+ 100, 222, 190, 246, 178, 188, 224, 113,
+ 243, 197, 128, 231, 199, 50, 52, 69,
+ 202, 110, 253, 79, 239, 226, 137, 205,
+ 79, 75, 153, 186, 82, 160, 34, 216,
+ 204, 139, 73, 75, 136, 111, 56, 139,
+ 214, 114, 138, 27, 45, 233, 248, 59,
+ 157, 238, 160, 162, 201, 190, 148, 90,
+ 13, 50, 91, 45, 153, 202, 222, 60,
+ 164, 251, 63, 58, 37, 132, 19, 43,
+ 150, 179, 225, 135, 74, 50, 199, 140,
+ 16, 0, 134, 103, 167, 139, 241, 241,
+ 62, 45, 2, 138, 25, 219, 190, 68,
+ 80, 137, 8, 74, 233, 182, 4, 47,
+ 43, 15, 14, 126, 135, 224, 134, 179,
+ 248, 152, 207, 33, 183, 150, 113, 51,
+ 101, 4, 59, 43, 154, 131, 10, 44,
+ 52, 88, 4, 183, 125, 1, 204, 183,
+ 78, 32, 189, 199, 116, 134, 235, 42,
+ 249, 38, 211, 76, 118, 239, 230, 121,
+ 21, 41, 135, 50, 196, 222, 93, 245,
+ 212, 163, 34, 196, 148, 199, 83, 107,
+ 167, 35, 214, 171, 91, 60, 204, 101,
+ 222, 245, 188, 211, 245, 143, 20, 105,
+ 147, 232, 32, 148, 49, 165, 124, 19,
+ 129, 178, 10, 20, 118, 112, 40, 193,
+ 110, 177, 162, 212, 106, 88, 173, 28,
+ 200, 190, 132, 25, 20, 150, 90, 88,
+ 53, 252, 19, 56, 254, 214, 207, 218,
+ 75, 202, 242, 27, 233, 222, 53, 128,
+ 46, 133, 171, 185, 103, 251, 27, 238,
+ 70, 237, 206, 6, 20, 118, 78, 132,
+ 71, 179, 34, 245, 121, 2, 202, 115,
+ 184, 187, 98, 45, 75, 3, 39, 176,
+ 205, 222, 147, 181, 183, 110, 108, 179,
+ 125, 2, 12, 249, 215, 56, 41, 158,
+ 177, 127, 199, 163, 108, 193, 149, 123,
+ 134, 247, 134, 60, 4, 192, 61, 219,
+ 223, 64, 22, 31, 193, 235, 12, 103,
+ 117, 237, 112, 244, 129, 26, 182, 223,
+ 181, 238, 66, 199, 211, 10, 222, 132,
+ 207, 71, 51, 84, 185, 223, 125, 207,
+ 149, 134, 4, 166, 237, 251, 43, 209,
+ 69, 39, 16, 29, 202, 243, 82, 30,
+ 41, 88, 124, 111, 200, 67, 28, 141,
+ 154, 196, 161, 35, 149, 100, 204, 88,
+ 245, 243, 188, 206, 127, 22, 111, 220,
+ 50, 157, 168, 32, 45, 169, 57, 203,
+ 153, 100, 79, 115, 235, 162, 73, 55,
+ 21, 174, 64, 86, 26, 70, 114, 90,
+ 52, 18, 110, 201, 226, 190, 35, 239,
+ 227, 170, 243, 106, 17, 212, 8, 94,
+ 13, 188, 52, 225, 19, 138, 245, 177,
+ 120, 97, 35, 253, 136, 137, 140, 238,
+ 41, 194, 249, 67, 114, 215, 211, 127,
+ 254, 175, 242, 204, 229, 39, 164, 33,
+ 106, 109, 8, 74, 173, 198, 83, 159,
+ 191, 82, 158, 236, 46, 179, 147, 197,
+ 223, 215, 146, 160, 119, 146, 223, 255,
+ 62, 230, 91, 39, 160, 176, 131, 76,
+ 240, 65, 235, 21, 128, 220, 21, 232,
+ 134, 57, 148, 240, 81, 226, 157, 228,
+ 244, 124, 134, 188, 132, 123, 57, 22,
+ 117, 51, 183, 159, 250, 59, 174, 58,
+ 175, 230, 6, 168, 20, 144, 251, 88,
+ 57, 220, 101, 182, 251, 187, 53, 89,
+ 213, 238, 96, 2, 32, 115, 204, 8,
+ 97, 241, 247, 181, 212, 212, 152, 233,
+ 148, 16, 206, 196, 242, 89, 156, 80,
+ 199, 162, 176, 131, 74, 99, 64, 84,
+ 134, 186, 131, 9, 151, 88, 203, 247,
+ 81, 55, 178, 39, 241, 113, 210, 67,
+ 239, 34, 184, 225, 44, 129, 197, 205,
+ 78, 93, 208, 155, 169, 244, 233, 12,
+ 192, 222, 156, 106, 178, 167, 173, 102,
+ 90, 215, 144, 11, 124, 220, 220, 71,
+ 70, 131, 197, 118, 193, 247, 153, 93,
+ 250, 146, 217, 165, 47, 43, 189, 187,
+ 243, 217, 137, 96, 158, 50, 76, 71,
+ 103, 240, 101, 69, 234, 243, 252, 39,
+ 229, 49, 14, 199, 78, 102, 111, 194,
+ 255, 129, 194, 225, 174, 184, 22, 15,
+ 120, 139, 77, 186, 118, 43, 120, 15,
+ 60, 149, 204, 157, 143, 38, 115, 255,
+ 131, 97, 232, 244, 193, 232, 162, 99,
+ 89, 53, 122, 150, 251, 30, 86, 141,
+ 158, 133, 46, 58, 22, 63, 181, 130,
+ 251, 31, 12, 227, 206, 71, 147, 121,
+ 224, 169, 228, 11, 51, 192, 86, 240,
+ 76, 43, 11, 200, 205, 109, 92, 110,
+ 167, 112, 176, 55, 225, 255, 56, 28,
+ 59, 153, 255, 164, 60, 198, 138, 212,
+ 231, 209, 25, 124, 121, 202, 48, 157,
+ 207, 78, 4, 179, 210, 187, 187, 251,
+ 30, 46, 154, 113, 94, 132, 55, 173,
+ 107, 8, 217, 211, 86, 187, 3, 178,
+ 74, 159, 206, 8, 122, 179, 251, 120,
+ 96, 177, 154, 224, 134, 179, 164, 135,
+ 222, 197, 158, 196, 199, 249, 62, 234,
+ 70, 92, 98, 45, 114, 135, 25, 65,
+ 212, 33, 42, 67, 81, 105, 12, 40,
+ 236, 112, 66, 29, 203, 196, 242, 89,
+ 116, 74, 8, 167, 166, 198, 204, 226,
+ 239, 107, 221, 193, 4, 192, 150, 196,
+ 222, 194, 154, 172, 106, 247, 181, 15,
+ 119, 153, 141, 220, 199, 234, 14, 38,
+ 0, 92, 117, 94, 220, 126, 234, 239,
+ 28, 139, 186, 153, 188, 132, 123, 201,
+ 233, 249, 12, 31, 37, 222, 137, 67,
+ 9, 162, 211, 138, 210, 165, 65, 238,
+ 10, 68, 235, 21, 128, 76, 240, 65,
+ 97, 151, 130, 137, 252, 254, 247, 145,
+ 160, 151, 218, 192, 93, 230, 150, 217,
+ 113, 70, 247, 20, 33, 253, 136, 9,
+ 47, 108, 88, 213, 161, 56, 253, 172,
+ 238, 135, 156, 251, 161, 103, 135, 241,
+ 101, 91, 168, 142, 26, 205, 214, 142,
+ 119, 240, 69, 231, 169, 210, 79, 228,
+ 210, 131, 75, 163, 148, 130, 137, 163,
+ 221, 110, 39, 171, 160, 158, 85, 35,
+ 190, 102, 238, 228, 248, 86, 217, 75,
+ 238, 25, 105, 150, 245, 214, 142, 119,
+ 80, 23, 98, 63, 143, 45, 119, 247,
+ 144, 40, 243, 15, 81, 173, 143, 100,
+ 107, 199, 59, 40, 148, 233, 169, 138,
+ 28, 194, 218, 37, 121, 87, 100, 159,
+ 0, 114, 157, 130, 46, 189, 2, 232,
+ 24, 227, 127, 201, 161, 202, 142, 49,
+ 254, 244, 25, 29, 142, 92, 167, 104,
+ 181, 189, 252, 148, 183, 118, 73, 30,
+ 85, 145, 67, 40, 148, 233, 217, 218,
+ 241, 14, 170, 245, 145, 40, 243, 15,
+ 185, 3, 53, 209, 209, 220, 243, 84,
+ 23, 98, 103, 107, 199, 59, 240, 194,
+ 70, 238, 25, 115, 235, 120, 147, 227,
+ 89, 53, 226, 107, 178, 10, 234, 57,
+ 218, 237, 118, 86, 43, 7, 162, 81,
+ 74, 58, 17, 228, 146, 115, 252, 162,
+ 243, 84, 137, 29, 53, 154, 241, 101,
+ 91, 192, 142, 123, 184, 165, 137, 237,
+ 244, 179, 98, 85, 135, 94, 52, 152,
+ 0, 184, 222, 254, 243, 127, 149, 231,
+ 235, 27, 141, 95, 64, 23, 180, 94,
+ 1, 158, 250, 252, 21, 243, 100, 143,
+ 12, 27, 34, 152, 198, 13, 17, 254,
+ 45, 139, 22, 74, 178, 243, 72, 239,
+ 49, 157, 31, 117, 169, 23, 52, 80,
+ 135, 18, 222, 143, 184, 149, 35, 186,
+ 84, 78, 10, 2, 10, 211, 73, 30,
+ 221, 121, 59, 125, 114, 78, 180, 136,
+ 232, 69, 187, 72, 102, 88, 31, 204,
+ 98, 96, 139, 181, 172, 63, 45, 166,
+ 113, 67, 132, 248, 69, 233, 172, 127,
+ 241, 7, 134, 140, 78, 96, 177, 110,
+ 58, 85, 114, 57, 114, 135, 228, 48,
+ 154, 254, 223, 169, 31, 193, 58, 195,
+ 173, 232, 29, 213, 12, 61, 245, 54,
+ 79, 164, 189, 36, 57, 156, 198, 222,
+ 137, 77, 17, 211, 16, 124, 141, 205,
+ 227, 166, 195, 140, 23, 116, 127, 2,
+ 44, 90, 112, 159, 48, 123, 152, 17,
+ 138, 164, 229, 152, 153, 79, 166, 73,
+ 15, 67, 67, 144, 251, 55, 165, 191,
+ 255, 61, 197, 103, 138, 40, 23, 189,
+ 168, 114, 106, 41, 51, 219, 40, 51,
+ 219, 232, 147, 243, 15, 156, 122, 59,
+ 213, 14, 47, 138, 77, 54, 105, 107,
+ 224, 166, 217, 237, 173, 228, 1, 188,
+ 183, 174, 174, 249, 97, 101, 143, 227,
+ 237, 79, 11, 33, 39, 167, 249, 164,
+ 156, 28, 222, 254, 180, 144, 221, 244,
+ 191, 232, 57, 109, 226, 53, 216, 40,
+ 54, 217, 168, 118, 120, 225, 212, 219,
+ 233, 147, 243, 15, 183, 60, 85, 78,
+ 45, 229, 162, 23, 197, 103, 138, 40,
+ 253, 253, 239, 155, 47, 98, 8, 146,
+ 122, 39, 158, 76, 107, 61, 175, 201,
+ 208, 124, 141, 146, 46, 20, 78, 41,
+ 138, 117, 200, 121, 34, 237, 37, 134,
+ 158, 122, 27, 189, 163, 154, 117, 134,
+ 91, 217, 169, 31, 209, 66, 183, 77,
+ 189, 79, 139, 117, 211, 25, 50, 58,
+ 129, 245, 47, 254, 64, 252, 162, 116,
+ 247, 112, 199, 197, 138, 23, 54, 204,
+ 98, 32, 153, 97, 125, 16, 237, 226,
+ 121, 137, 172, 147, 62, 57, 39, 120,
+ 116, 231, 237, 40, 76, 39, 57, 41,
+ 8, 28, 209, 165, 242, 126, 196, 173,
+ 156, 159, 240, 54, 149, 31, 117, 169,
+ 164, 247, 152, 78, 73, 118, 30, 255,
+ 150, 69, 11, 166, 113, 67, 132, 203,
+ 205, 220, 175, 81, 234, 249, 71, 252,
+ 203, 184, 66, 170, 165, 225, 141, 198,
+ 46, 65, 209, 161, 36, 50, 255, 28,
+ 19, 54, 204, 4, 234, 57, 226, 59,
+ 142, 245, 225, 227, 90, 156, 107, 11,
+ 13, 230, 155, 76, 51, 91, 110, 93,
+ 217, 38, 123, 105, 42, 177, 206, 147,
+ 164, 251, 78, 190, 160, 135, 162, 41,
+ 168, 233, 150, 247, 141, 212, 43, 229,
+ 116, 80, 112, 180, 186, 121, 56, 160,
+ 141, 246, 9, 144, 189, 234, 8, 27,
+ 150, 23, 178, 244, 161, 163, 184, 172,
+ 38, 68, 187, 208, 98, 24, 201, 101,
+ 53, 177, 244, 161, 163, 108, 88, 94,
+ 72, 246, 170, 35, 45, 47, 218, 22,
+ 222, 150, 66, 10, 142, 86, 163, 119,
+ 58, 90, 200, 208, 162, 119, 162, 81,
+ 214, 116, 223, 201, 196, 58, 79, 94,
+ 168, 148, 86, 240, 182, 220, 186, 146,
+ 111, 50, 205, 216, 66, 131, 91, 206,
+ 223, 10, 31, 199, 17, 223, 113, 64,
+ 61, 19, 54, 204, 36, 50, 255, 156,
+ 155, 45, 40, 69, 16, 29, 184, 66,
+ 170, 249, 71, 252, 203, 212, 40, 245,
+ 151, 244, 99, 215, 219, 127, 122, 120,
+ 30, 222, 175, 153, 231, 110, 136, 77,
+ 115, 26, 166, 142, 233, 64, 66, 245,
+ 143, 220, 159, 187, 212, 29, 201, 3,
+ 216, 101, 86, 106, 27, 192, 175, 228,
+ 0, 130, 83, 137, 104, 210, 181, 108,
+ 252, 82, 158, 136, 204, 187, 158, 71,
+ 198, 172, 164, 193, 55, 220, 13, 92,
+ 147, 85, 205, 153, 228, 190, 23, 117,
+ 214, 250, 117, 219, 197, 73, 35, 130,
+ 169, 145, 251, 243, 231, 163, 47, 51,
+ 200, 188, 15, 167, 66, 231, 62, 94,
+ 46, 122, 17, 88, 177, 9, 185, 73,
+ 137, 163, 200, 7, 185, 159, 224, 118,
+ 54, 117, 161, 34, 175, 13, 95, 79,
+ 131, 82, 229, 238, 161, 200, 236, 210,
+ 247, 231, 151, 140, 110, 45, 107, 30,
+ 203, 125, 101, 20, 67, 59, 73, 167,
+ 108, 43, 16, 233, 239, 117, 130, 111,
+ 116, 203, 113, 8, 50, 150, 6, 78,
+ 160, 74, 238, 195, 19, 91, 158, 101,
+ 115, 252, 4, 214, 247, 253, 51, 203,
+ 55, 148, 96, 122, 252, 7, 176, 216,
+ 152, 61, 204, 248, 179, 75, 215, 46,
+ 224, 77, 233, 68, 255, 193, 2, 179,
+ 85, 135, 73, 75, 157, 73, 97, 169,
+ 5, 71, 99, 230, 166, 208, 170, 232,
+ 18, 166, 166, 231, 238, 79, 88, 102,
+ 235, 198, 174, 29, 98, 139, 177, 240,
+ 182, 242, 244, 175, 140, 98, 198, 152,
+ 96, 198, 238, 121, 139, 17, 185, 107,
+ 249, 219, 240, 103, 241, 119, 214, 114,
+ 119, 197, 90, 20, 162, 139, 201, 230,
+ 25, 236, 170, 143, 110, 33, 191, 233,
+ 241, 31, 218, 196, 235, 117, 116, 143,
+ 216, 39, 65, 218, 89, 84, 109, 183,
+ 241, 216, 150, 177, 120, 159, 19, 154,
+ 51, 188, 106, 17, 69, 120, 45, 78,
+ 189, 157, 138, 192, 145, 24, 132, 250,
+ 230, 108, 216, 97, 230, 71, 93, 42,
+ 111, 117, 121, 18, 95, 103, 21, 171,
+ 55, 151, 92, 50, 152, 136, 56, 176,
+ 71, 156, 152, 228, 231, 30, 246, 80,
+ 215, 20, 177, 96, 195, 148, 198, 232,
+ 185, 229, 98, 37, 65, 97, 71, 208,
+ 155, 17, 229, 118, 170, 131, 147, 241,
+ 81, 131, 210, 213, 108, 203, 162, 211,
+ 202, 219, 241, 119, 147, 227, 55, 136,
+ 47, 55, 156, 110, 49, 103, 227, 167,
+ 165, 105, 216, 3, 224, 148, 43, 148,
+ 241, 249, 75, 152, 181, 247, 141, 198,
+ 185, 33, 52, 143, 53, 138, 14, 4,
+ 175, 6, 80, 56, 16, 180, 190, 16,
+ 16, 225, 190, 198, 219, 241, 119, 83,
+ 227, 219, 157, 141, 107, 143, 177, 239,
+ 134, 91, 219, 172, 63, 181, 221, 134,
+ 182, 56, 131, 39, 211, 158, 65, 180,
+ 9, 136, 118, 1, 65, 97, 119, 159,
+ 35, 243, 86, 225, 10, 240, 97, 167,
+ 97, 24, 219, 186, 222, 193, 226, 151,
+ 14, 96, 250, 56, 231, 138, 236, 179,
+ 69, 208, 255, 242, 71, 56, 207, 10,
+ 45, 231, 80, 132, 137, 232, 159, 156,
+ 121, 209, 158, 137, 182, 240, 244, 127,
+ 72, 224, 129, 167, 146, 25, 122, 228,
+ 223, 12, 40, 223, 138, 172, 178, 22,
+ 87, 157, 173, 69, 176, 36, 40, 69,
+ 4, 149, 200, 203, 3, 159, 195, 18,
+ 146, 66, 131, 82, 213, 230, 246, 151,
+ 250, 237, 231, 226, 232, 9, 113, 248,
+ 214, 28, 226, 254, 220, 165, 205, 7,
+ 42, 207, 32, 90, 106, 192, 161, 144,
+ 134, 177, 26, 237, 181, 41, 128, 146,
+ 121, 89, 248, 176, 207, 67, 124, 23,
+ 51, 135, 142, 50, 105, 226, 217, 197,
+ 122, 40, 126, 41, 255, 233, 225, 121,
+ 120, 191, 70, 158, 162, 105, 98, 209,
+ 138, 32, 105, 24, 161, 170, 168, 148,
+ 228, 170, 12, 92, 98, 45, 200, 26,
+ 103, 186, 218, 28, 40, 170, 106, 241,
+ 43, 3, 151, 217, 128, 60, 192, 76,
+ 97, 100, 4, 121, 178, 110, 236, 204,
+ 58, 139, 66, 43, 195, 144, 20, 66,
+ 136, 58, 144, 31, 59, 78, 106, 1,
+ 187, 92, 153, 191, 41, 77, 252, 32,
+ 80, 193, 142, 236, 106, 122, 104, 74,
+ 137, 173, 63, 129, 75, 105, 65, 64,
+ 226, 202, 76, 181, 24, 11, 29, 128,
+ 129, 218, 16, 59, 233, 125, 39, 178,
+ 250, 168, 147, 220, 181, 199, 9, 30,
+ 220, 157, 134, 14, 157, 240, 82, 250,
+ 187, 215, 201, 214, 86, 255, 252, 118,
+ 227, 203, 150, 61, 44, 156, 63, 219,
+ 188, 87, 205, 81, 252, 141, 82, 143,
+ 192, 157, 165, 223, 241, 160, 122, 183,
+ 52, 17, 211, 90, 197, 156, 227, 153,
+ 160, 112, 240, 67, 207, 63, 177, 183,
+ 219, 116, 242, 107, 192, 180, 166, 176,
+ 77, 235, 238, 127, 202, 51, 173, 44,
+ 96, 227, 119, 48, 235, 238, 60, 134,
+ 203, 222, 227, 131, 136, 153, 248, 27,
+ 165, 241, 252, 58, 115, 61, 125, 247,
+ 46, 195, 116, 172, 136, 141, 75, 53,
+ 45, 118, 36, 188, 18, 158, 105, 77,
+ 33, 249, 253, 130, 217, 211, 103, 54,
+ 162, 86, 203, 147, 123, 231, 130, 67,
+ 1, 62, 90, 156, 26, 127, 222, 211,
+ 127, 197, 155, 138, 126, 84, 25, 199,
+ 75, 193, 193, 254, 93, 108, 111, 35,
+ 239, 252, 58, 47, 82, 250, 115, 183,
+ 226, 113, 212, 213, 5, 148, 236, 56,
+ 68, 252, 132, 206, 76, 234, 43, 167,
+ 119, 205, 55, 120, 23, 43, 49, 150,
+ 28, 68, 22, 165, 192, 165, 151, 228,
+ 117, 41, 33, 182, 254, 4, 66, 126,
+ 46, 59, 172, 42, 252, 66, 213, 204,
+ 221, 148, 38, 190, 48, 114, 224, 101,
+ 185, 94, 216, 168, 247, 13, 231, 145,
+ 49, 43, 25, 116, 106, 53, 197, 13,
+ 21, 148, 103, 21, 227, 176, 184, 24,
+ 144, 20, 70, 172, 235, 48, 209, 37,
+ 249, 184, 74, 125, 241, 171, 61, 131,
+ 204, 8, 78, 127, 31, 80, 53, 118,
+ 209, 59, 28, 36, 159, 201, 96, 151,
+ 57, 142, 184, 72, 201, 238, 167, 109,
+ 221, 46, 94, 174, 135, 2, 160, 163,
+ 236, 28, 121, 81, 227, 249, 208, 94,
+ 70, 108, 249, 113, 228, 166, 2, 148,
+ 154, 72, 0, 14, 69, 12, 226, 119,
+ 199, 191, 32, 164, 180, 24, 234, 173,
+ 96, 57, 130, 24, 160, 1, 33, 136,
+ 240, 211, 135, 249, 188, 56, 142, 225,
+ 250, 80, 246, 181, 197, 94, 206, 159,
+ 38, 16, 62, 158, 15, 147, 14, 211,
+ 189, 36, 23, 127, 65, 90, 67, 158,
+ 163, 30, 204, 216, 146, 37, 136, 13,
+ 26, 92, 13, 165, 124, 240, 69, 55,
+ 62, 123, 63, 19, 86, 29, 101, 246,
+ 168, 208, 43, 178, 207, 243, 203, 201,
+ 188, 50, 58, 6, 107, 155, 3, 23,
+ 189, 137, 147, 121, 150, 139, 247, 20,
+ 180, 213, 62, 63, 56, 204, 223, 42,
+ 93, 20, 120, 151, 211, 111, 192, 113,
+ 4, 187, 6, 124, 173, 172, 15, 158,
+ 67, 66, 195, 14, 201, 23, 137, 70,
+ 14, 5, 199, 115, 48, 124, 60, 177,
+ 206, 43, 219, 247, 98, 168, 62, 148,
+ 13, 185, 13, 204, 181, 31, 198, 101,
+ 53, 129, 88, 138, 80, 105, 133, 122,
+ 21, 162, 67, 71, 113, 80, 8, 223,
+ 247, 186, 133, 238, 103, 126, 148, 28,
+ 171, 245, 36, 78, 125, 39, 242, 12,
+ 157, 201, 139, 26, 239, 14, 38, 46,
+ 87, 174, 183, 255, 244, 240, 60, 188,
+ 95, 43, 239, 146, 13, 114, 205, 210,
+ 135, 68, 115, 218, 50, 34, 19, 165,
+ 238, 142, 106, 27, 100, 199, 220, 64,
+ 233, 224, 177, 28, 15, 186, 5, 128,
+ 194, 252, 74, 210, 231, 126, 13, 165,
+ 229, 160, 212, 67, 143, 142, 248, 223,
+ 20, 78, 82, 143, 0, 194, 130, 36,
+ 231, 109, 179, 217, 56, 120, 200, 204,
+ 241, 1, 253, 46, 219, 248, 159, 123,
+ 235, 29, 113, 227, 214, 175, 89, 208,
+ 123, 39, 190, 6, 129, 50, 187, 28,
+ 75, 153, 131, 35, 154, 161, 100, 223,
+ 48, 155, 2, 159, 1, 212, 85, 218,
+ 73, 95, 148, 6, 251, 142, 54, 166,
+ 31, 93, 24, 250, 108, 247, 230, 9,
+ 101, 199, 170, 249, 185, 135, 81, 83,
+ 105, 218, 169, 79, 21, 239, 224, 159,
+ 19, 165, 172, 60, 202, 85, 64, 178,
+ 198, 135, 211, 53, 85, 212, 89, 69,
+ 10, 123, 12, 227, 139, 193, 175, 178,
+ 97, 81, 6, 214, 142, 129, 82, 198,
+ 253, 74, 218, 149, 239, 36, 249, 147,
+ 157, 8, 191, 153, 159, 73, 23, 77,
+ 49, 62, 141, 221, 190, 181, 114, 5,
+ 71, 173, 33, 76, 126, 161, 87, 139,
+ 204, 239, 138, 119, 34, 220, 87, 129,
+ 252, 113, 105, 37, 139, 230, 84, 5,
+ 99, 230, 166, 1, 222, 27, 207, 0,
+ 0, 3, 173, 73, 68, 65, 84, 112,
+ 203, 142, 121, 68, 29, 220, 138, 183,
+ 70, 160, 131, 175, 63, 7, 172, 181,
+ 20, 202, 164, 125, 5, 254, 180, 102,
+ 20, 182, 92, 69, 155, 120, 243, 55,
+ 165, 137, 219, 227, 252, 220, 159, 183,
+ 61, 123, 168, 133, 126, 122, 207, 29,
+ 136, 119, 128, 146, 78, 181, 59, 73,
+ 252, 118, 25, 93, 173, 219, 208, 26,
+ 21, 24, 149, 78, 106, 202, 69, 30,
+ 73, 31, 192, 232, 97, 55, 241, 204,
+ 159, 239, 187, 44, 175, 243, 206, 221,
+ 98, 143, 238, 58, 84, 42, 169, 254,
+ 206, 150, 58, 200, 58, 88, 73, 213,
+ 215, 69, 210, 187, 65, 236, 38, 8,
+ 50, 208, 123, 209, 77, 68, 197, 4,
+ 72, 231, 148, 126, 65, 208, 142, 245,
+ 36, 230, 127, 139, 95, 99, 181, 159,
+ 204, 150, 163, 27, 56, 155, 137, 119,
+ 191, 209, 42, 249, 18, 211, 211, 196,
+ 30, 241, 210, 208, 142, 181, 166, 138,
+ 77, 135, 27, 176, 150, 212, 224, 252,
+ 170, 12, 162, 130, 72, 154, 18, 70,
+ 254, 230, 115, 244, 189, 59, 133, 64,
+ 127, 111, 246, 239, 63, 196, 95, 179,
+ 238, 161, 234, 180, 147, 236, 154, 64,
+ 44, 14, 45, 169, 177, 3, 248, 243,
+ 195, 79, 183, 89, 127, 95, 142, 74,
+ 224, 254, 219, 163, 0, 168, 48, 187,
+ 208, 9, 42, 178, 14, 85, 147, 93,
+ 32, 181, 201, 209, 183, 245, 164, 188,
+ 240, 40, 241, 239, 60, 202, 123, 251,
+ 134, 72, 1, 104, 59, 237, 228, 218,
+ 180, 26, 233, 129, 15, 122, 224, 221,
+ 24, 192, 212, 137, 70, 22, 223, 121,
+ 176, 229, 234, 163, 246, 224, 105, 224,
+ 158, 212, 237, 228, 222, 247, 58, 134,
+ 168, 46, 108, 252, 76, 218, 22, 62,
+ 177, 147, 156, 164, 238, 126, 152, 69,
+ 27, 129, 58, 169, 23, 234, 237, 79,
+ 11, 153, 250, 67, 78, 155, 121, 111,
+ 45, 124, 81, 220, 151, 183, 19, 173,
+ 194, 66, 162, 111, 5, 254, 29, 228,
+ 60, 159, 244, 30, 61, 123, 118, 167,
+ 162, 170, 142, 61, 75, 51, 136, 25,
+ 17, 74, 214, 202, 179, 80, 88, 138,
+ 252, 102, 35, 154, 96, 95, 70, 118,
+ 83, 163, 241, 149, 230, 147, 28, 204,
+ 45, 107, 49, 105, 247, 114, 229, 122,
+ 251, 79, 15, 207, 195, 251, 53, 240,
+ 46, 11, 189, 96, 111, 127, 128, 200,
+ 40, 48, 106, 193, 102, 129, 98, 147,
+ 4, 59, 47, 115, 152, 121, 75, 28,
+ 131, 167, 245, 110, 217, 205, 57, 120,
+ 96, 235, 119, 208, 219, 114, 18, 116,
+ 126, 224, 178, 129, 76, 37, 9, 2,
+ 16, 102, 0, 235, 197, 121, 237, 241,
+ 238, 130, 206, 97, 199, 9, 209, 72,
+ 91, 145, 102, 155, 34, 169, 240, 239,
+ 217, 252, 195, 211, 38, 105, 219, 237,
+ 118, 126, 151, 7, 209, 126, 8, 190,
+ 2, 49, 165, 233, 196, 104, 26, 248,
+ 222, 123, 16, 98, 141, 216, 252, 130,
+ 176, 246, 228, 233, 180, 208, 161, 121,
+ 44, 56, 176, 106, 63, 137, 122, 105,
+ 92, 186, 216, 26, 196, 241, 179, 157,
+ 219, 95, 62, 128, 32, 3, 104, 244,
+ 112, 182, 81, 111, 118, 83, 179, 110,
+ 205, 213, 109, 122, 215, 197, 178, 29,
+ 45, 55, 106, 217, 177, 34, 157, 139,
+ 242, 66, 244, 160, 210, 66, 153, 5,
+ 78, 22, 94, 181, 189, 204, 223, 212,
+ 204, 125, 225, 169, 13, 45, 247, 7,
+ 9, 242, 1, 179, 67, 170, 91, 149,
+ 22, 242, 75, 37, 91, 105, 39, 253,
+ 125, 31, 233, 135, 126, 72, 2, 199,
+ 255, 190, 175, 121, 251, 233, 210, 90,
+ 105, 67, 55, 63, 25, 84, 187, 32,
+ 255, 108, 251, 219, 11, 72, 123, 161,
+ 244, 139, 34, 104, 162, 20, 212, 148,
+ 174, 41, 132, 221, 133, 237, 254, 46,
+ 15, 55, 239, 167, 50, 53, 201, 154,
+ 16, 68, 231, 191, 164, 98, 218, 158,
+ 195, 239, 78, 86, 183, 31, 79, 167,
+ 133, 152, 32, 201, 151, 157, 54, 129,
+ 78, 209, 252, 222, 144, 70, 249, 231,
+ 191, 52, 198, 253, 177, 181, 201, 202,
+ 47, 229, 63, 61, 60, 15, 239, 151,
+ 230, 181, 250, 109, 163, 151, 90, 175,
+ 126, 126, 166, 114, 173, 222, 118, 232,
+ 225, 121, 120, 30, 222, 47, 200, 11,
+ 111, 28, 246, 40, 178, 120, 234, 211,
+ 195, 243, 240, 60, 188, 75, 22, 217,
+ 207, 1, 215, 175, 124, 92, 152, 57,
+ 42, 4, 202, 170, 47, 253, 163, 178,
+ 106, 102, 142, 10, 185, 106, 225, 90,
+ 240, 46, 50, 219, 253, 154, 242, 174,
+ 183, 124, 255, 203, 188, 162, 114, 79,
+ 125, 254, 55, 241, 138, 44, 45, 131,
+ 9, 79, 125, 122, 120, 30, 158, 135,
+ 119, 145, 210, 234, 27, 26, 51, 238,
+ 25, 113, 195, 241, 134, 11, 35, 25,
+ 139, 141, 49, 157, 213, 108, 88, 247,
+ 220, 85, 11, 231, 225, 121, 120, 30,
+ 158, 135, 231, 225, 121, 120, 30, 222,
+ 127, 39, 79, 214, 90, 224, 134, 117,
+ 207, 73, 235, 200, 207, 143, 100, 202,
+ 170, 153, 61, 204, 216, 238, 194, 121,
+ 120, 30, 158, 135, 231, 225, 121, 120,
+ 30, 158, 135, 247, 223, 197, 107, 243,
+ 141, 13, 28, 62, 95, 76, 43, 148,
+ 102, 101, 13, 140, 210, 144, 182, 229,
+ 133, 118, 23, 206, 195, 243, 240, 60,
+ 60, 15, 207, 195, 243, 240, 60, 188,
+ 223, 54, 15, 128, 169, 119, 189, 37,
+ 78, 189, 235, 45, 145, 235, 84, 60,
+ 60, 15, 207, 195, 243, 240, 60, 60,
+ 15, 207, 195, 251, 117, 243, 254, 31,
+ 119, 32, 88, 255, 247, 27, 132, 220,
+ 0, 0, 0, 0, 73, 69, 78, 68,
+ 174, 66, 96, 130,
+};
Modified: branches/spectrum-gtk3/spec_panel.c
===================================================================
--- branches/spectrum-gtk3/spec_panel.c 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/spec_panel.c 2012-05-25 17:35:00 UTC (rev 18325)
@@ -1,6 +1,6 @@
/*
*
- * gtk2 spectrum analyzer
+ * gtk3 spectrum analyzer
*
* Copyright (C) 2004-2012 Monty
*
@@ -23,7 +23,8 @@
#include "analyzer.h"
#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
+#include <gdk/gdk.h>
+#include <cairo/cairo.h>
#include "fisharray.h"
#include "spec_plot.h"
#include "io.h"
@@ -32,17 +33,15 @@
static struct panel {
GtkWidget *twirlimage;
- GdkPixmap *ff[19];
- GdkBitmap *fb[19];
+ GdkPixbuf *ff[19];
- GtkAccelGroup *group;
- GtkWidget *toplevel;
-
-
guint fishframe_timer;
int fishframe_init;
int fishframe;
+ GtkAccelGroup *group;
+ GtkWidget *toplevel;
+
GtkWidget *plot;
GtkWidget *run;
GtkWidget **chbuttons;
@@ -66,7 +65,16 @@
int *active;
static void override_base(GtkWidget *w, int active){
- gtk_widget_modify_base (w, GTK_STATE_NORMAL, &w->style->bg[active?GTK_STATE_ACTIVE:GTK_STATE_NORMAL]);
+ GtkStyleContext *c = gtk_widget_get_style_context(w);
+ GdkColor color;
+ GdkRGBA rgba;
+ gtk_style_context_get_color(c,active?GTK_STATE_ACTIVE:GTK_STATE_NORMAL,
+ &rgba);
+ color.red=rgba.red;
+ color.green=rgba.green;
+ color.blue=rgba.blue;
+
+ gtk_widget_modify_base (w, GTK_STATE_NORMAL, &color);
}
static void replot(struct panel *p){
@@ -94,9 +102,8 @@
if(increment_fish)p->fishframe++;
if(p->fishframe>=12)p->fishframe=0;
- gtk_image_set_from_pixmap(GTK_IMAGE(p->twirlimage),
- p->ff[p->fishframe],
- p->fb[p->fishframe]);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(p->twirlimage),
+ p->ff[p->fishframe]);
if(p->fishframe==0 && !process_active){
/* reschedule to blink */
@@ -110,9 +117,8 @@
if(p->fishframe<=1)p->fishframe=12;
if(p->fishframe>=19)p->fishframe=0;
- gtk_image_set_from_pixmap(GTK_IMAGE(p->twirlimage),
- p->ff[p->fishframe],
- p->fb[p->fishframe]);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(p->twirlimage),
+ p->ff[p->fishframe]);
if(p->fishframe==12){
/* reschedule to animate */
@@ -363,7 +369,7 @@
case LINK_SUB_FROM:
ch=0;
for(fi=0;fi<inputs;fi++){
- GdkColor rgb = chcolor(ch);
+ GdkColor rgb = chcolor(NULL,ch);
for(i=ch;i<ch+channels[fi];i++){
GtkWidget *button=p->chbuttons[i];
@@ -377,7 +383,7 @@
ch=0;
for(fi=0;fi<inputs;fi++){
for(i=ch;i<ch+channels[fi];i++){
- GdkColor rgb = chcolor(i);
+ GdkColor rgb = chcolor(NULL,i);
GtkWidget *button=p->chbuttons[i];
set_fg(button,&rgb);
}
@@ -481,22 +487,37 @@
static gint watch_keyboard(GtkWidget *grab_widget,
GdkEventKey *event,
gpointer func_data){
- struct panel *p=(struct panel *)func_data;
-
if(event->type == GDK_KEY_PRESS){
if(event->state == GDK_CONTROL_MASK){
- if(event->keyval == GDK_w) { shutdown(); return TRUE; }
- if(event->keyval == GDK_q) { shutdown(); return TRUE; }
+ if(event->keyval == GDK_KEY_w) { shutdown(); return TRUE; }
+ if(event->keyval == GDK_KEY_q) { shutdown(); return TRUE; }
}
}
return FALSE;
}
+static cairo_status_t png_read_func(void *closure,
+ unsigned char *data,
+ unsigned int length){
+ static unsigned char *prev=0;
+ static int sofar=0;
+
+ if((unsigned char *)closure != prev){
+ sofar=0;
+ prev=(unsigned char *)closure;
+ }
+
+ if(prev){
+ memmove(data,prev+sofar,length);
+ sofar+=length;
+ }
+ return CAIRO_STATUS_SUCCESS;
+}
+
extern char *version;
void panel_create(struct panel *panel){
int i;
- GdkWindow *root=gdk_get_default_root_window();
GtkWidget *topbox=gtk_hbox_new(0,0);
GtkWidget *rightframe=gtk_frame_new (NULL);
GtkWidget *righttopbox=gtk_vbox_new(0,0);
@@ -540,12 +561,12 @@
gtk_widget_set_name(hold_display,"top-control");
gtk_widget_set_name(wbold,"top-control");
g_signal_connect (G_OBJECT (hold_display), "clicked", G_CALLBACK (holdchange), panel);
- gtk_widget_add_accelerator (hold_display, "activate", panel->group, GDK_h, 0, 0);
+ gtk_widget_add_accelerator (hold_display, "activate", panel->group, GDK_KEY_h, 0, 0);
g_signal_connect (G_OBJECT (lock_range), "clicked", G_CALLBACK (lockchange), panel);
- gtk_widget_add_accelerator (lock_range, "activate", panel->group, GDK_y, 0, 0);
- gtk_widget_add_accelerator (lock_range, "activate", panel->group, GDK_Y, 0, 0);
+ gtk_widget_add_accelerator (lock_range, "activate", panel->group, GDK_KEY_y, 0, 0);
+ gtk_widget_add_accelerator (lock_range, "activate", panel->group, GDK_KEY_Y, 0, 0);
g_signal_connect (G_OBJECT (wbold), "clicked", G_CALLBACK (boldchange), panel);
- gtk_widget_add_accelerator (wbold, "activate", panel->group, GDK_b, 0, 0);
+ gtk_widget_add_accelerator (wbold, "activate", panel->group, GDK_KEY_b, 0, 0);
}
@@ -597,29 +618,19 @@
GtkWidget *fishbox=gtk_alignment_new(.5,.5,0,0);
GtkWidget *sepbox=gtk_alignment_new(.5,.85,.7,0);
GtkWidget *topsep=gtk_hseparator_new();
- GdkPixmap *tb;
- GdkPixmap *tp=gdk_pixmap_create_from_xpm_d(root,&tb,NULL,fisharray_xpm);
- GdkGC *cgc=gdk_gc_new(tp);
- GdkGC *bgc=gdk_gc_new(tb);
- int w, h;
+ cairo_surface_t *tp=
+ cairo_image_surface_create_from_png_stream(png_read_func, fisharray);
+ int w=cairo_image_surface_get_width(tp);
+ int h=cairo_image_surface_get_height(tp);
- gdk_drawable_get_size(tp,&w,&h);
w/=19;
- for(i=0;i<19;i++){
- panel->ff[i]=gdk_pixmap_new(tp,w,h,-1);
- panel->fb[i]=gdk_pixmap_new(tb,w,h,-1);
- gdk_draw_drawable(panel->ff[i],cgc,tp,i*w,0,0,0,w,h);
- gdk_draw_drawable(panel->fb[i],bgc,tb,i*w,0,0,0,w,h);
- }
+ for(i=0;i<19;i++)
+ panel->ff[i]=gdk_pixbuf_get_from_surface(tp,i*w,0,w,h);
- g_object_unref(cgc);
- g_object_unref(bgc);
- g_object_unref(tp);
- g_object_unref(tb);
+ cairo_surface_destroy(tp);
+ panel->twirlimage=gtk_image_new_from_pixbuf(panel->ff[0]);
- panel->twirlimage=gtk_image_new_from_pixmap(panel->ff[0],panel->fb[0]);
-
gtk_container_set_border_width (GTK_CONTAINER (toptable), 1);
gtk_box_pack_start(GTK_BOX(righttopbox),toptable,0,0,0);
gtk_container_add (GTK_CONTAINER (sepbox), topsep);
@@ -679,22 +690,22 @@
/* bandwidth mode */
GtkWidget *tbox=panel->bwtable=gtk_table_new(2,2,0);
- GtkWidget *menu=panel->bwbutton=gtk_combo_box_new_text();
+ GtkWidget *menu=panel->bwbutton=gtk_combo_box_text_new();
char *entries[]={"native","display"};
//"1Hz","3Hz","10Hz","30Hz","100Hz","300Hz","1kHz",
//"1/24oct","1/12oct","1/6oct","1/3oct"};
for(i=0;i<2;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu), entries[i]);
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (menu), entries[i]);
//gtk_combo_box_set_active(GTK_COMBO_BOX(menu),0);
g_signal_connect (G_OBJECT (menu), "changed",
G_CALLBACK (bwchange), panel);
- GtkWidget *menu2=panel->bwmodebutton=gtk_combo_box_new_text();
+ GtkWidget *menu2=panel->bwmodebutton=gtk_combo_box_text_new();
char *entries2[]={"RBW","VBW"};
for(i=0;i<2;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu2), entries2[i]);
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(menu2), entries2[i]);
g_signal_connect (G_OBJECT (menu2), "changed",
G_CALLBACK (bwmodechange), panel);
@@ -706,20 +717,20 @@
/* scale */
/* depth */
- GtkWidget *menu3=gtk_combo_box_new_text();
+ GtkWidget *menu3=gtk_combo_box_text_new();
char *entries3[]={"log","ISO","linear"};
for(i=0;i<3;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu3), entries3[i]);
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(menu3), entries3[i]);
gtk_combo_box_set_active(GTK_COMBO_BOX(menu3),plot_scale);
plot_setting(PLOT(panel->plot),plot_scale,plot_mode,plot_link,plot_depth,plot_noise);
g_signal_connect (G_OBJECT (menu3), "changed",
G_CALLBACK (scalechange), panel);
- GtkWidget *menu4=gtk_combo_box_new_text();
+ GtkWidget *menu4=gtk_combo_box_text_new();
char *entries4[]={"1dB","10dB","20dB","45dB","90dB","140dB","200dB"};
for(i=0;i<7;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu4), entries4[i]);
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(menu4), entries4[i]);
g_signal_connect (G_OBJECT (menu4), "changed",
G_CALLBACK (depthchange), panel);
@@ -734,10 +745,10 @@
/* mode */
{
- GtkWidget *menu=gtk_combo_box_new_text();
+ GtkWidget *menu=gtk_combo_box_text_new();
char *entries[]={"current frame","maximum","accumulate","average"};
for(i=0;i<4;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu), entries[i]);
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(menu), entries[i]);
gtk_combo_box_set_active(GTK_COMBO_BOX(menu),plot_mode);
gtk_box_pack_start(GTK_BOX(bbox),menu,0,0,0);
@@ -747,9 +758,10 @@
/* link */
{
- GtkWidget *menu=gtk_combo_box_new_text();
+ GtkWidget *menu=gtk_combo_box_text_new();
for(i=0;i<LINKS;i++)
- gtk_combo_box_append_text (GTK_COMBO_BOX (menu), link_entries[i]);
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(menu),
+ link_entries[i]);
gtk_combo_box_set_active(GTK_COMBO_BOX(menu),0);
gtk_box_pack_start(GTK_BOX(bbox),menu,0,0,0);
@@ -766,8 +778,8 @@
/* run/pause */
{
GtkWidget *button=gtk_toggle_button_new_with_mnemonic("_run");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_space, 0, 0);
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_r, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_space, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_r, 0, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (runchange), panel);
gtk_box_pack_start(GTK_BOX(bbox),button,0,0,0);
panel->run=button;
@@ -778,14 +790,14 @@
{
GtkWidget *box=gtk_hbox_new(1,1);
GtkWidget *button=gtk_toggle_button_new_with_mnemonic("_loop");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_l, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_l, 0, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (loopchange), panel);
gtk_box_pack_start(GTK_BOX(box),button,1,1,0);
gtk_widget_set_sensitive(button,global_seekable);
button=gtk_button_new_with_mnemonic("re_wind");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_w, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_w, 0, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (rewindchange), panel);
gtk_widget_set_sensitive(button,global_seekable);
gtk_box_pack_start(GTK_BOX(box),button,1,1,0);
@@ -798,13 +810,13 @@
{
GtkWidget *box=gtk_hbox_new(1,1);
GtkWidget *button=gtk_button_new_with_mnemonic("_clear data");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_c, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_c, 0, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (clearchange), panel);
gtk_box_pack_start(GTK_BOX(box),button,1,1,0);
button=gtk_button_new_with_mnemonic("_dump data");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_d, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_d, 0, 0);
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (dump), panel);
gtk_box_pack_start(GTK_BOX(box),button,1,1,0);
@@ -815,7 +827,7 @@
#if 0
{
GtkWidget *button=gtk_toggle_button_new_with_mnemonic("sample _noise floor");
- gtk_widget_add_accelerator (button, "activate", panel->group, GDK_n, 0, 0);
+ gtk_widget_add_accelerator (button, "activate", panel->group, GDK_KEY_n, 0, 0);
g_signal_connect (G_OBJECT (button), "toggled", G_CALLBACK (noise), panel);
gtk_box_pack_start(GTK_BOX(bbox),button,0,0,0);
}
@@ -875,12 +887,14 @@
return 1;
}
+#define STR(X) #X
+
void panel_go(int argc,char *argv[]){
char *homedir=getenv("HOME");
int found=0;
memset(&p,0,sizeof(p));
- found|=look_for_gtkrc(ETCDIR"/spectrum-gtkrc");
+ found|=look_for_gtkrc(STR(ETCDIR) "/spectrum-gtkrc");
{
char *rcdir=getenv("HOME");
if(rcdir){
@@ -911,14 +925,14 @@
"\t./spectrum-gtkrc\n"
"\t$(SPECTRUM_RCDIR)/spectrum-gtkrc\n"
"\t~/.spectrum/spectrum-gtkrc\n\t"
- ETCDIR"/spectrum-gtkrc\n"
+ STR(ETCDIR)"/spectrum-gtkrc\n"
"This configuration file is used to tune the color, font and other detail aspects\n"
"of the user interface. Although the analyzer will work without it, the UI\n"
"appearence will likely make the application harder to use due to missing visual\n"
"cues.\n");
}
- gtk_rc_add_default_file(ETCDIR"/spectrum-gtkrc");
+ gtk_rc_add_default_file(STR(ETCDIR) "/spectrum-gtkrc");
if(homedir){
char *rcfile="/.spectrum-gtkrc";
char *homerc=calloc(1,strlen(homedir)+strlen(rcfile)+1);
@@ -936,13 +950,12 @@
/* set up watching the event pipe */
{
GIOChannel *channel = g_io_channel_unix_new (eventpipe[0]);
- guint id;
g_io_channel_set_encoding (channel, NULL, NULL);
g_io_channel_set_buffered (channel, FALSE);
g_io_channel_set_close_on_unref (channel, TRUE);
- id = g_io_add_watch (channel, G_IO_IN, async_event_handle, &p);
+ g_io_add_watch (channel, G_IO_IN, async_event_handle, &p);
g_io_channel_unref (channel);
Modified: branches/spectrum-gtk3/spec_plot.c
===================================================================
--- branches/spectrum-gtk3/spec_plot.c 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/spec_plot.c 2012-05-25 17:35:00 UTC (rev 18325)
@@ -26,6 +26,7 @@
#include <math.h>
#include <string.h>
#include <gdk/gdk.h>
+#include <cairo/cairo.h>
#include "spec_plot.h"
static double log_lfreqs[5]={10.,100.,1000.,10000.,100000};
@@ -45,37 +46,6 @@
static GtkDrawingAreaClass *parent_class = NULL;
-static void compute_imp_scale(GtkWidget *widget){
- Plot *p=PLOT(widget);
- int height=widget->allocation.height-p->pady;
- int i;
- double lfreqs[9]={10000000.,1000000.,100000.,10000.,1000.,100.,10.,1.,.1};
- double tfreqs[64]={9000000.,8000000.,7000000.,6000000.,
- 5000000.,4000000.,3000000.,2000000.,
- 900000.,800000.,700000.,600000.,
- 500000.,400000.,300000.,200000.,
- 90000.,80000.,70000.,60000.,
- 50000.,40000.,30000.,20000.,
- 9000.,8000.,7000.,6000.,
- 5000.,4000.,3000.,2000.,
- 900.,800.,700.,600.,
- 500.,400.,300.,200.,
- 90.,80.,70.,60.,
- 50.,40.,30.,20,
- 9.,8.,7.,6.,
- 5.,4.,3.,2.,
- .9,.8,.7,.6,
- .5,.4,.3,.2};
-
- for(i=0;i<9;i++)
- p->ygrid[i]=rint( (log10(p->disp_ymax)-log10(lfreqs[i]))/(log10(p->disp_ymax)-log10(.1)) * (height-1));
- for(i=0;i<64;i++)
- p->ytic[i]=rint( (log10(p->disp_ymax)-log10(tfreqs[i]))/(log10(p->disp_ymax)-log10(.1)) * (height-1));
- p->ygrids=9;
- p->ytics=64;
-
-}
-
int phase_active_p(Plot *p){
if(p->link == LINK_PHASE){
int cho=0;
@@ -90,8 +60,8 @@
static void compute_metadata(GtkWidget *widget){
Plot *p=PLOT(widget);
int phase = phase_active_p(p);
- int width = widget->allocation.width-p->padx-(phase?p->phax:0);
- int rate=p->maxrate;
+ int width = gtk_widget_get_allocated_width(widget)-
+ p->padx-(phase?p->phax:0);
int nyq=p->maxrate/2.;
int i;
@@ -176,152 +146,104 @@
}
}
-GdkColor chcolor(int ch){
+GdkColor chcolor(cairo_t *c, int ch){
GdkColor rgb={0,0,0,0};
-
switch(ch%7){
case 0:
rgb.red=0x4000;
rgb.green=0x4000;
rgb.blue=0x4000;
+ if(c)cairo_set_source_rgb(c,.25,.25,.25);
break;
case 1:
rgb.red=0xd000;
rgb.green=0x0000;
rgb.blue=0x0000;
+ if(c)cairo_set_source_rgb(c,.8125,0,0);
break;
case 2:
rgb.red=0x0000;
rgb.green=0xb000;
rgb.blue=0x0000;
+ if(c)cairo_set_source_rgb(c,0,.6875,0);
break;
case 3:
rgb.red=0x0000;
rgb.green=0x0000;
rgb.blue=0xf000;
+ if(c)cairo_set_source_rgb(c,0,0,.9375);
break;
case 4:
rgb.red=0xc000;
rgb.green=0xc000;
rgb.blue=0x0000;
+ if(c)cairo_set_source_rgb(c,.75,.75,.75);
break;
case 5:
rgb.red=0x0000;
rgb.green=0xc000;
rgb.blue=0xc000;
+ if(c)cairo_set_source_rgb(c,0,.75,.75);
break;
case 6:
rgb.red=0xc000;
rgb.green=0x0000;
rgb.blue=0xe000;
+ if(c)cairo_set_source_rgb(c,.75,0,.875);
break;
}
return rgb;
}
-static void draw(GtkWidget *widget){
+static gboolean draw(GtkWidget *widget, cairo_t *c){
int i;
Plot *p=PLOT(widget);
- int height=widget->allocation.height;
- int width=widget->allocation.width;
- GtkWidget *parent=gtk_widget_get_parent(widget);
-#if 0
- int impedence = (p->link == LINK_IMPEDENCE_p1 ||
- p->link == LINK_IMPEDENCE_1 ||
- p->link == LINK_IMPEDENCE_10);
-#endif
+ GtkStyleContext *context = gtk_widget_get_style_context (widget);
int phase = phase_active_p(p);
+ int height = gtk_widget_get_allocated_height(widget);
+ int width = gtk_widget_get_allocated_width(widget);
int padx = p->padx;
int phax = phase ? p->phax : 0;
int pwidth = width - padx - phax;
- if(!p->drawgc){
- p->drawgc=gdk_gc_new(p->backing);
- gdk_gc_copy(p->drawgc,widget->style->black_gc);
- }
+ GdkRGBA gray;
+ GdkRGBA rgb_bg;
+ GdkRGBA rgb_fg;
- if(!p->dashes){
- p->dashes=gdk_gc_new(p->backing);
- gdk_gc_copy(p->dashes, p->drawgc);
- gdk_gc_set_line_attributes(p->dashes, 1, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER);
- gdk_gc_set_dashes(p->dashes,0,(signed char *)"\002\002",2);
- }
- if(!p->graygc){
- GdkColor rgb_bg;
- GdkColor rgb_fg;
- GdkGCValues v;
- p->graygc=gdk_gc_new(p->backing);
- gdk_gc_copy(p->graygc, p->drawgc);
- gdk_gc_get_values(p->graygc,&v);
- gdk_colormap_query_color(gdk_gc_get_colormap(p->graygc),v.foreground.pixel,&rgb_fg);
- gdk_colormap_query_color(gdk_gc_get_colormap(p->graygc),v.background.pixel,&rgb_bg);
- rgb_fg.red = (rgb_fg.red*3 + rgb_bg.red*2)/5;
- rgb_fg.green = (rgb_fg.green*3 + rgb_bg.green*2)/5;
- rgb_fg.blue = (rgb_fg.blue*3 + rgb_bg.blue*2)/5;
- gdk_gc_set_rgb_fg_color(p->graygc,&rgb_fg);
- }
- if(!p->phasegc){
- GdkColor rgb={0,0x8000,0x0000,0x0000};
- p->phasegc=gdk_gc_new(p->backing);
- gdk_gc_set_rgb_fg_color(p->phasegc,&rgb);
- gdk_gc_set_line_attributes(p->phasegc,1,GDK_LINE_SOLID,GDK_CAP_PROJECTING,GDK_JOIN_MITER);
- }
+ gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &rgb_fg);
+ gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &rgb_bg);
- {
- const GdkRectangle clip = {p->padx,0,pwidth,height-p->pady};
- GdkGCValues values;
- //gdk_gc_get_values(p->drawgc,&values);
- values.line_width=1;
- gdk_gc_set_values(p->drawgc,&values,GDK_GC_LINE_WIDTH);
- gdk_gc_set_clip_rectangle (p->drawgc, &clip);
- }
+ gray.alpha = 1.;
+ gray.red = (rgb_fg.red*3 + rgb_bg.red*2)/5;
+ gray.green = (rgb_fg.green*3 + rgb_bg.green*2)/5;
+ gray.blue = (rgb_fg.blue*3 + rgb_bg.blue*2)/5;
+ cairo_set_line_width(c,1);
+
/* clear the old rectangle out */
- {
- GdkGC *gc=parent->style->bg_gc[0];
- gdk_draw_rectangle(p->backing,gc,1,0,0,padx,height);
- gdk_draw_rectangle(p->backing,gc,1,0,height-p->pady,width,p->pady);
- if(phase)
- gdk_draw_rectangle(p->backing,gc,1,width-phax,0,phax,height);
+ gdk_cairo_set_source_rgba (c, &rgb_bg);
+ cairo_rectangle (c,0,0,padx,height);
+ cairo_rectangle(c,0,height-p->pady,width,p->pady);
+ if(phase)
+ cairo_rectangle(c,width-phax,0,phax,height);
+ cairo_fill(c);
- gc=parent->style->white_gc;
- gdk_draw_rectangle(p->backing,gc,1,padx,0,pwidth,height-p->pady);
- }
+ cairo_set_source_rgb (c, 1,1,1);
+ cairo_rectangle(c,padx,0,pwidth,height-p->pady);
+ cairo_fill(c);
- /* draw the noise floor if active */
- #if 0
- if(p->floor){
- GdkColor rgb = {0,0xd000,0xd000,0xd000};
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
+ cairo_set_line_cap(c,CAIRO_LINE_CAP_SQUARE);
- for(i=0;i<pwidth;i++){
- float val=p->floor[i];
- int y;
-
- /* No noise floor is passed back for display in the modes where it's irrelevant */
- y= rint((height-p->pady-1)/p->disp_depth*(p->disp_ymax-val));
- if(y<height-p->pady)
- gdk_draw_line(p->backing,p->drawgc,padx+i,y,padx+i,height-p->pady-1);
- }
- }
- #endif
-
/* draw the light x grid */
- {
- int i;
- GdkColor rgb={0,0,0,0};
-
- rgb.red=0xc000;
- rgb.green=0xff00;
- rgb.blue=0xff00;
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
-
- for(i=0;i<p->xtics;i++)
- gdk_draw_line(p->backing,p->drawgc,p->xtic[i],0,p->xtic[i],height-p->pady);
+ cairo_set_source_rgb(c, .75, 1, 1);
+ for(i=0;i<p->xtics;i++){
+ cairo_move_to(c,p->xtic[i]+.5,.5);
+ cairo_line_to(c,p->xtic[i]+.5,height-p->pady+.5);
}
+ cairo_stroke(c);
- /* draw the x labels */
+ /* draw the x labels */
{
PangoLayout **proper;
switch(p->scale){
@@ -335,56 +257,20 @@
proper=p->lin_layout;
break;
}
+ gdk_cairo_set_source_rgba (c, &rgb_fg);
for(i=0;i<p->xlgrids;i++){
int px,py;
pango_layout_get_pixel_size(proper[i],&px,&py);
- if(p->xlgrid[i]+(px/2)<width)
- gdk_draw_layout (p->backing,
- widget->style->black_gc,
- p->xlgrid[i]-(px/2), height-py+2,
- proper[i]);
+ if(p->xlgrid[i]+(px/2)<width){
+ cairo_move_to(c,p->xlgrid[i]-(px/2)+.5, height-py+2.5);
+ pango_cairo_show_layout(c,proper[i]);
+ }
}
}
- /* draw the y grid */
- //if(impedence){ /* impedence mode */
- if(0){
-
- /* light grid */
-
- GdkColor rgb={0,0,0,0};
- rgb.red=0xc000;
- rgb.green=0xff00;
- rgb.blue=0xff00;
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
-
- compute_imp_scale(widget);
-
- for(i=0;i<p->ytics;i++)
- gdk_draw_line(p->backing,p->drawgc,padx,p->ytic[i],pwidth,p->ytic[i]);
-
- /* dark grid */
- rgb.red=0x0000;
- rgb.green=0xc000;
- rgb.blue=0xc000;
-
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
-
- for(i=0;i<p->ygrids;i++){
- int px,py;
- pango_layout_get_pixel_size(p->imp_layout[i],&px,&py);
-
- gdk_draw_layout (p->backing,
- widget->style->black_gc,
- padx-px-2, p->ygrid[i]-py/2,
- p->imp_layout[i]);
-
- gdk_draw_line(p->backing,p->drawgc,padx,p->ygrid[i],pwidth,p->ygrid[i]);
- }
-
- }else{
- GdkColor rgb={0,0,0,0};
+ {
+ /* draw the y grid */
float emheight = (height-p->pady)/p->pady;
float emperdB = emheight/p->disp_depth;
float pxperdB = (height-p->pady)/p->disp_depth;
@@ -449,42 +335,41 @@
}
/* Light Y grid */
- rgb.red=0xc000;
- rgb.green=0xff00;
- rgb.blue=0xff00;
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
- gdk_gc_set_rgb_fg_color(p->dashes,&rgb);
-
float ymin = (p->disp_ymax - p->disp_depth)*1000;
int yval = rint((p->disp_ymax*1000/subminordel)+1)*subminordel;
+ cairo_set_source_rgb(c,.75,1,1);
while(1){
float ydel = (yval - ymin)/(p->disp_depth*1000);
int ymid = rint(height-p->pady-1 - (height-p->pady) * ydel);
+ double d[2]={2,3};
if(ymid>=height-p->pady)break;
if(ymid>=0){
if(yval % majordel == 0){
}else if(yval % minordel == 0){
- gdk_draw_line(p->backing,p->drawgc,padx,ymid,width-phax,ymid);
+ cairo_move_to(c,padx+.5,ymid+.5);
+ cairo_line_to(c,width-phax+.5,ymid+.5);
}else{
- gdk_draw_line(p->backing,p->dashes,padx,ymid,width-phax,ymid);
+ cairo_stroke(c);
+
+ cairo_set_dash(c,d,2,0);
+ cairo_move_to(c,padx+.5,ymid+.5);
+ cairo_line_to(c,width-phax+.5,ymid+.5);
+ cairo_stroke(c);
+ cairo_set_dash(c,d,0,0);
}
}
yval-=subminordel;
}
+ cairo_stroke(c);
/* Dark Y grid */
- rgb.red=0x0000;
- rgb.green=0xc000;
- rgb.blue=0xc000;
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
-
- ymin = (p->disp_ymax - p->disp_depth)*1000;
- yval = rint((p->disp_ymax*1000/majordel)+1)*majordel;
-
{
+ ymin = (p->disp_ymax - p->disp_depth)*1000;
+ yval = rint((p->disp_ymax*1000/majordel)+1)*majordel;
+
int px,py,pxdB,pxN,pxMAX;
pango_layout_get_pixel_size(p->db_layoutN,&pxN,&py);
pango_layout_get_pixel_size(p->db_layoutdB,&pxdB,&py);
@@ -498,7 +383,6 @@
if(ymid>=height-p->pady)break;
if(ymid>=0){
- int do_dB=0;
int label = yval/100+2000;
if(label>=0 && label<=4000 /* in range check */
@@ -512,53 +396,49 @@
-99.9
-999.9 */
+ cairo_save(c);
+ gdk_cairo_set_source_rgba(c,&gray);
+
if(fabsf(yval*.001)<9.98){
- gdk_draw_layout (p->backing,
- p->graygc,
- padx-pxdB-2, ymid-py/2,
- p->db_layoutdB);
+ cairo_move_to(c,padx-pxdB-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layoutdB);
sofar+=pxdB;
}
pango_layout_get_pixel_size(p->db_layout1[abs(yval/100)%10],&px,&py);
sofar+=px;
- gdk_draw_layout (p->backing,
- p->graygc,
- padx-sofar-2, ymid-py/2,
- p->db_layout1[abs(yval/100)%10]);
+ cairo_move_to(c,padx-sofar-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layout1[abs(yval/100)%10]);
if(yval/1000!=0){ /* no leading zero please */
pango_layout_get_pixel_size(p->db_layout[yval/1000+200],&px,&py);
sofar+=px;
- gdk_draw_layout (p->backing,
- p->graygc,
- padx-sofar-2, ymid-py/2,
- p->db_layout[yval/1000+200]);
+ cairo_move_to(c,padx-sofar-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layout[yval/1000+200]);
}else{
if(yval<0){
/* need to explicitly place negative */
sofar+=pxN;
- gdk_draw_layout (p->backing,
- p->graygc,
- padx-sofar-2, ymid-py/2,
- p->db_layoutN);
+ cairo_move_to(c,padx-sofar-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layoutN);
}
}
+ cairo_restore(c);
}else{
- gdk_draw_layout (p->backing,
- widget->style->black_gc,
- padx-pxdB-2, ymid-py/2,
- p->db_layoutdB);
+ gdk_cairo_set_source_rgba(c,&rgb_fg);
+ cairo_move_to(c,padx-pxdB-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layoutdB);
pango_layout_get_pixel_size(p->db_layout[yval/1000+200],&px,&py);
-
- gdk_draw_layout (p->backing,
- widget->style->black_gc,
- padx-px-pxdB-2, ymid-py/2,
- p->db_layout[yval/1000+200]);
+ cairo_move_to(c,padx-px-pxdB-1.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->db_layout[yval/1000+200]);
}
}
- gdk_draw_line(p->backing,p->drawgc,padx,ymid,width-phax,ymid);
+
+ cairo_set_source_rgb(c,0,.75,.75);
+ cairo_move_to(c,padx+.5,ymid+.5);
+ cairo_line_to(c,width-phax+.5,ymid+.5);
+ cairo_stroke(c);
}
yval-=majordel;
}
@@ -568,34 +448,30 @@
/* dark x grid */
{
int i;
- GdkColor rgb={0,0,0,0};
-
- rgb.red=0x0000;
- rgb.green=0xc000;
- rgb.blue=0xc000;
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
-
- for(i=0;i<p->xgrids;i++)
- gdk_draw_line(p->backing,p->drawgc,p->xgrid[i],0,p->xgrid[i],height-p->pady);
+ cairo_set_source_rgb(c,0,.75,.75);
+ for(i=0;i<p->xgrids;i++){
+ cairo_move_to(c,p->xgrid[i]+.5,.5);
+ cairo_line_to(c,p->xgrid[i]+.5,height-p->pady+.5);
+ }
+ cairo_stroke(c);
}
+ cairo_save(c);
+ cairo_set_line_width(c,p->bold+1);
+ cairo_rectangle(c,padx,0,pwidth,height-p->pady);
+ cairo_clip(c);
- gdk_gc_set_line_attributes(p->drawgc,p->bold+1,GDK_LINE_SOLID,GDK_CAP_PROJECTING,
- GDK_JOIN_MITER);
-
/* draw actual data */
if(p->ydata){
int cho=0;
int gi;
for(gi=0;gi<p->groups;gi++){
int ch;
- GdkColor rgb;
for(ch=cho;ch<cho+p->ch[gi];ch++){
if(p->ch_active[ch]){
- rgb = chcolor(ch);
- gdk_gc_set_rgb_fg_color(p->drawgc,&rgb);
+ chcolor(c,ch);
for(i=0;i<pwidth;i++){
float valmin=p->ydata[ch][i*2];
@@ -604,18 +480,8 @@
if(!isnan(valmin) && !isnan(valmax)){
- //if(impedence){ /* log scale for impedence */
- if(0){
+ if(phase && ch==cho+1){
- ymin = rint( (log10(p->disp_ymax)-log10(valmin))/
- (log10(p->disp_ymax)-log10(.1)) *
- (height-p->pady-1));
- ymax = rint( (log10(p->disp_ymax)-log10(valmax))/
- (log10(p->disp_ymax)-log10(.1)) *
- (height-p->pady-1));
-
- }else if(phase && ch==cho+1){
-
ymin = rint((height-p->pady-1)/
(p->disp_pmax-p->disp_pmin)*
(p->disp_pmax-valmin));
@@ -630,15 +496,19 @@
}
- gdk_draw_line(p->backing,p->drawgc,padx+i,ymin,padx+i,ymax);
+ cairo_move_to(c,padx+i+.5,ymin+.5);
+ cairo_line_to(c,padx+i+.5,ymax+.5);
}
}
+ cairo_stroke(c);
}
}
cho+=p->ch[gi];
}
}
+ cairo_restore(c);
+
/* phase? draw in phase and tics on right axis */
if(phase){
float depth = p->disp_pmax-p->disp_pmin;
@@ -648,6 +518,8 @@
step=2;
if(del>8)step=1;
+ cairo_set_source_rgb(0,.5,0,0);
+
for(i=0;i<38;i++){
if(((label-i)&1)==0 || step==1){
int ymid=rint(del * (i*10+off));
@@ -655,9 +527,8 @@
if(label-i>=0 && label-i<37 && ymid>=p->pady/2 && ymid<height-p->pady/2){
pango_layout_get_pixel_size(p->phase_layout[label-i],&px,&py);
- gdk_draw_layout (p->backing,p->phasegc,
- width-p->phax+2, ymid-py/2,
- p->phase_layout[label-i]);
+ cairo_move_to(c,width-p->phax+2.5, ymid-py/2+.5);
+ pango_cairo_show_layout(c,p->phase_layout[label-i]);
}
}
}
@@ -667,24 +538,31 @@
int ymid=rint(del * (i+off));
int pv = rint(p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin));
if(ymid>=height-p->pady)break;
- if(ymid>=0 && pv>=-180 && pv<=180)
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-(i%5==0?15:10),ymid,width-p->phax-(i%5==0?5:7),ymid);
+ if(ymid>=0 && pv>=-180 && pv<=180){
+ cairo_move_to(c,width-p->phax-(i%5==0?15:10)+.5,
+ ymid+.5);
+ cairo_line_to(c,width-p->phax-(i%5==0?5:7)+.5,ymid+.5);
+ }
}
}else if(del>5){
for(i=0;;i++){
int ymid=rint(del * (i*2+off));
int pv = rint(p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin));
if(ymid>=height-p->pady)break;
- if(ymid>=0 && pv>=-180 && pv<=180)
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-12,ymid,width-p->phax-7,ymid);
+ if(ymid>=0 && pv>=-180 && pv<=180){
+ cairo_move_to(c,width-p->phax-12+.5,ymid+.5);
+ cairo_line_to(c,width-p->phax-7,ymid);
+ }
}
} else if(del>2){
for(i=0;;i++){
int ymid=rint(del * (i*5+off));
int pv = rint(p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin));
if(ymid>=height-p->pady)break;
- if(ymid>=0 && pv>=-180 && pv<=180)
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-15,ymid,width-p->phax-5,ymid);
+ if(ymid>=0 && pv>=-180 && pv<=180){
+ cairo_move_to(c,width-p->phax-15+.5,ymid+.5);
+ cairo_line_to(c,width-p->phax-5+.5,ymid+.5);
+ }
}
}
@@ -694,9 +572,12 @@
int pv = rint(p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin));
if(ymid>=height-p->pady)break;
if(ymid>=0 && pv>=-180 && pv<=180){
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-5,ymid-1,width-p->phax-1,ymid-1);
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-25,ymid,width-p->phax-1,ymid);
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-5,ymid+1,width-p->phax-1,ymid+1);
+ cairo_move_to(c,width-p->phax-5+.5,ymid-1+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid-1+.5);
+ cairo_move_to(c,width-p->phax-25+.5,ymid+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid+.5);
+ cairo_move_to(c,width-p->phax-5+.5,ymid+1+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid+1+.5);
}
}
}else{
@@ -705,8 +586,10 @@
int ymid=rint(del * (i*10+off));
int pv = rint(p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin));
if(ymid>=height-p->pady)break;
- if(ymid>=0 && pv>=-180 && pv<=180)
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-15,ymid,width-p->phax-5,ymid);
+ if(ymid>=0 && pv>=-180 && pv<=180){
+ cairo_move_to(c,width-p->phax-15+.5,ymid+.5);
+ cairo_line_to(c,width-p->phax-5+.5,ymid+.5);
+ }
}
for(i=0;;i++){
@@ -714,39 +597,18 @@
int pv = rint((p->pmax - ymid/(float)(height-p->pady) * (p->pmax - p->pmin))/10);
if(ymid>=height-p->pady)break;
if(ymid>=0 && pv>=-18 && pv<=18 && (pv&1)==0){
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-5,ymid-1,width-p->phax-1,ymid-1);
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-25,ymid,width-p->phax-1,ymid);
- gdk_draw_line(p->backing,p->phasegc,width-p->phax-5,ymid+1,width-p->phax-1,ymid+1);
+ cairo_move_to(c,width-p->phax-5+.5,ymid-1+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid-1+.5);
+ cairo_move_to(c,width-p->phax-25+.5,ymid+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid+.5);
+ cairo_move_to(c,width-p->phax-5+.5,ymid+1+.5);
+ cairo_line_to(c,width-p->phax-1+.5,ymid+1+.5);
}
}
}
+ cairo_stroke(c);
}
-}
-static void draw_and_expose(GtkWidget *widget){
- Plot *p=PLOT(widget);
- if(!GDK_IS_DRAWABLE(p->backing))return;
- draw(widget);
- if(!GTK_WIDGET_DRAWABLE(widget))return;
- if(!GDK_IS_DRAWABLE(widget->window))return;
- gdk_draw_drawable(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- p->backing,
- 0, 0,
- 0, 0,
- widget->allocation.width,
- widget->allocation.height);
-}
-
-static gboolean expose( GtkWidget *widget, GdkEventExpose *event ){
- Plot *p=PLOT(widget);
- gdk_draw_drawable(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- p->backing,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
-
return FALSE;
}
@@ -846,19 +708,69 @@
p->phax=phax+2;
}
-static gboolean configure(GtkWidget *widget, GdkEventConfigure *event){
+static void get_preferred_width (GtkWidget *widget,
+ gint *minw, gint *w){
+ GtkRequisition r;
+ size_request(widget,&r);
+ *minw=*w=r.width;
+}
+
+static void get_preferred_height (GtkWidget *widget,
+ gint *minh, gint *h){
+ GtkRequisition r;
+ size_request(widget,&r);
+ *minh=*h=r.height;
+}
+
+#if 0
+static void call_expose(GtkWidget *widget){
+ GdkRectangle rect={0,0,0,0};
+ rect.width=gtk_widget_get_allocated_width(widget);
+ rect.height=gtk_widget_get_allocated_height(widget);
+ gdk_window_invalidate_rect (gtk_widget_get_window(widget),&rect,FALSE);
+}
+#endif
+
+static void draw_and_expose(GtkWidget *widget){
Plot *p=PLOT(widget);
+ if(p->backing){
+ GtkAllocation a;
+ cairo_t *c = cairo_create(p->backing);
+ draw(widget,c);
+ cairo_destroy(c);
- if (p->backing)
- g_object_unref(p->backing);
+ gtk_widget_get_allocation(widget,&a);
+ c = gdk_cairo_create (gtk_widget_get_window(widget));
+ cairo_set_source_surface (c, p->backing, a.x, a.y);
+ cairo_paint (c);
+ cairo_destroy (c);
+ }
+}
- p->backing = gdk_pixmap_new(widget->window,
- widget->allocation.width,
- widget->allocation.height,
- -1);
+static gboolean expose(GtkWidget *widget, cairo_t *c){
+ Plot *p=PLOT(widget);
+ int w=gtk_widget_get_allocated_width(widget);
+ int h=gtk_widget_get_allocated_height(widget);
+
+ cairo_set_source_surface (c, p->backing, 0, 0);
+ cairo_rectangle(c,0,0,w,h);
+ cairo_fill(c);
+ return FALSE;
+}
+
+static gboolean configure(GtkWidget *widget, GdkEventConfigure *event){
+ Plot *p=PLOT(widget);
p->ydata=NULL;
p->configured=1;
+ if (p->backing)
+ cairo_surface_destroy(p->backing);
+
+ p->backing = cairo_image_surface_create
+ (CAIRO_FORMAT_RGB24,
+ gtk_widget_get_allocated_width(widget),
+ gtk_widget_get_allocated_height(widget));
+
compute_metadata(widget);
plot_refresh(p,NULL);
draw_and_expose(widget);
@@ -867,20 +779,21 @@
}
static void plot_class_init (PlotClass *class){
- int i,w,h;
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
- GdkWindow *root=gdk_get_default_root_window();
parent_class = g_type_class_peek_parent (class);
- widget_class->expose_event = expose;
+ widget_class->draw = expose;
widget_class->configure_event = configure;
- widget_class->size_request = size_request;
+ widget_class->get_preferred_width = get_preferred_width;
+ widget_class->get_preferred_height = get_preferred_height;
}
static void plot_init (Plot *p){
p->mode=0;
p->scale=0;
p->depth=45.;
+ gtk_widget_set_has_window(GTK_WIDGET(p),FALSE);
+ gtk_widget_set_double_buffered (GTK_WIDGET(p), FALSE);
}
GType plot_get_type (void){
@@ -1040,8 +953,9 @@
void plot_refresh (Plot *p, int *process){
float ymax,pmax,pmin;
int phase = phase_active_p(p);
- int width=GTK_WIDGET(p)->allocation.width-p->padx-(phase ? p->phax : 0);
- int height=GTK_WIDGET(p)->allocation.height-p->pady;
+ int width=gtk_widget_get_allocated_width(GTK_WIDGET(p))-
+ p->padx-(phase ? p->phax : 0);
+ int height=gtk_widget_get_allocated_height(GTK_WIDGET(p))-p->pady;
float **data;
#define THRESH .25
@@ -1196,7 +1110,8 @@
void plot_clear (Plot *p){
GtkWidget *widget=GTK_WIDGET(p);
int phase = phase_active_p(p);
- int width=GTK_WIDGET(p)->allocation.width-p->padx-(phase ? p->phax : 0);
+ int width=gtk_widget_get_allocated_width(GTK_WIDGET(p))-
+ p->padx-(phase ? p->phax : 0);
int i,j;
if(p->ydata)
Modified: branches/spectrum-gtk3/spec_plot.h
===================================================================
--- branches/spectrum-gtk3/spec_plot.h 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/spec_plot.h 2012-05-25 17:35:00 UTC (rev 18325)
@@ -40,14 +40,9 @@
typedef struct _PlotClass PlotClass;
struct _Plot{
+ GtkDrawingArea canvas;
+ cairo_surface_t *backing;
- GtkDrawingArea canvas;
- GdkPixmap *backing;
- GdkGC *drawgc;
- GdkGC *dashes;
- GdkGC *graygc;
- GdkGC *phasegc;
-
PangoLayout **lin_layout;
PangoLayout **log_layout;
PangoLayout **iso_layout;
@@ -135,7 +130,7 @@
int plot_get_left_pad (Plot *m);
int plot_get_right_pad (Plot *m);
-GdkColor chcolor(int ch);
+GdkColor chcolor(cairo_t *c, int ch);
G_END_DECLS
Modified: branches/spectrum-gtk3/spec_process.c
===================================================================
--- branches/spectrum-gtk3/spec_process.c 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/spec_process.c 2012-05-25 17:35:00 UTC (rev 18325)
@@ -1,7 +1,7 @@
/*
*
- * gtk2 spectrum analyzer
- *
+ * gtk3 spectrum analyzer
+ *
* Copyright (C) 2004-2012 Monty
*
* This analyzer is free software; you can redistribute it and/or modify
@@ -119,8 +119,6 @@
/* return 0 on EOF, 1 otherwise */
static int process(){
int fi,i,j,ch;
- int eof_all;
- int noise=plot_noise;
if(acc_rewind)
rewind_files();
Modified: branches/spectrum-gtk3/version.h
===================================================================
--- branches/spectrum-gtk3/version.h 2012-05-25 17:30:34 UTC (rev 18324)
+++ branches/spectrum-gtk3/version.h 2012-05-25 17:35:00 UTC (rev 18325)
@@ -1,2 +1,2 @@
#define VERSION "$Id$ "
-/* DO NOT EDIT: Automated versioning hack [Fri May 18 04:39:31 EDT 2012] */
+/* DO NOT EDIT: Automated versioning hack [Sat May 19 04:46:31 EDT 2012] */
More information about the commits
mailing list