From cb6f130217b1521c8051080ecbe637fecdfb1d6b Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 11:20:49 -0800 Subject: [PATCH 01/24] Comment out links to missing docs. --- doc-src/content/help/tutorials/contributing.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc-src/content/help/tutorials/contributing.markdown b/doc-src/content/help/tutorials/contributing.markdown index 8f162604..0a4f1696 100644 --- a/doc-src/content/help/tutorials/contributing.markdown +++ b/doc-src/content/help/tutorials/contributing.markdown @@ -34,10 +34,10 @@ Here's some general information about the project you might find useful along th * [Submitting Patches](#patches) * [Project Structure](#project-structure) -* Project Architecture + * [General Philosophy](#project-philosophy) * [Stylesheet Conventions](#stylesheet-conventions) * [Miscellaneous Stuff](#faq) From df8eefa3c2360b1a5eac8dbe83eeab9e5bfe875a Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 17:51:40 -0800 Subject: [PATCH 02/24] Got my reversed motion backwards. --- lib/compass/sass_extensions/functions/sprites.rb | 2 +- spec/sprites_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/compass/sass_extensions/functions/sprites.rb b/lib/compass/sass_extensions/functions/sprites.rb index b660514a..7df04e20 100644 --- a/lib/compass/sass_extensions/functions/sprites.rb +++ b/lib/compass/sass_extensions/functions/sprites.rb @@ -331,7 +331,7 @@ module Compass::SassExtensions::Functions::Sprites if offset_x.unit_str == "%" x = offset_x # CE: Shouldn't this be a percentage of the total width? else - x = offset_x.value + image[:left] + x = offset_x.value - image[:left] x = Sass::Script::Number.new(x, x == 0 ? [] : ["px"]) end y = offset_y.value - image[:top] diff --git a/spec/sprites_spec.rb b/spec/sprites_spec.rb index 331729d7..ee26a915 100644 --- a/spec/sprites_spec.rb +++ b/spec/sprites_spec.rb @@ -277,7 +277,7 @@ describe Compass::Sprites do } .adjusted-px-1 { - background-position: 14px 0; + background-position: -6px 0; } .adjusted-px-2 { @@ -315,7 +315,7 @@ describe Compass::Sprites do } .adjusted-px-1 { - background-position: 14px 0; + background-position: -6px 0; } .adjusted-px-2 { @@ -362,11 +362,11 @@ describe Compass::Sprites do } .squares-ten-by-ten { - background-position: 10px 0; + background-position: -10px 0; } .squares-twenty-by-twenty { - background-position: 10px -10px; + background-position: -10px -10px; } CSS image_size('squares-*.png').should == [30, 30] From a254caecdd0139b3ba909679b260435de87733ef Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 17:57:33 -0800 Subject: [PATCH 03/24] Allow a prefix to be specified (or omitted) for sprite class names --- .../stylesheets/compass/utilities/sprites/_base.scss | 5 +++-- lib/compass/sprites.rb | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss b/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss index fc095761..bc749162 100644 --- a/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss +++ b/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss @@ -30,9 +30,10 @@ // If a base class is provided, then each class will extend it. // // If `$dimensions` is `true`, the sprite dimensions will specified. -@mixin sprites($map, $sprite-names, $base-class: false, $dimensions: false) { +@mixin sprites($map, $sprite-names, $base-class: false, $dimensions: false, $prefix: sprite-map-name($map)) { @each $sprite-name in $sprite-names { - .#{sprite-map-name($map)}-#{$sprite-name} { + $full-sprite-name: if($prefix and $prefix != "", "#{$prefix}-#{$sprite-name}", $sprite-name); + .#{$full-sprite-name} { @if $base-class { @extend #{$base-class}; } @include sprite($map, $sprite-name, $dimensions); } diff --git a/lib/compass/sprites.rb b/lib/compass/sprites.rb index 2d5d0bf7..707d9bdb 100644 --- a/lib/compass/sprites.rb +++ b/lib/compass/sprites.rb @@ -88,13 +88,13 @@ end.join(",\n")}); @include sprite($#{name}-sprites, $name, $dimensions, $offset-x, $offset-y) } -@mixin #{name}-sprites($sprite-names, $dimensions: $#{name}-sprite-dimensions) { - @include sprites($#{name}-sprites, $sprite-names, $#{name}-sprite-base-class, $dimensions) +@mixin #{name}-sprites($sprite-names, $dimensions: $#{name}-sprite-dimensions, $prefix: sprite-map-name($#{name}-sprites)) { + @include sprites($#{name}-sprites, $sprite-names, $#{name}-sprite-base-class, $dimensions, $prefix) } // Generates a class for each sprited image. -@mixin all-#{name}-sprites($dimensions: $#{name}-sprite-dimensions) { - @include #{name}-sprites(#{images.join(" ")}, $dimensions); +@mixin all-#{name}-sprites($dimensions: $#{name}-sprite-dimensions, $prefix: sprite-map-name($#{name}-sprites)) { + @include #{name}-sprites(#{images.join(" ")}, $dimensions, $prefix); } SCSS end From 16ca41bec690048d8b307f92f52e663182baa380 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 18:00:01 -0800 Subject: [PATCH 04/24] Add a simple sprite example. --- examples/compass/images/.gitignore | 1 + examples/compass/images/flag/ad.png | Bin 0 -> 911 bytes examples/compass/images/flag/ae.png | Bin 0 -> 733 bytes examples/compass/images/flag/af.png | Bin 0 -> 878 bytes examples/compass/images/flag/ag.png | Bin 0 -> 912 bytes examples/compass/images/flag/ai.png | Bin 0 -> 972 bytes examples/compass/images/flag/al.png | Bin 0 -> 897 bytes examples/compass/images/flag/am.png | Bin 0 -> 788 bytes examples/compass/images/flag/an.png | Bin 0 -> 823 bytes examples/compass/images/flag/ao.png | Bin 0 -> 841 bytes examples/compass/images/flag/ar.png | Bin 0 -> 826 bytes examples/compass/images/flag/as.png | Bin 0 -> 1000 bytes examples/compass/images/flag/at.png | Bin 0 -> 746 bytes examples/compass/images/flag/au.png | Bin 0 -> 1036 bytes examples/compass/images/flag/aw.png | Bin 0 -> 849 bytes examples/compass/images/flag/ax.png | Bin 0 -> 936 bytes examples/compass/images/flag/az.png | Bin 0 -> 879 bytes examples/compass/images/flag/ba.png | Bin 0 -> 928 bytes examples/compass/images/flag/bb.png | Bin 0 -> 859 bytes examples/compass/images/flag/bd.png | Bin 0 -> 829 bytes examples/compass/images/flag/be.png | Bin 0 -> 751 bytes examples/compass/images/flag/bf.png | Bin 0 -> 797 bytes examples/compass/images/flag/bg.png | Bin 0 -> 776 bytes examples/compass/images/flag/bh.png | Bin 0 -> 803 bytes examples/compass/images/flag/bi.png | Bin 0 -> 1024 bytes examples/compass/images/flag/bj.png | Bin 0 -> 767 bytes examples/compass/images/flag/bm.png | Bin 0 -> 955 bytes examples/compass/images/flag/bn.png | Bin 0 -> 964 bytes examples/compass/images/flag/bo.png | Bin 0 -> 797 bytes examples/compass/images/flag/br.png | Bin 0 -> 942 bytes examples/compass/images/flag/bs.png | Bin 0 -> 847 bytes examples/compass/images/flag/bt.png | Bin 0 -> 927 bytes examples/compass/images/flag/bv.png | Bin 0 -> 858 bytes examples/compass/images/flag/bw.png | Bin 0 -> 783 bytes examples/compass/images/flag/by.png | Bin 0 -> 845 bytes examples/compass/images/flag/bz.png | Bin 0 -> 933 bytes examples/compass/images/flag/ca.png | Bin 0 -> 930 bytes examples/compass/images/flag/catalonia.png | Bin 0 -> 793 bytes examples/compass/images/flag/cc.png | Bin 0 -> 952 bytes examples/compass/images/flag/cd.png | Bin 0 -> 924 bytes examples/compass/images/flag/cf.png | Bin 0 -> 912 bytes examples/compass/images/flag/cg.png | Bin 0 -> 838 bytes examples/compass/images/flag/ch.png | Bin 0 -> 707 bytes examples/compass/images/flag/ci.png | Bin 0 -> 762 bytes examples/compass/images/flag/ck.png | Bin 0 -> 951 bytes examples/compass/images/flag/cl.png | Bin 0 -> 780 bytes examples/compass/images/flag/cm.png | Bin 0 -> 804 bytes examples/compass/images/flag/cn.png | Bin 0 -> 805 bytes examples/compass/images/flag/co.png | Bin 0 -> 786 bytes examples/compass/images/flag/cr.png | Bin 0 -> 805 bytes examples/compass/images/flag/cs.png | Bin 0 -> 777 bytes examples/compass/images/flag/cu.png | Bin 0 -> 905 bytes examples/compass/images/flag/cv.png | Bin 0 -> 901 bytes examples/compass/images/flag/cx.png | Bin 0 -> 954 bytes examples/compass/images/flag/cy.png | Bin 0 -> 796 bytes examples/compass/images/flag/cz.png | Bin 0 -> 827 bytes examples/compass/images/flag/de.png | Bin 0 -> 822 bytes examples/compass/images/flag/dj.png | Bin 0 -> 886 bytes examples/compass/images/flag/dk.png | Bin 0 -> 808 bytes examples/compass/images/flag/dm.png | Bin 0 -> 964 bytes examples/compass/images/flag/do.png | Bin 0 -> 824 bytes examples/compass/images/flag/dz.png | Bin 0 -> 922 bytes examples/compass/images/flag/ec.png | Bin 0 -> 811 bytes examples/compass/images/flag/ee.png | Bin 0 -> 755 bytes examples/compass/images/flag/eg.png | Bin 0 -> 804 bytes examples/compass/images/flag/eh.png | Bin 0 -> 847 bytes examples/compass/images/flag/england.png | Bin 0 -> 834 bytes examples/compass/images/flag/er.png | Bin 0 -> 954 bytes examples/compass/images/flag/es.png | Bin 0 -> 800 bytes examples/compass/images/flag/et.png | Bin 0 -> 901 bytes .../compass/images/flag/europeanunion.png | Bin 0 -> 859 bytes examples/compass/images/flag/fam.png | Bin 0 -> 806 bytes examples/compass/images/flag/fi.png | Bin 0 -> 824 bytes examples/compass/images/flag/fj.png | Bin 0 -> 973 bytes examples/compass/images/flag/fk.png | Bin 0 -> 982 bytes examples/compass/images/flag/fm.png | Bin 0 -> 867 bytes examples/compass/images/flag/fo.png | Bin 0 -> 833 bytes examples/compass/images/flag/fr.png | Bin 0 -> 829 bytes examples/compass/images/flag/ga.png | Bin 0 -> 799 bytes examples/compass/images/flag/gb.png | Bin 0 -> 1005 bytes examples/compass/images/flag/gd.png | Bin 0 -> 920 bytes examples/compass/images/flag/ge.png | Bin 0 -> 951 bytes examples/compass/images/flag/gf.png | Bin 0 -> 829 bytes examples/compass/images/flag/gh.png | Bin 0 -> 792 bytes examples/compass/images/flag/gi.png | Bin 0 -> 825 bytes examples/compass/images/flag/gl.png | Bin 0 -> 807 bytes examples/compass/images/flag/gm.png | Bin 0 -> 819 bytes examples/compass/images/flag/gn.png | Bin 0 -> 776 bytes examples/compass/images/flag/gp.png | Bin 0 -> 812 bytes examples/compass/images/flag/gq.png | Bin 0 -> 861 bytes examples/compass/images/flag/gr.png | Bin 0 -> 847 bytes examples/compass/images/flag/gs.png | Bin 0 -> 982 bytes examples/compass/images/flag/gt.png | Bin 0 -> 795 bytes examples/compass/images/flag/gu.png | Bin 0 -> 840 bytes examples/compass/images/flag/gw.png | Bin 0 -> 803 bytes examples/compass/images/flag/gy.png | Bin 0 -> 977 bytes examples/compass/images/flag/hk.png | Bin 0 -> 849 bytes examples/compass/images/flag/hm.png | Bin 0 -> 1036 bytes examples/compass/images/flag/hn.png | Bin 0 -> 867 bytes examples/compass/images/flag/hr.png | Bin 0 -> 877 bytes examples/compass/images/flag/ht.png | Bin 0 -> 783 bytes examples/compass/images/flag/hu.png | Bin 0 -> 749 bytes examples/compass/images/flag/id-2.png | Bin 0 -> 759 bytes examples/compass/images/flag/ie.png | Bin 0 -> 789 bytes examples/compass/images/flag/il.png | Bin 0 -> 782 bytes examples/compass/images/flag/in.png | Bin 0 -> 833 bytes examples/compass/images/flag/io.png | Bin 0 -> 1049 bytes examples/compass/images/flag/iq.png | Bin 0 -> 861 bytes examples/compass/images/flag/ir.png | Bin 0 -> 854 bytes examples/compass/images/flag/is.png | Bin 0 -> 866 bytes examples/compass/images/flag/it.png | Bin 0 -> 740 bytes examples/compass/images/flag/jm.png | Bin 0 -> 969 bytes examples/compass/images/flag/jo.png | Bin 0 -> 809 bytes examples/compass/images/flag/jp.png | Bin 0 -> 771 bytes examples/compass/images/flag/ke.png | Bin 0 -> 891 bytes examples/compass/images/flag/kg.png | Bin 0 -> 811 bytes examples/compass/images/flag/kh.png | Bin 0 -> 878 bytes examples/compass/images/flag/ki.png | Bin 0 -> 1008 bytes examples/compass/images/flag/km.png | Bin 0 -> 921 bytes examples/compass/images/flag/kn.png | Bin 0 -> 936 bytes examples/compass/images/flag/kp.png | Bin 0 -> 880 bytes examples/compass/images/flag/kr.png | Bin 0 -> 971 bytes examples/compass/images/flag/kw.png | Bin 0 -> 807 bytes examples/compass/images/flag/ky.png | Bin 0 -> 991 bytes examples/compass/images/flag/kz.png | Bin 0 -> 916 bytes examples/compass/images/flag/la.png | Bin 0 -> 871 bytes examples/compass/images/flag/lb.png | Bin 0 -> 849 bytes examples/compass/images/flag/lc.png | Bin 0 -> 904 bytes examples/compass/images/flag/li.png | Bin 0 -> 855 bytes examples/compass/images/flag/lk.png | Bin 0 -> 921 bytes examples/compass/images/flag/lr.png | Bin 0 -> 831 bytes examples/compass/images/flag/ls.png | Bin 0 -> 962 bytes examples/compass/images/flag/lt.png | Bin 0 -> 801 bytes examples/compass/images/flag/lu.png | Bin 0 -> 795 bytes examples/compass/images/flag/lv.png | Bin 0 -> 795 bytes examples/compass/images/flag/ly.png | Bin 0 -> 733 bytes examples/compass/images/flag/ma.png | Bin 0 -> 749 bytes examples/compass/images/flag/mc.png | Bin 0 -> 714 bytes examples/compass/images/flag/md.png | Bin 0 -> 860 bytes examples/compass/images/flag/me.png | Bin 0 -> 839 bytes examples/compass/images/flag/mg.png | Bin 0 -> 769 bytes examples/compass/images/flag/mh.png | Bin 0 -> 974 bytes examples/compass/images/flag/mk.png | Bin 0 -> 905 bytes examples/compass/images/flag/ml.png | Bin 0 -> 778 bytes examples/compass/images/flag/mm.png | Bin 0 -> 792 bytes examples/compass/images/flag/mn.png | Bin 0 -> 799 bytes examples/compass/images/flag/mo.png | Bin 0 -> 912 bytes examples/compass/images/flag/mp.png | Bin 0 -> 937 bytes examples/compass/images/flag/mq.png | Bin 0 -> 998 bytes examples/compass/images/flag/mr.png | Bin 0 -> 864 bytes examples/compass/images/flag/ms.png | Bin 0 -> 953 bytes examples/compass/images/flag/mt.png | Bin 0 -> 752 bytes examples/compass/images/flag/mu.png | Bin 0 -> 816 bytes examples/compass/images/flag/mv.png | Bin 0 -> 847 bytes examples/compass/images/flag/mw.png | Bin 0 -> 821 bytes examples/compass/images/flag/mx.png | Bin 0 -> 881 bytes examples/compass/images/flag/my.png | Bin 0 -> 931 bytes examples/compass/images/flag/mz.png | Bin 0 -> 902 bytes examples/compass/images/flag/na.png | Bin 0 -> 1016 bytes examples/compass/images/flag/nc.png | Bin 0 -> 926 bytes examples/compass/images/flag/ne.png | Bin 0 -> 849 bytes examples/compass/images/flag/nf.png | Bin 0 -> 934 bytes examples/compass/images/flag/ng.png | Bin 0 -> 797 bytes examples/compass/images/flag/ni.png | Bin 0 -> 828 bytes examples/compass/images/flag/nl.png | Bin 0 -> 766 bytes examples/compass/images/flag/no.png | Bin 0 -> 858 bytes examples/compass/images/flag/np.png | Bin 0 -> 823 bytes examples/compass/images/flag/nr.png | Bin 0 -> 850 bytes examples/compass/images/flag/nu.png | Bin 0 -> 925 bytes examples/compass/images/flag/nz.png | Bin 0 -> 985 bytes examples/compass/images/flag/om.png | Bin 0 -> 795 bytes examples/compass/images/flag/pa.png | Bin 0 -> 846 bytes examples/compass/images/flag/pe.png | Bin 0 -> 720 bytes examples/compass/images/flag/pf.png | Bin 0 -> 835 bytes examples/compass/images/flag/pg.png | Bin 0 -> 895 bytes examples/compass/images/flag/ph.png | Bin 0 -> 882 bytes examples/compass/images/flag/pk.png | Bin 0 -> 910 bytes examples/compass/images/flag/pl.png | Bin 0 -> 699 bytes examples/compass/images/flag/pm.png | Bin 0 -> 1029 bytes examples/compass/images/flag/pn.png | Bin 0 -> 1003 bytes examples/compass/images/flag/pr.png | Bin 0 -> 908 bytes examples/compass/images/flag/ps.png | Bin 0 -> 804 bytes examples/compass/images/flag/pt.png | Bin 0 -> 863 bytes examples/compass/images/flag/pw.png | Bin 0 -> 880 bytes examples/compass/images/flag/py.png | Bin 0 -> 800 bytes examples/compass/images/flag/qa.png | Bin 0 -> 805 bytes examples/compass/images/flag/re.png | Bin 0 -> 829 bytes examples/compass/images/flag/ro.png | Bin 0 -> 789 bytes examples/compass/images/flag/rs.png | Bin 0 -> 816 bytes examples/compass/images/flag/ru.png | Bin 0 -> 755 bytes examples/compass/images/flag/rw.png | Bin 0 -> 838 bytes examples/compass/images/flag/sa.png | Bin 0 -> 884 bytes examples/compass/images/flag/sb.png | Bin 0 -> 976 bytes examples/compass/images/flag/sc.png | Bin 0 -> 941 bytes examples/compass/images/flag/scotland.png | Bin 0 -> 1018 bytes examples/compass/images/flag/sd.png | Bin 0 -> 826 bytes examples/compass/images/flag/se.png | Bin 0 -> 845 bytes examples/compass/images/flag/sg.png | Bin 0 -> 808 bytes examples/compass/images/flag/sh.png | Bin 0 -> 980 bytes examples/compass/images/flag/si.png | Bin 0 -> 839 bytes examples/compass/images/flag/sj.png | Bin 0 -> 858 bytes examples/compass/images/flag/sk.png | Bin 0 -> 897 bytes examples/compass/images/flag/sl.png | Bin 0 -> 777 bytes examples/compass/images/flag/sm.png | Bin 0 -> 852 bytes examples/compass/images/flag/sn.png | Bin 0 -> 812 bytes examples/compass/images/flag/so.png | Bin 0 -> 832 bytes examples/compass/images/flag/sr.png | Bin 0 -> 827 bytes examples/compass/images/flag/st.png | Bin 0 -> 891 bytes examples/compass/images/flag/sv.png | Bin 0 -> 829 bytes examples/compass/images/flag/sy.png | Bin 0 -> 781 bytes examples/compass/images/flag/sz.png | Bin 0 -> 967 bytes examples/compass/images/flag/tc.png | Bin 0 -> 965 bytes examples/compass/images/flag/td.png | Bin 0 -> 834 bytes examples/compass/images/flag/tf.png | Bin 0 -> 855 bytes examples/compass/images/flag/tg.png | Bin 0 -> 872 bytes examples/compass/images/flag/th.png | Bin 0 -> 783 bytes examples/compass/images/flag/tj.png | Bin 0 -> 828 bytes examples/compass/images/flag/tk.png | Bin 0 -> 979 bytes examples/compass/images/flag/tl.png | Bin 0 -> 873 bytes examples/compass/images/flag/tm.png | Bin 0 -> 912 bytes examples/compass/images/flag/tn.png | Bin 0 -> 824 bytes examples/compass/images/flag/to.png | Bin 0 -> 759 bytes examples/compass/images/flag/tr.png | Bin 0 -> 826 bytes examples/compass/images/flag/tt.png | Bin 0 -> 978 bytes examples/compass/images/flag/tv.png | Bin 0 -> 903 bytes examples/compass/images/flag/tw.png | Bin 0 -> 786 bytes examples/compass/images/flag/tz.png | Bin 0 -> 975 bytes examples/compass/images/flag/ua.png | Bin 0 -> 760 bytes examples/compass/images/flag/ug.png | Bin 0 -> 844 bytes examples/compass/images/flag/um.png | Bin 0 -> 930 bytes examples/compass/images/flag/us.png | Bin 0 -> 954 bytes examples/compass/images/flag/uy.png | Bin 0 -> 867 bytes examples/compass/images/flag/uz.png | Bin 0 -> 869 bytes examples/compass/images/flag/va.png | Bin 0 -> 876 bytes examples/compass/images/flag/vc.png | Bin 0 -> 868 bytes examples/compass/images/flag/ve.png | Bin 0 -> 871 bytes examples/compass/images/flag/vg.png | Bin 0 -> 966 bytes examples/compass/images/flag/vi.png | Bin 0 -> 984 bytes examples/compass/images/flag/vn.png | Bin 0 -> 780 bytes examples/compass/images/flag/vu.png | Bin 0 -> 914 bytes examples/compass/images/flag/wales.png | Bin 0 -> 1013 bytes examples/compass/images/flag/wf.png | Bin 0 -> 895 bytes examples/compass/images/flag/ws.png | Bin 0 -> 810 bytes examples/compass/images/flag/ye.png | Bin 0 -> 761 bytes examples/compass/images/flag/yt.png | Bin 0 -> 916 bytes examples/compass/images/flag/za.png | Bin 0 -> 980 bytes examples/compass/images/flag/zm.png | Bin 0 -> 815 bytes examples/compass/images/flag/zw.png | Bin 0 -> 923 bytes examples/compass/sprites.html.haml | 23 ++++++++++++++++++ examples/compass/src/sprites.scss | 12 +++++++++ 250 files changed, 36 insertions(+) create mode 100644 examples/compass/images/.gitignore create mode 100644 examples/compass/images/flag/ad.png create mode 100644 examples/compass/images/flag/ae.png create mode 100644 examples/compass/images/flag/af.png create mode 100644 examples/compass/images/flag/ag.png create mode 100644 examples/compass/images/flag/ai.png create mode 100644 examples/compass/images/flag/al.png create mode 100644 examples/compass/images/flag/am.png create mode 100644 examples/compass/images/flag/an.png create mode 100644 examples/compass/images/flag/ao.png create mode 100644 examples/compass/images/flag/ar.png create mode 100644 examples/compass/images/flag/as.png create mode 100644 examples/compass/images/flag/at.png create mode 100644 examples/compass/images/flag/au.png create mode 100644 examples/compass/images/flag/aw.png create mode 100644 examples/compass/images/flag/ax.png create mode 100644 examples/compass/images/flag/az.png create mode 100644 examples/compass/images/flag/ba.png create mode 100644 examples/compass/images/flag/bb.png create mode 100644 examples/compass/images/flag/bd.png create mode 100644 examples/compass/images/flag/be.png create mode 100644 examples/compass/images/flag/bf.png create mode 100644 examples/compass/images/flag/bg.png create mode 100644 examples/compass/images/flag/bh.png create mode 100644 examples/compass/images/flag/bi.png create mode 100644 examples/compass/images/flag/bj.png create mode 100644 examples/compass/images/flag/bm.png create mode 100644 examples/compass/images/flag/bn.png create mode 100644 examples/compass/images/flag/bo.png create mode 100644 examples/compass/images/flag/br.png create mode 100644 examples/compass/images/flag/bs.png create mode 100644 examples/compass/images/flag/bt.png create mode 100644 examples/compass/images/flag/bv.png create mode 100644 examples/compass/images/flag/bw.png create mode 100644 examples/compass/images/flag/by.png create mode 100644 examples/compass/images/flag/bz.png create mode 100644 examples/compass/images/flag/ca.png create mode 100644 examples/compass/images/flag/catalonia.png create mode 100644 examples/compass/images/flag/cc.png create mode 100644 examples/compass/images/flag/cd.png create mode 100644 examples/compass/images/flag/cf.png create mode 100644 examples/compass/images/flag/cg.png create mode 100644 examples/compass/images/flag/ch.png create mode 100644 examples/compass/images/flag/ci.png create mode 100644 examples/compass/images/flag/ck.png create mode 100644 examples/compass/images/flag/cl.png create mode 100644 examples/compass/images/flag/cm.png create mode 100644 examples/compass/images/flag/cn.png create mode 100644 examples/compass/images/flag/co.png create mode 100644 examples/compass/images/flag/cr.png create mode 100644 examples/compass/images/flag/cs.png create mode 100644 examples/compass/images/flag/cu.png create mode 100644 examples/compass/images/flag/cv.png create mode 100644 examples/compass/images/flag/cx.png create mode 100644 examples/compass/images/flag/cy.png create mode 100644 examples/compass/images/flag/cz.png create mode 100644 examples/compass/images/flag/de.png create mode 100644 examples/compass/images/flag/dj.png create mode 100644 examples/compass/images/flag/dk.png create mode 100644 examples/compass/images/flag/dm.png create mode 100644 examples/compass/images/flag/do.png create mode 100644 examples/compass/images/flag/dz.png create mode 100644 examples/compass/images/flag/ec.png create mode 100644 examples/compass/images/flag/ee.png create mode 100644 examples/compass/images/flag/eg.png create mode 100644 examples/compass/images/flag/eh.png create mode 100644 examples/compass/images/flag/england.png create mode 100644 examples/compass/images/flag/er.png create mode 100644 examples/compass/images/flag/es.png create mode 100644 examples/compass/images/flag/et.png create mode 100644 examples/compass/images/flag/europeanunion.png create mode 100644 examples/compass/images/flag/fam.png create mode 100644 examples/compass/images/flag/fi.png create mode 100644 examples/compass/images/flag/fj.png create mode 100644 examples/compass/images/flag/fk.png create mode 100644 examples/compass/images/flag/fm.png create mode 100644 examples/compass/images/flag/fo.png create mode 100644 examples/compass/images/flag/fr.png create mode 100644 examples/compass/images/flag/ga.png create mode 100644 examples/compass/images/flag/gb.png create mode 100644 examples/compass/images/flag/gd.png create mode 100644 examples/compass/images/flag/ge.png create mode 100644 examples/compass/images/flag/gf.png create mode 100644 examples/compass/images/flag/gh.png create mode 100644 examples/compass/images/flag/gi.png create mode 100644 examples/compass/images/flag/gl.png create mode 100644 examples/compass/images/flag/gm.png create mode 100644 examples/compass/images/flag/gn.png create mode 100644 examples/compass/images/flag/gp.png create mode 100644 examples/compass/images/flag/gq.png create mode 100644 examples/compass/images/flag/gr.png create mode 100644 examples/compass/images/flag/gs.png create mode 100644 examples/compass/images/flag/gt.png create mode 100644 examples/compass/images/flag/gu.png create mode 100644 examples/compass/images/flag/gw.png create mode 100644 examples/compass/images/flag/gy.png create mode 100644 examples/compass/images/flag/hk.png create mode 100644 examples/compass/images/flag/hm.png create mode 100644 examples/compass/images/flag/hn.png create mode 100644 examples/compass/images/flag/hr.png create mode 100644 examples/compass/images/flag/ht.png create mode 100644 examples/compass/images/flag/hu.png create mode 100644 examples/compass/images/flag/id-2.png create mode 100644 examples/compass/images/flag/ie.png create mode 100644 examples/compass/images/flag/il.png create mode 100644 examples/compass/images/flag/in.png create mode 100644 examples/compass/images/flag/io.png create mode 100644 examples/compass/images/flag/iq.png create mode 100644 examples/compass/images/flag/ir.png create mode 100644 examples/compass/images/flag/is.png create mode 100644 examples/compass/images/flag/it.png create mode 100644 examples/compass/images/flag/jm.png create mode 100644 examples/compass/images/flag/jo.png create mode 100644 examples/compass/images/flag/jp.png create mode 100644 examples/compass/images/flag/ke.png create mode 100644 examples/compass/images/flag/kg.png create mode 100644 examples/compass/images/flag/kh.png create mode 100644 examples/compass/images/flag/ki.png create mode 100644 examples/compass/images/flag/km.png create mode 100644 examples/compass/images/flag/kn.png create mode 100644 examples/compass/images/flag/kp.png create mode 100644 examples/compass/images/flag/kr.png create mode 100644 examples/compass/images/flag/kw.png create mode 100644 examples/compass/images/flag/ky.png create mode 100644 examples/compass/images/flag/kz.png create mode 100644 examples/compass/images/flag/la.png create mode 100644 examples/compass/images/flag/lb.png create mode 100644 examples/compass/images/flag/lc.png create mode 100644 examples/compass/images/flag/li.png create mode 100644 examples/compass/images/flag/lk.png create mode 100644 examples/compass/images/flag/lr.png create mode 100644 examples/compass/images/flag/ls.png create mode 100644 examples/compass/images/flag/lt.png create mode 100644 examples/compass/images/flag/lu.png create mode 100644 examples/compass/images/flag/lv.png create mode 100644 examples/compass/images/flag/ly.png create mode 100644 examples/compass/images/flag/ma.png create mode 100644 examples/compass/images/flag/mc.png create mode 100644 examples/compass/images/flag/md.png create mode 100644 examples/compass/images/flag/me.png create mode 100644 examples/compass/images/flag/mg.png create mode 100644 examples/compass/images/flag/mh.png create mode 100644 examples/compass/images/flag/mk.png create mode 100644 examples/compass/images/flag/ml.png create mode 100644 examples/compass/images/flag/mm.png create mode 100644 examples/compass/images/flag/mn.png create mode 100644 examples/compass/images/flag/mo.png create mode 100644 examples/compass/images/flag/mp.png create mode 100644 examples/compass/images/flag/mq.png create mode 100644 examples/compass/images/flag/mr.png create mode 100644 examples/compass/images/flag/ms.png create mode 100644 examples/compass/images/flag/mt.png create mode 100644 examples/compass/images/flag/mu.png create mode 100644 examples/compass/images/flag/mv.png create mode 100644 examples/compass/images/flag/mw.png create mode 100644 examples/compass/images/flag/mx.png create mode 100644 examples/compass/images/flag/my.png create mode 100644 examples/compass/images/flag/mz.png create mode 100644 examples/compass/images/flag/na.png create mode 100644 examples/compass/images/flag/nc.png create mode 100644 examples/compass/images/flag/ne.png create mode 100644 examples/compass/images/flag/nf.png create mode 100644 examples/compass/images/flag/ng.png create mode 100644 examples/compass/images/flag/ni.png create mode 100644 examples/compass/images/flag/nl.png create mode 100644 examples/compass/images/flag/no.png create mode 100644 examples/compass/images/flag/np.png create mode 100644 examples/compass/images/flag/nr.png create mode 100644 examples/compass/images/flag/nu.png create mode 100644 examples/compass/images/flag/nz.png create mode 100644 examples/compass/images/flag/om.png create mode 100644 examples/compass/images/flag/pa.png create mode 100644 examples/compass/images/flag/pe.png create mode 100644 examples/compass/images/flag/pf.png create mode 100644 examples/compass/images/flag/pg.png create mode 100644 examples/compass/images/flag/ph.png create mode 100644 examples/compass/images/flag/pk.png create mode 100644 examples/compass/images/flag/pl.png create mode 100644 examples/compass/images/flag/pm.png create mode 100644 examples/compass/images/flag/pn.png create mode 100644 examples/compass/images/flag/pr.png create mode 100644 examples/compass/images/flag/ps.png create mode 100644 examples/compass/images/flag/pt.png create mode 100644 examples/compass/images/flag/pw.png create mode 100644 examples/compass/images/flag/py.png create mode 100644 examples/compass/images/flag/qa.png create mode 100644 examples/compass/images/flag/re.png create mode 100644 examples/compass/images/flag/ro.png create mode 100644 examples/compass/images/flag/rs.png create mode 100644 examples/compass/images/flag/ru.png create mode 100644 examples/compass/images/flag/rw.png create mode 100644 examples/compass/images/flag/sa.png create mode 100644 examples/compass/images/flag/sb.png create mode 100644 examples/compass/images/flag/sc.png create mode 100644 examples/compass/images/flag/scotland.png create mode 100644 examples/compass/images/flag/sd.png create mode 100644 examples/compass/images/flag/se.png create mode 100644 examples/compass/images/flag/sg.png create mode 100644 examples/compass/images/flag/sh.png create mode 100644 examples/compass/images/flag/si.png create mode 100644 examples/compass/images/flag/sj.png create mode 100644 examples/compass/images/flag/sk.png create mode 100644 examples/compass/images/flag/sl.png create mode 100644 examples/compass/images/flag/sm.png create mode 100644 examples/compass/images/flag/sn.png create mode 100644 examples/compass/images/flag/so.png create mode 100644 examples/compass/images/flag/sr.png create mode 100644 examples/compass/images/flag/st.png create mode 100644 examples/compass/images/flag/sv.png create mode 100644 examples/compass/images/flag/sy.png create mode 100644 examples/compass/images/flag/sz.png create mode 100644 examples/compass/images/flag/tc.png create mode 100644 examples/compass/images/flag/td.png create mode 100644 examples/compass/images/flag/tf.png create mode 100644 examples/compass/images/flag/tg.png create mode 100644 examples/compass/images/flag/th.png create mode 100644 examples/compass/images/flag/tj.png create mode 100644 examples/compass/images/flag/tk.png create mode 100644 examples/compass/images/flag/tl.png create mode 100644 examples/compass/images/flag/tm.png create mode 100644 examples/compass/images/flag/tn.png create mode 100644 examples/compass/images/flag/to.png create mode 100644 examples/compass/images/flag/tr.png create mode 100644 examples/compass/images/flag/tt.png create mode 100644 examples/compass/images/flag/tv.png create mode 100644 examples/compass/images/flag/tw.png create mode 100644 examples/compass/images/flag/tz.png create mode 100644 examples/compass/images/flag/ua.png create mode 100644 examples/compass/images/flag/ug.png create mode 100644 examples/compass/images/flag/um.png create mode 100644 examples/compass/images/flag/us.png create mode 100644 examples/compass/images/flag/uy.png create mode 100644 examples/compass/images/flag/uz.png create mode 100644 examples/compass/images/flag/va.png create mode 100644 examples/compass/images/flag/vc.png create mode 100644 examples/compass/images/flag/ve.png create mode 100644 examples/compass/images/flag/vg.png create mode 100644 examples/compass/images/flag/vi.png create mode 100644 examples/compass/images/flag/vn.png create mode 100644 examples/compass/images/flag/vu.png create mode 100644 examples/compass/images/flag/wales.png create mode 100644 examples/compass/images/flag/wf.png create mode 100644 examples/compass/images/flag/ws.png create mode 100644 examples/compass/images/flag/ye.png create mode 100644 examples/compass/images/flag/yt.png create mode 100644 examples/compass/images/flag/za.png create mode 100644 examples/compass/images/flag/zm.png create mode 100644 examples/compass/images/flag/zw.png create mode 100644 examples/compass/sprites.html.haml create mode 100644 examples/compass/src/sprites.scss diff --git a/examples/compass/images/.gitignore b/examples/compass/images/.gitignore new file mode 100644 index 00000000..266ce3ac --- /dev/null +++ b/examples/compass/images/.gitignore @@ -0,0 +1 @@ +flag-*.png diff --git a/examples/compass/images/flag/ad.png b/examples/compass/images/flag/ad.png new file mode 100644 index 0000000000000000000000000000000000000000..1904b78f5a85f0b4b8609fc3b672e92cdb944c79 GIT binary patch literal 911 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ*JY5_^G|szT+?yrBDAD@Rc=P05Z;^={ ziG~UsZaE@?K`&T4rZ!DDb??%#bJ`oYD!4QEaOLLoxbk!;H99D0tnnz>e6D8y^UVPQ z_x@?#dv@~kc_kJHr!}=-KUwW`v1;I8=nxg)P+(xXyQu#-|1yS6T8mh>%~o?)Uj6Cg z4Nqy?twoC?SN^+k^X0B>tOZ4{B%j_3t6gjK^5B+_Pquiy3eXHvn&HR%!b44avC?Vd z)j9va{@N6^>`eC8Z+mT56-_Y8_2DcLRFOQ{p|sjd|DR3d--=uLy0iXrt~6Qcn0aZ1 zv-e^3O)Ub2;_@zvleB zZD4t0cYv0r)8(MQ+Ab`2Gv_TT&3vp8bN}AnU;pl2xx4O;#hLp-t7O=A3BOp9?y_rn z^~yzF?`-b;-LzXwPkJ`{%u{ivrpWbHGu+)H-fvaDt@wEb=K-k&*Ufr)iuUHN-I>#q zaYwt!q4@K^**AT}lKv_c^)2S__i*{szy04_HHHWL6=%x7U&`3H9~e!lC9V-A$wjG& zC8@e8K!U-@z`#=1&`{UVEX2sj%Fw{d#7x(~+{(aUnZxdG~j^en4qbPG)j^N`7u)W}f}uSLb2YL2QD1$W+(BLf6PL1n3VF z1E5!Qfetk=SW%w37N|iIWL7^73-Mw8UHp(o4?I)z3*x e($55G)K3GNQLJC6>UtNbpTX1B&t;ucLK6U@VOszI literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ae.png b/examples/compass/images/flag/ae.png new file mode 100644 index 0000000000000000000000000000000000000000..c53e2f05c9dd4b238e48dd65e3ad0c05f1fdc187 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft)*@E{-7@=UdNh^kojKYpA8k&U|8Ce+`SecmV8kk!d7%X$x z{S>AFq|yqa3#h@+K-U1M!7#+Y%*xcz$`Gm{?qcy16b-rgDVb@NxHahaoQ?o$FakNr zCo?%UuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z z%sPloa1WX48d&HWS%v`pVPXLEiZ0Nh1_mq2Q`Z7DNP?^j&QB{TPb^Aha7@WhN>%X8 zO-xS>N=;0uEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$KhX(n; wTwh*Zu9udW3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e04k>chyVZp literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/af.png b/examples/compass/images/flag/af.png new file mode 100644 index 0000000000000000000000000000000000000000..3e628e75eb66ae8ab24f36d73bc2aac2691168a6 GIT binary patch literal 878 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 qr6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHFJY5_^G|u~8wD0##6lwifdhc_QtoY2H z&KVgZLY*#4zZgzf5puaBjjJnj$|Au<7kk=niC@q%vD(*UFFg76F5~a#D!)fn=O3Mr zG5?un-QDMmrVUICp#p)8f);sf90CFk49Wr88-6~rY$)mPc(w0$c4f83(Z65+J^Y*b zK1iM0=!E|Idm#)ATfXn*ueXlAD|zbc(;pSvrrf-{aP!}aZ^avJb&aem3okcFHJ12) zpOW`w=jUX@ZPT_~zI3|TEt|j1t|w7!Q9}^V%XukX^ZEMqT6<#5epi`n+nBqK|VpqQ1`l)hQGH9Yhf5I-N7j{ex zkL&{(zn%ZOUMPW~LGTB2>MtjUx!+D+1xAc&iEBhja#3nxNvduNkYF$}FtF4$G}JXT z3o$aXGBmIm^)p?k85S!p0GSxM(&^59Q0s6zl0O%E6phFD|R+Oi%1!|B4 zSr?q2R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGSvpCNE)K3v?w{1!OhVZf)w0x64Mnt zlk@Y6L(hxs1u8Q^D2opb@`1U&yu4g5Eio5@^pf*)^>Y%F^fN&k_0xc66zdnNy50rq OXYh3Ob6Mw<&;$UwV^IeH literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/am.png b/examples/compass/images/flag/am.png new file mode 100644 index 0000000000000000000000000000000000000000..25af545b3843446bfd7fd4a8d5a6fe817893ce15 GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIaJzX3_G|q?m@AaGQC@|-D&D6U=3p%Em zFF12qag~SOWtA;9QbJslz9w=Cu*H&Z&tz@C`qlKB=;oaMM4@B{BLnI5 zqy>))BHq1YIO4WxqM6wVkC_^cJe)6g+%MPRp75utO+?bJ*Lm41k=0J2yZ5ME*to9H zz}$02-%GW_Tr-s-RvKN<-)5gz`T2k*S%A@%2A9;pb@87?O-~aThVd9w;b{A7ab#^4_?Owh7cl$e5 z1L0$$wJBP9{+Wk*UP{Q`bx+}#&E3Edt$gd`MX{|MK|0M9%fq)!xBbAzKO242Ez~oGb>X=D?_M;xQoS4P&DM`r(~v8;?|(w zb2zHqb~$0xaB0KD|ja7=M{&Z7ugF` zW`a-_9~$HXbA5Svxn5dgE(GZ%=jZC@Bqr%+f;8%<0nI4ZFI08C3)Iix>FVdQ&MBb@ E07iru)c^nh literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/an.png b/examples/compass/images/flag/an.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9851850b39d5c1527bd9152041f2995b1a8dee GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJNJY5_^G|tCP+~^nWDB$`&Vtudf6D`(7 z4qG%eGF~j`{lPCKqSDkNa(d+>d#4bN?HecjU=Zi*`lBT-rcspk?%u)*{^tiTimkqD zd~2`qwy3oi9GSMUWqoUS71dxB!tm>_UBj82tWT#cxhAvBJe5smz z@5u;fH&%|^yS=f*-^kWzPc(zWB*yUR)7AU?{g+5I-MnA=v+ASgsf!tDC!RmAf7f&2 z+`0CbU)=cxZthvn;j6~p`pa%!@4ml0&nou3kGu0!FNi_AVX4R@xz>f3FW)||UVYqM zKD4Cv^Yb@v^px&;wNKTH%paOTOULrsx9`mrR1j?RnZd}mWqa85t@jSyy_S%}>cptHiBAzvpxWP=gW3Nj{m$sd>ez z3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2p zRM)^l*T^yi=noSEpjUK(4mB`XQJ%UMs6i5BU2uL{NqJ&XDuZK6ep0G}XKrG8YEWuo zN@d~6R2!foX^5iIqU2NtH%DIxQgF*jOjqzs&d)0jJuk8ssLTYREIu^I2j=?n@^Zbj p#9Ro{OU}>L&q++u&je}IPXn4!tY4_=dKajl!PC{xWt~$(695?yFdF~> literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ao.png b/examples/compass/images/flag/ao.png new file mode 100644 index 0000000000000000000000000000000000000000..a44327fd23fbcc806151446254bcb8c1fb1cc9e3 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(!`BaKkqius5uPrNAsXj>`}b#w1_~UjPrtjn`k>N{nMt#`<9IUk_c?35Rh=s# zAm}8g_`rGw`vpJm(LhNLZ*aC zEPPA{oF=3^m~c>KL0LsjNlT0MJEOyM=ZGp>CWko~PP(-H^l2%FPqU?WCcB;cq*+q` z+I;_;KZ*bDO$aIs|NXnNy!*F(dDoS~kMEZM+tR)L`jRDuDYH!amP}dbH|fj_wV8=- zUfq|^et9*~#N@s2_U$t=XNfF6c5$IpLs9unfyMdL&fa`qP@k0ly*Wwe)mD*fuS>6& zKDOAkd&%U<4_~dS`ln-G`zT%hU2F`Cr)!kn^xFI3me1#Go+)}G=g`B%Th$Nb&maDn zJzLe-c=ME?h_zv{*Le>c_-pMva9aG=m&kW~TXJuIujSoQec5DlK41C&PocTHwHX&o z+j2Lr@zO7Q@fkah$ZpFC{GzfwH4PZxswJ)wCCNppi6yDJDL{h3$iTo-*U(Vc&@9Br z$jZ>b%EV09z}(8fV41`2r!Wm5l~xd4Kn;clx&}ZEh9L%KR;GqlhENT07mJ^uXvob^ z$xN%ntwF!%bOca?5y(kCnaQbn#i* zCFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5Xq#=q*i;`0r+#G!&NWm>9Fs_FJ22WQ% Jmvv4FO#pHzLOuWh literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ar.png b/examples/compass/images/flag/ar.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bf27c4c588f21f423227fce71c141e7b31528c GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHXJzX3_G|u}@-0K$_DA0P{E{9)Z;Q?u$ z-qxvt-ojo|Q;xWQV9fE*Si7=PE-7cr=jXf`J{#0_PR!6N+VuX+cAayLcdnk9esWey zns4Rz!`&A&T%22+vK$Wxm}Drk)Gq&J{^j4z7u#YtOgQjz(we2ajy%|M+3x4Q70wx* z>!u$&-?@=c-0Nxi9(Ikz``?6|?-RTg*d^=I9*y(%}S zrQX~gUsTw)_;$_fUgi5MMc$sj()-+R??%4)52t^=^xv*BR45?)u9W&OX5QkJm5&Rq z#^)@E`;(Y|S~vG~-d*#$FH+KH&OTxLdiDOZ$o_h}e;byqj%MG*ukt=P$xHL%JLkEz zch|{^lv=+IUXZEk{-gH$wmb literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/as.png b/examples/compass/images/flag/as.png new file mode 100644 index 0000000000000000000000000000000000000000..32222843a743ed3c500baf910f248d929620e942 GIT binary patch literal 1000 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI!d%8G=Xq@+*csg4+P^R_#+?~dgeR!_6 zZMl~9C?ZPSPU`+qA(7~=Z3-P+O-$lB%voi-g=sGYWC7wmHVRQp42iTj5mg?p@4 z@4ej_y4f^u`T34>5&J&Gop~~0m zpP0W2etFg_;jaN-S$q3B18XPWSK9r2b9P@Z`!wTz$J*)KKE{tW#{Ob5@~ihxc6P1P zKmF1(@|5xA3y)-3K4k3wULLi2@3FqSa%OWbo9|!$H?d*<$qhR#g`D1eKGhtxO?%IZ zpR*T+pgg6f49OH0iZa=dTU_)KbrGdm*~HcztQzgP-d| z*-U1|{Z0F^KX2x_mplFn++hC0+%NI7#>(rDDlq<4OI#yLl8aIkOHy@HfCPh)fq|v2 zp`os!S%{I5m7#%^iJ7i}xs`#zGKbwyVH!XxtsuI98Vn6|4S*U9Lk!HUObx9Jp&H^Y z7C%AJkei>9nO2EggMQEH2%rWdkdu5elT-7GQyDT!N(!v>^;7fo$}_Vw3sO@u6ZP_o z()B?+{eaS>oXq6-l>FSp%sl(Qug=4)gV+T3kg2YLg|3lh2+$uU20*Xq0v&2#u%bM5 zEl`6b$hzSCw370~qErUQl>DSr1<%~X^wgl##FWaylc_d9MbZ#OrA5i93~r9T5TxLi zlbEjHnVg?j9C}`4FHo5YLRoxhkPpoD<>lpiX^FWIq?eqZtDlpYq@M}WsGkNjqgcOC S)%7k=KZB>MpUXO@geCxoyM`qI literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/at.png b/examples/compass/images/flag/at.png new file mode 100644 index 0000000000000000000000000000000000000000..247acd2c8e560a31c743a929b3561755a01732b4 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft;6~E{-7@=W8df&2w@TY1yBfpLN09oI_@r zsfHX+@AF23J&g0j9kw!@4WI_`fo$fI~NV7cSZZ9zDK=2 zZSW*7+;4gC{qGGbEf?gkMoFtrKKZmLQ@eL%{O1UTmAl*I_SMgxZnXJEQec?&-1B#G zboh_nHSf?k{9)(Kl1dAk_usALB(o*0C2#gf%bj`dF#SWyxe_g7n}Wk@W<2y;T%A3q zqvca={fYX#J71VEwlp@FUeP=jHJfti)5p_QRIM8l6|6#*z3a`RI% z(<*Um==^=)4N!v-$Von#$*Fn8sSFtG~j^en4qb zPG)j^N`7u)W}f}uSLb2YL2QD1$W+(BLf6PL1n3VF1E5!Qfetk=SW%w37N|iIWL7^73-Mw8UHp(o4?I)z3*x($55G)K3GNQLJC6>UtNbpTX1B K&t;ucLK6TxW(LIo literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/au.png b/examples/compass/images/flag/au.png new file mode 100644 index 0000000000000000000000000000000000000000..6268b88669c6da5daeae5e14621d449f65499cba GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85o$jJzX3_G|u}T_xA`clwtVr{`S2L@41(E zZp%Es?Wxl9WwJ@!n-6Vjys4z5@nVXo?BWF}?Ru^U9R#h?0xzg;aAPrS)mR(j!Yk~< zbXQE$^!BCPoa+7Gf8P%M5o34h_{7`B$NFAe`4wTPS6tWHzJB{Zn?2iWKh!aF+2U*C_YH9*w^^V^~{)6D=pG&0+tB5MHHH~eczodT&%Y=^V7W@@8W6om`WP&n5#TeU%X9W&o1&HB$~}gR4yg=hEc5eB zeCs{Fzu9!Q?$<(#GqaA(crb-a^kMdM=Y4Z;o1B^FtIw#wslepGD8O*9C2!sK|HnSv zj%JWy_{YrkLwbq*Wz|{0G@@GK8c~v5l$uzQs+$5N7>o=IEOiYHbq&ozjEt-d4XjMe zbPdd{3=Ebz?0yQ<08(iM(FN3CXrOBV)L zI)5K{1Jqyya*|JGa%x_2Dnmv|Nr9EVerldxd1iKIL2627qF#Pcx;}`fA5fZm^)p?k85S!p0GSxM(&^59Q0s6zl0O%E6phFD|R+Oi%1!|B4Sr?q2R#Ki= zl*-_klAn~S;F+74o*I;zm{M7IGSvpCNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs z1u8Q^D2opb@`1U&yu4g5Eio5@^pf*)^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw< G&;$Tp_>bQJ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/aw.png b/examples/compass/images/flag/aw.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fbdc7bb3df52192ed02fba456e7ed2db33668e GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG?JY5_^G|q=kT$mRcDB${h+Tq2DEG$d` zywl=Wtf*uA*z`c1!?Tc=uUlgWn@(4VLY6@S*Sv;9f-b@wkCuAopMMi6U8v7^=G?54 zK544Pcj~@<+;UkgSBBN2WJ=crr!zM>HFqt_-4eg}+xC3je*XJ!?#Mr8Vq3J}4U?c2 zSIg!-^&b|--i^`e=l}d9<>#xH2VVuIg+;ohHlB)9S+S$=Y0!aVyIyDfp0{**xqOP( zQ-wJ^Tn}Gl?R9^+IWAOeUJQ4-<>}3r zSd^^Z#;kCb_H*dzJRi6uD&g1|CTD8PAq9nN}HL)aBHw8#A7#SE?>KYpA z8k&U|8Ce+`SecmV8kk!d7%X$x{S>AFq|yqa3#h@+K-U1M!7#+Y%*xcz%FrC5;m5Ly z02B?m`6-!cmAEx@{yy*qsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN%^PbJE{Nx literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ax.png b/examples/compass/images/flag/ax.png new file mode 100644 index 0000000000000000000000000000000000000000..a099b4f3d8c08a7549358308c12f9efde619533d GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIsd%8G=Xq-1aFoPf*%fy_7Qa0=Q9F9y#o6`SEhWPe+?H$f^j$PO#`FEnhp(qkcRZ1MJF~iC z!}N3J{@3(;mThh6uuq?R9SFJLayV~ zp%^jOtJZC$g$v3&n~{X4Dqj$PXP+JRN1 z;eWV8<30OASs&f^yUe!&<4?83HKHWBC^fMpRW}7lFc=vaSn3)Y>KdAb7#Ud^8d#Z_ z=^B_@85k^c*!>iy0i@Cjq6?_O&_LG!sKGGAz|6|j(8|ypqT$D~iU1T1x%nxXX_dG& zbpAf@2B^UZgOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wz Gp$P!Gxo#i; literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/az.png b/examples/compass/images/flag/az.png new file mode 100644 index 0000000000000000000000000000000000000000..60bea4eb8d0e08b8e4815cb27f0a3b6bef67ec1f GIT binary patch literal 879 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJzJY5_^G|u}@*qarSDADrV+H$vI_5n8) zdzZ~ws~2p|%~KNJP@W*Vr`crL?FXtEk9jrpR@~r>+#Tv7n0w`j%lDf1XZC1bYdC!P z!-10E4=+rg9Z_P-n4#d%^zZsrg}}~jnT4nJ&Q)YkpR>|OYST>5*={Gc9F{zl{y1Eh zjag@F{5hvKqr=mTmUy%n&k0>ub|QNEuNUj5d1{*T@x9vqKGV@?<`U1zl8KiD`#d)7 z-}bG@Chww&!a@&D$Fu+A?%sWyn{yg z%hlbxFMntE?wZ`{r{81)m0WLnE?^80;}4k@Q2u4#?AjRl-a5NVtNCZo-P@xp>z(?t z!;3kWRmE%KBFVf@uOA;?llbxamlJ|9-f$1yLKlMEV%q(GreCzI{ z@;BX6QUXSUYKdz^NpewYVo9oQ3XothGBB{zH8j*UGz&2@vNANVGBMLNFt;)=Smv<% zDNF-Mr4>XMP=ld?t^rVkVTgg5m8qeXp*cjuk7X4BC>nC}Q!>*kack)Oec%mHgAvF{ zKAFj>dBv#=86_nJR{Hv>d3xoU*_j2YDVd3S`9ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJnd%8G=Xq-=-=-+XsP~zD9`)?klI0r^s zbac<|UOmOMY~|5wIg2bj6rZ+rFShTL$+;bru_)5>Ur&eVrCS+`RM>^Ycb+iVYW#EW z`_HxV?e{HKKK~#y&mRcbOv0v$`^<~3di7)7t9{X%Wp!RLHz+6xxG*@LxgW;P;iBJg zD&c;=ntsflk0s9@9+;JRa8pm@2K9(0?~orS7GCwcD_wt?n<40}%AG3Pimdg}p1E^Qtip^Zo_;%zpWgn~+q|AP=brJ$6pQnd zA8<`RqciaplV+#hXM%3<3xhjq^Eo;7QxZSl|N*DfAbfA=PAMzD`o9mn!t;^zz5 zBvs}-6p@VISNS#X^@GO6!dqLlr=Ry$R4{rVD8SII{NI>mnvC_{M^7gDA1G(2XMA-! z!J+-(fmmR?sg}4#lq46WCYGe?rT_^BBLf3VT|+}%L$eSgBP&A#D-$za19K|_gJll8 zpTabNR9ZoF0W}yJ=o$bu7={>_S(zGI8A3J0T`Ycrq9HdwB{QuOw+8*5(-A-oMj$8o zWG1KP6{j*}l#~=$>FcNF>6K?@XBMQUWG3q67p3cic=`dQNjaIx@hSPaiJ5u!e_x%4 zSqHHR?jciM0}EXv%MhSHObmct(FHoxz+gpr>RO-%Nsx8H`DrEPiAAXljw$&`sS2LC ziRr09sfj6-g(p*OfQqCcib{);QyJVGeIZD}EhjNu!818OuQ>F)$X=i_6NIw(&>$a} v>&wf__0ke^AxJMdKUY5|F-boYq)|T&XhyMqp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI&JY5_^G|t=hugw!>6lqESp2wQ&so>~P zl+9t|km~F)VS$0issf3cz)%kk1;afIOeW_KFe`BJcC|cHb2xnNyk&>4Rn@*4W9G2q zJ3O@F`xqbaq+T)0IS_z^PiU-Uig!D?zUZ5o2#x}zs#$wS$(~nq0b>yIdl0Gr{_6_RUTC$#8q3 z^41o;Z9l$D+;tY(zdrp^WvWO3^9Pn0 z49sjFUSIxg<(?bh@^+Eh8(BGq{|&qW4F8zZHl$ZixeyTs406>H*NBqjqSVBaRNWLH z!C+)yV5w_psB35zVq|1xXkcYxrfXnsWni$(VfRy*29QcCh%TT8Ljzp{pa#Pb12ZdA zLn}k5hPaExPf#@E=BH$)RpQp5-*Y+wsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN%`Q@F(Lo} literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bd.png b/examples/compass/images/flag/bd.png new file mode 100644 index 0000000000000000000000000000000000000000..34a6c33cb31c48e0ad16807552de233342e091fd GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kICJY5_^G|sn9+?y3rC~`!7I=7<2Mvlfc zy99lNIcJzHm^!VJ;l4s_*OkhtHVt8ix|Ze(%vQLu!u5v0BsEQ!vgeQg=;mGPKlSjq z!BNZh#?39^KNd4_NEjSo-Mqi)0<(pk4O>9yRV~r*pfa{42TymYwNI8~xUkGzeC3i) zHLL#SS5~Y}o2&o&ZNz)?69Jbha(NcGFI>gj9`93HFs(1gY{gl5n_Z7`+~2!}cnUV~ zxkbs`zBPN7^6V=o8uN}#zwbHu(S{3)AGl0Bef#>p+0*LU?|NUFk}B=Mu9P}Gvu@vU zH?xfsbM55+luR{=j0sT^xmfb2aIV?yIk|ynu03H4-85Iip?X$q>d3Ef?+k|E#ZLJg_W& z*FS#WDZoHgEpd$~NiIrFEJ@W(0TK*G1_qY8hK9O^W+6sKR)z*vCT6+@=2iv<%N%w; zg=qk(w1VgYYA`g=H2`Wb3^6dXGBva^gldSpSo{P zOis-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#~3AwYka7y!MZ3v{S~!HV+KwLlG$AnStj(@M${i&7aJQ}UBi6+Ckj z(^G>|6H_V+Po~-c6-h%Bl@=wZGPpVVLXd)6PGY)(XL5dCap-xGy+CCq2xal1K|V0o umzS68r6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft+`qE{-7@=W{1IdNn8VxZGbJ>JoCKx8&h5 z?h3{HOVMAguEw&4cRkWF_Kf-RKU%b1arK@v4s83semv*O5E6L(ih8Mc;RmLOwP6mS zp;vEK7EOI{(e9Z0^jGfNuatSmzy8Y9a4#?3$k=!_%gwbXSKf1R-(vFa-LjTd=X}zm zUY&dQqHO!F#nx6^m?x+y81J22v*WM)0lp2vm-rR<99AZ;YT4_*;cdVlwr7^=J+-Qy zf{D?B^}IUxW@TzqxEJJ|)FfjmnMHlE$1A`UiscV56 zBtg~%=ckpFCl;kLIHu$$r7C#lCZ?wbr6#6S7M@JC0VR literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bf.png b/examples/compass/images/flag/bf.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4b58930dc893363fc0925f028ee018b1bffc82 GIT binary patch literal 797 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI4JY5_^G|uPt*=9{;6mWg7e&5+dtv9sm z`i}NB2U(YF*dlT%h4G-(YJnK%DszRT#N=$jlT1o0zUK$+VflREVS(k*JBiZ{?ti)O z|MXObm>7l`V!D$G1^RibmsC#KziwR^!+|qj{Z%~NZauZV(&5~yO@Cvc~KF&xbC?Hh-1o1&X?cuJ8NuQ%d`vgP`kmF3FWO zpFO*HP9?24QJN&8&2zjfL^J6`fT(w9kI1f~$81NqoW6cMxKYXco~icrRWj9cR3@7k zi0xti(eV9l{}G2q^&QLyS+mdDUuHQ63^dge*NBqjqSVBaRNWLH!C+)yV5w_psB35z zVq|1xXkcYxrfXnsWni$(VfRy*29QcCh%TT8Ljzp{pa#Pb12ZdALn}k5hPaExPf#@E z=BH$)RpQp5-*Y+wsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN%_s<9V`F< literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bg.png b/examples/compass/images/flag/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c30d885668b1ba02d69627184ca1441fbbaaa042 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJZJzX3_G|uPx8TvT~@_hciM{nwl2rbdl z#D{WoRw{FwKQKBob%q7gDhaF7L`Koh8-)^e-105LmfPldWVRn>6uu!>skKjWH}j11 z&ly%_?O7>xH`8as{rA5!S1w!h&pG>S+5LUF(+?YI*9%QKz4*(@n0dT^e?H#%kni>E zukUKry~TWI`M6DzoaksQViNv*_1VA6m;+S1wN|vQ(D1qErGKdAb7#Ud^8d#Z_=^B_@85k^c*!>iy0i@Cj zq6?_O&_LG!sKGGAz|6|j(8>_1A?{-F6BG@(`6-!cmAEzN_neLZYA^yh$tN>8HLp08 zA)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH z>Ka(+8d-(_{b6DN^olOfp#}yk%2U?@HAsT23(ij~DNig)WpGT%PfAtr%uP&B4N6T+ zsVqF1Y6Dax4N+8Dl$^@o=I9GS3T`=x=?b37`FX{m=SB7cm6;%v#fJv@z+7KmUapsx pmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIqJY5_^G|tCPw9Px@AkaF0Vzju)#wi`r z4wLV+&Au>kilWC7N3X6Yd?t4qmo#%<2)M!3=_7FN+?zcjujLP3&M?)ky=A^xU#p90 z>!hcb+MFxo*Re?~C>7Sy>QeHYWC+#d>%zDGhN9W7G?h*F# zc4j%KIAcP}{`1cz^Vemcm}|L0O2FKNp|0*h;i13t9<8c$k!tri($F_^qgdX1i`j;I zAI;yrV4+uNZrO@&aceE+7H!XdS+L5X_JsPWO>1ty4O6b{e>?55AwT<-`utSS_YZCN zoHw66BPDX$!Q;=0rF#qHawnHuurGfdlDlqg=67Jwsg}4#lq46WCYGe?rT_^BBLf3V zT|+}%L$eSgBP&A#D-$za19K|_gJll8pTabNR9ZoF0W}yJ=o$bu7={>_S(zGI8A3J0 zT`Ycrq9HdwB{QuOw+8*5(-A-oMj$8oWG1KP6{j*}l#~=$>FcNF>6K?@XBMQUWG3q6 z7p3cic=`dQNjaIx@hSPaiJ5u!e_x%4SqHHR?jciM0}EXv%MhSHObmct(FHoxz+gpr z>RO-%Nsx8H`DrEPiAAXljw$&`sS2LCiRr09sfj6-g(p*OfQqCcib{);QyJVGeIZD} zEhjNu!818OuQ>F)$X=i_6NIw(&>$a}>&wf__0ke^AxJMdKUY5|F-boYq)|T&XhyMq Tp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJFY7MP=@`(`_DNiYvjHk zx_0MOMxTzfZq}O#O(h+1Hg3!Hmb!#3_P(h3VpdYSm`lmakV%gD3O76jG>sIymaLT6 zW)^g4t!;Jo?ElZd|Nn30vYo%ic|=f)-4PSA755J zU6aMGwmANL9s7ldh!yA0STs3$cy5*Icu=%)N|{~$JSh`@ne=DhE|#_11zfz-wqIH1 zUEl1J|30mL9-_l`j(7JX_SN~zT=m4|cJJ2RW_~$p@7Isd9(`GK`TfVrTQ&UqmI%*1 z`S3+RMa`U<-Angu(469DY;1f#+S5OE`7fux9~{+}GPGEg>4+My{HdLqXS7)>BI={L z@%6|#Gj0Et{f*tOe@bdG>)wS?la?lB?(lJZ6rDOVTj_!@|2MTAw_;YW4Vz`U{^eHH ziAowT_Qx!V5DNa;e>LQ+?K@}tI2*0h>1%r5+w&{%Emq5!=Ko0d*`(V#bVi|W%g zG1GUyK6#*}z4H6d)B8@;f*Dh&&#G-+p8vpF5p#gU}WKN`1^gomDSIp%;(SIYcteJ zblx1f156jHC9V-A$wjG&C8@e8K!U-@z`#=1&`{UVEX2sj%Fw{d#7x(~+{(aUnZxd< zFbyD;RuEl44Tc7~20#slAqHkvriNCAPz`Yxi=Uuq$jwj5OsmALLBHp81WG~j^en4qbPG)j^N`7u)W}f}uSLb2Y zL2QD1$W+(BLf6PL1n3VF1E5!Qfetk=SW%w37N|iIWL7 u^73-Mw8UHp(o4?I)z3*x($55G)K3GNQLJC6>UtNbpTX1B&t;ucLK6VxL6*t@ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bj.png b/examples/compass/images/flag/bj.png new file mode 100644 index 0000000000000000000000000000000000000000..17398e417df9a9591a430fe9e483b0c74e109798 GIT binary patch literal 767 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 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bo.png b/examples/compass/images/flag/bo.png new file mode 100644 index 0000000000000000000000000000000000000000..e56d84b2c0ed56e489196ad0370bd7cee02c0aeb GIT binary patch literal 797 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI4JY5_^G|uM++O85w6j*cfugRyGE4kU4 z9vJRv-?+1aQ_$J)GoPB=p=yclMxA{5$KmyC#@cLVuEAIDmN5g+NG+k*YD4G?5_6x zdc)5tu2*)H9d_H0b#0C4=4THd-u)?g>}~cPo7l77+E;p`%zXX}ndLltc<=1`atRKp z?OClmQV+dz=1M!<*2x#xB)Bj^yJc-r>5cMywZz4TgpP?nTv~bYeT$}WmGaWfr`^`c z$y`6LeQdVzy-%NN=SgZMSr|vYOVOUzHUIIaw>^xG7c=LC7#5iriss(%dwpYTA_wIUxW@TzldoJ-UaGs N@O1TaS?83{1OTx18*u;t literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/br.png b/examples/compass/images/flag/br.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8b73e553086744334ed4629634d474954fb743 GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJXdb&74>a3H9B+ z_P^|bmF1khSzcWduBngSxG+5Ukk5U8>s873GCp^!@1$<{kp2Fy&yoPutT*Ss{{Q{p zUDlGq^UJneS$+6$^5rmrUk;y-U+!*~tC{-xDoLcBN+H`bH5>rL^ahCZB)N@vhMO-`Wf5c0XUF%vfJp`1AF(gX^k4UafZIeiu%$$TPJdsy?warYUL`;(9EPP zhFu#r=We{5aeK?6$@@P!>pMOwT{j&Vi>f8A5hck*sfi`2x+y?{!N|bCQrFN>*U&7) z$jHjjz{%(#R)*#f4L_Du1fXch z%}>cptHiCL^Y?)_Kn+G9C;4P1r{)!>GGvsL6jq^4vh>g5-u>w|du z0i{VfnaS}f`MHUidG>!_orhTmu?g-WQ(XfKT_ej7pg&9ufL_rBI@G{mMS1F4paw~h zb;0>*CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5Xq#=q*i;`0r+#G!&NWm>9Fs_FJ N22WQ%mvv4FO#lJFaoGR> literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bs.png b/examples/compass/images/flag/bs.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc2fa81b0c629c6ccc5efe33381a83298b4c7fd GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ-JY5_^G|q=k)X%?MDATh3Z2w=+sFQ~_ zl_+pnG%2cZocO}j^o8||&quztgCDi7?PU=%sgm<&Em?FzSFvRN?)S2b_OlsGcaM2@ z#Q4BR!*l00Y;C>D#gOB{pzt;4yF#Lc3`2$e?1wK-?B1;wt+e2#R|@w6-PxRz&rhE& z%W!6Y?AhnJR=MTx3y)5_kT73wxy-G}Z>>M9U`|-BTleD6pS!1@b}!dm=VJKSD~nm? z$A_w~OPMc3O7 zbrY5(^|o2fE!q^nvhM5s_QuRaj)s)bOcT4>==JkLLo#Q7Q%h96#3jq%dFS@ylPB9x zHvbAuz5H|b#vDuj&40J-OCCLX4Mkch?3-@)Wnih-4r0fU}RumscUGc zYiJf?WMpM%U}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO16>242Ez~oGb>X=D?@XLh9Ao+ z0#G#M=BH$)RpQpr`TM{dpavt5lYBChQ}c>b88S*r3as??Q}gu7GqW=bQd2S$_413- z^+7!SfYPL#%;fl#{M^LMJo~?|&cm#O*aY{Gsjh*Au90O3&>toSK(FWm9co~(qC9mi zP=h4My5Rh@lJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJndAc};Xq?YIwLkw%q0I4*&%amC-~H{< zx28Ks`=_|69y%cZfInfA1TP!sOL+yc$p!|ci+Cb-D`d8uRA6fs=x$uXX4z@7_jT<0 z=llNF+?)UXv_jIy6U8-Rlee=R{&~8PUD@P=(E1M@&E_8(>=js)W%e_2xc8+`Ja{D{ zWQ&0P>J2_xi(ZD_s@x@J!w~eR(P-XMmdLZh`|?+=5?Nh%bGO;6W9ME?zqRpj+;Wzd ze|P7JF4|_#$F_Jz(cR>WardHrN51Ktd!b|9+nO zes=WS)7!TQPZbs@2$(i0MP!*)X?j@aIkTKj_#Ka#a+dYC-t|Ci(W zt%}O8bk6MS1xA}{iEBhja#3nxNvduNkYF$}FtF4$G}JXT3o$aXGBmI3VtQ&&YGO)d;mK4Rpdx9AqSB(|R0cOkUkFlg%SlXE@J!CnD-Jy`vKOe#1feWG zG{^_$`ttH}y|lz!2+~W=&(+UKOw!K;Y1B^xno+D@sOowbsGq^p)z4*}Q$iB}a2|1I literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bv.png b/examples/compass/images/flag/bv.png new file mode 100644 index 0000000000000000000000000000000000000000..29aaa169175a0e86f0826c900e945578435102b1 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHNJzX3_G|rb!+?y2=DAIa;=l5F?9&Hzs zCiQffX&$-c_CfWHj>`t_WgRy>=P5MtCrnn#O*j$E!6>R&c1+M@hEfbiX3@1<)sc53 zH(XdB@g`|={f|@pIy-XX>wi5h`u}fFuCNEgfq)n5-!Sx)-DBAB_uJ1b&D1|xw-r66 z>CD9I9{l;qeIQc*_N?=|O+J^FL~afX-*)+B67!)jh7KQwFw>`An`fDN zUZ0iX%=O}$vX|yzPp;c>mNS0FPYE*9)ARcMzEB(LufFZ70;u=wsT$GwvlB$~m zBp8eg3@mjG4RsC8LX3>83=OPI%ybRRtqcs7IqZH4(*ROw14$<&qSw#SfhTQy=%(P0}8ajU;cmvd61agv3W^!s?aVkSbNlAf~zJ6++UU_DA zW;)<_K`4t44f27xzP!9#FD)?_g7lK}bMSyqD^>bP0l+XkKTKYiq literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/bw.png b/examples/compass/images/flag/bw.png new file mode 100644 index 0000000000000000000000000000000000000000..b273c857416a766bdfd0a283c8cc1ddf48cc54ff GIT binary patch literal 783 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ(JY5_^G|txsZuDB5C@`njzAJ%a&Vsp( z%pZ9_vn0LjzQcUu#*$!pMPG#oS@9hWPB-S}AA4l1Sl$tQM(@qL4QGyg-TYrjc1qBK z2~DaV3mg*fGasIRGK1*svuQSR->2u4{}U427^BC0Ajd3vZJ0`=PMCXIXzDw!P~YX3f7aMBC`5<8 z<^T0#{?{}67!nvRNO`6`^|LpA9Z;>$sBrD|*A%0l|9;!`b{tJIoU?z<-Fpv8UkmZs zzVz9-EB4S;%{tqE5)LO9cR$Wko#nVtWN)UE@vOxsnH*T83=OPI%ybRRtqcs7 zIqZH4(*ROw14$<&qSq0n%u!h|Hl+3hB+!{K6A9w?_ z!3g9epUmXcyy8@bjFOT9D}DXcJiYSF?977Hl*~lE{GxPy5Klj#G$|)DIX)#nH!(BM z{_m^vF!w=hf_unR*T6#8$T9@z4-*5RS9F06H85CFp1KyOK@wzLaDG}zd16s2gJVj5 zQmTSyZen_BP-ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kISJY5_^G|v0>ZOjTu6lmSQw|e8bQta+*`i>-CX0({YUqnOtX;T zJ5zI5akpN7-=}Y8igF$o4%@$2&}#ap@xFoQg7=oz-km`m9{h(c%YL8osWE@u`s{1j zd3i-UQ+BE-Ej{QyGiX|xrti1!+*i(|?Yvn~wQIMT_xFz>)0QzhXa!8Y+O=By-1%T9 zyEm6|Lh^U(Fq(e0jGcb`xblO?`vrHmtKQ)bSrb-SIaB=oJFYvG_ut>qIosw{TKP$5 zf6Y6;dGhmibVYh3az#$;(o9K|3;KB6`2VkIt7?8l+}m@nuHwGm+PSOdMj5Zl*NP6m z=CgL?+O=0h4=TUfWS)LGWPO~@JiR?F?IBB)^w&)g|Nf<;qvu4z=_S8^zJ8zd{&#;q zyFR~xK|vX#!40Rx8UORmOQ+rUQ#}9-WYrSah?3-@)Wnih-4r0fU}RumscUGcYiJf? zWMpM%U}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO16>242Ez~oGb>X=D?@XLh9Ao+0#G#M z=BH$)RpQpr`TM{dpavt5lYBChQ}c>b88S*r3as??Q}gu7GqW=bQd2S$_413-^+7!S zfYPL#%;fl#{M^LMJo~?|&cm#O*aY{Gsjh*Au90O3&>toSK(FWm9co~(qC9miP=h4M zy5Rh@lJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIsc)B=-Xq*q7xIcSxqDbrc-(RyQW!-Y| zRdI6KxYSCcNhIcvqq<{ZNkLK3xA=krL6(p91;WSQH3huYVAZy|*|hE2jV+#&)m~2j zKCgPcv&NNnW7&#j>OCLiSvXP{8t#0|JkBg&u>0eqn~@A`=0`Q+Pw=-b=MLVA4{j~3c>;q_IP9a9(z zn6Dn4z*76A;_JJoFOM!MJebx671Q+R*1pfcCc3(yQ)X1ve zziL8mzxZP@Cv$Dh4#|}h-MksRCpK~gx+EQV@^y9eclmW^pIEE#3EZ=dzjd?yLPlp6 z!-S-AbDs02%jUFPcV%9HQaJvI@8jU=6wXDVb@NxHWYC zKJW%;gAvF{KAFj>dBv#=86_nJR{Hv>d3xoU*_j2YDVd3S`9J&%r>mdKI;Vst E0M5E;x&QzG literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ca.png b/examples/compass/images/flag/ca.png new file mode 100644 index 0000000000000000000000000000000000000000..fa22e45a152a72fdb4972e93ae94279b75e3110d GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHBdb&7!{|s5}(gsX2!)vrvLrq~H5EIYG#ym+S z`Lcwo;ZD!1m!@w2_C410(wzN!>z*2{VtjSJyQXsA#>ty%KZn)I?W+lta5j>Y&#q5; zf2Xg(IVf$Z$`Ti&HT&3lkDipe_&=_$&@$YA+r`qGS9lB={gPeIi6nBU+%A8AHzT1f zd0Oee4>Bzd5X_=?7Xr~sXKR@5D^YeW| z{maXIVxP~Ebkb9H5qfaxD1VoM%h$M2&slMuZ;x*aU%aa5+^SXkF2`-qbUmQz&^+Vi zk!R;5Hg|^lZs%Fqu=Scm@V(vfKF_o~8H;%|CN#t!=)HQX`oI2%w2l*1<=fdc7#`@0 zZ8W;Ow)XH*V9cqOxJHyD7o{ear0S*s2?iqr14~^)LtR6&5F;ZiLjx-lGhG97D+7aN z4!fViG=NlEL39B%7#ipr05uqf7?@d^8d@2eLp1zYRuO=rAvZrIGp!Q0hR)vy-T*Zi zft=)%nVgzeoXU_YHHB>hZ~M*TFP8O8dAs;+l|`WZZ3{an^LB{Ts5LI_}c literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/catalonia.png b/examples/compass/images/flag/catalonia.png new file mode 100644 index 0000000000000000000000000000000000000000..85082e1aa2b15e6660aa0bf4c54d2cde2e1eb31b GIT binary patch literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(!`BaKkqius8lEnWAsXj>C+_uP4isoTe{6O}hmgtP znp<~^km#E=u021dd%T-DGkN3glYWI3JmvdlS_j|wEB9)Gh@fw2xu%pV>Dm=J&2`c3=pC}l|9vdjV|%nl zXL`gVRjXMP=ld?t^rVkVTgg5m8qeXAyh-$#o{L@8glbf zGSez?YtZjG9Rbu}1agv3W^!s?aVkSbNlAf~zJ6++UU_DAW0>w@#sO3D+9 zQW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%NkbHs7A2=LxHV*Nr@*SkRd44$rjF6*2U FngB|A9!dZJ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cc.png b/examples/compass/images/flag/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf92ff0547b7bc8d0a11fe97c25fc56d31a3648 GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ1d%8G=Xq@*A+MgZFD6wbHo+X`I_atyD zUYZspP@3b?W%Yw!q@C}s$Xlh3rpdGYSP$wpClnSGim=Mg`C}Q;)z!SMSu|VIZ0WIM zZQpNQf4}d2HQ&agk1g_cK7ChYG5@&Tl?M$>o0iA&F?TmGXgV>RUw40|#XiyPUB>f& zpNVBQHa875FO}AOA0w4#|0D3%4oRE67daSxc+|w@Mf*anxBKh**h*?n2@-v8@zU%0 zqF0~Z|8UlpSQRo+iGgjC(D~kNuWdc2ZJaRO?@_t`y1VPmk6MKORaSZ*-6-Mj!pWj& zb@1`heJ5`Pg~iPC?0yY`|F|C zQ*SNX5%@Cd+{b6rSBTf_2(qX-k~Y2j(WfHi7yrYKF)>-_JkFZ5HP|~g!{YHHB>hZ~M*TFP X8O8dAs;+l|`WZZ3{an^LB{Ts5{UB}f literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cd.png b/examples/compass/images/flag/cd.png new file mode 100644 index 0000000000000000000000000000000000000000..369769c31d3d69b14931e23898e02c493b929415 GIT binary patch literal 924 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(!`BaKkqiust36#DLp08pUf7!*oG5ejv@bY?yKW_SL*#geA( zbX)mz1x;Vv8JquJ-ug?Df!(RCn|JyH8P6Wo{BK`U%Z?hlI6OUY$1u<4{{FR}-c~Re zJ@I{(dgAq)KJ|9%ESNMK9&wzsmmo$>*jQ z{?5Lm6&-TNntkHc&Dnp|H~E-Z{C)6RGg9gO`nPkWUhO)!AYZp-UVZSk*1|tIlOI<@lT|=`FBO@zA11l3VT?2C~1A}D_yPv`| zfK*yRbOALO8t57TH5i5%m|2+`S{a%{H2hdr5rCp0H$NpatrE9}&ff>#05uqaoaB?4 zoSIjh%8*e~QedU8pPHvvo|&ClkeZU2sFz=qt`Fkr2b3n|WG2U_Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$TC*=n!= literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cf.png b/examples/compass/images/flag/cf.png new file mode 100644 index 0000000000000000000000000000000000000000..380455ac76460ef6e58db34917512e6dfd5721cf GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ*JzX3_G|u~;viAsOlxX|-{Z8?lGVNXS z4nET2&AcSym~DFHRlwS-Paa&bpT675WwNgB!zXVZOcIER-K@&7%U4lEBg18Op?~xJ z?|bjxPH^1+wsHB3n7f+0zs_EIZ|-yZ3r*>p4z53M%k+5qH^XThhlEsg5(B5+{Wy1P z@5+@+|7K^umX|YLs640Ydx)TZzE6c_kWXdDsi*1pSE+1k`~2NXKW=~Rl-5fVr<9dH z{r9(s?digVsuwk}3mgjzJ`@)fHL)}-5@2wcHGA^TZDwEnmvt?Y;Ij{HVAk;VXj1T) zbS7ope+DK4soqts-?_W5i}UyMX&RjjGkUym=AH2U>)ecbMU)rkUH|L2Un++$P5<0G z)9PtrJpSdkn2Tqwt%)(5by@f9%gc9PrY&A6P_Xl&(&5Z$c_uSY|9$WK`4sa(qXMST zdb#iEkG5BzGM>9(%E_3t^?8<;Cr|q%a=xeVC+Di&>V-@BR;pV%oK!u|>VD+yJa5HT zmj;IOcU?B_?G59e%Xcexjvcqa%m+L|C-ff_3eB|m#y)9d%z}*T*P4Lwq*~${QIcGg znpl#mn*t;lj0_Acbqx)54b4J~jI0a|tW3;w4a}_!43;_UehSk7QfURz1=L_@plbls zU>IUxW@TzldoJ-UaGs@O1TaS?83{1OUa2T&n;8 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cg.png b/examples/compass/images/flag/cg.png new file mode 100644 index 0000000000000000000000000000000000000000..684ce2dc8d15b1fc0e6781c31e523a09211e5af7 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH{JzX3_G|uNv+~_xjQK03yc|D_Axd02F zuTBkfm6lXbYt+S9*E3tUO`p?hC}!8#pHRfhs^Z|-tG^(Bfxp73yXW5Y9X-!4=C|zT zli4?Yw;c?3*b)A9al@grlLIwZiG_AgdaWGAu{qtCp;ar~s`X3=bFci$*rmF&x78eb z{duw&!vpz0GtaGAGIOfg{dWcBt)W{E^PRtWX1>@528V+$L;O#FOzW=Zw=T(S?>{{M zPzs|i*UJ#kXz)V^gpOQ)WKy6@DGSvennD!j2PaNN(Ye@JD?Zr&hG ztv<7_NjF3<^Tl6!e`x%{5dYULF?^$_0+cxXhq0{3s!sJR_tQ*?And(Jd#`u&ej&%b)B%q@^5 z-}-;Y<@i;NX=O*OswIJ;t6Jh3QIcGgnpl#mn*t;lj0_Acbqx)54b4J~jI0a|tW3;w z4a}_!43;_UehSk7QfURz1=L_@plblsU>IUxW@TzldoJ-UaGs@O1TaS?83{ F1OS3kFXaFL literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ch.png b/examples/compass/images/flag/ch.png new file mode 100644 index 0000000000000000000000000000000000000000..2c16c9c5e77c76f85659e904190abee8cab6af1a GIT binary patch literal 707 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHEa{HEjtmUzPnffIy#(?(3p^r= zfwTu0yPeFo0|}NDIHm(>ux^Gq52r8!Ifp!5977~7hfdg=d)PswdB1lar|7K1!4h%@ zTsO5n47^jxo;oI7VsL3iVeSN8(D>#>$&ON{5_19ZRE_&NDy0d-oZG+xL%OkjTC~>qFW( zlaoFD{wh`4pL=$n5jyoLf1k~|ou9;Ynol-aDNcU}^o?qXYeY$MQEFmIs%{F9U@$T; zu+%j))HO5Ewlp@FUeP=jHJfti)5p_QRI zM8l6|6#*z3a`RI%(<*Um==^=)4N!v-$Von#$*Fn8sSFtG~j^en4qbPG)j^N`7u)W}f}uSLb2YL2QD1$W+(BLf6PL1n3VF1E5!Qfetk= zSW%w37N|iIWL7^73-Mw8UHp(o4?I)z3*x($55G)K3GN WQLJC6>UtNbpTX1B&t;ucLK6UuLiWJ` literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ci.png b/examples/compass/images/flag/ci.png new file mode 100644 index 0000000000000000000000000000000000000000..4b55ff8a025288789d656420f60f388a45342a54 GIT binary patch literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft;V7E{-7@=UXQl`Z*;EwCr!!&r0G^-MC=k z=0_s;nv`!uRWe(zcY4a%Q?4-Wo0rO@`to$0iU5s^nQ7fW%hYe4>)*iYpb>e$u0ds^ zapor@#|aY*7Cjfvd&lTK*HkY4R>R)yN53k`KIA$6sq*G!=5Nn885})YT;2e>2BV2dxtQ-hN)puy}v#m z3ebEhv(9blYFXAp6HgWK9q?SLy`tb~pn~j5FYyc6r#(&{ovM9;sbSsg8`))c+Tklt zxh}qaXQ8Rr7T4%|@^Qw+-(TJ}sGp_GAmsOxO=3yeoF|EjpkPuhag8WRE=o--N!3jO z5)4KL29~;phPsAkAx1`4h6Yw9X1WIERt5&k9Ckm2X#lCTg6INjFf`CL0BSG{F)*_- zHMBA`hiLe*tRetKLvDUbW?Cg~4V}Laya8%30y)ViGdVS{IF%uzq@=(~Uq3ZZuRJq5 zvmiAkGf^+UC|w`K(+?<3%E?TQPsz_s%*?a@`|3Q*I*3hh51Hy3Sm+vAh5-FxVgU4t zF3_O{1}n-_*8(+2f~*V9Pb(=;EJ|f?Ovz75Rq)JBOiv9;O-!jQJeg_(R3r^iR9cjr z%HZbc3qcBQIf>~Cp2_)n#i8d#_5zieAe6<22Km5TUtV6WmzJ0dL3+vgx%xSYN&1-} bjrwUoGm7;KRbB4_^)q<7`njxgN@xNA*~$!@ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ck.png b/examples/compass/images/flag/ck.png new file mode 100644 index 0000000000000000000000000000000000000000..5195a330597c76e32e1778c4a6d04d7efd4d0e6d GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ1dAc};Xq?ZT=-YNe_if^G`*NPn?VpmR%`-Uv6ugk@@xQ zTweBHt6rWE%7u$trOZ}3 zC90qE)$nl)owxIo!;zSuS6|P(cc%Tl^iHiG8FNp(g6Zf1MGlWT&9!^kV;5y6{NOtyqS9kBD|PeD0GG2oDj8qza$Q@wq4oIU zuO_S(zGI8Ja^h z{8&~IfTAHcKP5A*61RrV-v{0RH5h@MS% z<*93d8YDs11?Q)glqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE z1-G2UbOq1k{Ji4O^CEkJ%1jW-;zNUcV6HDOFV{;;%!MGmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ3JzX3_G|rdy*m^k!3bgL8zAr4?t&lbO z(i%sXn66f{rc|+nr+z^@*`=cu&9*gp2)s$EQrfy!UzVsxjYH z@z9wYojZ%UZtQQG)EPHlHcsY!xg2|B(c(A<27W~mSHa{jqP}XAI|?g{8j9<-eE()x zFMl>Ma((UbGfD-&O-{TkKd&5ky(fR#%&Aw(j_)chwhwXNo;~ZbniPXqT>PW-y%Ohj zs!hCmclj^pTb)0>Sz_&de#wmOd#@LJcI@i#{-iQ*lDBH|YSTAm-pvY+G#5rSt}IUxW@TzldoJ-UaGs@O1TaS?83{1OQdC3kd)K literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cm.png b/examples/compass/images/flag/cm.png new file mode 100644 index 0000000000000000000000000000000000000000..a3208d65f4bdaeccea2925fd9544daa2a17e8618 GIT binary patch literal 804 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIqJzX3_G|q=kH0+wfDAK&Y{!e(o_6&SJ&zn6@_C}m}vp_M`j^pH^@EwnrOr2f6hautI zJ>%m1h?^U0_p+)P&#v5+`^~p{qx_B8?x$LXRsFWyj$OaTq3&J2^Lu7}(nUDDa- z|DA_h{(-p!&xgO#>;LVQeD83=OPI%ybRRtqcs7IqZH4(*ROw1 z4$<&qSw#SfhTQy=%(P0}8ajU;cmvd61agv3W^!s?aVkSbNlAf~zJ6++UU_DAW;)<_K`4t44f27xzP!9#FD)?_g7lK}bMSyqD^>bP0l+XkKjPogQ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cn.png b/examples/compass/images/flag/cn.png new file mode 100644 index 0000000000000000000000000000000000000000..dec0f326bffbd7dadae17cd9e80d310339d09997 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHTqm}w7pocJhDU6zno!e!-A^AiIZY0yGm<{ z|4n!x_wJ?Mg3mXqQleLUeUq_@=^umDx?+ROmStaofu~yH8c~v5l$uzQs+$5N7>o=I zEOiYHbq&ozjEt-d4XjMebPdd{3=Ebz?0yQ<08(iM(FN3CXrOBV)LI)5K{1Jqyya*|JGa%x_2Dnmv|Nr9EVerldxd1iKIL2627 zqF#Pcx;}`fA5fZm^)p?k85S!p0GSxM(&^59Q0s6zl0O%E6phFD| zR+Oi%1!|B4Sr?q2R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGSvpCNE)K3v?w{1!OhVZ zf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U&yu4g5Eio5@^pf*)^>Y%F^fN&k_0xc6 W6zdnNy50rqXYh3Ob6Mw<&;$U9SsiKs literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/co.png b/examples/compass/images/flag/co.png new file mode 100644 index 0000000000000000000000000000000000000000..8584ca4c7e1c60d5f6de31e3bf0061c5e4183d16 GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG^JzX3_G|s2?ZCuxvD9|#$U*CPPqLPSE zk)Ffbd0Vv17nEr#UCeHA^L*Ulv@qz`+cVaSf1IB$lcP3SeYf@OyLI~%A8vATDq{Mt zenU9VzK(Cog$to#h1ri59qWzSzN_MI7W;y$<-1N~xrQ$eQ=gwEm1{0{?TPtHu-D|dJI z$8S%6&t*0%J8oO)c09s;u6DbEHG5rmd~@rW8HPbm`}D1izL_y^sDCwi_x$;<9%Y+K zhMwXHGMU(yAA0K3&7VKr?cSsp+-=YP{{G54pIVvqUhc=vc}?HVXP)?*i7i1v;DhLY z_XF}98nO>6zuEd07*eVwt`Q~4MX8A;sk$jZg2BkZz*5)HP}k5b#K_3X(7?*XOxM8N z%D`Zm!|tar4Iq_P5M4kGh6cI@Kn;c=24+^KhE|5=5Dh<;RRo}D$jwj5OsmALq4W2F zH$V+WASd}`Ca2~Vr!r)eloVL$>!;@Fm1kyW7Nn+RChFxErR#%u`T?a$Iho1vDfzjH znR)hqU!8|p2eAq6AyZug3tc125THLy41iwI1v=EgU`2WATA&6=kafZNX(i=}MX3yq zDfvmM3ZA)%>8U}fi7AzZCsS>JiliZmN{f8UZ64) zgtGY1ARn0P%gf94(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaOs_R{#eg;ohKbLh*2~7YR CT^t|) literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cr.png b/examples/compass/images/flag/cr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd207131ae9afba4dc00fe9c951b0fdd2171bb8c GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHz7Y|@qH`p;f;(DwjfhFtq`Pw^yXU(cO_Y$h5!*Jm?JXyhw?{`4 z>lOWDUd#dQy%&!@UC1cC$#uHQ%8W}(CMB&rqBXxy|JETnrVWe|4Y>#EFaExE>vhe& zM6<*9=IyuBJ-jJwiOx-?%u7MHZ}i-r{f*&G&+(d?lBt_wUizeHU6Sl7NLzpS?%m(J zcl$APoeP=zyOkq--E)zL9I1S(SW1|V1Wh%X^VBEZ;?wuHOVhYA@-Lsv`0pV9zV<@g z)>FAcOH#U<*REaudGoie5haHgE`8dabNknS)dgF>{rPmMVe-kVg5FEIw7Np3X>5uS z(md&UbKkr^>4H63g|W|X{S)C4QAqf}YxKRkyg<_a6EN^pOI#yLl8aIkOHy@HfCPh) zfq|v2p`os!S%{I5m7#%^iJ7i}xs`#zGKbwyVH!XxtsuI98Vn6|4S*U9Lk!HUObx9J z%^@0oEUO4W(U6;;l9^VCTSMpX18;yDj6hEE$xKeoD^6v|C@Cqh($`PT(<{%+&MZhx z$xPJCFG|-3@$>^qlX5bX<5Ti;6EpMd|Gqj8vkqbt+(V|i1{S(TmLWiYm>2-Pq6>7W zfx(LM)U`kjk|67X^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X z`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl X(2QdJLRHthK>ZA!u6{1-oD!Mra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHjJY5_^G|tyfwDoch6lr<>O50__#63!` zyG$5wH%J%wYHn(pGA&QJ*ZPFmB(2a{0^0v4SQ|f&*t2KBB0l-UcXrNUo*vy${ean> zb-}&;LDl(E4@&L!GYd=<%v>%~=AqdtG3DrjrY}W5FEB73$@`wPTsGyFS~Jh3HS0>& zs@Y1#GQK}sQe`|dX8YUJl&Fino{CFzHT|}{J^J`@?#H_LTVf7rN)u1)5AmwJmow|# z#@JG>{aj01t|%=KX0wc}Mk#c++f?pLzX{N>>(rZ3=IqBk&s@i=~Ps_NC zPOdS{wrvYmb~;wUvw-tK&!K`DDk&Wb+?$H|UfC2@ zej6A-swJ)wCCNppi6yDJDL{h3$iTo-*U(Vc&@9Br$jZ>b%EV09z}(8fV41`2r!Wm5 zl~xd4Kn;clx&}ZEh9L%KR;Gqlh87SFeD64RqG-s?PsvQH#I2!z^9EL+1|yJ@d@_?$ z^NLd$GD=Dctn~F$^YqFyvoi})Q!*3v@{7{-K|K9{(xjZsohY z1ox1su7QQFk!1+bA0`Gsujm3DYGAOUJasKlgCxkh;QX|b^2DN42FH~Aq*MjZ+{EJ&%r>mdKI;Vst0OB7HKL7v# literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cu.png b/examples/compass/images/flag/cu.png new file mode 100644 index 0000000000000000000000000000000000000000..40f26a6727d68a2a8358b0afda1d1c70383288a0 GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHlJY5_^G|uNvJm?*gD01|?`93vS_k{*i zG9m>hp4M?<5qB175m0m#xa2m`EH_*7$+}iSQ7%D|zpRTQe)8Y2Q#uhV*z?3jvi9@c z&vS1-vW+ga{C+$(=3Qg);qnJ}zOY}Jt-+_zz|yMWA~&(a#Zg4?YgL)p3HAN^_8V+A zuekJd(&iMQr%NWKluVxS<=MgI8~Azb>ZbhvV_H*xZk->~yQ1=tx9aI*Pn4as4>|i za#h7Im;bxlvu8G}xq9eF#r%&qK7G3KUjJuW`PV242Ez~oGb>X= zD?ez3>hUQ1y=g{sd;+knc0~I zsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2pRM)^l*T^yi=noSEpjUK( z4mB`XQJ%UMs6i5BU2uL{NqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R2!foX^5iIqU2Nt zH%DIxQgF*jOjqzs&d)0jJuk8ssLTYREIu^I2j=?n@^Zbj#9Ro{OU}>L&q++u&je}I ZPXn4!tY4_=dKajl!PC{xWt~$(69Bu5RJ#BG literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cv.png b/examples/compass/images/flag/cv.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7dcd500cd074d079fe3cb38ab2575a7e5c0d2c GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH_JY5_^G|txs+Ivhb6tVsO+wL>}GiG7d zt;>0P1wSclbet=*)U~7Qfgne&p67Xf~1(R7g`( zQhE7%g5y8wNhUP@R z)9~UA*Go+1(`@rL=kh$xDsz>s@BFV{R_EvW=+>=_t*ei?VI%Q6>+sRACs9jR%f7o2 zZ7=FG=b!14#eMddS1DUvP+|DP(kKg%Xvob^$xN%nt)YJN23DX3BaoAPGLuvDic=XfN=gc>^z~Eo^vW}{GYe8vG86Uk zi_-N$JpF*uq@2v;_>}zI#LPVVzpu{2tb^DD_mHWsfrYM-WeCt8CI&#S=mH&TV6dV* zbuCbXB*?np{Irtt#G+IN$CUh}R0Yr6#Prml)Wnp^!jq{sKt<9JMWsc_sSIw8z7V9~ zmXnyS;F+ACR~&j?WG_&e2|`(XXpj%g_2uQ|dTEKd5Tuu!pR1pfn53Tx(x{&XG^1F* TP}TJ=P(OpGtDnm{r-UW|U7Sm# literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cx.png b/examples/compass/images/flag/cx.png new file mode 100644 index 0000000000000000000000000000000000000000..40bf9f3f9e7e6b115d79a10b62a0b77bf3ec6f6b GIT binary patch literal 954 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIMdb&7)WJ-Zky5E2AsZjCmU31wYn)uPffM zGt+>3mE+aWSd|rQmK$A{*PS@?c_zmT2j#zi?*-oeeXnoNge$9ddJ24;_HxPQd7_-r z3p*Hg96s~)uHD~Fcl+#9_bpqObjYFbo`e8Dk0W2sgum(&S?-)U{q*0v60iEaXK%T~ zx2c|cQn79N^)e%~X?CCg$lSI3?yl#r#93h`-P;>FefryHYnzU|tSMitRkOi^e+l>8 z!?k}t%>FJe+NIL4aN(TD4kdZnwUa(xN=jSOUfxyMZe=U?Zn5S1YZ`h1OB#ZE-O~5! zH8<}}+L>?fRF=&e~tUUhV%YtgLLb|FQ4BPrG(5S~vSzZp^POQyAo?dR2>wg+0D8 z+gEumkCNa^CEhOYFX89!UTt2__0s8Sp(>L`((bbKHvMPEkMCc#O)j+6WBRJqWw$na zhgqjBSO4EUn@K9y;PyeG3tL4G*a+$WXPg{h>-5LD)B+fzswJ)wCCNppi6yDJDL{h3 z$iTo-*U(Vc&@9Br$jZ>b%EV09z}(8fV41`2r!Wm5l~xd4Kn;clx&}ZEh9L%KR;Gql zh87SFeD64RqG-s?PsvQH#I2!z^9EL+1|yJ@d@_?$^NLd$GD=Dctn~F$^YqFyvoi}) zQ!*3v@{7{-K|K9{(xjZsohY1ox1su7QQFk!1+bA0`Gsujm3D zYGAOUJasKlgCxkh;QX|b^2DN42FH~Aq*MjZ+{EJ&%r>mdKI;Vst0NU$nB>(^b literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cy.png b/examples/compass/images/flag/cy.png new file mode 100644 index 0000000000000000000000000000000000000000..c975f51ac5dd2b49522bb2b883e429cfced0852d GIT binary patch literal 796 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI)JzX3_G|ra>ZuC2BAX3A(Y|4}fhZ_!$ zxEtn9Y~@_3EqtFT{(%1nZXF#DACI0;K_NE}NugV6fmZ|^pX^I6n7oTAuX0;y`L1d) z*T4zPX-Y|X$Mrolm%jh)!g3&sp*p**S;aHOxv4s0nV|zii@=#Tx|?UNQhX(G(KJnU zU);yK*6rR0&MZB%$(O(3lzYvc1@j(M_q-9i8@j@7+j++Gv!s%jyiMoL_{*SeYT(5F z;!Va$BcZ05s>bI0GcMk0E-w=aTUBl`r*Ho9%=+R$*DVvD)hIPAUR5LI`|axK z1QU*GYwq96R-O24!@*=8@kjE$>-Xi=>WSthtWF$jw|ZO-(R_OA&(=sKCc(_Ls>bP& zY4sO3Bp&{MQ13JQlohco31wT#fnlav;u=wsT$GwvlB$~mBp8eg3@mjG4RsC8LX3>8 z3=OPI%ybRRtqcs7IqZH4(*ROw10nxzsj$~Cp2_)n z#i8d#_5zieAe6<22Km5TUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7 L`njxgN@xNA1)mYz literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/cz.png b/examples/compass/images/flag/cz.png new file mode 100644 index 0000000000000000000000000000000000000000..780400b4dd5fb94ada216271ec2f817beee3aa76 GIT binary patch literal 827 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI?JY5_^G|rb!+?X|`P~gb(eSbJJMEp89 zq`22#aTBd{rqqHR5|+{hH0x9LUM1Zt_@qg?)9#@ zk3Qb~dGflw^2USzr0w-`%%1F8xA1??&Cl(ZcR7hOURqalwXf~_e3zd;7rzW;oTQs^ zJH)fp_wdD)?`mx3-My!GGR1R(msY0H+(!=Msi?5=b$=OnBp42Ceg5O$)|U83=OPI%ybRRtqcs7IqZH4 z(*ROw10nxzsj$~Cp2_)n#i8d#_5zieAe6<22Km5T vUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7`njxgN@xNA-up1V literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/de.png b/examples/compass/images/flag/de.png new file mode 100644 index 0000000000000000000000000000000000000000..25aa1a2764ead53fcac95bf78c8cd4d612316533 GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH%JzX3_G|rb!FkB_VDBzNvmVVGfM3}ig zYsCX|qmVOp882+>9_a4r*f8DT;+4f5Mt5WHhO%wWc*5Pa>_O;-(|7M$pW)+NzBcOU zHV%&eiOS!9|31&4;yLT(Oy%EPH!t5+soYs}_gX3Ihrh?qtM%_%rKPR?Ur12$QHmXa0=s#@m;yu1Q&DEV_~>UF%Twsz+z; zHJsHszu=T>`VOyf#W^c|-u`|#J2k<$;br~d(7u2pp|{J!{g$k@kx6(g{a|P9B=pOm%AZa+ymux?P^O#O~gjjjEh=n_k$OiQGBz^J-U=NtkZd zjB62FZprO_>-P1R^y#OkPqQYHHB>hZ~M*TFP8O8dAs;+l|`WZZ3{an^LB{Ts5NrNy1 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/dj.png b/examples/compass/images/flag/dj.png new file mode 100644 index 0000000000000000000000000000000000000000..55668b1256591e3aa2b846d2861507382af001c7 GIT binary patch literal 886 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH#JzX3_G|v0>*n3}1lxSOj-_rg}vY4x{ zqR6EOtDK`Pq8HC!d~&_gEa&?R#KeV#R5Aryru}o+`QpMwjlQa$$G`2)*P5>oiMbPV z_~_j?H6Krxf2lXNV_U%@Bse9Y#ciRGmh0jGO{wh69Des2t0y0(GdegG-O>y?x8;d< zBfY`(qaEZbjbR>XekT*--U>9d!eSGz8_1jm!#=i{;b)Gmk!9#oH?YFn?S>27Yi?frGox1GL_t@3m zE82|aIA~`sIQaVD?75S_?>%=UB!AVau&V_zc^a2yo+=5-2>+$+J%74{13MEF3nOdE zTSkWi7WIrZm*bS<3Lm@y#)fK%YeY$MQEFmIs%{F9U@$T;u+%j))HO5Ewlp@FUeP=jHJfti)5p_QQpL<8SDj-4nPa`RI%(<*Um zsNcMS6{x`ogOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wz Gp$Pzg;8QsO literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/dk.png b/examples/compass/images/flag/dk.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6606195b50aacc358eb8ef181cd063c30805a8 GIT binary patch literal 808 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJVJzX3_G|uM+S^F^u^33^O#?8{@(mEwc zI`4qv1BERYo`z`_cf=?%IXbcgO=DS7k;8v9dV)hwOvJzHH%3gIoSbvqpOo#MeO~y7 zG9SYWVT(u|1_j}nOQ%@Po_qKH)8otUxE_jKa%XZ)q+T^c!>5;$f?X4qblk9clBgf# zb}?mIifmhs?1Wj1JQ*fUnx;ENEqPX_&Jtfv!J_HbFD8Yo{#GsFIC-YWj7E`}4xJrA zT`Hby_ZVHBa$jR>-|pCcd3lzFPhZ-LXd3^{y?!S|{tLu5oe`}`p2UfOqkzb!EKM(_kpK6I~L`iZ{YGO&MZVHfK zFfuT()HO8JH8cw`GO{u>ure{zH88g_Fj(fW`zcHVNTn4-7f^$tfvy2igJFn)nU$%b zm7xVh1K&H2ohTY|^HVa@DsgM5-@JhpsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN%|Ed8}R@D literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/dm.png b/examples/compass/images/flag/dm.png new file mode 100644 index 0000000000000000000000000000000000000000..71ca1d8aeead9c47999332227653baa6a6683137 GIT binary patch literal 964 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH3d%8G=Xq*oXvdsuCl-ct=FgZt%<>;Z! zNBI0C*EDgJevEcm!N(_LB%&#%%q1nVQ0yXK|E{eT8WHU5YZsJFS}-2O*0R+k%Mmq?8F$#1Z4df+Q0b73Y^&|TR~}`{Y8C#! z`ROM9dHvQe7m}JgjArgVdA!m;lySz)g9#H(UYy=Oy=Z=P;=#84>%W_p+PwVy*wXlO z?f$s+)e_DhYc}4|*}Ta@?&mG5knDZdo`*T@ZB}2uzuoKZ!NtvLT7Pf<_AWfx?hxY9 zIn}dL>-D~z&+BVGz1EJFuj#PL3`%*T*}< zPqy|5hlU21ay7O~|L47VQG5Hw-xjN`W|e5(DzR2)_{ZQoSEq*|?zSf|ZdFTMBTABs zQWHy3byI)@gOP!OrLLi&uAy0ok&%_5ft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F z8Vo}W%&bfetqd(78u;FE>_pL!o1c=IR*73f{pJmGGvsL6jq^4vh>g5-u>w|du0i{VfnaS}f`MHUidG>!_orhTmu?g-WQ(XfKT_ej7 zpg&9ufL_rBI@G{mMS1F4paw~hb;0>*CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5X zq#=q*i;`0r+#G!&NWm>9Fs_FJ22WQ%mvv4FO#mL1ZmR$Q literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/do.png b/examples/compass/images/flag/do.png new file mode 100644 index 0000000000000000000000000000000000000000..7b815041c54762cfed9ededcc136b3de422d2489 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJNJzX3_G|ra>8fHyN6q)n>zI?Z6i$IUg z45i*jjC*=peP4x?SvI$-3p9y)Ouxsyq~oqvmSg1ZCujFacGoL!Ea-apaYiNc=VPzV zvdUdBI<=v`uKK^v?)U8NY&;4AMzJ9)ZdBQ}eD6XA*_sn5b z`SJ1fI`Puo)^pF~c`2<#nPO+F8gi2I`NH4;i^MLhM{WeK?isu>jJX# zXSf@!4SK3Ic_mk7(19244BaNFFnp@-$^5nVcCT(hMcK03w>LP= zv~rry&!^qXure{zH88g_Fj(fW`zcHV zNTn4-7f^$tfvy2igJFn)nU$%bm7xVh1K&H2ohTY|^HVa@DsgM5-@JhpsKE&2B%jRW z)V$(UhK!Pu0xNy})I7cN%?5gH>Cgo literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/dz.png b/examples/compass/images/flag/dz.png new file mode 100644 index 0000000000000000000000000000000000000000..7864df5ca5a3c9f25586b4028ff5ce65f4ae4e77 GIT binary patch literal 922 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI6db&7 zLA{=|-RI|g?~M}{5R~t9nc6z3NGa-{ZN2)I`_bUJ`*q9)?1gaV;l22boTU51sQYC{XfRQb;MaH?w#&LBSZDX ztmPlQGM}G&_D1Hyn*0po;vE${@q7Y}Qr&jUUVAG3eX98G!MrldnBfPr!E@h}eB2p3 zfib39;u=wsT$GwvlB$~mBp8eg3@mjG4RsC8LX3>83=OPI%ybRRtqcs7IqZH4(*ROw z10nxzsjstE3SVL}pN@iLmZVmODH?RV2FakNrCo?%U zuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z%zY4> z;2tv7HL%b%vJ3(G!^8mS6+HRkOWy5oS#-wo>-L1;Fyx1l&avFo0y&& zl$w}QS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8xxxT!- sTrVv#7lQPX^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI~JY5_^G|uPt*?P@Q6lguae7!^-&nHhG9FJAP1j(qodZ7#m{hXv0P)7p+t*8jkJ zY|~r5%P-2zlbPFih0PdDe%ybwyq2M1f{sgvaIe!0fy6g0n;*~T&2Tud+VWuwXR=z0 zWJru*`_l98G7K2@dmo=FuyTgy!6g@OJxPnGagmFYoAG+4^mTR9Ex(^~-a3AFul)V} zfA{TMs?=?i>g5`!=PB}XlKHi8{%!iVzP^0+^v&U;^TUcxF6n+(a?(}QnEz|MaKfz* z30X3`edj^&!#La8`tKW^&~;Vs_U=CQWJZfure{zH88g_Fj(fW`zcHVNTn4-7f^$tfvy2igJFn) znU$%bm7xVh1K&H2ohTY|^HVa@DsgM5-@JhpsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN z%|p)BnJQh literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ee.png b/examples/compass/images/flag/ee.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4e1dbffe2ed95808d1301bef5723b1c6c3f0b5 GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft*jCE{-7@=UXQldN~IQxSnrj*E^szHDV`= zxWc;Q*N(;RY*g6MprgnVe7kL?b-B*IpU0eR&PrE2kCRCIup{-TfSa3|%M1f`L8T)n zm#BUCRKk8^$L>2usjH(>MI*y3??(Rp^~G-btN!ykUYRYD-CmQL$p8eu7 zF*JKRZSAX7eVbMle|!?qKBsJ&ob;k6= z-`bV#I!p$QTAp1!#q};vQolzr_B{T$<7Un-=@ux_}xC4Rj5F8Vo}W%&bfetqd(7 z8u;FE>_pL!o1c=IR*73f{pJmGGvsL6jq^4vh z>g5-u>w|du0i{VfnaS}f`MHUidG>!_orhTmu?g-WQ(XfKT_ej7pg&9ufL_rBI@G{m zMS1F4paw~hb;0>*CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5Xq#=q*i;`0r+#G!& zNWm>9Fs_FJ22WQ%mvv4FO#q3z5vTwF literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/eg.png b/examples/compass/images/flag/eg.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbfe4cc7ffd254d755a0204d85f4d8c04aab037 GIT binary patch literal 804 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIqJzX3_G|tcMSM+mE6li%~Zxf)hB1o&i zG-1^QnI`KAzpR9GRyq_h$cV3SENY8ez~!;vV2Hr4^KbYbi86WY%Tb$r@{L;by@n%g zf7ae#ET1_0z`Lia4CzXj1;Z>-I45~}dqy$+w3)q?f#>*RVI>*HOM+^?YA?Mur>#|( zeb|}t?YWbl#U(xW{ynQjDx9OgezvKNm{QkK!MpC^% zw-xQ|;qaW~F?asnTf27No;*czlG394@BNowW=gP;(--5Oq>{aM>$P(e-pp~)Y&-n0 z#x9?6f)o#%%F+qDT)kdxvA*9}|AF)0b-!efw~SW6uv0B@jVMVjN=+v@*1S zXyALtu@gl@ZhlH;S|x4`^_w@a0yP+coaB?4oSIjh%8*e~QedU8pPHvvo|&ClkeZU2 zsFz=qt`Fkr2b3n|WG2U_GE+97!W literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/eh.png b/examples/compass/images/flag/eh.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd6b1e0b182cb2c66d0c88d99cc69fbe8e268e5 GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ-JY5_^G|o@$vGtn6DADpf+FW6V!;dXD zADAVn?mQ58;F#JI4ly&$AlB2lm!7aWo)C1|#`B1gMbsraHfV;HqwpcUea7#tHLuNI z@?~aPS2|k-m+}He0~tQXkkGWWv{26}M#i39iy|%^fBEHT#uZkEAFp0jr@dm-($Msn zw5CIUvS)tfPxA}1{l{}}doexuzfy}??SD?r7iAx@3$ayOw|vM+Ogn7wX0fuo+^=WH zZr@hh&&&4rcJyQg#uBctKX`xtxnpe|7yrE^>-V|7f|jLBR-s=rZpTG`ezvUq`<;@U z@89{?rI)dsV4Btay1Q&&=&7=uX{T3dok=o&7RMjwb@tS${>hWs-f#Sx_WILx)yX<; zt|Ewlp@FUeP=jHJfti)5p_QQpL<8SDj-4nP za`RI%(<*UmsNcMS6{x`ogOaT>1Tp8>ZbwCDAq4jb-fGJ O&*16m=d#Wzp$P!9Uo*}C literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/england.png b/examples/compass/images/flag/england.png new file mode 100644 index 0000000000000000000000000000000000000000..65998bcf9397c680f7cdb2a513324e69855123f0 GIT binary patch literal 834 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHHJzX3_G|tCP+^gr3DA0D_-%h(@^PCj| zE=o~_%p%{cOrm;M7xGWp61{^#P&GP7>1I-@xtZY2x%10K(&x(DOX`}L{_k>%k)yN9 zkH25H?Dc){<1Mf2!TqNgx)w1A2!5XPbm`*P*|VlbM`vtZwD4fU1nm{el$B0o?)MMf z)x75Alu0w6)|aHNlv*@VNa`u$gfo9npT678{r}IB>IntUbKE8d{N1sWv*BF{|K^x! z=flG*YpQn_7AU-bzff#h$kMD8K`Axm?x9^5bX=x=`_AqVXK5R2Ynl1>?L@xfUBzaz zZEONc-~Oq&cTne!xVicD-FHo-dT+fgv#oV0u&RAqqEU3??X_^G2|=&ER?SQ)zN_US z*mc3y)Ql}5ZDxvZ_&t^_Wo0X7iHQYy?cY~vGFgVN{cQZHia!IUxW@TzqxEJJ|)Ftz}CMHlE$1A|Gk4Q>H7NP?^j&QB{TPb^Aha7@Wh zN>%X8O-xS>N=;0uEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$K zhX(n;Twh*Zu9udW3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e0AQyu AG5`Po literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/er.png b/examples/compass/images/flag/er.png new file mode 100644 index 0000000000000000000000000000000000000000..9e48d4c51ec736a8843a389706bf06ec389e3501 GIT binary patch literal 954 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIMdb&7I=%-L|_ z<$a6vdC%+aT|PDSLv+k z-XfE^WMbUa$#GX##65p^cBe?k!^3BvZ8Yky-*B=cd;gcef_Cx~*LsL(i7Z@^X&TS^ zkby;2J~mw}^V{uDm9qDryolXxcD}#;=eAY(t9Hc+@P-((KC}_=4V;&`Vg5sd?e7hC zY6fk4GCA(frB2m<9Xld6hP!{gy(39lk3~TGdd_(h242Ez~oGb>X= zD?ez3>hUQ1y=g{sd;+knc0~I zsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2pRM)^l*T^yi=noSEpjUK( z4mB`XQJ%UMs6i5BU2uL{NqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R2!foX^5iIqU2Nt zH%DIxQgF*jOjqzs&d)0jJuk8ssLTYREIu^I2j=?n@^Zbj#9Ro{OU}>L&q++u&je}I ZPXn4!tY4_=dKajl!PC{xWt~$(699C|bL;>B literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/es.png b/examples/compass/images/flag/es.png new file mode 100644 index 0000000000000000000000000000000000000000..98a618739a7f2727cec484132b2b7a2351b5532e GIT binary patch literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJlJzX3_G|tyfT(Vk^+vgO>Ao$3E|j_eh-;(U4T)O6KvaY=8L z?x}76yIYItShB;+6d^_aLr?p5pZUT+y}VqP;nMkd7Xii1^O{$kT$MF7($dB!gENGM z@niW!eeSn!uV3u*RtsIpr`DVF(`PaR&L6h%k}T7yxAq6XET{?Ld>UcZ=Rg@EV7lHTbK7W@YRxCiBq*U`ONb9HAB9ifA{m! z+MBiW>!RzUayPLzdB5{}nNU(Xb+e?iuCqFG_2V{oOS^gg%X6KQ&mC+$^WgyR=A<@j z+q=Jyb$V#5e(V14`SHJdn98b%EV09z}(8fV41`2r!Wm5l~xd4Kn;clx&}ZEh9L%KR;Gqlh87SFeD64R zqG-s?PsvQH#I2!z^9EL+1|yJ@d@_?$^NLd$GD=Dctn~F$^YqFyvoi})Q!*3v@{7{- zK|K9{(xjZsohY1ox1su7QQFk!1+bA0`Gsujm3DYGAOUJasKl zgCxkh;QX|b^2DN42FH~Aq*MjZ+{EJ&%r>mdKI;Vst0IvZXK>z>% literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/et.png b/examples/compass/images/flag/et.png new file mode 100644 index 0000000000000000000000000000000000000000..c010f6c86e8de457ec5470f09ed0954e46419c36 GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH_JY5_^G|tC%Z_J*YC~@Td-%pa-V!T_t zq&POtZOQB7ll{Zb75nPRBc&Y{9Se4tSa9p*`T5;+DJT;y)Y6E^;`BPm5}Z7#uJV25 zyy6vIRe#!k7sed=rlpoVM}_C6faFYr0}Wg!9R9_M1tk4>`|qqfgOW&5|AvC?IS<8* z%6H9{KK!z#@ONS7D!ygs7dN(7vnW?@3fcC;aPGT}NoFa^C%+X5J9KV6Sd@G&Dea-4 znfkfdJ;AH5+9m~sw*O@ha$UaD^!)sztSaS8O2l7yv)!D${qDn@%*A)DEp~0O-f?M# z{Jq^(&ZmTeU-cYc&&|-_Jw>Bn)@$jv_YPiMHn*G;fDE&T(--WS^eb%MviKUYeY$MQEFmIs%{F9U@$T;u+%j) z)HO5Ewlp@FUeP=jHJfti)5p_QQpL<8SD zj-4nPa`RI%(<*UmsNcMS6{x`ogOaT>1Tp8>ZbwCDAq4j Sb-fGJ&*16m=d#Wzp$PyT5K6%S literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/europeanunion.png b/examples/compass/images/flag/europeanunion.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4b8b4a1a7dc4ef1becd87458555d5f90502e70 GIT binary patch literal 859 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(!`BaKkqiusS)MMAAsXj(C+y9-%qZiUpVT3^IIuvdEB=OK)65zsb;k=Q?=BQ| zoZ!bN>snAC(BdT`?^saqnb$?i>%ZuH+ zVkf;#t4RBN?(BQ*_0QF^ZPWGhCds^<@3dvI3ghvK4D;^R|1W%eM=RyytJ^bq zI7&|(WcO_OIQz3_V=}jb{=L}ACc-MWJdpYGw zohfBW=B%zo=IEOiYHbq&ozjEt-d4XjMebPdd{3=Ebz?0yQ<08(iM(FN3CXrOBV)LO9Okh)r-0nd=%D0i76PXl7+# zY-M5zao;a>QWZRN6Vp?JQWH}u3s0un02N6?6qObw zr!u%X`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ey)B_Vv>F) bNTYrl(2QdJLRHthK>ZA!u6{1-oD!Mra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH&ZqL%fDY=J!WG$moCM}ZTb7) z*W78QuY8u4ypH#@w30giJcW5u$%=p$+wE#sHJ3g)loccg7C&rCJ0YK?Psc31sW zi*9{6n{s$dU{K1eGuF*z&*UT~-4yWETDfG}-GGZrbb3)xBvY7*81>a-7mgF3dMyFb%EV09z}(8fV41`2r!Wm5l~xd4Kn;clx&}ZEh9L%KR;Gql zhENT07mJ^uXvob^$xN%ntwF!%bOca?5y(kCnaQbn#ira@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJNJzX3_G|uNv+?zEeQK0pFP2HjvQ4uCC zPO(W!VO-m$#ksF@x|F5-(JP4Kni$&=FKcbqixW%)RT!N&xqjN0KF@RG=|^4s!Dr7m z8mss9oi|O7sQwno>)W<|cYk=^DUUOT49n9m7fyJ$)=wq$>guK@sOVDyFC1INyc~SDvnrS zc&e7TMwBEMr6!i7>ZSk*1|tIlOI<@lT|=`FBO@zA11l3VT?2C~1A}D_yPv`|fK*yR zbOALO8t57TH5i5%m|2+`S{YhEH1NIS*omScH$NpatrE9}`pp|yff|fJPV&i2PR%P$ zWymNgDX`MlPtDUS&&0>w@#sO3D+9QW+dm@{>{(JaZG%Q-e|y zQz{EjrrH1%NkbHs7A2=LxHV*Nr@*SkRd44$rjF6*2Ung9jyCcppy literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/fj.png b/examples/compass/images/flag/fj.png new file mode 100644 index 0000000000000000000000000000000000000000..4334dac11ba1e675d1702505027a5acb7702cdec GIT binary patch literal 973 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJPc)B=-Xq@+*XrD1TQR2vZ-+fyQRj*|T z-QIFEYhylJ09E- z`S#Khjb1fV&ilV@&Reql&nZ8A@cp|xmwwJ{H88J!e)&z`_s(f2o+f?2dG6GY9|t#{ z3Vp(plp%2>p>3AqgSKityLtmn>*C%+?$@%`DPNy=*DQX;`ep6S7ES>@Ng_)n^3Uh8 zl|Sv&{*qt$+bBvedhfkSURPP$Tf5oYCM?l9`eJI_&5O?jq9*wB%zb%#zQ+2it$EdI z_pa~$xHMwLwyLFC%Rf&~`kM7?$&`1MCEw4rUY@vhVzQoG{U6JSkGb*L8{6%7EA1}J z-*8o1(?ow}uoLIz?uXP>>GBDU20+KFQQbzi1%Mcqvi_-j`2Ku6%D(3v_s=xM6ILUzF2QPz#TTg>c zItMV4RZCnWN|K9G6H8KcQ-B16k%57wuA!l>p;?HLk(Hr=m5G_Ifw`4|!7_*4PhlEB zDy<;8fEo-9bPa$S3_}detV|893@soU_}+2sMA49&pOTqYiCaVc<_)Ys4Mrd*`D7-i z<`t(hWR#Q?Sn2Dh=INDZW@i?prer4S}eUBg+t=KTHgOUeN_Q)WBdxdFooA21$^0!TD(=<%vb942~)JNvR5+xryni zL8*x;m4zo$ZGeiTA&N?il2aMn9DN~3!7V2-UBNRsKd(6SyvSalG82Td_|PC9nCr{S s%k|O{b0J7CIX_oFCoxGs6Qof;4QNKOexa)CU7&sjPgg&ebxsLQ04Vf(B>(^b literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/fk.png b/examples/compass/images/flag/fk.png new file mode 100644 index 0000000000000000000000000000000000000000..3a850fb18521b6e40b7ce8e8d7968c601c7676e4 GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI^db&7(8tG zuKF9b_f6T>`ePzp%l34;TOCRI;yGEF@x&hMx_1$3wfTj?ipp7!XMQ>OF!t)xB3lKe zixWz-%Jx~GTsw7&wwS_WKigedf@}VbgZsh)(66z}RwiQbb~E zV3K#?nXnmOFG&V`sj+$?UjAC{|H|F*)L>|!YXH<>7-C>%Wol?;XaUi{_l{#HiiX_$l+3hB+#2dPZ(s## zFakNrCo?%UuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-* z|NH7Z%sPloa1WX48d&HWS%v`pVPXLEiZ0Nh1_mq2Q`Z7DNP?^j&QB{TPb^Aha7@Wh zN>%X8O-xS>N=;0uEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$K zhX(n;Twh*Zu9udW3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e0A`ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIoJY5_^G|u}@+?y53DA4l#6{p}Hl{gny zrh`t3D|NPZCS~U9Hf{aEQ^}w`U&+;>h9Ou&Cu!kP(*?b1T^UaQ6grRFTHlYDBV8~v zsVi|tzpPC}T=(W?jT4KymKdE>+I(xxnk?Z|Q^Aja9;kSHDfDZ?W5(e;b+GC~a- zo}}wvpS|z*gC&RAxNrIOzdLuc?&Ggwo<%JVNhWjp)~IoCZ0IRaXA{(Zzpq*Loz(_! z1r?>$nuii4PjVL<&-i%lVgKG>MeDr#GeqzG*rYDdcV^kSZ>33@4>!I2w%)Gp_VkFT zJw?x-o%r_a8DE*_#H%Ty3}$u4_cs3AQX3Ibk^86m|Bkm@iPDZCrje@tC+uo$PfYr_ z^=9V7w|5_JpS`^qlX5bX<5Ti;6EpMd|Gqj8vkqbt+(V|i1{S(T zmLWiYm>2-Pq6>7Wfx(LM)U`kjk|67X^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un z02N6?6qObwr!u%X`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ jey)B_Vv>F)NTYrl(2QdJLRHthK>ZA!u6{1-oD!M<|5-%J literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/fo.png b/examples/compass/images/flag/fo.png new file mode 100644 index 0000000000000000000000000000000000000000..6db42e53737653368cdcfc2be5962895c78e3c41 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHHJY5_^G|uNvwDn>R6gd8TqkqmO%|m%S zn>ytMY+74e?;SW~&B66?@wUrh{s|8mZ5lc{dULrVMIxIyZ)z;@czo{6?2Q$ME|cO7 zZPM=5+nvoYX|g}$_P_K-j^47vb)hZ{4rv=00<@+wIE4D2f2?6|wdTmvqR7y_#k1np zr`P7mzk71#?wiF5bK4EmVh;XSV<=L3Ga+%^f%1&QOX`aROWFD&Z)gfkx;*!>zKW_? zimH%`;YIjr_YdX|idvxAMR(qq7=0YLPi9%cx1%4fON?u$0JH@Fj(7h8Z`zPNY0N9VqZe<*S9ku>2+-A5dXte zVG#dJ|6t2sV8E)DxJHyD7o{ear0S*s2?iqr14~^)LtR6&5F;ZiLjx-lGhG97D+7aN z4!fViG=NlEL39B%7#ipr05uqf7?@d^8d@1zKs4~ZOis-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#~3AwYka7y!MZ3v{S~!HV+KwLlG$AnStj(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6-h%Bl@=wZGPpVVLXd)6PGY)(XL5dCap-xGy+CCq2xal1 yK|V0omzS68r6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kICJY5_^G|uNvwCxHB6lrN*kAc)JkzghbseaCr&jy_l|s`U zz27l)YgVnYvay?`V;IHu?eom}`|kH#e17ouMgR4EclRF4Sh@SS#QFU-#_#gjKCr)A zTb*|5{fjfeKvgYqjVMVjN=+v@*1SXyALtu@gl@ZhlH;S|x4`^_w@a0yP+c zoaB?4oSIjh%8*e~QedU8pPHvvo|&ClkeZU2sFz=qt`Fkr2b3n|WG2U_GEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJlJY5_^G|qqxsiGo2I zzXcepPw(;ZlHPcR`^FOQ`AV(_(t}zY6f{;Bo&OV2^KO_((j1dH|M&d+_4D6*VM#C5^X~$d#Rz3;P4Tyv`?urI z)sN4Ae60L`U&?g%3K891FLv(Cu$t1(H|>Du@dZ!(k5@l&*~>e-HN$etQjap8Jtk}F z9%m*rdr|}QIcGgnpl#mn*t;lj0_Acbqx)5 z4b4J~jI0a|tW3;w4a}_!43;_UehSk7QfURz1=L_@plblsU>IUxW@Tz!1s=0 zCyIvL{FKbJO57UiH*a7CYA^yh$tN>8HLp08A)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH>Ka(+8d-(_{b6hg^olOfp#}!EkC#5QQ<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE1-G2U zbOq1k{Ji4O^CEkJ%1jW-;zNUcV6HDOFV{;;%!MGm`0rLp08p_Qrcm4wPuW|9NB63;{pogUck&#XMY)AhjiR%`FY5 z&KUxESA1kHx!z@Y>vV=KP>N0HWI}J=5!ddHfLBS)W{2E@g8!J`H0YUiDePN%-S2bd z=PGxv&|Y}|Xz|Aw8+#+64$}yq&L5wu=8U_q&(vx8)t)F+X|sww?5G>S`nqKKtgl*+r!k8@t6)%SRu=9K z(ouF_?Kk0L!QbOccJH;D9?Zcw*5qn|iljez$=R?z}X+t0l`vTd8LAIF@y z2z5dK`#YVZW}IwT#kBOl28$NgVi8TzRazRX=S+LAmM^dW|NLN9>e=@HWr7on&shXZ zdY@bGY0I47=DgDH{pz2syg$Mg+!beJ=r+;<#@B=CkGEBPcsg&^g`e-lb>064tvpf| zo+Hm~k)`~-&W0ye>pN3JfXEUNfqoh3^*zVVr0A9!ux_}xC4Rj5F8Vo}W%&bfe ztqd(78u;FE>_pL!o1c=IR*73f{pJmGGvsL6j zq^4vh>g5-u>w|du0i{VfnaS}f`MHUidG>!_orhTmu?g-Wb6o=?pc6w3&8& zd+60KwGBWGk|67X^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X z`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl X(2QdJLRHthK>ZA!u6{1-oD!M<`lyLL literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gd.png b/examples/compass/images/flag/gd.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2d526fe12c88d59495d84348f6e451ef715b9c GIT binary patch literal 920 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI+d%8G=Xq z9n|e!nPfDhW6H|rBTfQEe;L^}N|Xe83Qy#_t0g9QFlogM9-+)LNfY^|D@@!~>iuL{ z=HBPE=d%M|p1e7KvdwapZHsmv;4|rPGz7GCxG>Bs zYEhr@f#=oo^Ew}IT@@E?nEKZ8@9Wz;t&Yu}$lRiIl%=>~=9vxOrOmecU14Vl;Z>MA z_v(z7$6U@DAKtiolg_-8OTL=DDeOOAwT(@Vl`(`##IW?ja=TxrL*xIP-K;#P<`To{ zL#)*|wyu9|BFXM4=)l|{p!?z8?n6&L$!`-A5dU4bbN_$KeK{8{`J^Sv=`CP#`1wcu zeb4OH_Zoi;GTr4&5>i**z5ny>wBBjQoW#H8PqL0bEK|2?+h^q*-l%&DN4(RHw^!`X z_OHKi*Yp?Jjp*V$t#*9YoON%%$lZI{`ZZ~?!L9GN7yp*>RbqDR zQ0*+~n6UWA$=t#uopt4h8aB1*c4slqUub@T<;ex55{_Hkdt3kQf2i+tP+w8efA$<; ze5sbWMwBEMr6!i7>ZSk*1|tIlOI<@lT|=`FBO@zA11l3VT?2C~1A}D_yPv`|fK*yR zbOALO8t57TH5i5%m|2+`S{YhEH1NIS*omScH$NpatrE9}`pp|yff|fJPV&i2PR%P$ zWymNgDX`MlPtDUS&&*CFO}lsSJ)O`AMk?p1FzXsX?iU zDV2pMQ*D5Xq#=q*i;`0r+#G!&NWm>9Fs_FJ22WQ%mvv4FO#reuUHSk3 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ge.png b/examples/compass/images/flag/ge.png new file mode 100644 index 0000000000000000000000000000000000000000..98bedf24e677aca13ebe84b119e295471306118e GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ1dAc};Xq&QlmD_k3 zdp*K;^=+~0ZmKWW`_p`@^#^0jPhOUTp$nxKD*WKRQxeF^tb5J%g3#2gLg^Dqy-`BK zb3BbcKf7Dr-`!ayCa(9r=)s)%ufA4&30InQ{z1u98(%9~K|#T^f8|ClAuB@+WPYrV zFL^sBN`raI+O>^$W43ZJ99G<4y;`p&#P({|){=K`_sR0u)fce;X6SgZzx?mREBD^j zTisfFdoP=yVYi|Z!_n^WXZ>eq-74DGBs+(h;Xus3Fg;ea7)FIdS$|$6e*6~ur_Vz> zMRJe(q!0J1EtXH8COGARt>_k?HS_HMeLk5yId9K}r(O1M8YKHpT6P>i!(;RLweAv5 zneO6(bsKhAypoapoDe#n|K*v;Ag?v8-#yg+Y~)On;PU|Qk{KO#q;B@vodqCw%-n( z;N%p%!f~yd%i^@jGe7T-arwf2X`5fM2FKlMV05aMxJHyD7o{ear0S*s2?iqr14~^) zLtR6&5F;ZiLjx-lGhG97D+7aN4!fViG=NlEL39B%7#ipr05uqf7?@d^8d@1zKs4~Z zOis-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LS zO4kSR^aDzhax#~3AwYi^TLQhJ3v{S~L2YF8 z6QBl3kafZNX(i=}MX3yqDfvmM3ZA)%>8U}fi7AzZCsS>JiliZmN{f8UZ64)gtGY1ARn0P%gf94(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaO Ss_R{#eg;ohKbLh*2~7ZdoNAE( literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gf.png b/examples/compass/images/flag/gf.png new file mode 100644 index 0000000000000000000000000000000000000000..156c89321c36a929d7e416cc91093e02c51259ee GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kICJY5_^G|uNvwCxHB6lrN*kAc)JkzghbseaCr&jy_l|s`U zz27l)YgVnYvay?`V;IHu?eom}`|kH#e17ouMgR4EclRF4Sh@SS#QFU-#_#gjKCr)A zTb*|5{fjfeKvgYqjVMVjN=+v@*1SXyALtu@gl@ZhlH;S|x4`^_w@a0yP+c zoaB?4oSIjh%8*e~QedU8pPHvvo|&ClkeZU2sFz=qt`Fkr2b3n|WG2U_GEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJFJzX3_G|uPt*>;663bed_$=$-+Gd|Ti%p0uVJv-dtEL2e(2F4 zX@<;((xz0-2iI0`-~D%OdH)T{G?UW-6=Xqb;tRHeD zVB&Fq`QNYE*BHoXU&`o~%ql6-{BlCr-(ih{iJiT5_>)faq9+^O`eM~RCv&oKuVY|h zt5BLBQ*(vkKzy4~YO2OGpLf9UQY~?fC`m3#O)N>(O#u=NMg|6!x`u|jhGro~MplLf zRwib;2If`<2Fo0FKZR)kskDOV0%|Zc&@}*RFbpv;vobZbGPHnb;Csih6GcOAeoAIq zC2kG%n>VlmH5h@MV7$ml0P4U!=1g7ec# z$`gxH85~pclTsBta}(23gHjVyDhp4h+5i77f?G~vx`JnNeqM3t zd6B(9WhMw^@u5LJFxQutm+Pe^=0cEOa(=FUPGXXNCP<@x8qkbl{X$jOyFmR6p00i_ I>zopr0QtKcra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHXJY5_^G|tBco%UjO6j*aJN6uxUtBA<^ zSN;_u>*Mxx?qBfWB>NMUU#xN>E&}@xY_9mioz(Yifv1c4Yqj48=FZFGpX_U<+4gSc zvQ?`kqgWjqWX|Lye>7qfG~CR6;Ij>bQc|kYx2emSZoS<$d2*52X3wO3IWN}V>uLU4 zvaFiB)ViihWc#d|q6{l}V?LKB5idQ|Iu03d9e&=rG;x;O;e$O5Gu@j48H4I~tY!K4 z?RWIr_u=RIS~HyV`%-QyO?vZ|J!=24Nc+=l&&3~E2=C)C-knn&A-`bXzK3^g^7hG8 zM3*m%lI>6W-`siSe$mb=J09Ir?`ZM36!J*p&dYPQQ$^2rzvjwRWRl*x=~?{!-GA23 z4HI_jzNWx@>1E#9khsv!^_$`a9EEQ*@L0vNh42(SWKej(9x-QK@jl-FllKPo+%VI5 z1PoBs64!{5FYKdq!Zu_%?nF(p4KRlzeiF+DXX zH8G{K@MNkDP?0o5QE5?fDubJ&F9a#L0J88sr0WeR+Ag rURq)<1nDK`=j!JqCh2E_H0q}T%_!C{RCT=z)X(7Q>gTe~DWM4f)ki7x literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gl.png b/examples/compass/images/flag/gl.png new file mode 100644 index 0000000000000000000000000000000000000000..19cc57c9d7d7e696bff7fee3df606b9aa5d2012d GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJVJY5_^G|s2`@6KWh6tE2s=jJ}x%Cd&( zUsJDqQhIK7{`@VRQ7WyyQ9q;?shC~crX<#V_uZr0*5!U(u}6+SJYZn_{LJAag+0dj<0wC;@{{wZt`|B)KRxu_RSD1xPR$ z85mgV8XD>vnuQn{Ss5BwnV9Jsm|GbbEOXfX6s7^B(h8yrsKL-c*8r%&FvP&j%GA)x z&;p`??;XcZ6b-rgDVb@NxHZ&o-oOgfU<7iKPiAszUU4czMoCG5mA-yzo?dxoc4k3p zN@k*7eo?wUh^HS=nv|279G{Y(o0yqr|M%5-m~{}F;2tv7HL%b%vJ3(G!`Kq&6%X8O-xS>N=;0uEIgTN15_jpQB+!#oXX(l z=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$KhX(n;Twh*Zu9udW3qg9x`MLTziAnmIAdUKI YKr@Q<3sqh30`)U^y85}Sb4q9e0KzyQEdT%j literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gm.png b/examples/compass/images/flag/gm.png new file mode 100644 index 0000000000000000000000000000000000000000..882893201f3de498bec817149f1a3f7a8d7d2c32 GIT binary patch literal 819 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIiJY5_^G|q?i9rT)(DAMx$?{5wzUBxHI zkF-8mbh_}e?u$!nALxBx+9RsJ$jpgjYv#h)E}IOBroKNjC-dX4RNl=M=VZ<$-ePyC z2syhrZJnf>9p?=@E2f53AxGO{!j?>Om==<ppt(_~tg|H*ep?-if`i;0OybL8jy z3rOVJ++VPAlaE+rNT+LLSB`a=q%8061NjS>nSR+{o0Cz-$o+@$?!O$t1+rBafI+ER z;u=wsT$GwvlB$~mBp8eg3@mjG4RsC8LX3>83=OPI%ybRRtqcs7IqZH4(*ROw10nxzsj$YHHB>hZ~M*TFP8O8dAs;+l|`WZZ3{an^LB{Ts55Ns>o literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gn.png b/examples/compass/images/flag/gn.png new file mode 100644 index 0000000000000000000000000000000000000000..b379ada3b916c65955c5894f8275a8495781fe88 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJZJzX3_G|tCPG|Zcl$m4Q<|87<%M-R;j zN>kdb3;IJs<}|B4KjB&=t`)VQv8hdD-bah0|2IY^My`8SdF+$fo{)z40^SJ|KK$@81uoL?3!BC$%TnPVVossdn|7l#gcF+S$xwnDO&pbKb7ythS5yTL1dC zTx;pIw^wzKa?UstlpTJ(C*362ICSl+AaC8S;Dp!5to2XsRuvyQuWom5t-P?s2OeX|^wzMw zF3iC2Q7v(eC`m3#O)N>(O#u=NMg|6!x`u|jhGro~MplLfRwib;2If`<2Fo0FKZR)k zskDOV0%|Zc&@}*RFbpv;vobZbGPHnb;Csih6GcOAeoAIqC2kG%n>VlmH5h@MV7$ml0P4U!=1g7ec#$`gxH85~pclTsBta}(23 zgHjVyDhp4h+5i77f?G~vx`JnNeqM3td6B(9WhMw^@u5LJFxQut sm+Pe^=0cEOa(=FUPGXXNCP<@x8qkbl{X$jOyFmR6p00i_>zopr06cmVfdBvi literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gp.png b/examples/compass/images/flag/gp.png new file mode 100644 index 0000000000000000000000000000000000000000..902edaff872ca7b4fb817b213ce5a277e356bb83 GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI~JzX3_G|rb!G|UcR6lh7mZ+lLGk<)CV zfWT+=OE1@NI354NJfgkCbJv9W35WdNu-taobw%@#;)&8(-4%C!mX#fQw3l7&g^^DD zMuXEnZ|aUS9S(TWAjIIX_=h-m?siMdnRA#7bUaoxrCibxk4+U)@%a4XpUt$*ub1n8 z&;71u`y*ah@bhZ_hv^?KDvA~VS<;*^%OrD|@!56kjT`rFw)lOcfNOu&hrGq}yweu8 zOwtTq5F_+7q)d&~VJq&NweS8n-^Xxn zrY%d^Ns8Kch_9dJASP?;{*Fo^GN@zHM3U$!%(%vHKHWBC^fMp zRW}7lFc=vaSn3)Y>KdAb7#Ud^8d#Z_=^B_@85k^c*!>iy0i@Cjq6?_O&_LG!sKGGA zz|6|j(8|yPqJi%n$4(Rtx%nxXX_dG&)NkIv3e;c(a*|JGa%x_2Dnmv|Nr9EVerldx zd1iKIL2627qF#Pcx;}`fA5fZm^)p?k85S!p0GSxM(&^59Q0s6z( z66h6OphFD|Y9phc05wR0tP9RhD=AMbN@Z|N$xljE@XSq2PYp^R0+pE{l*NYz`M_LXUS6)3mY54cddc~@`Z8 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gq.png b/examples/compass/images/flag/gq.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6e6dc0df8e9b33eed4a903e03f10fbbfe88034 GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI2JY5_^G|s0^Jm_^LQRL|P?|ufR3buk?x!M+b>%$V`{ZuR-hhZYgC zbuxVIr|-_Wk~gRC!tu2nKjz+Fey`H;WW}bRuZ~M@(+J{eHEw!WwA}jap}A=#+_!Jv z)pnSf`;1?oO;C_$vTMsp9knYfOjot)p3{9Kb+ohPT-5Knzbl;uR5au3CrB9UtG?Pc zDadQF_~JJTo%;5deRWlRZ&+I0vifsnL1uuIN${?nvsXV>6S#El_)C4=rB_pJF55GC zq?P|Mt9zo zSyK~CwaGYE zu;a3h`-#|hN>A5y@QBRepMHOh%zyKbC0~9oWToQR-gtWkdu5elT-7GQyDT!N(!v>^;7fo z$}_Vw3sO@u6ZP_o()B?+{eaS>oXq6-l>FSp%sl(Qug=4)gV+T3kg2YLg|3lh2+$wK zmO!uQ0v&2#P#YQj1gJq0WL7^73-Mw8UHp(o4?I)z3*x e($55G)K3GNQLJC6>UtNbpTX1B&t;ucLK6Ud2R`Wl literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gr.png b/examples/compass/images/flag/gr.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6988418094669ba4790cd017a4e533555ba9d4 GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ-JY5_^G|s0^wD)Fq6gYZ6*3TsA0f(UU z<%pM!u`UOl1Wu+4ezcC@78854T)>63yTpxE@Tdr*=aCid9$X*!Sxk?=s}`&7WK2w} z*vyk(Z~gk|v~!FxZ`v5VR_8DHJ~u+e#YshNtv#E)i_-}fhH2i3BCeCdp5-aN&GqvZ zVBjp$^c0bMEUw@8IBBB>Cj*1$bMyBi8WShEEVHtHG(T(}v-y?zYyrD}Z(Fi))3jr! zBqY6~o*qs}UjB|(f8Mm`pV_00Cr!KlYDwSr#Z#CxyLO-a{x{8-&*xHd2~SAnUO#uI zrHX-4r`fi?+Iu~3zZloUhKCCh>=}RVyPsvt`upm+Lpje@dw-qtWKXq$$Q%jTlXF6? z4xS9H&NBLb(R0nzrE5~-FKk`1RA=gW-ds7eJ;x3|uc(UG~j^ zen4qbPG)j^N`7u)W}f}uSLb2YL2QD1$W+(BLf6PL1n3WAOQ2VDfetk=sEv$%0@NT0 zvMxA3t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38Nku*e6X;E@2gPWr-1Sz=XB&I8P zCggOaT>1Tp8>ZbwCDAq4jb-fGJ O&*16m=d#Wzp$PyTFf1|v literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gs.png b/examples/compass/images/flag/gs.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef34a8596ade105d0449745fb0cb8b5c3135cec GIT binary patch literal 982 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 HQ$iB}2ZJ+k literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/gw.png b/examples/compass/images/flag/gw.png new file mode 100644 index 0000000000000000000000000000000000000000..77100c30bf17e888c0250798a0c31a9793072cca GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIqJY5_^G|tENZ|v)36lvN2|JT}HQO;FU zGp^h_Ae`w@vMGOodi2UETCL?D*tDdCS{FR%GB$p$@$KH5-pMDYYpN9+oi3>4z5RW| zLSOR@#&73tjAT4_uHj|eE`Pa{KIVCb6>i4U|NMIQmg~To=lUut!j5Sr3udj9)IGg- z-wy-Z$vP)JeA2S+@9K^dxRQ4HgL-9F{S-I3R|>!8Z@FFYu4eMQ+xkz;=WnrH=aISe z^xAi)rbKUF_w#0X*n_}7N9xu%)%|s}?_ag%RZz&y&87dB)$K{jwU`tamgqkTfX#TACGn%1-v=(`nZ4K6GzQR4%Tv5;}KRIClT4Zm+E})pJxP z``p;@r_Jud-1Y+I2Bzlk%M!V_|71^GU)Xo#<^3v@*1W zXjn0mnHNPvZhlH;S|x4`H;?Sz2-IK%a*|JGa%x_2Dnmv|Nr9EVerldxd1iKIL2627 zqF#Pcx;}`fA5fZm^)p?k85S!p0GSxM(&^59Q0s6z(66h6OphFD| zY9phc05wR0tP9RhD=AMbN@Z|N$xljE@XSq2PYp^R0+pE{l*NYz`M_LXUS6)3mY54cddc~@`Zra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHZc)B=-Xq*q7=;(1dQKG$m{_o^9Y0HG9 zubG^7?s+js;ot>tkt?noR-ALKSbT-D#1DEuag1vBdwW51gR=ySqsl}l**mVvxm&Mn zTR8jWk+=Kb*4}?#ZS9fp;e)m9boqWsiH=8kZ`!xVoD+S(%*UY6zM$TlAz@m>T=kU~ z3hvMRcVj-={&Rb^uYC%WViFV$Ow)ceWA28hH`6!YV?8jYY@t z690L=-cs)0ug{bkx%AyAG!bD{G+>-@@ZdeKqo*(ZJ|os{|84%PeirWVMcW_Ub>3I{ zv~7R%{lu(oTem&6d)~u(=7)uuS;&%epBVRCINsS_vuJK;^Q!V$mp<;!y0lvV^VPRA zUrHu3PL{a*)l`(Ro6BAyOa4)HvW&r!Q>&Iph1JGQPM+w#+?FAW|DE7wAEV>zE`2!5 zygT%(-OY7LXT8_^tPk~`(f*v_@ERA(i6Il#ssH@6RP5^KH*Vcq4|HGMUfk-l?UV0{ zs&$`rR(+7Upk#FX&$8oc^509^+`Ru?jQ{=bNz$v|@4~afBvlePBN|(qxAWwbm8^~7 zR?qLx`Dya?X=vGd^^5bGzsU7>2nTMw7Pa+Sq`;Yz3a5A#SW_C_Ixl_s{}P{oLd*X5 z>}HBref1iE5v^L{8c~v5l$uzQs+$5N7>o=IEOiYHbq&ozjEt-d4XjMebPdd{3=Ebz z?0yQ<08(iM(FN3CXrOBV)LZXVga5vaik z0cwy0Sr?q2R#Ki=l*-_klAn~S z;F+74o*I;zm{M7IGSvpCNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb y@`1U&yu4g5Eio5@^pf*)^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$UC*MEcn literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/hk.png b/examples/compass/images/flag/hk.png new file mode 100644 index 0000000000000000000000000000000000000000..351b5e8dd814a08532d3c3fa3ddaced0c30897f5 GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG?JY5_^G|q=k+^E-5C~)NY@B8jGGD?dA zF1!-)vg&tw&Z%P4dMLQ#(G)2m{e_Q;Ts&NU^ljL@d+`qC9JR^1YBTTtS(UC}IPcHL z{Y4B7%$y<%$`(`?FfhzK6~ba8(#J7T>FK}M&2j7X7#8f=9p0kkptWfC&ZRS7Zl65a zq)W|sVrnX@17pJ#3)w&~&AEML!P4*S>4twpFEPNu|E{V`Fc3iD${3&&v-!)SLBU z{qf_Q8_dk6tbDo5);9HaU%i5?24};RnJ+TUEbZ5SEuH!DlasIU#kYNziq79>+tKY4 z^yK>Eux_}xC4Rj5F8Vo}W%&bfetqd(88dl6? z=0(wvo1c=IR*74~%_F-v0yP+coaB?4oSIjh%8*e~QedU8pPHvvo|&ClkeZU2sFz=q zt`Fkr2b3n|WG2U_0>w@#sO3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%NkbHs7A2=LxHV*Nr@ R*SkRd44$rjF6*2UngF@}H>&^u literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/hm.png b/examples/compass/images/flag/hm.png new file mode 100644 index 0000000000000000000000000000000000000000..98180040baa7853f5e8049c34dc5e8bf07cbe0f2 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85o$jJzX3_G|u}T_xA`clwtVr{`S2L@41(E zZp%Es?Wxl9WwJ@!n-6Vjys4z5@nVXo?BWF}?Ru^U9R#h?0xzg;aAPrS)mR(j!Yk~< zbXQE$^!BCPoa+7Gf8P%M5o34h_{7`B$NFAe`4wTPS6tWHzJB{Zn?2iWKh!aF+2U*C_YH9*w^^V^~{)6D=pG&0+tB5MHHH~eczodT&%Y=^V7W@@8W6om`WP&n5#TeU%X9W&o1&HB$~}gR4yg=hEc5eB zeCs{Fzu9!Q?$<(#GqaA(crb-a^kMdM=Y4Z;o1B^FtIw#wslepGD8O*9C2!sK|HnSv zj%JWy_{YrkLwbq*Wz|{0G@@GK8c~v5l$uzQs+$5N7>o=IEOiYHbq&ozjEt-d4XjMe zbPdd{3=Ebz?0yQ<08(iM(FN3CXrOBV)L zZXVga5vaikgOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wz Gp$P!zosOpf literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/hn.png b/examples/compass/images/flag/hn.png new file mode 100644 index 0000000000000000000000000000000000000000..bf13f4156d3d340876027faccb8422fa63d3c81c GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIoJY5_^G|uNvG|Uz$6giUqSg1HoURlDG z?jT4PYR;;_P)NyhPb~if&Z1Grlqho=S!d!)K?Ms*Tin-}=Ma{Uo;dlM#G@WU$ zKmGVPUgVejuoZTL^yJlV zIaQbXa21@IG$rj+o65<@#b3YNJkE7v@Ba_awjVZgI;c~kDLJvVFJPha36Yn*-jDU! z{j(a!;@Fm1kyW7Nn+RChFxErR#%u`T?a$Iho1vDfzjHnR)hqU!8|p2eAq6AyZug z3tc125THMdErDLq1v=Egpf)o42~dM1$hzSCw370~qErUQl>DSr1<%~X^wgl##FWay zlc_d9MbZ#OrA5i93~r9T5TxLilbEjHnVg?j9C}`4FHo5YLRoxhkPpoD<>lpiX^FWI mq?eqZtDlpYq@M}WsGkNjqgcOC)%7k=KZB>MpUXO@geCw1f=oLA literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/hr.png b/examples/compass/images/flag/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..411479ac86f965a15f62c68c0ff4704987f2f985 GIT binary patch literal 877 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIIJY5_^G|uNvG|UJtlsNMKXoz)*pi2Qq zm%@~HZ}0HM9tmX;7qoh*!@(-cy|n4V&7%u%oZLD4!6ZdzclPZ+PRw}n^zVJ|fA`D3 zTQ2G4u4Tqf>6d4_s3v*p;*3vnwbLX+u>(8I{7!)4)a|)%* z*jruqi2rbXyZxn?zpp1+7V&LfbY1uYqd=Ev?vsz#x6i+}eExo!IqUq-h)w)F^(;%n z5*1ICmpQku>FIyIcQ46c#``xRp;t|Oy;iP!J>^n{$u6l0CFSM$v((&_XSrCTI;p54BkyZ?SpZtwBOs62Rx z=NM&~{VDzS*Lj9*^{NPqQBlnO; zi=lMl)2?diY`=*{jZ=(0W;Tf^&soS3&Y-oSo>BZ+-*)L>|!YXH<>7-C>%Wol?;XbI7$iiX_$l+3hB+!}5k*}V~{!3g9e zpUmXcyy8@bjFOT9D}DXcJiYSF?977Hl*~lE{GxPy5Klj#G$|)DIX)#nH!(BM{_m^v zFzX;T!98TEYha;kWEleVhp{ElE4o038W_|@Mn3^+kOWy5oS#-wo>-L1;Fyx1l&avF zo0y&&l$w}QS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8x wxxT!-TrVv#7lQPX^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ(JY5_^G|u}5I(oST@|>2xr_h(zez13e zbpLZkm-h>fe`H#;T!2MTvfy!2ji<2q`}!F{UKx|OZMppG+0g@B3<{P^yDsudvM-bt zR5;MUV8ZPGJ)ALUag8WRE=o--N!3jO5)4KL29~;phPsAkAx1`4h6Yw9X1WIERt5&k z9Ckm2X#lCTg6INjFf`CL0BSG{F)*_-HMBCcglJeXlbIJqLvDUbW?Cg~4L6VM-U!rS z1agv3W^!s?aVkSbNlAf~zJ6++UU_DAW~Cp2_)n#i8d#_5zieAe6<2 z2Km5TUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7`njxgN@xNA@R<=+ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/hu.png b/examples/compass/images/flag/hu.png new file mode 100644 index 0000000000000000000000000000000000000000..bad18553f5cc4d92c5a3319c0a17432dde137314 GIT binary patch literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft)v}sQHuftyIUxW@TzldoJ-UaGs N@O1TaS?83{1OW7y{GI>+ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/id-2.png b/examples/compass/images/flag/id-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3328dd4b0fce57d68c67ebc7c43b372d9408461b GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft+uiE{-7@=WF|{y;uSTT;IQbcfcX>*a3&_ zN;{;SuO~iZ;@2~l53l}}_`AY{^#OsY8(@% zZ#g+3p*7XWHJtzS-a}a`jhzkq?Y@4Lp;?HLk(Hr=m5G_Ifw`4|!7_*4PhlEBDy<;8fEo-9bPa$S3_}detV|89 z3@srVR?KAPMbVI(pOTqYiCe?XBfB>OH5h@MV7$ml0P4U!=1g7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i77f?G~vx`JnNeqM3td6B(9WhMw^@u5LJFxQutm+Pe^=0cEOa(=FUPGXXNCP<@x Y8qkbl{X$jOyFmR6p00i_>zopr0Q!~+1^@s6 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ie.png b/examples/compass/images/flag/ie.png new file mode 100644 index 0000000000000000000000000000000000000000..8772d26e78143e5990b0643d08c45e43f317555d GIT binary patch literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHvJY5_^G|uPt+jfN{inyHrUeRRX^W?li zvs#n1U{6d#=fagUn+#SLXsd0On9TXc!QhgZ{Qb4jsTX=1ZQG@>;u!qTHNzqCCPSKl|E&t`R;qr0M#}=L;S>HldS6ThLzf!U*EXv9+EA;xqcRw7B zMe^<(IOP^OJ$?FB)vrck2|WiJQ=gtJ&e&Bb%_jd)ox|+Lj-Lg^Umu*>rgHmN;qNbB zrJMU%|FC);E?W81a$-F&uvAN2BTABsQWHy3byI)@gOP!OrLLi&uAy0ok&%_5ft87w zu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfetqd(88dl6?=0(wvo1c=IR*74~ z%_F-v0yP+coaB?4oSIjh%8*e~QedU8pPHvvo|&ClkeZU2sFz=qt`Fkr2b3n|WG2U_ z0>w@#sO3D+9 zQW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%NkbHs7A2=LxHV*Nr@*SkRd44$rjF6*2U Fng9=89ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIOJzX3_G|uNv+~~y|DB$|MmF3{Eyo~~H z{&0G;?w)YUX^o43Ba>2DCX2Kn>slQVY1X%wGG52GIC!o8&TC!Vf3)pxuhrGsGdu6h ztkis-vv!ioO0h|I?w+}`w`$qaxi$7WXLJ~JQYN)_D5S{k;81U|zV3c`O0ixS(+VN2 zgY{E`X8EYymCCxjU7y46yBN>aId`)jS@zo28~jaMdOWNBp{#Va48K(K?(!_D0}?rp zRMmHX`8`GTcQm))B&$hTQWgIfl^jdXi_>ggeqN0K-MzKEq306iAH16QRE|I0<-$8N z>pxcKemd69JZ2DIRU18Be20$A^qsTYT~+vtBU@T^lv)M8nFY-{oA$QKYpA8k&U|8Ce+`SecmV8kk!d7%X$x z{S>AFq|yqa3#h@+K-U1M!7#+Y%*xcz%Fq&`VZ}^lUK9ez3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf z=V8`CY=V2pRM)^l*T^yi=nrE{pjUK(4mB{Sjf{Q*)F276E;v7}q&%@GmBBG3KPgqg zGdD3kH7GSPrLyp3str()G(=HpQF1DSo1-rTDY)e%rYm?R=jRoNo)_5*RAz!u79Seq x19N?OdAVL%VlD*fCFker=OiZSXM!~9rvc3<)-P0by$jUO;OXk;vd$@?2>=$T4x#`6 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/in.png b/examples/compass/images/flag/in.png new file mode 100644 index 0000000000000000000000000000000000000000..edcad05b30f5a5edd249d55cc5f6433c1073d390 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHHJY5_^G|v0_?#&8G6tKPjb&*8(kIl;r z3_A=J#JZZ+E7~zUNdV2DVduj=j-8KkXuhuDxjy$23x3T_x&V3Pk!{L4grtK1e3Nv)~q?N6hQK;(k>izZewhRg@C6yvP6}z-o zmdZX-TvzsZVdp*T^|#NazbF?{cQW}~`~7!G{I%8Y&)X+Q9-6@yU4Nh7FWNIUn{!gn zeY?5;qT+PoZ1#RnuKM}zY_fXcoRYPFXU3PvHZYuI>puD^q5Spfn?Ii>%~bJo<7~Lw zyUyVPlgi1@&DQtp&Q;dFemeQKXV@#QydMpZw;$j9vqvpdby|1Q%8Y4UO0Ki2Z&$0k ztJ`)=y!Ga9ys7#0Eh&i({fs8++tn7IT{X)j)iX)MbE1v}@B2nZ1%nvI^#(DA89wm; zvhfw0!s5Ob7_h1(t`Q~4MX8A;sk$jZg2BkZz*5)HP}k5b#K_3X(7?*XOxM8N%D`Zm z!|tar4Iq_P5M4kGh6cI@Kn;c=24+^KhE|4_5DhD4GV`Kn$jwj5OsmAL;pUOu8-W^( zKu+?>Ois-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#~3AwYi^TLQhJ3v{S~L2YF86QBl3kafZNX(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiliZmN{f8UZ64)gtGY1 yARn0P%gf94(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaOs_R{#eg;ohKbLh*2~7Y)+A4Yg literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/io.png b/examples/compass/images/flag/io.png new file mode 100644 index 0000000000000000000000000000000000000000..70f3d1cd2b9c458fb6d552fddebcf8da2d4e158c GIT binary patch literal 1049 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 k^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft<&lE{-7@=UXTGdNC&oxZFRn{WFU)i^_!J zl&89zKJn$9(cI(pZlZ8Xww{7u+xpe3V|#k`zgYa@-j(Jyxr!!EhGvWV^Z!nrefHRf zC54Ig+u3t=+w>)i25en(cb$^gs*ckSFJw5_?w@yg=1lp$t(R9;t?x+OYGl$A`*KRK z&O3SA zKli8KW6%pLZ}GM@KM(Y-YKdz^NpewYVo9oQ3XothGBB{zH8j*UGz&2@vNANVGBMLN zFt;)=Smv<%DNF-Mr4>XMP=ld?t^rVkVTgg5m8qeXp(RAaikZy3C>nC}Q!>*kacj7F zWcNm(1|yJ@d@_?$^NLd$GD=Dctn~F$^YqFyvoi})Q!*3v@{7{-K|K9{(xjZs@=mH&TU{D(w{RC*8B*?np{Irtt#G+IN z$CUh}R0Yr6#Prml)Wnp^!jq{sKt<9JMWsc_sSIw8z7V9~mXnyS;F+ACR~&j?WG_&e z2|`(XXpj%g_2uQ|dTEKd5Tuu!pR1pfn53Tx(x{&XG^1F*P}TJ=P(OpGtDnm{r-UW| DZ$|zI literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/jm.png b/examples/compass/images/flag/jm.png new file mode 100644 index 0000000000000000000000000000000000000000..d520d791b6e6bc8698752b95c0865c432519577b GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH(c)B=-Xq*q7=Ibe{e~UiOs78KqkaIk_Sk zmYaGlvw!b<|9v~3@rvWtdrm+9aPRY#dx;Bsg5?e8vNKp5VEon3x`IJ)PrtHM!}AjH zNy*{Ya}SgpwAI@+Y1W}LE3bvj)!KP)_1|6_nM?7m@7`5Bm_Nhm``=p=kNo*(yX|iF z_kEwwZrbQ(HK~WaLQ&`9f;0P`-MF0V-N1j~-Z|&~IFYB@-)1M4pQ!P(TeG5AhU4VZ z6)Y!rKQ8*qw_5B>+U7cjw6K-0jtI~7eVrih|1ROT)U1uV3M;qt^c1P7s+dn^*uxOg zt8%iW?RuWk_t2>3OV<>3>KDCaOAiW~zG@v)+NxDfnSCdwZWg+&G;`4z(N!DQ8r5vv zwYpMNf%5==!;)2VUR*l(c$3+Qla)Ka_CBhx(@7VSxvQz{d2e1wu4m+sf4pKp{&}0mn*3FM zFIQYqn?H{`I{ye)W%t)5HrnSm1UNm?oo4)hzjl2wYrq0le*Ohp8S5GL9J3SKyC#AK z7{RI~t`Q~4MX8A;sk$jZg2BkZz*5)HP}k5b#K_3X(7?*XOxM8N%D`Zm!|tar4Iq_P z5M4kGh6cI@Kn;c=24+^KhE|4_5DhD4GV`Kn$jwj5OsmAL;pUOu8-W^(Ku+?>Ois-! zPG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#~3AwYi^TLQhJ3v{S~L2YF86QBl3kafZNX(i=}MX3yqDfvmM3ZA)%>8U}f zi7AzZCsS>JiliZmN{f8UZ64)gtGY1ARn0P%gf94 q(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaOs_R{#eg;ohKbLh*2~7aQV0?Z6 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/jo.png b/examples/compass/images/flag/jo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a267049fb9a8dfa0d9f16a770fa092db94fc92c GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHfJY5_^G|o>wr|8|BD8l;S^I8AN3LUA5 z26z83XRltiP(g>YDM47LyDhZa^?I(h62~EdM2nWz(A#wf9A+zcH-EoVyxvj0O|oW3 zjGx8B2U7nhvwpaj_q}oB?%m!-lT+?{oU=a}w|+YF4F{Qh`)s|#yH2cu~gyg`8w9w?Cd-Yc8ojPqIW8656lM!plXS0L`iZ{YGO&MZVHfK zFfuT()HO8JH8cw`GO{u>ure{zH88g_Fj(fW`zcHVNTn4-7f^$tfvy2igJFn)nU$%b zm7yg>!-|>AyeJxS^HVa@DsgMLd1UuSpavt5lYBChQ}c>b88S*r3as??Q}gu7GqW=b zQd2S$_413-^+7!SfYPL#%;fl#{M^LMJo~?|&cm#O*aY{Gsjh*Au90O3&>zN@K(FWm z9co}u8yWoss6i5BU2uL{NqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R2!foX^5iIqU2Nt zH%DIxQgF*jOjqzs&d)0jJuk8ssLTYREIu^I2j=?n@^Zbj#9Ro{OU}>L&q++u&je}I ZPXn4!tY4_=dKajl!PC{xWt~$(699@Z8`}T? literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/jp.png b/examples/compass/images/flag/jp.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf1c582d066421985192bf3bb5b7f9c21b199b8 GIT binary patch literal 771 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIuJY5_^G|rb!G|Xc%6mUJhdhNCwY!?Fx zc)a)=oE^Ozr^N86%06NeF`1nmpwQv6*~24e;zm>b*1c)LPfl-2x2gZ~|Hiu4R+0zK zJhJ04YKqiU3JvY#5U5s2`)hdMZJBnp(E0}zOMV{G-YnVenr8i6N9#}G`|mm1TNws|`Q8WmzJ5IUv}$*YK$k_#w-b*iu80eK`twQ6vgrn!FP-@% zBiXOXwP%rB=pOf$lPYH!P6jsS;Q&~q#X2tusoXXKG%`*!TZD(F}=J}fI zl}Un}iaWODzTS0iyJm;o+~#ms7r*7fnQ7mD@BM!w;ov`Kk)Nz;lXK?J+iCy`7S$5h zh?3-@)Wnih-4r0fU}RumscUGcYiJf?WMpM%U}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO z16>242Ez~oGb>X=D?>|&h7~iJc~Lav=BH$)RpQog^T_UvKn+G9C;4P1r{)!>GGvsL z6jq^4vh>g5-u>w|du0i{VfnaS}f`MHUidG>!_orhTmu?g-WQ(XfK zT_ej7pg)W)fnL!CI@G|RHZuANP=h4My5Rh@lJdl&R0hYC{G?O`&)mfH)S%SFl*+=B zsWw1G(hxh*5iMbG@ lmzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI=JY5_^G|o@$v-b~9lxaO*U479ht7PM= zAP;lr8DD~b2%btva6OzOm8z6jo}N^=wwwE6ZfA1$PNH|Z#ID#-A+-`#3z{@LZSf=vC-8?lwE zR+)$2)vJF}v3q{UwdnKjZC~w}y?b`$Ef0Iyz1$V8;^*V)_MTd?WYC2za`0>m5hoQbW@ajvH)R4h^AD^o)&LraK;6*HN6Q8eV{r(~v8 z;?{8U$nK3m4Mrd*`D7-i<`t(hWR#Q?Sn2Dh=INDZW@i?prer4S}eUBg+t=Ka4GbUeN_Q)WD!NGWrQngCxkh;QX|b z^2DN42FH~Aq*MjZ+{EJ&%r>mdK II;Vst0O5*8;Q#;t literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/kg.png b/examples/compass/images/flag/kg.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ca53d8ecf63ffb2b33af92aa9aac7dd424d9db GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI~JY5_^G|uM+8fHyR6qxh=w6HcOn-0@H zH|gfqN0vp4?;JU0{Df&*lHkEZQ7s-#u?mfQX5N(T{$JnOdU{jN#@)u7jq^T8>|Oug zj6aj%0Na7fn~fP>x|y$f_E&9+Z$0)vr zFXp}5=e(a9^ml=swzXSU^{u^nI!s|9=#a{uOhsn_@95Z`FIs9Y5~ewR)}M z)8$F$pG%#;^DU+>f;AzA@t*X}|Hb8nwHqs$>KVU14{4H`nf)IagsLU35hck*sfi`2 zx+y?{!N|bCQrFN>*U&7)$jHjjz{%(#R)&@k4J&3c^P*_T%}>cptHiD0=8@eSff|fJPV&i2PR%P$WymNgDX`MlPtDUS z&&*CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5Xq#=q* zi;`0r+#G!&NWm>9Fs_FJ22WQ%mvv4FO#piCCc6Lt literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/kh.png b/examples/compass/images/flag/kh.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7dda0e3f02bba9ad1a4e77a7befddea794a929 GIT binary patch literal 878 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIIJzX3_G|tCP+?W-TDA0QT@80t7ZKdn8 zBTlT^k&&z^#-?q}oR=tE!~Ry((RJen(+A2ND|z-c9&x&_WG1v#V6}pp_46}5M|~A6 zYIv4Qq*)Ye_1GU|s^$E^P*rltpZkizo?E-v6qw~+GJgNyq4}bq^~!6NeRA>U=jZkI)LiUwPtRX_cxqZEn~;N`z$XRQw9qhl z8=1SY3t}B_m(BjZyk9Q;?g^i?Nqr4c3^5ZXm8C7!j=i3HM|1M$%xk)0sYaU3&njx` z6&q9z^Sl$kpToFfmYVVAb*mp5H2(ZnHdQXjgGuYb-O1O@_t*aSZVT{GZ!Sp=aBQ`y z^w=4{)8^LQ%6R6xjO~vzoxjF49q;GYyc@i?!{!6aGSLr=8zw9Ke_V3O_Njc2iSb&7 z@}NdwEU1>aMwBEMr6!i7>ZSk*1|tIlOI<@lT|=`FBO@zA11l3VT?2C~1A}D_yPv`| zfK*yRbOALO8t57TH5i5%m|2+`S{YhGG_07(%!{HSH$NpatrE9}n@4tU1Zpq>Imst8 zIW@01l_8^~q`*pFKQ&LUJTp79AT=d3Q7^wJT_42L4=7E_$xMz<$O9Ok zh)r-0nd%x?=o(pu0R3TX3G|9C(4htfwUNGEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJfd%8G=Xq-3g^7oirDAR8Le)rC&7o0j= zH^+7za(47^Wp!;2i)DNDMxOPgl2dbrI_px6rj7}LYwBB`x}I?U&!?y|lTB!<+#(I7 zxuSWoX4A8O?R)?J``_CAv0p50ZEUWY9AIFmj^yy(!N9;KvEb>u?TuHjS2H-c@NiGw zs9K<-qVPQM!9xrtCIgWo9ESBUu7Wv`~Is*pGr+wdkpV>KUKHlw63RzAv@OJa&oF6$#pDI@wnZ$X_?b-BDUHRyp@8M!*ch2;w z{hs%{U!E(y_}q!#i>}Sd=`-+t_A%e6=G})~>y4)_{OA;3^!MJfEmJe(?`%&$KF!xu ze*ct{1bHtmEI+yP`7dBPP%UwdC`m3#O)N>( zO#u=NMg|6!x`u|jhGro~MplLfRwib;2If`<2Fo0FKZR)kskDOV0%|Zc&@}*RFbpv; zvobZbGPHzfSTU2C7ezyEeoAIqC2kEjkL=zE)L;a1l22xGYF=?FLq literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/km.png b/examples/compass/images/flag/km.png new file mode 100644 index 0000000000000000000000000000000000000000..b3056cb3481687b06eb903508f7c2ee84986603b GIT binary patch literal 921 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI6c)B=-Xq?Xtw9OC+l$f)9x46EW%>?Ua z!*-Qc*9S^&2E7tn1=hH@xF*$h%ykS1=uXJYO!N{w;?`t;wadWYbvL zFoB6f^2GjGbrrJ~^yF)b$CZA6|7zac75Tne4)dp+1zFTru-()qqkR0>J9zQr*JQZ;lU>x|E}88@zZ`+ z=9k>gh_AEFxc`68rjn-*WO`XL*^G_5y`nE&_m*y5`B1a9Y}ed`e>dFgU-|z2y*Ki! z<56Q4?s-y^e*HN0dAgz0kI0wj-dGyh8rA;(_%zLWPTlj* z)L>|!YXH<>7-C>%Wol?;1muD=Z0>WkMbVI(pOTqYiCe>=%Rd`|8jL_r^2tn2%_~l2 z$S5f(u+rC0&C@H-%+4%GP038u%P&gT2l4a+N|SOjljBqJa}zW3?Ek(x53>$p6Wl|l zx&{`yMwTH!XBk@pU8W0ksDVLkWb_lD21$^0!TD(=<%vb942~)JNvR5+xryniL8*x; zm4zo$ZGeiTA&N?il2aMn9DN~3!7V2-UBNRsKd(6SyvSalG82Td_|PC9nCr{S%k|O{ ob0J7CIX_oFCoxGs6Qof;4QNKOexa)CU7&sjPgg&ebxsLQ029AhB>(^b literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/kn.png b/examples/compass/images/flag/kn.png new file mode 100644 index 0000000000000000000000000000000000000000..9f1d929c2cf77e9381daf56893009d5ebadbb297 GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIsd%8G=Xq?ZT=-+asP^Rtv{V%iM9``$X zO~^Wu)R)19?{esJ3pyK>rT@u2)~ zxwk$%ZRfi4#_hNDhzt_?3E2)C(YVyy?kc9`h>?+%p@Ef& znXZAkm4U%Bhuu$M8bB(oAi97W3=MP*fEo-#49u)d4XuoTT#$y%eU7#$8glbfGSez? zYdCcIXCqL95y(kCnaQbn#iV@sgRbb$^vFsO};egf1W39>FYKdq!Z zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP?0o5QE5?fDubJ&F9a#L0J88sr0WeR+AgURq)<1nDK`=j!JqCh2E_H0q}T%_!C{RCT=z)X(7Q>gTe~ HDWM4fPL*q9 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/kp.png b/examples/compass/images/flag/kp.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee0167cfb8b68f4c629c17fc8c9542419a0af52 GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJzJzX3_G|u}@w9gI+6gYZ*@9#}c5iJL_ z+`3IB9a6jT%v(k0+a&%?r9m&*FBna|ojI{J#7vB_+IR7in>&^TR1|)nH`Ds~BisKx z!Dkw0Ce`i#QnIS7cb!cWAOC~}?6zl^|EzEKcyIsuV=Y62io%tCMNI|I02lGE4})jd zDc!C7skCnT3b_)K$XsrRXRGvzXSUAH`1$bLqpz#k0;2Sak0pH4dHZHbkj3nuKP@v1 z4sk>&C9%NSh;e2yv2NeHDTU%N47|A?MP4c!##Hy_dL31@&4^p^UZtq zufNFgcw>*_DW8-HN>AT8uq}AC>tEXYduHwJb!BZ=wZytLT$gyg+EC%w_>N?Vgop3%^AE69*}DD4oh!%OW}LM4;`@H% zRuuEuqsOmKcJE#AVrKajMNOx@0*WdepS#~@e)zNP-w)+W%-MfFziQmSO!>iq*gtH% zEfG%|^xPi+<3Y8=HKHWBC^fMpRW}7lFc=vaSn3)Y>KdAb7#Ud^8d#Z_=^B_@85k^c z*!>iy0i@Cjq6?_O&_LG!sKGGAz|6|j(8>tN1!>sa=V*(fAvZrIGp!Q0hC`QsHUc#m zft=)%nVgzeoXU_|6H_V+Po~-c6-h%Bl@=wZGPpVVLXd)6PGY)(XL5dCap-xGy+CCq2xal1 yK|V0omzS68r6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH(dAc};Xq@*A^!67{6xkaeJ)`W{w#$B! zm-Fv2K}1R z8N5}q)b4$vVUoqkleVji&z}_h`>^3$!_3YO%aH#STqn;6DtR5f8WNNH_HF(DKdC%Q zqSs48eY2z7yww(6%$K*5Gnp;?a?8r}nU-Qw->Yno7ygm2J77^XS{$AcSYabr8wTYZ>ramn^Eatjx)^HBdNa^->>@@v-k4*ovf=BT5e>^9y>IRp=hU!;NFs8 zRY_i@&gI?w(aNcRA6yP~y|{*nLCDGI_zX@4hV!4#WxhHPwZ@6MGRv;B-$3fwrVgCV&0&$I!3SDO7`*@ z;fqtbvt|?*Z3WOPtx&kSJPA#G!*>E*=i_h?iSwt4j9F% zC9V-A$wjG&C8@e8K!U-@z`#=1&`{UVEX2sj%Fw{d#7x(~+{(aUnZxd-L1;Fyx1l&avFo0y&&l$w}Q zS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8xxxT!-TrVv# o7lQPX^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJVJY5_^G|txs+Iz_sO3b;tM(JbXN1r3= z9#Z}S_ZauI%u}43`(W+?yH~tL4dGANSwBzNG;f{i=xF|V4$!{D*)8rP-2wbQ(-Prcu?T+Bo3 zrFi%A-Mcj>v3>Z>z5mX=eOtoTibk$&tr1mv!k?aAFE7W&@bb&!%dck0JdIoP((l#D z%$|E~v1R-v404Ui5BMik#-B+lGMLTqk9lrJs;0J8-g98^sg}4#lq46WCYGe?rT_^B zBLf3VT|+}%L$eSgBP&A#D-$za19K|_gJll8pTabNR9ZoF0W}yJ=o$bu7={>_S(zGI z83DN<4V(KMZBaDj=BH$)RpQog=b88S*r3as??Q}gu7GqW=b zQd2S$_413-^+7!SfYPL#%;fl#{M^LMJo~?|&cm#O*aY{Gsjh*Au90O3&{@WoK$qzP z9co}u8yWoss6i5BU2uL{NqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R2!foX^5iIqU2Nt zH%DIxQgF*jOjqzs&d)0jJuk8ssLTYREIu^I2j=?n@^Zbj#9Ro{OU}>L&q++u&je}I ZPXn4!tY4_=dKajl!PC{xWt~$(6959@AX)$b literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ky.png b/examples/compass/images/flag/ky.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3c46885341e1f745294e2a2792c33f48773220 GIT binary patch literal 991 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJvdAc};Xq+#d=<9L0P~!Oh|I@eaeCBhz z#8=piMU|^seb4oc98RyV?F@dlP~%XG#;c@uy+b{Gf~ngb1+FeU^QLuy(%aOXLgq2u z0kf-rzW;7>{{3~wCcRpI`5$xa+SixX7yKx;uq;V__NC3|z%dUsqaD%xcC(otH89yY zFv~qyyYlMZ>=y@LG+Y+@{OnoD&ZON(-c?;aZ@HT0<_*hjg;;E?W#2qZnQlMv zL4mN9nR(9Lpv*p@!l^w$HMt+JIe1^*m{PN+V6q3pMsMriZyXNqwR!fops!~8>A?8( z&2+owc+Pu ze3%OwwImlu%xIk<+G(WVJ$bpltnS*=aq`taLud5ozqcsYs59UdPe@Y~Q&JOhUDVMT zxiMzOhwoo!Devv%O02o{>)YY|VIMkDg0qz;rlqC%sw`>s?D+9ke9!#wBfH`@9T8*@ z+wk`N;{QP(=Kp16Uaxwt=a&CvV6>~2xJHyD7o{ear0S*s2?iqr14~^)LtR6&5F;Zi zLjx-lGhG97D+7aN4!fViG=NlEL39B%7#ipr05uqf7?@d^8d@0vxgZUj`y6diH00)| zWTsW()^O^z~Eo^vW}{GYe8vG86Uki_-N$JpF*u zq@2v;_>}zI#LPVVzpu{2tb^DD_mHWsfrYM-WeCt&#+E>r=>i>UU{D(w{RF5%5@cO) zep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4Rpdx9AqSB(|R0cOkUkFlg%SlXE@J!Cn zD-Jy`vKOe#1feWGG{^_$`ttH}y|lz!2+~W=&(+UKOw!K;Y1B^xno+D@sOowbsGq^p L)z4*}Q$iB}U*3b) literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/kz.png b/examples/compass/images/flag/kz.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed4b91582b9bbf1ec37ef24cb0490480754f5ec GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHRd%8G=Xq@-Gct87Wq0I4**S}Zqi+WpN zwmYHIwD-!Upc7}iiWW}YU3gHnReGmL_`5s0TUU#!PLWnGzqDxaAFc2r$61BO+9h** zCl~L#|NZ&TqUJx0{j1%>vVS&j`grJXP{-8?PEK4bOsuB@7dR~46m@#;T;tPHl}lcx zB&u?1+<6=LdX*JRH?b{^WoS*#Nr7G?rm;0n9r-kR`cD|kb zK>kYmUW(4TrG7*mJ4*03hVBESlaq6$-CT35iC+GG3I$If^ zVJu=1u*p?KC^}-t3DJisx|<%$Ccpk^^>lW#&e^4>{cAOTGpmGX9Jso(^!jW&S&cPZ zth3{O@m%pR@DB7Z+;&|Mx!V>HX_J@}pL0KmEnKKQpS>B%|#QFs@Wf zTq8=7i&7IyQgu^+1cQ-*fu*jYp{}7>h>?+%p@Ef&nXZAkm4U%Bhuu$M8bB(oAi97W z3=MP*fEo-#49u)d4XuoTT#$y%eU7#$8glbfGSez?YdCcIXCqL95y(kCnaQbn#iV@sgRbb$^vFsO};egf1W39>FYKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K z@MNkDP?0o5QE5?fDubJ&F9a#L0J88sr0WeR+AgURq)< n1nDK`=j!JqCh2E_H0q}T%_!C{RCT=z)X(7Q>gTe~DWM4f>LF*b literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/la.png b/examples/compass/images/flag/la.png new file mode 100644 index 0000000000000000000000000000000000000000..2c11f0bd49376116e0c72b6d38d1ed089e4cac43 GIT binary patch literal 871 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJTJY5_^G|s0^+?zEeQK0qw@3-kKuD(7o zqE|%nX5PEz=dn<1icmy~p3K_+FCx;lYy+7OAJF zWvREhEaiw?;=%SjUq3JLPTqa_yU{Z5Rxb{A3g2pS->%x^#F_HPf9LM?WYiMI3t1C_!@a;Q(GT)ECukPqONB0HEVQR{Z+g29*0$UT1e>)L7g`2CtHT?egZ{!?h3Jw>B)(e!ET zi~HB#{{ExnZPr>m{>Sfj-X-Vxqi=4& z;8!hijVMVjN=+v@*1WXjn0mnHNPvZhlH;S|x4`H;?Sz2-IK%a*|JGa%x_2 zDnmv|Nr9EVerldxd1iKIL2627qF#Pcx;}`fA5fZm^)p?k85S!p0 zGSxM(&^59Q0s6z(66h6OphFD|Y9phc05wR0tP9RhD=AMbN@Z|N$xljE@XSq2PYp^< zOsOn9nQ8-6Bn?qiT9lm1;O6KHK?-g;iRlWS$@zK3q31>R0+pE{l*NYz`M_LXUS6)3 qmY54cddc~@`Zra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG?JY5_^G|q9sjzQNN}yX z+PUu5<=8c$)q%e10ex|?y`iEE9+Mb$@7#aW?#@5+nu^b#a!unjgD0sN_vp!rYH-as z=##d=sqOD){o{Y{egAjy-pzg5tXneA=ooE&tLF$5dwzNE?e^QZ+IR1r8~<0hlrbgw z#TCt5*_<{fPX6_WukTy8`Legl>2nv>Z2Xw@`25|kpN=mL*fYC+ufb-Cmu(Z%xERW~ z_EhW_nl7F+_g&HXDh;dG3nwZ)6^T7qRQB%n^23uF*qCR}VA-3{k@s$q__-yEcNVos z?2>2LAb(zdroY^ssTqO?>IH&bp1GC%t^o$LYKdz^NpewYVo9oQ3XothGBB{zH8j*U zGz&2@vNANVGBMLNFt;)=Smv<%DNF-Mr4>XMP=ld?t^rVkVTgg5m8qeX5s(Ygu({9C z7DYpDeoAIqC2kFeF8^!8HLp08A)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH>Ka(+8d-(_on>qZbeS&Dp#}!EkC#5QQ<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE1-G2U zbOq1k{Ji4O^CEkJ%1jW-;zNUcV6HDOFV{;;%!MGm+}rLp08tp4pof5-7s@p!D3CBZWyU%1UCh8U%VAr8jb36BOAp zS)|Ez%jPedIYFFSVqMENZ8Yd}J#fe?K>DC~fB;joae3XlJDb19oj&!RabL;%!eHN^ z)vOFt4lyp6wN&U;*^9Pgl9PgaS6&aSw(u*@<6uzatF9)*PYr*ivJ}c#4VRqF~>IWtX??o4S8b_0{^n zDUZvt!whBK6)5>kFjD1w$kBCV$+IYN`ES4fHv7Mp4gD;lS1cMFps>kONknAn&zQT# zFW>u1PYsHe{Fl+UCc&<~bXz?qo4+|9ZmR1ArEzd2nf>EuI;@ua<tgDm(tC5R90|UDdi%Jux?muSJhR_|x{9${5@ugbg8c~v5l$uzQs+$5N7>o=I zEOiYHbq&ozjEt-d4XjMebPdd{3=Ebz?0yQ<08(iM(FN3CXrOBV)L9nO2Eg!=cMR8-W^(Ku+?>Ois-!PG!g_DJihh*H6vUE6>c%EJ#hs zOw`LSO4kSR^aDzhax#J&%r>mdKI;Vst03fMJnE(I) literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/li.png b/examples/compass/images/flag/li.png new file mode 100644 index 0000000000000000000000000000000000000000..990bd3d8d58684571da17fa9e30b97d37b87356c GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJDJY5_^G|s2?7-mgLlxTVW|J!8&)o!;4 zj!jNVY&uL%r|uk3=D2r=o1?1JMDwWECDyGU7@AroCPW-@3v5bAnEqt$%AlgG(MFPHeJPF<4kKaJ6pA=2Wh4t)@6dd{bA15E?6wYp7m6%g&)F{g`g^&# z`t!%$oB1nsqPM6l&A2ql*K?Z9&a%&@WxsddymxB7VV%tM#VeG$Kh`g^$dc|icwL-u z^U9$xmB=m;Zy(o*OEoqwnOMqH!k{WT^T|=k#V7XsNHg^E*?p7q3yYVOTDEV?oF@rt zHnC}Q!>*kacekq`DY_ggAvF{KAFj>dBv#=86_nJR{Hv>d3xoU*_j2Y zDVd3S`9zH zqb~$0xaB0KD|ja7=M{&Z7ugF`W`a-_9~$HXbA5Svxn5dgE(GZ%=jZC@Bqr%+f;8%< Y0nI4ZFI08C3)Iix>FVdQ&MBb@02i=4xBvhE literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/lk.png b/examples/compass/images/flag/lk.png new file mode 100644 index 0000000000000000000000000000000000000000..bb955c3f372a4de093189d0f19d3652e80757ff1 GIT binary patch literal 921 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI6c)B=-Xq@+*c-BvtQKa>~Px_pNOQ)?0 z3_LRbNGqpatc2-7@q)*P#0%b^JN_Z_$kdOF28xP~N>^8`nBnBB@wa(q^*LKTgNvL0 z?W^gY9AbU`&3%bUhA9gdbSgPb&tAh9`E&8+#dll2mnH65Um)Pu z-mob;cBggD)cMB7t7DGWB`uj4v~BM-om;{_le5@Zr6NOpFYGb+y)7mz*RivVafDY&z`?3f_hrrgnUfSmC!UxcDdo9nPvW(R%1^(a zyzsf_wPemj?X!Ee*!TWC_bBmo&D0(}eUBg+t=vy3f)F4F}%)WD!NGWrQngCxkh;QX|b^2DN42FH~Aq*MjZ+{EJ&%r>mdKI;Vst079E(rvLx| literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/lr.png b/examples/compass/images/flag/lr.png new file mode 100644 index 0000000000000000000000000000000000000000..2e07be31e303094e0aea79aec9beeb716464ce11 GIT binary patch literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJtJY5_^G|sn9wDxum6li(=qBk?gMeyi? z2mKp9&0n&0^A_QYZpq3`xl$L89nx|ORGh28A}Ie+uzIq_L8aC?cXk(-=_b`E@g3fD z)tu*XgO1%&@f(Z_7#QEqiq~t%`MBUwZP1i4tx zzw@1_+CS6JeeJaP2%U4^r}vr!c?xfISiGX6(?xmlbm^ZQ4lBPH*xE+k*e%vJ@u}%= z=W{z(&b-O-;Og1O4?ps*Y+Pt(zWPnT?l%f*A)Y~tXKwzpZSwTA_XiT%84vuM_WEVz z%CNhZ6C%%h?#&ZX^<5z%94NSSMnLn7j!7#w`c!6L|M{#qE8#=D4a4(0!C%i!ZS1@g z6jN;?Sj+Dj@?+kGm(EhoRW*M~mOqG--nwt$LwVV{rHlp)y|=rpf7+?+{%7^=IP(ME zTZ$OUQG+~;VEq9HdwB{QuOw}wNPe>MU& z7=fJRlbM{FSDea_QBqQ1rLUiwr&petomr5Yl9{NNUzDy7;^_yJCgo%%$EW1yCT8Z@ z|9y2HW*x*PxQ9%24J>qxEJJ|KGPVS|Oc&@-1B2Sg=qEr8k|67X^V3So6N^$A98>a> zQWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hm zp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl(2QdJLRHthK>ZA!u6{1-oD!Mra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH3db&7(3F%GbO(n z&OGeW!6nH0_DJi6Rc3FQe=A41Y{`n3KDe-#n=|LKkz$5m+Y(ck87;{{R&@_M`?RSxw9QEmhYRfIHlFr z*qFmF^mp5_bNv0R%dQ&8)lbvEHdFVYNbq}+<@*DaQj!8cY6)0`@=lUn_A4v({l`CL zt96$=cxIKVelyf#W~WQ!mF{2r+vg{md@Ni1!~5La7gMG@Unf52mzE>{@5hf^efE66 zwOJnH7~;gj%LdeX1)#vMivDJ23D3A$K+*m10G2oT>TChv#KSo5hck* zsfi`2x+y?{!N|bCQrFN>*U&7)$jHjjz{%(#Rz^TBNW6o5vaik0cwy0Sr?q2R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGSvpC zNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U&yu4g5Eio5@^pf*) i^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$SoE_WLM literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/lt.png b/examples/compass/images/flag/lt.png new file mode 100644 index 0000000000000000000000000000000000000000..2089c091b40a55fbddfd26775b4b2b10ce448d0e GIT binary patch literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH9JY5_^G|q?i8v4x%xFXv>kkd4c) z;l&O|6~7~_i|#1rcA2caT)^bAC?q66fpw{qcB9SXnIid-O{u+hx09sQ&7UA}&uyy3aJ2cI5){#&(nn$9efn>v$YuO5ANWimf|c)Y;} zrkyvZsCJ(%+UU7?*Q)#1t{jqLc5v@HwRE2Rsy&g~;_B@@j6M1D3#IJtPhGiUSB9_j z*;^ULSN?VGyPq(JnZ5pMy~L%IRY6-DbKQHY-h5{@;L6ZyZ&zH{Cn2PwGNGGA^RD;y zUGWW1#RMLNfBh}=|10mBhI&<{a_2=?);<6RoN9?{L`iZ{YGO&MZVHfKFfuT()HO8J zH8cw`GO{u>ure{zH88g_Fj(fW`zcHVNTn4-7f^$tfvy2igJFn)nU$%bl@X8&(y+PD z(H2ERZhlH;S|x4`hc5qY1Zpq>Imst8IW@01l_8^~q`*pFKQ&LUJTp79AT=d3Q7^wJ zT_42L4=7E_$xMz<$O9Okh)r-0nd%x?=o(pu0G(xQ33Qn*(4htfwUNGEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI)JY5_^G|t!d8+tVd3bZ^|T_51`m_Lcd z(NQpG&ED3j6++y(%wqEn6~Exrv1yySzj1}&;c9DRv3eh=(ulVF_SD2l{{A2A7#SRd zycE(j76yf^;tEmJQBVHV^;(d@`=rwau@f#|PsW8zR+GK@q@-lFq4tWSZ@FCp`WOx` zY3_R^)%R+}I#b?qmXtYje?Q=ezP%u)$>`}KuaQ~E` ztlMVgrMoj2_j74_o;tnw|Nq-3r%ln9H`nX4{b|H{Yl>$3o(JptTGFnDfB#$aeaYdo z|30^C3l=TamMxi@%vi)x{ko#sf$fTOemQRNw7=6 z;b-Jh%hkmRtoI)tsmzW~-o^_IGSw2-h?3-@)Wnih-4r0fU}RumscUGcYiJf?WMpM% zU}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO16>242Ez~oGb>X=D4qg7)2-IK%a*|JGa%x_2Dnmv|Nr9EVerldxd1iKIL2627qF#Pcx;}`fA5fZ< zlbIZ!lAoKHnP>m^)p?k85S!p0GSxM(&^59Q0Xoar66i8rphFD|Y9phc05wR0tP9Rh zD=AMbN@Z|N$xljE@XSq2PYp^R0+pE{l*NYz`M_LXUS6)3mY54cddc~@`Zra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI)JY5_^G|rb!G|X}e6mWe%x!p-5h&$_H z+@%!FZ;Gwl9&?Ru7YHYP-k!kWDd@3qQp1_K){`Io*I#zRAm&~3O!LEYKJm=C=*n>K zb!pUk<^^@k<*!W}dQNmqIVAe2g#Ww3Q@NBK-8DCJvRE7bRQ~tST%r&yD!HU*QR~bT zA8X_sY?IZUXRyvp^GwU0^U{mc!BpX;`Q^+B4<~(}Yui#X{fgY(#!n1$ zswR}NUj3Jp_tC#0zDA?b^W(7tJAgr^TH+c}l3bLUSdyxn0wfrW3=AxF4Gnb-%|eWf ztPBmTOw4o*%&iOzmO1Qx3ex~mX$8>*)L>|!YXH<>7-C>%Wol?;1muD=Z0>WkMbVI( zpOTqYiCe>=%Rd`|8jL_r^2tn2%_~l2$S5f(u+rC0&C@H-%+4%GP038u%P&gT2l4a+ zN|SOjljBqJa}zW3?Ek(x53>$p6Wl|lx&{`yMwTH!XBk@pU8W0ksDVLkWb_lD21$^0 z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeiTA&N?il2aMn9DN~3!7V2-UBNRs zKd(6SyvSalG82Td_|PC9nCr{S%k|O{b0J7CIX_oFCoxGs6Qof;4QNKOexa)CU7&sj MPgg&ebxsLQ0Mc9?iU0rr literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ly.png b/examples/compass/images/flag/ly.png new file mode 100644 index 0000000000000000000000000000000000000000..654896aafb009dac0d6bfbac57befdba26ab5492 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft)*@E{-7@=R*T;=N@+8NoJ^DBD}@H?PZDM zvKI`0PbAG;C?Nl;J?FR`M^lM=m(7bN`8j{CzRwg%{WFpWb-8S>l3AYl-2W+B;#bB{Ju2j`N64?e=Xm$qe(-6%k`;JAQaU zc)*E}+|r#HPR<=ylb&QWZwfNePRY`fUA)1eAUo&Hi;o2=r;~OFrCh#aZ}n<7$L!Bq z+>%bOQ~nz4b80n`+|8TVc;Lh5Ur#$GewsEZ)nl8|_PcHc2mfw4Vd_88*;_S(zGI85u$}i2n5IMA49&pOTqYiCaU;l24{U4Mrd* z`D7-i<`t(hWR#Q?Sn2Dh=INDZW@i?prer4S}eUBg+t=Ka4GbUeN_Q)WD!NGWrQngCxkh;QX|b^2DN42FH~Aq*MjZ z+{EJ&%r>mdKI;Vst0P0=;TmS$7 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ma.png b/examples/compass/images/flag/ma.png new file mode 100644 index 0000000000000000000000000000000000000000..12616153338778c9203dd8667ba8c94c4936291d GIT binary patch literal 749 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft)vw+~)St6qWkOQY zgU9c}zxOyhJ2D%e<$Wixd)029wEnxS8#TKUmvygOnRhH^tKI+3G=|@{4B-p8W`-%H za!&Hp|50MW!@%(SvGB|jCO0dcF7UX|$ax%bfZ@Q?&~g_~HNnKT=2(VJ4GSBlah?>? z=)V8#v#ocH#j&scGd43EU}Mtf{YR&Lj^5?o zJL5u{_Y!4=ukE~#KX$5hbK6f+Ej<|e|B=Y)DV@sCqy@cF7IB-2lvz&>aALXX;qgM} zE6>D82kZ6XKhO77|7H4lI_iMihj@OVzg0_IBTABsQWHy3byI)@gOP!OrLLi&uAy0o zk&%_5ft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfet&D(NkcQ2DjG~j^ zen4qbPG)j^N`7u)W}f}uSLb2YL2QD1$W+(BLf6PL1n4YdOQ6eifetk=sEv$%0@NT0 zvMxA3t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38Nku*e6X;E@2gPWr-1Sz=XB&I8P zCggOaT>1Tp8>ZbwCDAq4jb-fGJ O&*16m=d#Wzp$Pz+c>*T@ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mc.png b/examples/compass/images/flag/mc.png new file mode 100644 index 0000000000000000000000000000000000000000..f941984e8ed9284a40809220bb812790f95f301a GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft-_`E{-7@=Ue-|vzQ$Poa6c5a#v)|nEWej zU!(s+Zk2=&W~=kIPI2Y;YqRLo;1X56y1Yfd;(WXtXMr8_#*LE7Qar9sUhjWSv)7x> zy+ju9cj(JYW2OMZ@Kj*Rv~ac!^yE<7pBy>u_S>-B^HTqU&aZo$RW0^kiox@C z+w$~9Qx5U5Zp+(RyZ^qb=O$ZmyPYb@Jxfv}8~lUClJYhrYW)OyO0~o_q9nN}HL)aB zHw8#A7#SE?>KYpA8k&U|8Ce+`SecmV8kk!d7%X$x{S>AFq|yqa3#h@+K-U1M!7#+Y z%*xcz$_U5>Y1rK7Xp5pDH$NpatrE9}LzjOx0yP+coaB?4oSIjh%8*e~QedU8pPHvv zo|&ClkeZU2sFz=qt`Fkr2b3n|WG2U_0>w@#sO3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%NkbHs z7A2=LxHV*Nr@*SkRd44$rjF6*2UngB)7^SJ;3 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/md.png b/examples/compass/images/flag/md.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf4eb09287c63a972efd7eb091b6ade4e5ae87f GIT binary patch literal 860 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 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mk.png b/examples/compass/images/flag/mk.png new file mode 100644 index 0000000000000000000000000000000000000000..808028fcb033760087a50cd1ccf4fb2301f61fde GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHlJY5_^G|tz~Va zwBKmkscjRr=RUuDBIkS#`3dTW^N%dh+EO|tZNmrky)$%{@Sk#j61el!>4)(TH7jlR zc=L3MZ`s4vb^YnqC)L09`c(LA`=fYga(>(Qw%@Mx*IsXtIVyfx{<3{j@0SU8IM1Kt ztDk)RaDPhs_SKeas@k`myV!FgzPa(s%@5)~JtHP&94d=(5ZQ16u+}>7? z@8soAp9@;rpXxqr|5W?4qQYyB?isNKYnQ*6?Xk8sp1otI)rJH1@B3Za>rXTu07j5%iEBhja#3nxNvduN zkYF$}FtF4$G}JXT3o$aXGBmI>P zJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z%sPloa1WX48d&HWS%v_eWo!v_ znJ&ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHjJzX3_G|uNv+?XrMDByDcr@Rvr({i^> z8#0<_=q+Fua?fjQ35#LibzpCKz&2sxzOuA*&UYWoJFa@)KjX3c17{xt%bD-|durGw zOqj6#3Gc%rr)8{<@k1iPB z(mcC;)~boqPM<#D<+1Ft-|nd|XU_WAla>_}e2Znt0WOob8Xbe2Mdv>^?x}CRdTYkY{n93($q$!F zM_4ZU@#tr3RM~u8Cf)7>3iD=MUskQWp@7%^U_py=yj{`PN9Sid+fDxdyMOy{-ei*^ zqoanm3V|V{TH+c}l3bLUSdyxn0wfrW3=AxF4Gnb-%|eWftPBmTOw4o*%&iOzmO1Qx z3ex~mX$8>*)L>|!YXH<>7-C>%Wol?;1muD=Z0>WkMbVI(pOTqYiCe>=%Rd`|8jL_r z^2tn2%_~l2$S5f(u+rC0&C@H-%+4%GP038u%P&gT2l4a+N|SOjljBqJa}zW3?Ek(x z53>$p6Wl|lx&{`yMwTH!XBk@pU8W0ksDVLkWb_lD21$^0!TD(=<%vb942~)JNvR5+ zxryniL8*x;m4zo$ZGeiTA&N?il2aMn9DN~3!7V2-UBNRsKd(6SyvSalG82Td_|PC9 wnCr{S%k|O{b0J7CIX_oFCoxGs6Qof;4QNKOexa)CU7&sjPgg&ebxsLQ06G90o&W#< literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mm.png b/examples/compass/images/flag/mm.png new file mode 100644 index 0000000000000000000000000000000000000000..2c60244e1d8c0d93924bf523867b7761e938e3c3 GIT binary patch literal 792 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJFJzX3_G|uNv+^FXgDA2aQIJVnki^jHq zfR74tuIul%-<)?$_{9-xj+5Jz9wn`}{y)dK>u|5D(af}e@8{PWapoOhoYCOeC}vd{ z^&o%igUvS&zPtD2NyX>K%Inte-si8W{qyFmYUS4In(y0JuNI4l&+p?iUv}A3^UL3F zHUD~aO5}rPIEkexE`7NrZ^4v?4iCYlE;FV+dFrjj9n3mG>%tdi^X+>(zo+ioQ8Q60 zZFxfF0zX=nHyPs+V3@_CZ*NBqjqSVBaRNWLH!C+)yV5w_psB35zVq|1x zXkcYxrfXnsWni$(VfRy*29QcCh%TT8Ljzp{pa#Pb12ZdALn|X77o=fxpQ9~`hTQy= z%(P0}8V+6l*$C8N1agv3W^!s?aVkSbNlAf~zJ6++UU_DAW~Cp2_)n z#i8d#_5zieAe6<22Km5TUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7 L`njxgN@xNA^x`B{ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mn.png b/examples/compass/images/flag/mn.png new file mode 100644 index 0000000000000000000000000000000000000000..36349d9353dbb1de2c119ca35f1fc97dc505ab34 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJlJY5_^G|tCP+?X}hQKV)6-}mw&8#`25 z121(cd^}1v_3^-HG|UCVv*6@qwqR%bx`6Z~t3c|I2^r)*DCT79Ovz6W1(T^7ZOf9*3eY z&G&ol-|oI0?;bVb*6w}Fu6aEDvEwkyliVBmFpX21yQa|L#?N9?jGqSFT33A`$L(8DN!RCFGqpEeVK3cqvryxB$x-QA{wREl*@cBM z@BbvVGus{hJon%)Y4yjZujJ-Q`U%N-$F2Ydn`((`L`iZ{YGO&MZVHfKFfuT()HO8J zH8cw`GO{u>ure{zH88g_Fj(fW`zcHVNTn4-7f^$tfvy2igJFn)nU$%bl@X8&(y+PD z(H2ERZhlH;S|x4`hc5qY1Zpq>Imst8IW@01l_8^~q`*pFKQ&LUJTp79AT=d3Q7^wJ zT_42L4=7E_$xMz<$O9Okh)r-0nd%x?=o(pu0G(xQ33Qn*(4htfwUNGEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ*JzX3_G|u}@G|Ubz6ghgn`XA>M@yu63 zQk_X^(K%O_das=Pm*Xyrqllv;%i^ZHf7o6$3ai=@P%2g1UwcznfU#k z?f1BLi5HS}bDkb(jBhh{X#HQ~o$iD#VNZ`)jc{Ao*7RCmjY%;7p6Sh#t6D#Kx|Zv% zFFW^W`nmkw!o85g)mQNZqePG6EVmDb?-#{<{&w{3zhB%NoAmPQ{acjOUTtP{G&c>s zZk@Yk+cvqFz58!PIUd>kRh>UPu2*}{o;lr|y$a_ZikVeOFRoJ2i$DJ9$F0R@zojYX z&zYirUH^{7{R}^H1#`<983=OPI%ybRRtqcs7IqZH4(*ROw1|6H_V+Po~-c6-h%B zl@=wZGPpVVLXd)6PGY)(XL5dCap-xGy+CCq2xal1K|V0omzS68r6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH>c)B=-Xq@*A+?zc)QD)Dc+Sz7Vm-!d_ zCPjH)(F-*QVNqY&^dP99uw0zWPs`#5e}_d!#{!F;*@EVd%M)aCbURpPiwSoxo3!s* z%k!PTZTSLU7Rs34m5t$2&wFg&Q^2My^N=UDUC)tSu)y{h!@GNXI22fno%LSxi~r3z znR?*Y`o`&@(f{WyV$$^bo`0vCks+}-+nuXbuzb&)53jQ(i3CZ^wFt7WFL{1)`=u!5 zPa$^O`3nRS4mOEs%+|Sevg!AUm+kXUufH68eZF7n+RX);7N;gJVGwUTCZJ)w`SQ%widum1*=)vQ0GvRWo%-|DC0 ztCjawoMbpwaPD%^;%XJ;r{?V9a_v7iOLFh}m9*>fFI&UBDKmWzGI%e1f9jnwBYVO0 zZ$ABO5BLqvJ4mYDc`F8tK-Ci0h?3-@)Wnih-4r0fU}RumscUGcYiJf?WMpM%U}a*a zYhZ3=V6e<#_fwb#kV-3vE}#ZO16>242Ez~oGb>X=DldoJ-UaGs@O1TaS?83{ F1OT`vU;Y39 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mq.png b/examples/compass/images/flag/mq.png new file mode 100644 index 0000000000000000000000000000000000000000..42d7fb947abb97fb897a55fc29e30ee33a07f349 GIT binary patch literal 998 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 W6zdnNy50rqXYh3Ob6Mw<&;$Sra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft>fAE{-7@=W{1+%sUjo5M?R4qesZBO_igQo8UN$Lk=a4wL{`&K$mm2r0 zDt%H33cXtOw@rybfl*M7FZDKC=&X(JzdsJV^XBpE&35yBOE=%0#ByLth1JKh?d7={wG#u48A92Q+!Z|ZJI`H+<)Ggx+s_Oa7+=I3b|`vu zt|4;!!eXCK)d^b`o>2cQ|6ZoX+2(9c%_Wuv{*QbUIW-e+7<^f?NXKw~vRSj_nF&F9 z>|LjyCZ*k5J^S^q)cyazK3*elx-9DLw`V2)fnHZFag8WRE=o--N!3jO5)4KL29~;p zhPsAkAx1`4h6Yw9X1WIERt5&k9Ckm2X#lCTg6INjFf`CL0BSG{F)*_-HMBA^glG`` z>D7s%AvZrIGp!Q0hLk0rOo1AVKu+?>Ois-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LS zO4kSR^aDzhax#~3AwYi^TLQhJ3v{S~L2YF8 z6QBl3kafZNX(i=}MX3yqDfvmM3ZA)%>8U}fi7AzZCsS>JiliZmN{f8UZ64)gtGY1ARn0P%gf94(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaO Ss_R{#eg;ohKbLh*2~7axr4JPV literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mu.png b/examples/compass/images/flag/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0dec2a67f958370522b77399eea27c70f7e398 GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ#JzX3_G|uNv*q=2uP~gaOnSP-o3Nel+ zSaq2m6~72xvU&5?O&pq+fAQRkUMA?$6xP(cUSY%e{6 zitln3lZp-me7kDx9NE3<$&GEN_upUekk#P&Ro?}oOeKGqkK9jP;O?yp3~UC~64!{5 zmWA4J!GnDV4-Vd z83Oc&u_e$ex;)<_K`4t44f27xzP!9#FD)?_g7lK} jbMSyqD^>bP0l+XkKJVGn* literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mv.png b/examples/compass/images/flag/mv.png new file mode 100644 index 0000000000000000000000000000000000000000..5e600ffcd708bbdbcf0013aef67a07136b58c6c6 GIT binary patch literal 847 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 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/my.png b/examples/compass/images/flag/my.png new file mode 100644 index 0000000000000000000000000000000000000000..54b6832d3420b7974f209bb366a2d51f0e8db830 GIT binary patch literal 931 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHBdAc};Xq@+*XrCdHC~)-t^!&YVW(F50 zN!juU8uqg2ykXh;MQe3K*rL7CIy@0kOE(CrDk()Q=`d^SxZx5M`#|e|!-<7Et)2ID z&pKwW^3HtoXPvUeejk6F73nuO=F12>yQJyGVp9r^W%Tc@}mCLs;9r_ zTge?LO8)cXN7TwGcC~enoU8wzIm_H^r|e+-?#lW&{atmXf)@KP-6=0hTDqy4d)n3W z-zmn?DEr=o%Zm(>LSsiwJ)rC|Aq$*$L`*CetvF` z!saK(SOePs8bNk4YKZvz0=Yc08TwBEjUUBcB$T zne)bX@xyJ_b5}&^=9I1D+gvZtkijN&V0)N0m-OEIuV1I7ty=a=Jml(`3EyWm^D@*k z>=KK*xntsTVEi(umbgZgBp0P7mZa*Y00{;o0|QH4LqlCdvk)UAD?FcNF>6K?@XBMQUWG3q67p3cic=`dQNjaIx@hSPaiJ5u! ze_x%4SqHHR?jciM0}EXv%MhSHj4gp)(FHoxz@RoV`Uy~jB*?np{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{sKt<9JMWsc_sSIw8z7V9~mXnyS;F+ACR~&j?WG_&e2|`(X zXpj%g_2uQ|dTEKd5Tuu!pR1pfn53Tx(x{&XG^1F*P}TJ=P(OpGtDnm{r-UW|?onMC literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/mz.png b/examples/compass/images/flag/mz.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb8dcdf3b75f3d75e301ee9a2345b60a65bc0f7 GIT binary patch literal 902 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH_JzX3_G|u}Tv(28IC~@>-v3Yq?ZtlxV zPA%@bB_dY8Sy>KxUhv&rE-W6nrmv~1xUir|ppdgef4+m&RlTd8;@z2(78!QFtX=my zhVN6uhv(&fRh#;vuQvoA5D`e&`ae9&IEdl?ynAogJU%`tbemY(%f(23tzI0Lf5rOG^$#1Y-;}lAJy^k@;NKXY|L5V?lNWd2ys7;E#o1hE zMJ`9@#6=4u7MW(~GQ5X%U&^G(kizXmRDI)Aw%kFw}Ol z6?SIajr$Ypq*)L>|!YXH<>7-C>%Wol?;WC+n9 z`qQfuMMG|WN@iLmZVf3*KA8eF7=fJRlbM{FSDea_QBqQ1rLUiwr&petomr5Yl9{NN zUzDy7;^_yJCgo%%$EW1yCT8Z@|9y2HW*x*PxQ9%24J>qxEJJ|)Ft!AGMHlE$1B2Sg z=qEr8k|67X^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X`a+O` zTTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl(2QdJ TLRHthK>ZA!u6{1-oD!Mra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ9d%8G=Xq@-Gc;5SRp#=Mf@8!R(%*|8v zRz9`LXcO~rJjB7pbh@rxU{dSE#oe(kAuD*UtVlS!NJ6k;g2EzaS63k?0k=0>_?{^m zZMu||wYf22_U!r3f7Z<76a4Z^JWfo2ovVTOh67_j1EWNO1Ec6iYxi$gSDjkM#w>Aw zX%X|^>Qj3v%L^6feta4(d&VvM@S5%I&1c)qE1spte3afaM|9Df7b|#o#JGxBemN04 zXTRB|@4vTiJ@VwE#cieNL#6LF&7S_G^pJ+?k+A;mZ~-CZ^{3yw^k9mye+z1Dii?mce~Zm^LS z4O%os#{T2yD;IaaT;BOadr1PbPfpOwOI=+FZ>nl7b$6aGJ#pPqQ7B)*{EBt#<|P-al-r#-wA*;?w>2MR?wm>Q4=w=8(d{WfpMh z?q=NwXQ~&8KfPP6D70Mt`u*8iD|T9mR$I>w2uSJR%|4uPBYv6E>vZ+C3$-VOI;ni+ z?Y4b;a*_N+^K_%u9;S(5IUT)eiw|zlJ{;ON&5V=f==*@RXS=Pp+0CoB`}c6^{kPwD z?O8Lkb?ddLEoM?&VSGQLf4qG7cH^q42Pb~^U}OvUU;24}t^7X*hxej0dE&pm2Brtq z64!{5%X8O-xS>N=;0u zEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$KhX(n;Twh*Zu9udW o3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e0ONL#q5uE@ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/nc.png b/examples/compass/images/flag/nc.png new file mode 100644 index 0000000000000000000000000000000000000000..0c64457a3aa9f8dc03a9907acbb906ad1229fc09 GIT binary patch literal 926 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJndb&7O@xAmBsDAD%*`;W3q`-0vG z1kMu@^v>GYGOH=8S8aQipvF&#YHq>{t+#3Ew({wR4lX;!VM}9SdgeC!&mI*A1U7K7cK4R$FZSK$Duza_ET`~Xc zxr>8(ee#~A`4vYkQk`YL?`qfV7pyg#_C>6(UCI0BjM2>-w|0Mdm-YCvrP0NhnO7zm z$x5za>e>GJdGK+!tmORPzq(pk&lb;~dv{0K!;>fPzy0>wFxe<7^Z&UD7s%AvZrIGp!Q0hLk0rOo1AVKu+?> zOis-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#~3AwYi^TLQhJ3v{S~L2YF86QBl3kafZNX(i=}MX3yqDfvmM3ZA)% z>8U}fi7AzZCsS>JiliZmN{f8UZ64)gtGY1ARn0P u%gf94(h_qaNG~}*S3f5)Nk0>$Q9li6MzMaOs_R{#eg;ohKbLh*2~7apLty~` literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ne.png b/examples/compass/images/flag/ne.png new file mode 100644 index 0000000000000000000000000000000000000000..d0220a4882c2e144c007b74b70c686720f953419 GIT binary patch literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG?JY5_^G|u}@+?zEeQKaSh-M=ZZ6BHJm z5ED{y4A`)F>!n-wxDD2tg_Xrkdcdl&HIKS8q%6Aqn{-=z5a+)T;tyDc^{7XF6p zY<{P+AIKXpF-X5?Xyg-*`M`STAz%D~=O1)=EST@rFbM2Ex*_S{)sWxG8b-Tn)cBM{;W(f4O~q zTh!WRmo*zyIGUdPp03ju^!kn6>B-Y~F4?**MvwjW?2<`q|NNTy^ZA;YA65F}V`LYY z-fn)oTI`0&&dsxzpFdps&i<5XRMKwQc{1hZIdjv*-EN?o?Ll2 zT4s+`#GlxJB{#0_wmQ4+T$1?9xHQk-+rRhQ%kfJzu1&Kx?n<5NF*$8##kei>9nO2EgL&}m*ra%owASd}`Ca2~Vr!r)eloVL$>!;@Fm1kyW7Nn+RChFxE zrR#%u`T?a$Iho1vDfzjHnR)hqU!8|p2eAq6AyZug3tc125THMdErDLq1v=Egpf)o4 z2~dM1$hzSCw370~qErUQl>DSr1<%~X^wgl##FWaylc_d9MbZ#OrA5i93~r9T5TxLi zlbEjHnVg?j9C}`4FHo5YLRoxhkPpoD<>lpiX^FWIq?eqZtDlpYq@M}WsGkNjqgcOC S)%7k=KZB>MpUXO@geCw9WIO5r literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/nf.png b/examples/compass/images/flag/nf.png new file mode 100644 index 0000000000000000000000000000000000000000..5941921f6743be9c240ebe702e01b10f74a1e24d GIT binary patch literal 934 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIsdb&7n0v-b}!lxRJ_R$RkV+H--S zsv=*>%E>2AwVd-&vy!l9;4D--Gnb>q;84dyW&u;RmZJ;f53D>Drq|KCcgpRe{QLIL zpEpz#U3+fBUeWpA*2enH(!DyT*_s{S`|JB&eqwd=-=5yc1zbK14m=6j$=nPlr>1Kg zU!58BCBx!e(dp-_KVOcE%U!oGcW>aVUGsA09ARiEn5gD={&*z^W8jUSn)deps7uJZMv0c4t5;uSVq)^!KmXaR{?s{lR1{ezB`sQ(#jf6jc5C3zn{NVv5TZf!r&lM6hTQy=%(P0}8d8>g zG6iZd0y)ViGdVS{IF%uzq@=(~Uq3ZZuRJq5vmiAkGf^+UC|w`K(+?<3%E?TQPsz_s z%*?a@`wH$Mh)r-0nd%x?=o(pu0R3TX0rZM4(4htflV%&-0$L{tvMxA3t)x7$D3!r6 zB|j-u!8128JvAsbF{QHbWU38Nku*e6X;E@2gPWr-1Sz=XB&I8PCggOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wzp$Py8 CPh+6~ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ng.png b/examples/compass/images/flag/ng.png new file mode 100644 index 0000000000000000000000000000000000000000..00d8a20b0c32d97fc97f9b4e40ba6f7b0d45024c GIT binary patch literal 797 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI4JY5_^G|rb!+~^gXDA2OM*tUY1YvS#W z*4|!zrI()>t|{tIIHeZ)Yf2?={Gs*@8w`6}6ATJ|l&6^;RdiJH+j#bz(dUiA_Y)Zv z6yDk0m3=F($~ehJumAb|bAl{vXU^CZe|?x0yS#Xh^}W1%j^*YX*1mmu+&fTo>g!*} zznKP(3!|gf-KYT>tN! z%+vocaOJ5g1(E6A(-u7oZ8{d^DVF4B5oBVNvNv*Nyh_OR4--P==DriZ@RFzhRnU_^ zz7w_@U6sD@Dk$18DQ)4R$<33CJm)Rrj8NaO{ibzw{j+Vi`y_p88silr5*|K#eKxOt zdtKC}!=Dcyea_9)@L+=d<(e`DyVX}}fq|x4;u=wsT$GwvlB$~mBp8eg3@mjG4RsC8 zLX3>83=OPI%ybRRtqcs7IqZH4(*ROw1|6H_V+Po~-c6-h%Bl@=wZGPpVVLXd)6PGY)( zXL5dCap-xGy+CCq2xal1K|V0omzS68r6uMra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI?JzX3_G|tBcZp;c{6qvKOy77*t%)u58 zt<0XazAWBS%9qdEb9bia$9E6TB_<@! zOr1INz?BypnpzIca^k#e*2pHScaFhfn~X@t6d$+D88TC1N=~WP@0(+;ap1?rSxl{y zx;-p+UP|4$cygT;=bzBeuUL-%z9;R-c6I*DsGzA*;&3)MT+RPa$9?jdCS1u`wQ*O+c6aldZP__54^I=( zzyJJ8>7SU2w>MN>|1H~krN!xD>ST)=iT8H@vhw!7{B^RR?7527x0wp2CyS=-whP|X z@w~smKO?}4N6tT>L`YR-Vvkagz(hC0l<5o_1-lN^#HMim|4_fX_NgYrjf1xOhDp0$ zU2~lV3{%w-*NBqjqSVBaRNWLH!C+)yV5w_psB35zVq|1xXkcYxrfXnsWni$(VfRy* z29QcCh%TT8Ljzp{pa#Pb12ZdALn|Xghz8N0UY#f!a`RI%(<*UmNLlj96sW-n0cwy0Sr?q2R#Ki=l*-_klAn~S;F+74 zo*I;zm{M7IGSvpCNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U& uyu4g5Eio5@^pf*)^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$Te)-9X> literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/nl.png b/examples/compass/images/flag/nl.png new file mode 100644 index 0000000000000000000000000000000000000000..2379dc30a828d81591ab9959791950d7996db783 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPftbtKpw|~pp{=oa+$^CxZ4VQ}$+D`drB%0Y8yX~h*4X_!VzvVxr)J2B z3GxPVlW*KIxggekw8V;a0*m8>{a2!9pG|9iYdANBb3fPGi86b5{@$Ozg~j3U!=oo} zeti39YsRU$T02)fy5zfSN%Pv1XMa9z`2BqOb-VaIqOnEGt5>e@)1Pbd_T(?E4;Bk{ zKY82xbz^7I$)y{wE_vZGO}AJ7p~wpd_8+`Ia-9#%-}i~{rb83=OPI%ybRRtqcs7IqZgO0I9Ts=mKgmG|)8w zYA_5jFtai>v@$Y;Xb}DB)d{l!tRXi)B{QuOw}zA@pG<)oj6hEE$xKeoD^6v|C@Cqh z($`PT(<{%+&MZhx$xPJCFG|-3@$>^qlX5bX<5Ti;6EpMd|Gqj8vkqbt+(V|i1{S(T zmLWiY7+V6pq6>7WfkAC#^b?>4Nsx8H`DrEPiAAXljw$&`sS2LCiRr09sfj6-g(p*O zfQqCcib{);QyJVGeIZD}EhjNu!818OuQ>F)$X=i_6NIw(&>$a}>&wf__0ke^AxJMd jKUY5|F-boYq)|T&XhyMqp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHNJzX3_G|rb!+?y2=DAIa;=l5F?9&Hzs zCiQffX&$-c_CfWHj>`t_WgRy>=P5MtCrnn#O*j$E!6>R&c1+M@hEfbiX3@1<)sc53 zH(XdB@g`|={f|@pIy-XX>wi5h`u}fFuCNEgfq)n5-!Sx)-DBAB_uJ1b&D1|xw-r66 z>CD9I9{l;qeIQc*_N?=|O+J^FL~afX-*)+B67!)jh7KQwFw>`An`fDN zUZ0iX%=O}$vX|yzPp;c>mNS0FPYE*9)ARcMzEB(LufFZ70;u=wsT$GwvlB$~m zBp8eg3@mjG4RsC8LX3>83=OPI%ybRRtqcs7IqZH4(*ROw1~Cp2_)n#i8d#_5zieAe6<22Km5TUtV6WmzJ0dL3+vgx%xSYN&1-} bjrwUoGm7;KRbB4_^)q<7`njxgN@xNAsANBI literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/np.png b/examples/compass/images/flag/np.png new file mode 100644 index 0000000000000000000000000000000000000000..38d85088cf8b9ea3a98a1cc80ee2515956717652 GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRY!3HGPMlP2IQY`6?zK#qG>ra@ocD)4h*^<27 zU4S$Y{B+)352QE?JR*yMvQ&rh{l8=4QC4X$rK2QN`26F+}2WZvR2; z!-Wh-?eF*Y+%$;td9!4zimRoC^@Q%QTPIK6-x#Fl{gXK+=E%`di;SaN zAJ6)FyKevcV#nOduX*dg+nqnNH2y$ukJc#e&yS_&)PrwnCG$2b1&C9miV>d-@>Q%YL7Ou z-ff86968lkGPY6A@%Vy(l)y;_4;PAh>IMj(REnJ7%2fAkALECKE8frG+i(vUaH=J) z5hck*sfi`2x+y?{!N|bCQrFN>*U&7)$jHjjz{%(#Rz`*p4Wd82I#D#_=BH$)RpQo=vgDH~P=gW3Nj{m$sd>ez3>hUQ z1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2pRM)^l z*T^yi=nrE{pjUK(4mB{Sjf{Q*)F276E;v7}q&%@GmBBG3KPgqgGdD3kH7GSPrLyp3 zstr()G(=HpQF1DSo1-rTDY)e%rYm?R=jRoNo)_5*RAz!u79Seq19N?OdAVL%VlD*f lCFker=OiZSXM!~9rvc3<)-P0by$jUO;OXk;vd$@?2>@{~D}?|6 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/nr.png b/examples/compass/images/flag/nr.png new file mode 100644 index 0000000000000000000000000000000000000000..5424a5d5ca594b7fadae77eb13b45dc451d49129 GIT binary patch literal 850 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG?JzX3_G|q=kH1rN<6ghhSvbl%ABF7)> z%_T(~QBf^R^e+f(VOz_W>#MtN7pLFD^a*w@Pu@IuBA}=`MX)L9{od;Hme(JCoo+Md z;i12=JLX(Y_#}43{w7D0ivU-H!=LAJ3EWB9&v_Y6>v>G_jWo;j@|^6Yxzhi(d=$e9 ztKYSn(^ax!tXD?68?AiW{@G!Rfl7dDq|wU>p6a$sr-lT~WLk98_T0GwvB+MoP}S3u zQaqphSdenj^+Epcw~wD6-70Q5C%EORL+Z3hzuBp`BA1;l%X^s;`1aK5^!MfJ_v_EC zwXZCxsHv*7bh>?+%p@Ef&nXZAkm4U%Bhuu$M8bB(oAi97W3=MP*fEo-#49u)d4Xum}AsR$~ zdUc{`$jwj5OsmALA!W%YQ=kSTkdu5elT-7GQyDT!N(!v>^;7fo$}_Vw3sO@u6ZP_o z()B?+{eaS>oXq6-l>FSp%sl(Qug=4)gV+T3kg2YLg|3lh2+$wKmO!uQ0v&2#P#YQj z1gJq0WL7^73-Mw8UHp(o4?I)z3*x($55G)K3GNQLJC6 S>UtNbpTX1B&t;ucLK6Tb4mnZ) literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/nu.png b/examples/compass/images/flag/nu.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6ed5b26b67b012a3caf7808b5a39bbc6ed3ee3 GIT binary patch literal 925 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 Mr>mdKI;Vst0Gy37T>t<8 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/pe.png b/examples/compass/images/flag/pe.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6677cb66a1f0b14a354a75bedcfe4b8642cba2 GIT binary patch literal 720 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft>T6E{-7@=UXQp%ylvpaGC$`dxJ$mgWZc3 zzZYF@8V%V>QXYEuZqAkY!yM1)D9u&`yLnyANa|$V^!$J zn>QL}?`@m<_VP)=X)+%Rclt2g$bX+Q>1AU4tFq$veHpv&{%JbB+4|A)+hy;W6&59E zWz6)L#_@Bz7{h1zDaudn8@|YDrk=d`pY4`$P)oIY(fjp{9TOv&BfOOtDaSE$O-V6o z2<>=#O;E$VdF|Hpx$TEvnuQn{Ss5BwnV9Jsm|GbbEOXfX6s7^B(h8yrsKL-c z*8r%&FvP&j%GA)x$Pl7I^ru%RiiX_$l+3hB+!|7rd@==UFakNrCo?%UuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z%sPloa1WX48d&HW zS%v`pVQc~PiZ0Nh1_qO68{7hFkOWy5oS#-wo>-L1;Fyx1l&avFo0y&&l$w}QS$Hzl z2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8xxxT!-TrVv#7lQPX k^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIyJY5_^G|q)@E>QlB$r2i$IX(A|V59!)Mj@$rJDH;0xw4{`}xz zi`jx7&HtZkTx#+YiLkI?VJP2qxhKn@G<3x-j!;dfQ1MC&Yi}8j1vdLH@T7?>oY`G) zL__al@)D1r_3jEad-k3^cb1XCQ;6e8?XL={G_Byz)=${n3-}ekT-x&F=XaI{hduRQ z{eHP`KYV)km(Me5&hl+y@`|)Bwv?EYZT_|`>h*U&7)$jHjjz{%(#Rz`*p4Wd82I#D#_=BH$)RpQo=vgDH~ zP=gW3Nj{m$sd>ez3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rB zp8elf=V8`CY=V2pRM)^l*T^yi=nrEHpjUK(4mB{CG~3`7P=h4My5Rh@lJdl&R0hYC z{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJrJY5_^G|o@$+n6oPC~-7?lJ$h9E2a~y zN_HHqS6C3hv!io1pOd&I3sa!E(qxV8A^mIz#N?QuL&AksY9>!VNA z{onhl`JO*`_4xShy8d?W1Lh754L{hKR5!5HG4F3sexUwAHiKcu{=Kz=CsuKVwsKS| z#Jr0roVzq`2iK|Cl#To6GyGt@``7Az#}1*5PD)NoT;?t|%DTEGz3S|-TT!egj3HBP z9x3>~-x4*MV`k?Sw$g(oi>_n_pH~t78Q#HBzJJ@!o%defHLG^f%RJ@F?{nU_ecAVA z`#N28RXmL(c-*Y5{lCxq^84@c%&Ns(&ddAA`|iFHeYx_o@#JdOEes{QV;Lr&Y*9IR z*k-=G{C*SW%42Ij_F1J?9X)pP>eHHgEE^(pjy*1noHl8bj&|3fGkqtj)1se<8{4XQ zP2bJT$xyCtDZ`h(`DTWRk@2L`{fhdt?-s><&2U>F=8?bscI7<(<(K`I2g|PxzjOC) zxw4&WOuxs+`8zrPFxt(tlxBYuc^numswJ)wCCNppi6yDJDL{h3$iTo-*U(Vc&@9Br z$jZ>b%EV09z}(8fV41`2r!Wm5l~xd4Kn;clx&}ZEh9L%KR;GqlMurd#qCdSlQ8eV{ zr(~v8;?|I|dBv#=86_nJR{Hv>d3xoU*_j2YDVd3S`9J&% Mr>mdKI;Vst0Q&z%s{jB1 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ph.png b/examples/compass/images/flag/ph.png new file mode 100644 index 0000000000000000000000000000000000000000..b2bdc9ae0fdbffc4194988ace2aefdbf9e4413ef GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG~JzX3_G|s0^+?YL?QRIkzy#3Z6ktYL; zO}#~1wk_y*aHD=fcUkG%S6B8r|7Tq2sJ%o%@Yc2)qpd$zaw zz05u>$NtAV9+qD=Ei1EHz1sN!JA*S|VDa1wiEhTb)Dv9OnC3V3U5SjDaqGs8eOpYD#ge@@OZ2~X zoZ)J#(fIy=`pd;7VixOGt)4ym_T9Bd4?ky)y6{rWG21OjAwNV}+tFxb_~a zGOEx1{n6KWXSNde{Qb;RW=?pvN5km1ys>{s@OFK@TH;l8=ESoDtcJB2{?&W>B0Qx^r82VeyrAZkW6RIVy5hck*sfi`2x+y?{!N|bCQrFN>*U&7)$jHjjz{%(#Rz`*p4Wd82I#D#_=BH$)RpQo=vgDH~ zP=gW3Nj{m$sd>ez3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rB zp8elf=V8`CY=V2pRM)^l*T^yi=nrEHpjUK(4mB{CG~3`7P=h4My5Rh@lJdl&R0hYC z{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIQJzX3_G|s06p7n}O6qz%-dhY}^!Ax;g zUl#6JN_TIp6@A70gX0nRjak$?k?Ok5xSotVHl<7_(PlgxW{m*q}JBtBcU zj4M>QFjUx3bo#k=zpxX>CGPGue|NVny12We*X#4|vp0{ZiCogu`+T)hU@22f17@1eov}6=+Voy=t*6>9!Jlff1i#0Kd-$e z#w>Zr^Zyd-H(lK`93~$8%h*^VSJodkZ_llYeTE#(itXH6TbuLQkN-_BZdEG&Q{Aa& zVzlY+$JqKC@%7u{&aSSG|L#{m-!FGnTDe@;lu0Tp!(UC^q7-;!N%6It_V>-VD=5zO z6n`$JDe;EgcmEDq?wvpV!|VM`@?!rv>KWTlIrN-1Ig$*FCDjtwh?3-@)Wnih z-4r0fU}RumscUGcYiJf?WMpM%U}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO16>242Ez~o zGb>X=D|_tRu%vN literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/pl.png b/examples/compass/images/flag/pl.png new file mode 100644 index 0000000000000000000000000000000000000000..d461399f30e99494aaae64a04e9137a718e288e2 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft+2QE{-7@=X-k%^PC)cT;?ZcR~?zVli9ra z+4luYZhou^%K3DZ-{n+B&dpEKmNol7FOFKhYQepgj52%;Zy64-$$XP5yZ0hFQtJMM z`Rx0HT|&}+tK0gAUgb(!+WY?rZ-6NCqndAYOtL-nzhD#zGQ0)3%c;u=wsT$GwvlB$~mBp8eg3@mjG4RsC8 zLX3>83=OPI%ybRRtqcs7IqZH4(*ROw1Ois-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR z^aDzhax#~3AwYi^TL8VH3v{S~!KB#+w}2WX zLDmK5rYHHB>hZ~M*TFP8O8dAs;+l| P`WZZ3{an^LB{Ts5ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85o#YJY5_^G|rn|JnucZP=@`(_wT#U-eG%u z^I2N3pxd;R1+h*+M%~j`0+pNe9;&YJE?eR37~nX4frgDsV?g45Ke?uJfh8{<_21B# zc_C-^IbZqjzmI>e*?<1?&$3rv_4nNPrycQTzMvSd>a%h?TLzwn2DS$*B@GPx0n8Q& zj87u^&u>|OZ>h5Ic7ETR3t!x*FcItCQ~U4w%egh*m7ZVolbipdvSxkAa${z8x1iPc zEd@0-5@(g|opyHHHRH41!SYjL&ZnHddMRz|6koNdw{E*;+@GSx(Ct4hj;%QRq5a95 zk2Xz7neFpAH0Ip3l^d4^IP9JiU`?=d@Jt<4+L@%~Wj}IiFr0mA&tNy_vny*sAV6#4dg zr+A_WWVcda+Nd1l??HaY$bYyWp=cJ2sVRb~<`AXaIe?H0T*%3_+w+~}yf z6Py~~@}??VUNu|dD_wd2&hLvc=eEYCY~?atwM2a9rq=7h?D>p`G8wl$$@8C|y?%du z@uZ{IJ_(<<>)YmgY^DIyGER1L-h(@wnM}8_hA{Beu&ztw5@=xLX!y^swt%UGf%m{? z{+F|Ol8@RvC^AD^o)&BO{0g6~O=z6b-rgDVb@NxHW|OyjTI$ zU<7iKPiAszUU4czMoCG5mA-yzo?dxoc4k3pN@k*7eo?wUh^HS=nv|279G{Y(o0yqr z|M%5-m~{}F;2tv7HL%b%vJ3(G!`K4o6zHqb~$0xaB0KD|ja7=M{&Z7ugF`W`a-_ z9~$HXbA5Svxn5dgE(GZ%=jZC@Bqr%+f;8%<0nI4ZFI08C3)Iix>FVdQ&MBb@08(I( AasU7T literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/pn.png b/examples/compass/images/flag/pn.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8b0dc9360cebfaf8ed510b134651ef2a8c05ab GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH}dAc};Xq@-G=$kDZD01v$ak|>%Sw5Gp zEL+mHCH9AtYjaP}h;Ra4`c)#vs;Rubjnudn;ves_M1M{mtctzPx0=zfjb)n6?*e=gZqx!ocy z?LNZ|2AKwi3h6iJ4#)d1S9+f8m)Sj^CqmkUi&>( zZa%!}{VjvlGcHc`&&gaF9T8WX|DZhZ%%1w)_n+PhJG^q<>+)w^zRF8PiY-&w4>^4` zbY(sMb(PqT8&mAK`y!l@FIm?8jWzglcfI*~zEr>1lS~t``j(yNVXIayy6F35!?BY0 zzK_p8Yd`UV>%Hdnva;=8lW(os8Sb+Gew4iC6R|A^&O06YVtbnJSZZwK_I+HD3mY$Y zpFe#}V(S+%*|o>5dS5JE6)CWd>A=?T_0JzoKdwFXkdDzJ?pH5{4!zB6V{yEcssZaj-YWu>cLGlcl3^Ja_7BMP0Ith7+FnLZAXu0?2RjEwlp@FUeP=jHJfti)5p_P#l zM1zW8fC!3)-29Zxv`X9>LVaGW0BSG-Imst8IW@01l_8^~q`*pFKQ&LUJTp79AT=d3 zQ7^wJT_42L4=7E_$xMz<$O9Okh)r-0nd%x?=o(pu0R3TX0rZM4(4htf zlV%&-0&0*1Sr?q2R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGSvpCNE)K3v?w{1!OhVZ zf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U&yu4g5Eio5@^pf*)^>Y%F^fN&k_0xc6 W6zdnNy50rqXYh3Ob6Mw<&;$TTYIkM; literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/pr.png b/examples/compass/images/flag/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5b2687552edfa8d813b47257e23d3760dcaa62 GIT binary patch literal 908 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ5JzX3_G|uNvJnuavQKa?!@4f3E_s=}o z+c_c1gJo$#$FqI^8vivYG=((<+-?(FD|%;Z?!{wfn}tldVtl%~CoF6=(c@~H)!Nbe z!2EOV_kG`YNSKPt%{zKGrh@M{V=sS&L2DWN3C7(`Ok58h1t>5w6>N{Rlyb_|y7{(n zX3E5@kc|>6Zyj~MG_R%bK3$-_w)bw~A*uUYHJ6b;7`~M!l;HBY5cI{1mBPl6)|6W54`{~mx%+5WjzyFz`;M~@4 z-p;?HLk(Hr=m5G_Ifw`4|!7_*4PhlEBDy<;8fEo-9bPa$S3_}detV|89 zjEo=}R0IP=P&DM`r(~v8;?@xA^I`>1gAvF{KAFj>dBv#=86_nJR{Hv>d3xoU*_j2Y zDVd3S`9J&%r>mdKI;Vst0K*ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIqJzX3_G|o@$-{{4hDA4l!QKl+K(qtt8 z-hCaR0RlmsLI?dmu0em6Y{@%&b`SLT3F((jKi{j8?9Em5hPJYzio>d`sfwdjQGfs84P595}*{#VlyeEaP_6GQp>KYKpgaT>K9 zeo^-Lhsr6bv}yHikH4Nhd{AWK@igsk-@Vja8CF;bELqNZ>~WIa(W=cRyb4NpY|9gl z>72M7I?wF+iq$2xjuVrD7R|QQoV9x61|tiZCwzO(+VVROW$F8Se0!PM804QU2r>Me{@)T9cB&<=5hck*sfi`2x+y?{!N|bC zQrFN>*U&7)$jHjjz{%(#Rz^k; z4Jv{GA}AVi^HVa@DsgKF^?9)ZsKE&2B%jRW)V$(UhK!Pu0xNy})I7cN%L&q++u&je}IPXn4! VtY4_=dKajl!PC{xWt~$(69Aig8#Mp` literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/pt.png b/examples/compass/images/flag/pt.png new file mode 100644 index 0000000000000000000000000000000000000000..f48a3181a15e98f5a1b1fa388e0eaf7aec95dc9c GIT binary patch literal 863 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 XXhyMqp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kICJY5_^G|uNvwCxHB6lrN*kAc)JkzghbseaCr&jy_l|s`U zz27l)YgVnYvay?`V;IHu?eom}`|kH#e17ouMgR4EclRF4Sh@SS#QFU-#_#gjKCr)A zTb*|5{fjfeKvgYqjVMVjN=+v@$Y+XiyOh5JAz9o1c=IR*73fsLzWPKn+G9 zC;4P1r{)!>GGvsL6jq^4vh>g5-u>w|du0i{VfnaS}f`MHUidG>!_ zorhTmu?g-WQ(XfKT_ej7pg&9ufL_rBI@G{mMS1F4paw~hb;0>*CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xq#=q*i;`0r+#G!&NWm>9Fs_FJ22WQ%mvv4FO#spkHgo_0 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ro.png b/examples/compass/images/flag/ro.png new file mode 100644 index 0000000000000000000000000000000000000000..4941caff626598a85c62bd74436f3899d74b6258 GIT binary patch literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHvJY5_^G|tCPH1vv16lmRF{n_5LYPN#d ztz8V_lMbnIbKXex2Oh z%kwXIxoq}Fr}-E6qA%_4*XGZ4?)tJ37+9($t`Q~4MX8A;sk$jZg2BkZz*5)HP}k5b#K_3X(7?*X zOxM8N%D`Zm!|tar4Iq_P5M4kGh6cI@Kn;c=24+^KhE_&K5DhAV0U{_Ga`RI%(<*Um z2=#ff0;s_V7^73-Mw8UHp(o4?I)z3*x($55G)K3GNQLJC6>UtNbpTX1B&t;uc GLK6UKc^7j4 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/rs.png b/examples/compass/images/flag/rs.png new file mode 100644 index 0000000000000000000000000000000000000000..9108bb58d00ac40b9e1ef0774b717e34c0a0a2bb GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQk(@Ik;OpT1B~5HX4`=T%L*LR zfize(!`BaKkqius_MR?|AsXjPC+ziN4isoTpO!Bsa=GJ&u&I#Y%HYUbTCapVB7U(& zu~;9x&ar4h7|T(kD6S?27L}yM8jh;kvqcNbpGDkxvq?d2*$m5?^mnOq(j6FCRWdgz z|NG(Au<vmI%L7>w3@XVr?#Iy?{p*B!DCX{_VBr~ zdlp=o5pqCQQt!-M$*cGE6K=5j=?d*5dk$H2-d5W=u^ z=Aqn;DGp0DLL5wmCr|wxe5CM7Uh_8@A0q~i0}NhV8VmMqUw7!Sn&)~8)+uivIVwyP zZcDVfvvy55-?yoI*1x~1cWwqp!>X!z&wuZ`{QkS_@r{k|&mF$}aAKEVelB0AxK36k z!@AdOjt_q9n}7cKL_tsQl$SAj>R12?f)!~pWXSd_5F8ccVM`xmbgZg zBp0P7mZa*Y00{;o0|QH4LqlCdvk)UAD? z^z~Eo^vW}{GYe8vG86Uki_-N$JpF*uq@2v;_>}zI#LPVVzpu{2tb^DD_mH`+0nkl` zA%l)Y*z@>APKTAI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ84N#FZ zL{Vu`aw>zHqb~$0xaB0KD|ja7=M{&Z7ugF`W`a-_9~$HXbA5Svxn5dgE(GZ%=jZC@ gBqr%+f;8%<0nI4ZFI08C3)Iix>FVdQ&MBb@0F6)}aR2}S literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ru.png b/examples/compass/images/flag/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..f10a79333fc2efffeca49f408ec88dcfef765721 GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft*jCE{-7@=X3jQ{SE~R9I5C3Ct7CG7IEQ5 zLVsQug{EJIb7U_uXjCoe)&$2c(+a)DCGrq!l`Q=Sf zwY;-^ZS1GN6|>fTG9~C#)cU_Qd^z~Eo^vW}{GYe8vG86Uk zi_-N$JpF*uq@2v;_>}zI#LPVVzpu{2tb^DD_mHWsfrYM-WeCt8#uh-Y=mH&TU@&R6 z!7ZQ$Nsx8H`DrEPiAAXljw$&`sS2LCiRr09sfj6-g(p*OfQqCcib{);QyJVGeIZD} zEhjNu!818OuQ>F)$X=i_6NIw(&>$a}>&wf__0ke^AxJMdKUY5|F-boYq)|T&XhyMq Tp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH{JzX3_G|uPt7Iss;P9 zrq8o#`Kckw$jGAM!O`gSrpLgkqK=s%XZma&PSxqrnO>#c?x)4ie*E=%@8juGpTC{V zpRU+gB$~0=r*ihb;vXsYb|txe(+Ycj$2L3_@>+1l=~iT#<>@K+*S!0e_+N}Y-#=f` z#K>j4#uOW4)$q#Q$@`8RT-?82L;t(_n(J?$$LlO>zn0!yc5BOFKa00hlKae}_iy|4 zFE2)h!R+1so`!U_f2;S#@7>d`xNz$h<_AA7?KE?kt#a&G(%S)FTX>V2%*?iK= zYID=nmAmSe-m^b^fYWdL9s|DiqKjR&-?cWYTNitYS#Aso{hAycvGAeU2G&PsKKHOK zh!rvT!2e@s#zB60wFY45s+PD$lq46WCYGe?rT_^BBLf3VT|+}%L$eSgBP&A#D-$za z19K|_gJll8pTabNR9ZoF0W}yJ=o$bu7={>_S(zGI85uz|s0ap#plHa=PsvQH#H}IJ z=fw)31|yJ@d@_?$^NLd$GD=Dctn~F$^YqFyvoi})Q!*3v@{7{-K|K9{(xjZsohY1ox1su7QQFk!1+bAI26yujm3DYG5#Fw!tl+21$^0!TD(=<%vb9 z42~)JNvR5+xryniL8*x;m4zo$ZGeiTA&N?il2aMn9DN~3!7V2-UBNRsKd(6SyvSal zG82Td_|PC9nCr{S%k|O{b0J7CIX_oFCoxGs6Qof;4QNKOexa)CU7&sjPgg&ebxsLQ E04*gh8vpra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIgJzX3_G|tyf+?y3rD01X^UCQR!2b2oC z8w}l?vet%*UUzC3zcynH?*Pf*dXi#fOEzFr%%>yma=`{TpY-j3fF9}Cvsn(Xm$jpM;78-9Nboo2-5 zo0g{{y{&SZzn|KY>G^ML@~#@`F_o}wzn^0) z!Zq3QZc6m`?cesl+5PAH1qLsZ4-bm!XFl``dRNpX=U4druy^2U@9Pph91N1z{#y#^ z{#ze!P-QOO`J9m#7#FG~t`Q~4MX8A;sk$jZg2BkZz*5)HP}k5b#K_3X(7?*XOxM8N z%D`Zm!|tar4Iq_P5M4kGh6cI@Kn;c=24+^KhE_&K5DhAV0U{_Ga`RI%(<*Um2=#ff z0;s_V7^73-Mw8UHp(o4?I)z3*x($55G)K3GNQLJC6>UtNbpTX1B&t;ucLK6Ty C5=$}w literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sb.png b/examples/compass/images/flag/sb.png new file mode 100644 index 0000000000000000000000000000000000000000..118c5c7dca4d6c1bd184cbced44e3d98b26265d9 GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJPd%8G=Xq<2Db@Z5=D06K7*7v_XRPP*W z;?(61V|VuCX*udACK%X$ilZqacF&WQ93O)=WK8D^WRZYBR$K}r{`Eq@kfy>c*mnRS z%I3p|V_$ypzaF}F+QnPSye}tilb>y_Z*PAkJ|=Q|{`5C*zOG@7__~Xe?e8Mr^6%Ty zf~S0PsR=pv^2Y4q>xwD%U7&)xj13g+eXEOQ-tk5Z`z-K zljYR<{cm>!mt@`$+kRVV(bxOz*(FPadUV~tiS2iux3~P0cKpl0m)mBGsJ1QID#3eT zSH+Vsje>3E^-qIszpVJvnuQn{Ss5BwnV9Jsm|GbbEOXfX z6s7^B(h8yrsKL-c*8r%&FvP&j%GA)x$OxiAMKC}FMMG|WN@iLmZVjP6FIE6G7=fJR zlbM{FSDea_QBqQ1rLUiwr&petomr5Yl9{NNUzDy7;^_yJCgo%%$EW1yCT8Z@|9y2H zW*x*PxQ9%24J>qxEJJ|)Ftz}CMHlE$1A|Gk4Q>H7NP?^j&QB{TPb^Aha7@WhN>%X8 zO-xS>N=;0uEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$KhX(n; wTwh*Zu9udW3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e0GjxG-~a#s literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sc.png b/examples/compass/images/flag/sc.png new file mode 100644 index 0000000000000000000000000000000000000000..d108075253253f06686471b54ab0b3ba41495eb0 GIT binary patch literal 941 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJXc)B=-XqNv}%VHWIr(!b?3>EjK?EvA8fqudS1~_2ooUdH_jo&n_Vs-_7aO*EPeo!z=<@2Dai8;zW4)9W zwD12rWZvcabm!+aArZ9)HZQL#vHw?-{U_(j_t)9KvuE!&e_YdZy`$*hsi$9G|EcTl zpWOUt>a&wM&#y0Ed-rSaJGb4}-^qVFJG;62^TyA7>H;>t=YL$@R$=_FOV^}-oFBTABsQWHy3byI)@gOP!OrLLi&uAy0ok&%_5 zft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfet&EHy8dL-WL{K#3=BH$) zRpQnV>hod+P=gW3Nj{m$sd>ez3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA= zW^#N=er{rBp8elf=V8`CY=V2pRM)^l*T^yi=nrEHpjUK(4mB{CG~3`7P=h4My5Rh@ zlJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIUdb&71Ef063V)P(TZ8@_^qPhCBZOxm)0QFn(%$0G3-g)Sp*O=Z_0gYt!r zPTOwGe5yBx$9((c&wtK;ey_x2fBpXYv{`Bm#)qdaylu>}Q}Dwfr3p<66PlPVo&K>= z$WP6#v^7jyRM&FO+w6RX0JYuu8rjcvSC!sm&=e5V4NK{LeeGk%^$Rn0{`EU0G5c=t z{gCT2-z-bt1|*+lTDh__CT>N|!KhjKZ|-m3xPS4%g^e?J$EU~5sY-ir;%3Ex&lz9J zOS<&~o_4gax>d$LzhCdvroUevonscXH(oC0C3`(+RnGF|-h2}_t)3e)aqsu%N!8cm zvpBEr>ODA5;{SEq8IqN=CraPhbdPoQn&ysLe>|)VKX= zJ*}`(!INE6+Gn*&-8z$P?e}9cqO5&Xg+C_WKC(SEaEcI@0=vh_RPQIJr|({LHc{VL zy!GxidtJ}kJ(E6IZegE0k$>Z^$=8Fo2{){JT)fWeMdelD|Ka!Np4j@$hb#7Xa>m)` z$MSprCOy0M_TQPk&5dX66xNp7&5^YbOif$3BRgTKYpA8k&U|8Ce+`SecmV8kk!d7%X$x{S>AFq|yqa z3#h@+K-U1M!7#+Y%*xcz%E$zw!Tn&W9*TzC{FKbJO57UE=G>hG)L;a1l22xGYF=?F zLq`}ekN*Gw literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sd.png b/examples/compass/images/flag/sd.png new file mode 100644 index 0000000000000000000000000000000000000000..968716c829b847420a391c77ed2e58946a69408d GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHXJzX3_G|o@$-{|F3DAHbkubMOXi zj-L#=y^h(rc8>Z1(atWxtd6`}zp?20I%NmsKM=NfG2yO~sq3Hl_brz@8aGd~v)lKQ zy}kLBoJ?`4C*!gMEE3G~4>0^-xYsDNu5feV&i@u283xU(f)|zuE$RLd3&x-y>CCDFu{H-02w8)c!zeXVlpSmKN6cVVe%SRc);mt2}r24|_CAVb0q!7Kd2L z8@gZl=Ji=?C+kn2?z4AJ)hr-f`DN01cZCcsEu~AIR_grjzg`~_YMAM&aK$5e!-jRQ zms>BlJbu5r+}PXU%s;JtqWWd}i!!gw|8n-s-Sk+2;~xtwd=eIHzM!2_9{G5ipc98; z$B8{kLQI-VuD$*mwt8wp%b(X-4|fK{uHLj}$r%MpZO^}K3>#YOKeFb#`ImC<@pA)) zsA`F8L`iZ{YGO&MZVHfKFfuT()HO8JH8cw`GO{u>ure{zH88g_Fj(fW`zcHVNTn4- z7f^$tfvy2igJFn)nU$%bm5~udgNk5)2#SW>{FKbJO57SkeO{~pYA^yh$tN>8HLp08 zA)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH z>Ka(+8d-(_{b6hY^olOfp#}z%W*giBYLEn37o49~Ql40p%HWuipOmWLnVXoN8kCxt zQdxL1)dr|Y8ltGQC^?nE&CwTv6x?zW(-l0E^Ye;B&x`B@DlldoJ-UaGs@O1TaS?83{1OVR0BJ}_O literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/se.png b/examples/compass/images/flag/se.png new file mode 100644 index 0000000000000000000000000000000000000000..a3eee573af7b4f8f7ee97066a633420b71017a9f GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kISJY5_^G|u}@w9mRyD01Za?tdn(E{=g5 zLM+7$-rCyS8wKAd2nuX7%2U=5n`U;as@0@vsVm3@l%jCZS zBSX=jVoi2+cTZ)jKi`%=T^6Oa>PcR1{C$?Jrd($}f4zU%$4z^$PTD+aw$`c@+oIUA zUNAg9$5c8+An{J2x@>t&;oP<_H+KB}efl5^Q{bhKQXX@Y(%*JTFYDxVJ2b=d;Pb}f zd0o{ze0lEF{>%CJuq9W6F27C> zO$pQ$U!}-boOaHv;W1~ZZ+`6E9IokkioD;yZ9P3@_A*!ZO({1U*tgC5C;#dA@mc}3 zyf^pQIj;QT5in@je`jZ9hue)n5nv#zmbgZgBp0P7mZa*Y00{;o0|QH4LqlCdvk)UA zD?C#5QQ<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE1-G2UbOq1k z{Ji4O^CEkJ%1jW-;zNUcV6HDOFV{;;%!MGmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJVJzX3_G|u-+0~&z7(^INZF~ z7J0>#k%{3)G801p$D1?HuYTNkHf_(|vw!WbzuvJcs72|)IgXv$PVdSW2QmhH{asfn zIoZ?F@+MFF&kqJ~-~RsM^v-Cy^w}qIvN9|I3@g^Hj>|8uKmW1f^&1~S{pZh(me0PE zqG!DG@?3{ft}SfMH6<*X>+);Ns%86U=j<|Fb>_vq-FJ^)T_v(0PAA7oRLDx!MSJ`0 zo`&kO{3gMPHkaPzF-}^4edpzgDjZF9>d*gdi4kM+oW$}c)%-RC*GaA)=NTDXL?+EQ zv-8k=$juq>`7Be>=Rar4n-1nT@Cc<`ZZLn7;K%by^?p4t{8UR^BTABsQWHy3byI)@ zgOP!OrLLi&uAy0ok&%_5ft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfe zt&EHy8dL-WL{K#3=BH$)RpQnV>hod+P=gW3Nj{m$sd>ez3>hUQ1y=g{sd;+knc0~I zsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2pRM)^l*T^yi=nrEHpjUK( z4mB{CG~3`7P=h4My5Rh@lJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHZd%8G=Xq-2_XzwwlQ0Dl@^Phjbm>ZrU zuQHtwJ2M2Su=H#X}Ih{{j zCNH$kZ$7uj{`}{^-?Lv%GvD)Ud-#pg2iHzsOwae)xw4qsP%q_uN|_pef9$(>8HTI| z1{Mhi2FAwevU4Qt^)~NqFFRwSxNZIKzFh4ZiSpa`+g(GCuk!IbawWt?{{Ft_J6$I4 zHfp->Iwd^uRgh-*+UXV&pEgajNNW}B4t;%Nli}3e)%F$Xv&)w6j{3JQLSW~zmid0u zn}0cNwT!zO^(0=lW{2L+HCo=2Gk$XSyWi7vW4ylZ~xIxHqT02{dJ`r>k0M~ zD>qrh-waMOdp;-KY0VLvpN~CuD7I{Uw%m9TQvgFphoN?-k@jXm?ae~kn`{5wCK3ZELf9hMqSlFDA{n0#5JNMxhOTUBvm&BNH7=~7+C5W8tNLFg%}xG85&rbnCTjrTNxNE zbJ+b9rU9hV3Ze_B!O%e00I0z*#K6qT)X>Vv2%~Cp2_)n#i8d#_5zieAe6<2 z2Km5TUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7`njxgN@xNA&YX7G literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/si.png b/examples/compass/images/flag/si.png new file mode 100644 index 0000000000000000000000000000000000000000..3e35926bab558277a66113441ddb9ff7231050d4 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJdJY5_^G|uPtY|IKt6lgtP|DOMpSmS~O zG3$+2ymZ&ruyPB^J8uZqVJg$&Qo6CiwaPlWmRVYQW2b9GYs=ZayZ$^sBiX&XE%cAX zK1*Zf;A4eH*tV(Xw+W|&Gi<)8BfL6v!IL*7{0t|~#BAqnOI&gJ@$vKD`Ni7zCVzjJ zS`z!OKd9^NrTqGuPcIIA+?aRY=JTt!NfL)RPcB+H#b@T0Cv%IJ$JzZ2cwBJf|F&KA zZ@qJ3_m{u?y!N`ai~r7xIe8{8ulXFiIO#w?S45|Ib@%4?-;N~A%byt%baP5B*F+H! zhL}dFclW-B-=64dJh>$JIup+pjcn->_A9%(t<8_IpMKi7G{flsjGko^?xbi+MBo0L zUJ>~IQT6}Vlk4kPXQphMws!5|lWr}G*677Cu4?Q%R5MRSM8Hu@NJ!1QW5y{5NydDU ze{%mV8GrD`b;KB+&aQq93|`d|*NBqjqSVBaRNWLH!C+)yV5w_psB35zVq|1xXkcYx zrfXnsWni$(VfRy*29QcCh%TT8Ljzp{pa#Pb12ZdALn|XAhz1qG01*@ox%nxXX_dG& zg!;T#0n}gwa*|JGa%x_2Dnmv|Nr9EVerldxd1iKIL2627qF#Pcx;}`fA5fZm^)p?k85S!p0GSxM(&^59Q0s6z(0_YW8phFD|Ce1du1=Ju3vMxA3t)x7$ zD3!r6B|j-u!8128JvAsbF{QHbWU38Nku*e6X;E@2gPWr-1Sz=XB&I8PCggOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wz Gp$Pyg$25Wf literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sj.png b/examples/compass/images/flag/sj.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e8904175c25bdcd6f891210682d51e73e9517d GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHNJzX3_G|rb!+?y2=DAIa;=l5F?9&Hzs zCiQffX&$-c_CfWHj>`t_WgRy>=P5MtCrnn#O*j$E!6>R&c1+M@hEfbiX3@1<)sc53 zH(XdB@g`|={f|@pIy-XX>wi5h`u}fFuCNEgfq)n5-!Sx)-DBAB_uJ1b&D1|xw-r66 z>CD9I9{l;qeIQc*_N?=|O+J^FL~afX-*)+B67!)jh7KQwFw>`An`fDN zUZ0iX%=O}$vX|yzPp;c>mNS0FPYE*9)ARcMzEB(LufFZ70;u=wsT$GwvlB$~m zBp8eg3@mjG4RsC8LX3>83=OPI%ybRRtqcs7IqZH4(*ROw1Ois-!PG!g_DJihh*H6vUE6>c% zEJ#hsOw`LSO4kSR^aDzhax#~3AwYi^TL8VH z3v{S~!KB#+w}2WXLDmK5rYHHB>hZ~ bM*TFP8O8dAs;+l|`WZZ3{an^LB{Ts587@97 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sk.png b/examples/compass/images/flag/sk.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ee781b463c4a35e03ad1e0a4858a5e7ff3d59 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHFJY5_^G|s2??f0HqC~|E6`|9}os$LzJ z7@0-?l@yf%vtID8IJltTl#J9Xr;AsvT~W9a;=E$9itJyvEAP<^GoH19g=k9 z-+8(DZ~Nz8Q>XrUy877-kN*+7*PfpI!g|Tak2~rfKd*Z2yjl9)vn>;(t!?ztz2 z9a0|)-(UCW`m4K-mtWd!epUT5bK0wtlx0CX4l2v$$T0>nJ`vYH>6`Z9hG<$*_|Chc zjT|mD@o|2)8U9PX+5X>!;U9zdefOOoH<$YYBSy8vHKHWBC^fMpRW}7lFc=vaSn3)Y z>KdAb7#Ud^8d#Z_=^B_@85k^c*!>iy0i@Cjq6?_O&_LG!sKGGAz|6|j(8|aNqCrJ4 zKmR0+pE{l*NYz`M_LXUS6)3mY54cddc~@`Zra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHjJY5_^G|tyfwDoch6lgtf8t!~RZ9&_N zOV`slBSWVNoQO)A7|OA6Vj%j$I=+*Uhb5xZ~72c!5k>#x78*m7_IyMmGc$B}q1&9~pzM>?JD>)`(p z>fw2*bIG}m|E(OJnO3!P&L3}QzPo#^WL)|3J6Emb7GJzs^mD@Y+jrB7_ubw*^Q6zx z6;s5{ESj+xX-0`>O@%anlD;moig9^Wy zC;03J29RorYeY$MQEFmIs%{F9U@$T;u+%j))HO5Ewlp@FUeP=jHJfti)5p_P#lM1zW8fC!3)-29Zxv`X9>LVaGW0BSG-Imst8 zIW@01l_8^~q`*pFKQ&LUJTp79AT=d3Q7^wJT_42L4=7E_$xMz<$O9Ok zh)r-0nd%x?=o(pu0R3TX0rZM4(4htflV%&-0&0*1Sr?q2R#Ki=l*-_klAn~S;F+74 zo*I;zm{M7IGSvpCNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U& uyu4g5Eio5@^pf*)^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$UH))RIB literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sm.png b/examples/compass/images/flag/sm.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ac02860fb27216483ec4f8479c1f0d2c2d058c GIT binary patch literal 852 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIYJzX3_G|s2`TYE$&O4$BCE85bsWr0RY zv7k<@b(c4L{A};?@Vl)FdRCmRPA`Ml)!Uue(?4#s;8wc0bj1Q8g9Qg&&ivi~eh%OD z6RiB~`>y|tTX|F8ZeYLmuS>BBLyE*2~Ld6B| z?mu_>?CB=?F?CDe?mwkwM)!MX?YOsh-5Hs0%NC!G*_yR!@5dPj9)z5EX|?yq%&^Iy zP6sY6zVM1q=Ki0)buYT61R5+e*wwVN#~{4CAk+T$hpE|l`qoc>T`qnU6j#cXrrGmM zwb=DgjI8{BlO?_TgZKJu=1va(FY@^HRzC&juAXBlJ9_>J#cVM!`+0Wd=V@7@Gaksr z6fvb7ND`M!beSf+{$cd7Un&fL*tfa(FXTHE#tsZ?)e_f;lH{V)#FA9q6d=K1WME*a zYiOuzXcl5*WMybzWn!jlU~Xk#u*_liQ^AD^o)&BO{0g z6~O=z6b-rgDVb@NxHW|OyjTI$U<7iKPiAszUU4czMoCG5mA-yzo?dxoc4k3pN@k*7 zeo?wUh^HS=nv|279G{Y(o0yqr|M%5-m~{}F;2tv7HL%b%vJ3(G!`K4o6zHqb~$0 zxaB0KD|ja7=M{&Z7ugF`W`a-_9~$HXbA5Svxn5dgE(GZ%=jZC@Bqr%+f;8%<0nI4Z UFI08C3)Iix>FVdQ&MBb@0Kl0!lmGw# literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sn.png b/examples/compass/images/flag/sn.png new file mode 100644 index 0000000000000000000000000000000000000000..e48d2fa5887eaf2471b24f62f02e4ab18ac57099 GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI~JzX3_G|q=kG|ZZoD9|$B{HLQMi?pF& z(nP(fbIZ!a%H$3>ZTP~mvWPifX~{>WvZmGy)f*C`x zO(=B=|I}3;ub-qO95}50Ls$+ul)T>Ii%gMh?zdBhtb)Ej2 zTGhoXcG-l53#`1J?sa8l&%dL`zp?FDJIyUi)m1AnNZV`5s)!vg*~&zuKdAb7#Ud^8d#Z_=^B_@85k^c*!>iy0i@Cjq6?_O&_LG!sKGGA zz|6|j(8|aNqCrJ4KmR0+pE{l*NYz`M_LXUS6)3mY54cddc~@`Zra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJtJzX3_G|u}@+?X{rP@v`co!`+e`Yx^k zB8w^+y}h{)9{*ri!skd4w+$UalTV+uwEi6V=iiak$YnR~&P=@Z zP}{G3*6K-GUo)nJ?0mEDjOXQ(GvjQgsvOv|z=hA%``Xk{$#$;8dunRUd?%~?wK=X4 z$Qs?2s5M10t;J}&x$j9W!GjYQa~=Lwd+;&yJevn8r`JiOi7eJwJa47QYRQ`=uP@r> zy(_GruQt#2$q)Yb`z8b|Qz~6sb#h`l%)cTku?Kw)UR?yH*&bt~3fgnb^YB zx2@UV-eM15LCKl*x|g#)3STkanRM$+gxbS|`R491GY(4|>^2v*T#*&DbdR3#wC3&e zUmoR<-+$TV|M$4QkXc*2Q%hgZ5}RbX+ARNuR*HGE@>dgE`|B@-Qu=r4ef)2zu9dlX z|MuL9w<`=2LV)3_TH+c}l3bLUSdyxn0wfrW3=AxF4Gnb-%|eWftPBmTOw4o*%&iOz zmO1Qx3ex~mX$8>*)L>|!YXH<>7-C>%Wol?;WCYQmA{Zcoq9HdwB{QuOw}w!k7b}1o zj6hEE$xKeoD^6v|C@Cqh($`PT(<{%+&MZhx$xPJCFG|-3@$>^qlX5bX<5Ti;6EpMd z|Gqj8vkqbt+(V|i1{S(TmLWiY7+V0nq6>7Wfx)EN2DgA3Btg~%=ckpFCl;kLIHu$$ zr7C#lCZ?wbr6#6S7M@JC0Vra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI?JY5_^G|u}@+?#c!P{8%Qexz$hWNX6a z7q>mQYWY~RH(oyG<$8j7$(3_zzHts4u7!6faKC2nRM=%){w(6nKj*f?20VA3-C3yo za{jiwIfk_M# z8qRW>FeInX`TNUiLdEB>(@R%roIdvKpykw>9gUNHlnVQfK6>sX|OE=m-zm|K`g7dT0@|vOzJA?iB-bKus`~T;@`r3Qa!neFU*)L397RLRy z@9x!CIWK0)+1AW?`)1FUcjwlW+@5ke&pb3XKCV`-O6%{ut{&~BZCAqWX8+26W&gQ1 zljqy#lg_{(RV{IiC`m3#O)N>(O#u=NMg|6!x`u|jhGro~MplLfRwib;2If`<2Fo0F zKZR)kskDOV0%|Zc&@}*RFbpv;vobZbGBSc_P!S9eLD7(#pOTqYiCaUc&x;j64Mrd* z`D7-i<`t(hWR#Q?Sn2Dh=INDZW@i?prer4S}eUBg+t=Ka4GaUeN_Q)WBfUY=c`s4U!=1g7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i77f?G~vx`JnNeqM3td6B(9WhMw^@u5LJ wFxQutm+Pe^=0cEOa(=FUPGXXNCP<@x8qkbl{X$jOyFmR6p00i_>zopr0RFN#{Qv*} literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/st.png b/examples/compass/images/flag/st.png new file mode 100644 index 0000000000000000000000000000000000000000..76ca2d23e7256a6c4e53c2a445a177b6b54d256e GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI=JY5_^G|u}@+?y4WDB}8k@8{IKv>7`U zH98*nC%zWG!TrzWNT)_m@6z6>t*!kF%%UPV-E!SJCOCKq=IGQiaBFinD;T;6&YiRO zyro#7%7%zHRqM03E&hxA;AP-&FqS`-rl;||;qH8Xxp;@Cf`WYC3tDZKPMG6!@}xj> z{`|Gm?Iz4C58w8_|IS^}kR44tmrg1iK6CbnaP#C9fec^%r(FFpxqsev$(J+PG!Al{ z-oj$6J7?}JY4<>OhVS>pdG{6mh{;XPJr-OC57*1TC zalbV;HE7exmdWN*-dqx0w`arj^=Es`k4*|-SfU+!(|k^t+Ur|x%4V_AyH5E?-%nbf zem!64B!d@&sHJUERLGr;H`14de%`a^jC`=SfbDLxXZJ#uEl02l8?Y-!NEzt}6Zb!*KDlIewOsQ@j_%aB12cdf6AhBCPRg^#QpA zoc+BTABsQWHy3byI)@gOP!OrLLi&uAy0ok&%_5 zft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfet&EHz8k*9g7ocd!%}>cp ztHiD0v-M*cpavt5lYBChQ}c>b88S*r3as??Q}gu7GqW=bQd2S$_413-^+7!SfYPL# z%;fl#{M^LMJo~?|&cm#O*aY{Gsjh*Au90O3&>zMYK(FWm9co}OX|};Fpaw~hb;0>* zCFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5Xq#=q*i;`0r+#G!&NWm>9Fs_FJ22WQ% Jmvv4FO#oD=NwWX| literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sv.png b/examples/compass/images/flag/sv.png new file mode 100644 index 0000000000000000000000000000000000000000..96764f36190678473b8fd1b3598ceb7996011ec9 GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kICJY5_^G|q=k+@CciP~hnKQv2_hzX*nP zaC9#5P-G1L6}M;tyT@cRyH3}x1_39bpnOF$F~t=edTl568t+do-0UsW_R!$W{^DgX zzQ%-pXIrHaFjZ^S!Y(PHpf46HUVS*cIgW=(X{v={uwY*ai>%Ds^X!g`X3u9lSF%KT z?n|-01+CFLSl1dx*Xvv@DyrPQ({Qb5^tP9LZrctd@KnsP`&ILAZ%Ue`>!jSsX}SM@ zZK^;0qvrKo`3TL_jS)O^bNx#TO!r&=|D~Lf|L)(Lw`V_HSrz`deEah5Z)PX= z&RzaLcSB=Q&9~oIyFcc$=IoZ2^_!qmklye&Wsc1JIPu=;@A=L4-Mz9@?MlJ2=*3&# zXt@f#oWA+x@_zB=1J`nDGam9N$v&LsB4l`S&vmIe9*Z)HR$X~D@w9~Z8Rmv1^-Cgh ze9Nw+@B;%?wZt`|B)KRxu_RSD1xPR$85mgV8XD>vnuQn{Ss5BwnV9Jsm|GbbEOXfX z6s7^B(h8yrsKL-c*8r%&FvP&j%GA)x$QYubDJ^;diiX_$l+3hB+!{VxKb8S%FakNr zCo?%UuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z z%sPloa1WX48d&HWS%v`pVQc~PiZ0Nh1_qO68{7hFkOWy5oS#-wo>-L1;Fyx1l&avF zo0y&&l$w}QS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8x wxxT!-TrVv#7lQPX^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIOJY5_^G|tcUv-M_n6q&<&z3qx-(2Dl` z?ydqCt?HHRRhA|!Z5Qy6bgVxt8fNLIB$%soN08@cY5`+YfxF{qo`TO8$#T*8PGtbs@Fe*w&RtC>=%fBc6vdWfq(ympv z-kO=&b?*@_c$aLJZMyJm&eGRw_C!lQZrxsBx_4db&5Dq%OIMv;z4-aX$A1)O-#cQa zo%cRo?eOx4-?%$G7WuN>IC(E{?>ayJzQ+%0{=fPA`R%6lV*_uL(gv;@0aOng7v_%lqn^tQ~ii)CWQk`5QKi5pn|HR{{4 z`^xrCKIjGvB-Ikvh?3-@)Wnih-4r0fU}RumscUGcYiJf?WMpM%U}a*aYhZ3=V6e<# z_fwb#kV-3vE}#ZO16>242Ez~oGb>X=DL&q++u&je}IPXn4!tY4_=dKajl!PC{xWt~$(696V#6j}fP literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/sz.png b/examples/compass/images/flag/sz.png new file mode 100644 index 0000000000000000000000000000000000000000..7464eadec2412ebf8a524702591fae343df32b07 GIT binary patch literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIkdAc};Xq;EQ=<7WtQH1Tm@7m`xPtIDT zp6eZP)-?yx+&(yut&VAo3HU9Lfwx8~YD%-d0V zs!H#S-uW{-B0v1totZBan40tC;i>KV^WWcz_+y$KxG611cj~)-WmSQ*6Eb#Y-+k76 z^!gID%*~p?m+hmi%HGS!yt3H1xA@6H{)rNgnI>pWIN&ukclGRTeEVm;e{Eg$#-qGv zW88ZFIqUaH)W^TEvHtt%(L>|k&J&qfSQ|=|tW|bi%bQvA=SAnN)JQR>6@0wc)a+|z zR@B)SY}&YRPx-@5Op2^Nxu-u@zlu;k>(%q#MJ(xz^yHQ6i?6Tyv-a%P-q=ef)3mtQ`*niIZh{r|Urg1*@s35zaV?If~jffI*fh@(^I*N5^d?-Knq9NP~9qgS=W zHKHWBC^fMpRW}7lFc=vaSn3)Y>KdAb7#Ud^8d#Z_=^B_@85k^c*!>iy0i@Cjq6?_O z&_LG!sKGGAz|6|j(8|adqM<1*dI5@t-29Zxv`X9>K3hMQ0ctP;Imst8IW@01l_8^~ zq`*pFKQ&LUJTp79AT=d3Q7^wJT_42L4=7E_$xMz<$O9Okh)r-0nd%x? z=o(pu0R3TX0rZM4(4htflV%&-0&0*1Sr?q2R#Ki=l*-_klAn~S;F+74o*I;zm{M7I zGSvpCNE)K3v?w{1!OhVZf)w0x64Mntlk@Y6L(hxs1u8Q^D2opb@`1U&yu4g5Eio5@ m^pf*)^>Y%F^fN&k_0xc66zdnNy50rqXYh3Ob6Mw<&;$SqP<0vr literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tc.png b/examples/compass/images/flag/tc.png new file mode 100644 index 0000000000000000000000000000000000000000..a2743ab55d688149c6836ca3ee0195b291b1edf0 GIT binary patch literal 965 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIkc)B=-Xq*qdXqyqtD01}U?@QC)FX_#U zx^%3|^|g{l#|n!G!MiS6k2D@VyLND=-rTOfM~@bD$S-DTS6WnhF@$BJQ^pc6j-<=W zuGXx0zqk7Q-t&sy-1U6v|1I;=pNk2%i;3;tzU%3nZp;6Fw#Jk`yYXVGd#;i|V@Ekl z`lBa*F8zs=(q~=0`pWB@6`2JUFH&Q}_vJhC8ZjKW%ZS zui9STq+@Sie)=%aaeeIHO>w)TclsTf_-m&3#E@5+=_$Hqw>XUZh253dmq+CtOYY`7 z^62R4jkTL!D2Bu@aC!46`03A-yr0WWb)P!i+rO?>&Rf2eL#E_!WBk|l*SC8zY+n6( zFrnkF`ujhJe0VPX>rgy!WJlQdumx-S3NE~Kown&`&biq+n>afDa0s#-lX7xBpd-~` zw3=hap6aQW#p}%db93x|6gZt!H=527AR5@%rQsYI@@w_3YhL$i$}Wa5w{-e=9MKcx zKD5!vE1`i=%OLQre1_PnRnIb3EOU7#5PLUw=jqb+Enk208>!kIs>xsR7Z|y!C9V-A z$wjG&C8@e8K!U-@z`#=1&`{UVEX2sj%Fw{d#7x(~+{(aUnZxdz>U2;?N6%;eO(;#7u=l9B=| zef`utz4FZL%!1UE%tXEXqI7)_Pd}hEDJL^IJ|#alF*DEp@2m4L>mWA4J!GnDV4-Vd z83Oc&u?5g8x3VtQ&&YGO)d;mK4R zpdx9AqSB(|R0cOkUkFlg%SlXE@J!CnD-Jy`vKOe#1feWGG{^_$`ttH}y|lz!2+~W= j&(+UKOw!K;Y1B^xno+D@sOowbsGq^p)z4*}Q$iB}C6jtZ literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/td.png b/examples/compass/images/flag/td.png new file mode 100644 index 0000000000000000000000000000000000000000..fca8258ebb6be0aabf9aeaef122416b0a33d81ee GIT binary patch literal 834 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHHJzX3_G|t;jwCCYj;Ddi&K=PA=P7Zhyq@ly79%zdfFsbN)VZII6{CYhU|0gPd5c1+@u(0;u|^x~98#+^@smUNsAJ9NbGvevSbGnVc8$JiIT%&7Ir ze#ge7w#%wh6gVX!mN2Di3MHxeXib|fQ}rq0;p9XwBhgdA8$^w_^-uN^OkS!L%ErdG z>eJ7~x>HM!KD#%0no=IEOiYHbq&ozjEt-d4XjMebPdd{ z3=Ebz?0yQ<08(iM(FN3CXrOBV)LGEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJDJY5_^G|s0^T-!a3QQ*k)k8=JdKN<@Z z+SQuBo|>z+`RS3A4H*{Qj=YcR6~t_L#a)|EDoJeN4u8^gu_8;5M=d_CJgto9ytWL7 z@U+zL+pTvq_t~*9C~Q7{mzTlYn?cH=C%U2G*K*4ZHcSiD`eTp5Nq9IMF|Uzj(1w&0T)UqW|ahgI$BuD!-m7T;R6g_J%zx*n&hgT`w*2 z6xW?;WFQ}SH*@!71rDQ!!8%?cQ$0O(C07VeyIUmoLnSnr-@D9P>1|(%gR(*D-meel zUYSz*&n)%Q=}$*{H<#zFD>s^b^|bl?`^k1psqLGt%=weK(dy~lz3&ec{JgZ&{k;7t z#$N&#wyab$ZCvd$OXOv+dSA}n2=8Aeo{*lP4{`Fzr^<4xMke`Qz8c z?%eSC)#Z2h%pI5u{vOc(KfS?DVE!NOr?+FoV>2yo1A|+JNMxhOTUBvm&BNH7=~ z7+C5W8tNLFg%}xG85&rbnCTjrTNxNEbJ+b9rU9hV3Ze_B!O%e00I0z*#K6qT)X>Vv z2%~Cp2_)n#i8d#_5zieAe6<22Km5TUtV6WmzJ0dL3+vgx%xSYN&1-}jrwUo XGm7;KRbB4_^)q<7`njxgN@xNAV*5Av literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tg.png b/examples/compass/images/flag/tg.png new file mode 100644 index 0000000000000000000000000000000000000000..76f5aa0de5a24abbffe6315e542b82a9ad89c29c GIT binary patch literal 872 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJTJzX3_G|u}@+?XAbC~)NY>Drx7Z2cbU zoKY2M`nJqlcEgwd8w8IY@?t8Rbnf1z>`M_HH`IMM1WUV4$e5{i^s>OC+c)oStgt+@ ziD&cevwyli)E6bX{dQpgk(9eoRFvV{H--!ot=j&msZ~|~=j^TCrEWXNb6NF=yRW~C zGK7Vj&Q45c&wplR>w2X7<$I}+phcIaOgp)B>e=c18(19DZrnZkZQDE>x0VyLd1oJ5 z77_dlh}Y;|6S*g~SS{d}oVt2ebj{yo>n>OP`P2SU-}dZb8@9t+Ipb?3jC__`SzM^$ zE1$?@H&0qWBT+16Myp|kx{Q4w_o9>!-LTzp3giN`V8S3Uya`)XH8lJkQ z{B^%V_$-&5nI3b>mMUF3ed_M!!~S1?OQvO?^G*{wc_ma`Qq6Gk;gvmwo#$m=?Nzqf z^YBcmn(g6cpQ;Hj^{RMGl#HD|KGo%#$5=0>@K!2>`O__RMs~Fy?1g#GhL_cSlY!x{ zTH+c}l3bLUSdyxn0wfrW3=AxF4Gnb-%|eWftPBmTOw4o*%&iOzmO1Qx3ex~mX$8>* z)L>|!YXH<>7-C>%Wol?;WCYQmA{Zcoq9HdwB{QuOw}w!k7b}1oj6hEE$xKeoD^6v| zC@Cqh($`PT(<{%+&MZhx$xPJCFG|-3@$>^qlX5bX<5Ti;6EpMd|Gqj8vkqbt+(V|i z1{S(TmLWiY7+V0nq6>7Wfx)EN2DgA3Btg~%=ckpFCl;kLIHu$$r7C#lCZ?wbr6#6S z7M@JC0Vra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ(JY5_^G|txsZuD{v6gj<>zbiy`Rd=v> zX;I;Yy9fIPWmeliIA0>V%d=3w&h@+16|QgdRE|G%%w8zv#F5VNaEXf9hi&&yPGXoh zpK%GR`iYXJi9#n-jFprp`4m}7O+CYM;nl4tdQ*bLx?Okft*+d$|Id$zlbK6%E{1e1 z(up!Uyruv5Z~y+s&)$Ch`|DMT*>9Dz1s4Rn0@n5gtc`k|P{7h7eIVE0NK*1l)a_gA zu9_OHy3NgbfcJy$#2%@%4B7wIyTe>97BQV(R$ft9cF*48%_L8)j7vNd`DTe^UYg|Z zUw!$dZ{*srxqipL#h=e)TrkCG{(0&0-PMN`Z}kZ^33#)d;LY`zU^8>d`nQVzZ|*qC zAOAnKM=Iyrc3?26mbgZgBp0P7mZa*Y00{;o0|QH4LqlCdvk)UAD?FcNF>6K?@XBMQUWG3q67p3cic=`dQNjaIx@hSPaiJ5u! ze_x%4SqHHR?jciM0}EXv%MhSHj4gm((FHoxz+lpBgIhoik|67X^V3So6N^$A98>a> zQWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hm zp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl(2QdJLRHthK>ZA!u6{1-oD!Mra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI?JzX3_G|u<-@AZog6li%KGh4xX8jt9s z!_B|s-`ZBJC=KP?|c1NlILw-nPf;y6Hidcs=HjSZZ0lt3<>NKjI)3E$1y1KS*cvB zy(0$242Ez~oGb>X=DL&q++u&je}IPXn4!tY4_=dKajl!PC{xWt~$(696O|CIkQg literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tk.png b/examples/compass/images/flag/tk.png new file mode 100644 index 0000000000000000000000000000000000000000..e778334aab8ffb88645543062fbc21e13c81c66c GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHZdAc};Xq=C|c;5SRq0I4**Z0-jUhy|0 z*<^;rbjz;-${Te%`WgkNh`+qB)_eN~Kfw~7&J}!()ALvxCzNP#@GhDk65=L3TXkbk zR?o6*zvtJ!RsR1`a?;yh?*GBd%>T6|{&b6OW0pu@HgI4lU|{|rw&TTvN4<3ntFC27 z&wTjEBTG|gMfB4s;}8EXKRA8o-qmA#NvhlU^X!TrGC1tavYDpu|IPQl-f^e1&yT81 z7JYj0N$|hTCE4!^mWp|O`N2@SAYh}?w#$>auX{~i&gXaEUa~AZ@qX6%bD!3i*00(= zMe>w%m=f!a#uX)GEV&`j^8D~ngYHWm(lKS!hPwdk~+t$$zsJAX`LBhxX) zTW6+4Y<6a?Px$=h$C;Ze``dIT+EkezIwLn@-;HwTQ#p)f3}Rc){8}t!=*FIOy8RM& zTh8==%!@gjx5-q`)mP==oXGHo$t#C9^I>+<{RfY#s&9XM^Z3oY?e^hH;c|UfwRbyx z)GybLQxo0TV8vjpy>VZp%)h%g)}8sh^Gww3=il?^*q5E(vR5T$#(afsIt*7>XGAt<0`eKTWMwY8c0>8oU``!t{D;T(17{v`5@(TYk zeT!CY{QYvPATX*`OI#yLl8aIkOHy@HfCPh)fq|v2p`os!S%{I5m7#%^iJ7i}xs`#z zGKbwyVH!XxtsuI98Vn6|4S*U9Lk!HUObxA!j3FAD(xMljXvob^$xN%nt>LrvV;P_Z zBaoAPGLuvDic=XfN=gc>^z~Eo^vW}{GYe8vG86Uki_-N$JpF*uq@2v;_>}zI#LPVV zzpu{2tb^DD_mHWsfrYM-WeCt8#uh-Y=mH&TU@&R6!7ZQ$Nsx8H`DrEPiAAXljw$&` zsS2LCiRr09sfj6-g(p*OfQqCcib{);QyJVGeIZD}EhjNu!818OuQ>F)$X=i_6NIw( z&>$a}>&wf__0ke^AxJMdKUY5|F-boYq)|T&XhyMqp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHdJY5_^G|s2?8)kuWy{0Afp=fl+ z!7UqaaAZxG;pLLU^1p$jsrN<)qvz&K(VQ)zN=aL}Zp{#Ba^-5)*l6%SF;d5A%7b;U z_uju_E%v@u$3n(#nZ^AB8)}5|A3m6%Ccq+bn4|8n-Jd2~jfURstFL=?>Cd$9oN`C# zTy*?JkfHVLg`7{`%(q*1(ctdR z^vlsFt3Tak4!yW|6;n_f+l7}UyY9Yw?py!IWw-aI_D|lQ+HBnTFFs}zGGN^k5uLsL zHaGY4_`QD&Zf)ldXY&4J`+4qzOABMC)&KshnegvS&Fa#U)YQ_vyqe$Z`uLxofAYS$ zKWpp1g*wNZ9ffb)`*-d2Uc2oX{O?}hnD+DYi@(n6?ed?ch1tqF?Wl-6eckl$i5g>{ zs;^0hgfs(1#m?XA6*lf&{%Cojmq%-hWazAkL9T6&wDvG7IM0jtw|rLp!yQh~5AOV- z0E__D64!{5PwCDvW8glbfGSez?Yxr#aSO%!U2;?N6%;eO( z;#7u=l9B=|ef`utz4FZL%!1UE%tXEXqI7)_Pd}hEDJL^IJ|#alF*DEp@2m4L>mWA4 zJ!GnDV4-Vd83Oc&u?5g8x3VtQ&& zYGO)d;mK4Rpdx9AqSB(|R0cOkUkFlg%SlXE@J!CnD-Jy`vKOe#1feWGG{^_$`ttH} ry|lz!2+~W=&(+UKOw!K;Y1B^xno+D@sOowbsGq^p)z4*}Q$iB}`{hqh literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tm.png b/examples/compass/images/flag/tm.png new file mode 100644 index 0000000000000000000000000000000000000000..85eda0481090aba05a837c4d5b0fa5bc99498c35 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ*JzX3_G|sp7*=GkAO0@dxeZO~S$+z<= zYb`Rw*$Xv1j-CuGn9`@G^ozAgWXbNuR${++=dd_lIC^m97Cv8YsoYBmCK0RD)J%82 zw|xKJN@d3{o^)#)f6nWS56+%ndhhr|$&eBWIRE*u=L9+wu~mtE?4BUARy?v2}OcWkeF?HJOf<$2R( z@yy9e4HAr8c5)v|rlc=*>bw56-2Z*fg}*<)t-j`Y+(TG1h)LkEK$Cjsf62C+Sq3Zb zW!|}8Rgzh_v+~o^9sipbb*lMJO5)(MlZr5Y95Y|!%-JP(zu9>f2N_MAG$*+EN#>)O zhO5QYX0y!bo+YPo>FGg67l~%aV(shemYvXx*_O%Rn`X3F&9>;|-}#QshuvzvE&96a z`7|-ri=NA4J}FFRFE3|h)JT+*cpTaH`9OMt?Ei=Q+!q|xVsnmW0pm%v#5JNMxhOTU zBvm&BNH7=~7+C5W8tNLFg%}xG85&rbnCTjrTNxNEbJ+b9rU9hV3Ze_B!O%e00I0z* z#K6qT)X>Vv7^0ymEqVcphTQy=%(P0}8a`V;mH}!o0y)ViGdVS{IF%uzq@=(~Uq3ZZ zuRJq5vmiAkGf^+UC|w`K(+?<3%E?TQPsz_s%*?a@`|3Q*I*3hh51Hy3Sm+vAh5-Fx zYytF&F3_O{29stR+yZKl1X&lHpH@;)<_K`4t44f27xzP!9#FD)?_g7lK}bMSyqD^>bP0l+XkK=I2z& literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tn.png b/examples/compass/images/flag/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..fd04bbe25b72d38cf3e5ca4a69c5c7507276a406 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJNJzX3_G|tyf-00<;$kTd$Z7i#!hDbE~ z^1iadPmEUjVP!*S>w0ccfEUd_dC7I>St1>Es2^WGI6`Ms+|1Gk{vq| ziYIS+@<5U)^z!D z9=0i}@891)aNaX=lI6QM??3->+JC;{%ssiyk^lPd6qc`?w`8l%Ohc){x^p)rd)W@$ zmHqzR#^!+LrvV;P_ZBaoAPGLuvD zic=XfN=gc>^z~Eo^vW}{GYe8vG86Uki_-N$JpF*uq@2v;_>}zI#LPVVzpu{2tb^DD z_mHWsfrYM-WeCt8#uh-Y=mH&TU@&R6!7ZQ$Nsx8H`DrEPiAAXljw$&`sS2LCiRr09 zsfj6-g(p*OfQqCcib{);QyJVGeIZD}EhjNu!818OuQ>F)$X=i_6NIw(&>$a}>&wf_ r_0ke^AxJMdKUY5|F-boYq)|T&XhyMqp{na$pne8VS3j3^P6ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft+uiE{-7@=Szbe^Oy_;il^Czbz2lYIMMt3 z1MiY;HI3iIzc9*F@(aBc4qMdTH+M(7PDXf^^64Ov+l3~cwfB>^crga-I=YCVei7@1 zQdvFm`F=O@HpbmPkT-qF%qtV7)jYrb^Uk#ddA<{p`S1T(D5=J;SM#;XXjArCc6Aj4 zFT?E{?=Nnvt6X>6Q7ZADMG}K$2vft^W5<KYpA8k&U|8Ce+`SecmV8kk!d7%X$x{S>AFq|yqa3#h@+K-U1M!7#+Y%*xcz z%E%a^p(!nT0g8s){FKbJO57SgTR)ZoYA^yh$tN>8HLp08A)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH>Ka(+8d-(_{b6hY^olOf zp#}z%W*giBYLEn37o49~Ql40p%HWuipOmWLnVXoN8kCxtQdxL1)dr|Y8ltGQC^?nE z&CwTv6x?zW(-l0E^Ye;B&x`B@DlldoJ-UaGs@O1TaS?83{1ORF!2hIQh literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tr.png b/examples/compass/images/flag/tr.png new file mode 100644 index 0000000000000000000000000000000000000000..f64e102f1b99f48ba07c5cde6d606766a209ef91 GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHXJzX3_G|tyfwDoch6lgu)y)l@1eh10Fm{+wF(S4dyV6XO zvZalKj9r4fC)w>cc>JY@Bh5JI(bLxB?z>{=&3o}x>VU0yL&2TMeTs!OJ*s_u6}71r zDH{{4bR8mB&Ru${XUdlk2hQK`jUFE!*2?+L+8gz2?^4(B;a;J5TTZ6CfD5>Q$-o|BpLfNXI(Z`B$8% zRR)HrYKdz^NpewYVo9oQ3XothGBB{zH8j*UGz&2@vNANVGBMLNFt;)=Smv<%DNF-M zr4>XMP=ld?t^rVkVTgg5m8qeXkugL=Q(E)_6b-rgDVb@NxHWvXek=pjU<7iKPiAsz zUU4czMoCG5mA-yzo?dxoc4k3pN@k*7eo?wUh^HS=nv|279G{Y(o0yqr|M%5-m~{}F z;2tv7HL%b%vJ3(G!`K4o6zHqb~$0xaB0KD|ja7=M{&Z7ugF`W`a-_9~$HXbA5Sv sxn5dgE(GZ%=jZC@Bqr%+f;8%<0nI4ZFI08C3)Iix>FVdQ&MBb@0JyU#=Kufz literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tt.png b/examples/compass/images/flag/tt.png new file mode 100644 index 0000000000000000000000000000000000000000..73f52178016f3390e11ca773a3bfa69361b3bdbd GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHZdb&7XK^j=g+VFb-k-sYIWtM#w@cUnXe2BQiS&I-m>oY)~MZgpUsKx*?Z@Pg67JYMF9a4 zlLThWmcIJ>Rk(xa^1@2aMbERdulE$5vwWVm^ix%K_Y#%EKk6$oOs>>ARQ~E|YS7_! znfbMJb5N$)>|VFUUoM|}_ioaZ5S>W^9Y@{ftp3d~ZJGv$N6U}IrWaSArQO_Sd;YV{ z`3-B#=i5zE*|j4eX=CE*rFD!Oc6jXT|2X5&gj1#WBjzMpID`aM!2G*(n9e0pJ+wpgS$ zDXe*!<7JWKjf?i2eR^x3y#!Cy-gzf)d^+d%|3kn_<{~bi=Vy9sY<<&=ewc@8{9&EP zV!B|J{47xFP%UwdC`m3#O)N>(O#u=NMg|6!x`u|jhGro~MplLfRwib;2If`<2Fo0F zKZR)kskDOV0%|Zc&@}*RFbpv;vobZbGBSo}XiAG-fTAHcKP5A*61RrW){kX?8jL_r z^2tn2%_~l2$S5f(u+rC0&C@H-%+4%GP038u%P&gT2l4a+N|SOjljBqJa}zW3?Ek(x z53>$p6Wl|lx&{`yMwTH!e;8W;y`l?rsDZ(x*#@_O8YDs11?Q)glqVLYGB~E>C#5QQ z<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE1-G2UbOq1k{Ji4O^CEkJ%1jW-;zNUc xV6HDOFV{;;%!MGmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJbJY5_^G|rb!I^TV!P~!Og`ExBbS}o6X zwq2bkW8xagZtA)12eU}7bZX%4u1$C5oJgCx_>znXd*=6Ly16%#lqZTjP0|l4lbAef z{h2eLAOE$eIa~DL>h9&`w$s0VR-SuUo(Ansoatdh6&e8h5supz4Ef8t8(|%tJ3=WN;a*V_{yZMa)t49 zi|60x?EC-qPwUEW0-h%8r$h^zXGi;oopuWkx_i|3&QVRj(tB~XAD={vCOI>R&1RRH z-=~mNa(mfL=fkn4%10ID9*HcrP}lzMwtY{F$EU5?8hL!V$Bx~)o%8}~1-2Zr!fBC)d$K~Q{ zX8ihFw=h8A=l-Wp7(6t$-hNvmVo_Xq>1@WUER#}W^U}+w^lom9wqO5i_frMiGs~yn zTe5L~->lW_90tZcuN?2JOlCAtV7vc;TkUmlK%8>n9$@sSmbgZgBp0P7mZa*Y00{;o z0|QH4LqlCdvk)UAD?FcNF>6K?@XBMQU zWG3q67p3cic=`dQNjaIx@hSPaiJ5u!e_x%4SqHHR?jciM0}EXv%MhSHj4gm((FHox zz+lpBgIhoik|67X^V3So6N^$A98>a>QWZRN6Vp?JQWH}u3s0un02N6?6qObwr!u%X z`a+O`TTWuSf@gAmUUBGok-b1=CJ1Hmp+P<{*O!-<>!l^;LXci^ey)B_Vv>F)NTYrl X(2QdJLRHthK>ZA!u6{1-oD!M<2gq8I literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tw.png b/examples/compass/images/flag/tw.png new file mode 100644 index 0000000000000000000000000000000000000000..5808bdf5f622684aa23cc1a9a180078d6943e7cb GIT binary patch literal 786 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kG^JzX3_G|uNv+~~_3DB$w^T)L$z6Q_)Y zn&KkXtPL8>Tn#;X3%G)rL=plUN?F=i8XdOf{5x|_{YOGg)76YgbGJ)nYRlY9GB!$4 zNnU$=`(@?>^;Z~n?6P4h*kk?T>es(Df^IHve9l)#T}zqvsb61h^0GPiqJO3Ax&J== z?bk=|QdJ{2U;A^SbEf9r7g%jQHdOkk7p5S+2Dve0<) z-!K1G8sz5Ry~n^HrE-(+=;zfc#zih3as?k}>oue-==>?cpT0BKSa^j`-t`;bR)rV^ zOte(>m>XcutLd%f;IAdRox8+9kjrHOgK6tSgUJC7ERho@1jIPGOl-`$S*!Bz_q#OK z2i%^)X%8OS-Q)*`lxm4ure{zH88g_ zFj(fW`zcHVNTn4-7f^$tfvy2igJFn)nU$%bm60(-LsMGx0u&9o`6-!cmAEy0wtg%F z)L;a1l22xGYF=?FLq@I1 B4;ugg literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/tz.png b/examples/compass/images/flag/tz.png new file mode 100644 index 0000000000000000000000000000000000000000..b966c8c4601e1f65c7b61e3c7cd8e1b8f8dbdb46 GIT binary patch literal 975 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJPdAc};Xq-2lXqh2gAk!K@Yro-=Oh@V7 zjbSEnTQ&H!Di$m_8pYfs&?OeM_Nq{GQ+T1~ii1a84?41UKYu60A$!D8#HMY5-Y&1+ zWg8vaBPQMdTAuN{?YOzkzNf4O{22*$Y$u$!4Y*wjSMeWiV&3~%xZUa)e=oB^{xjdb zT`OmGco?Z2pH_V4e#6+1^&{{=M?I-3*Yfw%{p?% z{rB!~c1_I(&#YcqA)1;RE4%oj=_Rw%{OT{BYG;{QUU9mqBQMjj|0f^2!@@_d5o=s8 z+1`*kjUbZDAaJ{3B-Zu&MW`+BFNo_QuW zX1E#ER2W=4vgpt8(^H?xUHNZivOsNRZ_$#u|NczUu3YCMET|rS@#n?|yWV9KX5Bx_ ze_f*?WjFiG!(30yio-kP?o5BABDh%~wXgVof_td&^m~1KR_CcZh-Aqry(_lgqH}or zj;PeMzVZu4SBt%WS@XB}`;qBBGm~=S&U8ES2<*s}HmC|a^w34=;P3LxS1#EaYs&3o zHLh-RQ>uHLq%XIM@oOBf0=Lebo*KE8lXt`(>OLN?=vnuQn{Ss5BwnV9Jsm|GbbEOXfX6s7^B z(h8yrsKL-c*8r%&FvP&j%GA)x$QYubDJ^;diiX_$l+3hB+!{VxKb8S%FakNrCo?%U zuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z%sPlo za1WX48d&HWS%v`pVQc~PiZ0Nh1_qO68{7hFkOWy5oS#-wo>-L1;Fyx1l&avFo0y&& zl$w}QS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8xxxT!- sTrVv#7lQPX^KSVgLXD literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ua.png b/examples/compass/images/flag/ua.png new file mode 100644 index 0000000000000000000000000000000000000000..7a187e6a801ffc75034d209bfc623103b223ca61 GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft>H2E{-7@=W}};y_^GiT+jcm<>)%>H-+m_ zT1+2z!5gJJZP@}X?+(mtDwd77F#Sm!``@)(O#Q`xY!Bskxic|lcdiR^~y|16uElwJx=7Cu*Y zyCFkYA@TH_T(3pB^CkwIOPRmD@xCDA9|n*1ycfZ*`BQ;GpjzS@QIcGgnpl#mn*t;l zj0_Acbqx)54b4J~jI0a|tW3;w4a}_!43;_UehSk7QfURz1=L_@plblsU>IUxW@Tz< zWn>J|(3BRv07XM?eoAIqC2kF$tslz(H5h@MTWvkh(mHAsT23(ij~DNig)WpGT%PfAtr%uP&B4N6T+sVqF1Y6Dax4N+8Dl$^@o z=I9GS3T`=x=?b37`FX{m=SB7cm6;%v#fJv@z+7KmUapsxmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ7JzX3_G|o?*VCa3VQ0B<{<@LPLcb2T+ zxFa>|$WieNVa>^Q>koWX6pfn2a`fQ#4-FO_-2yLGonJ6p-=Re*W7ATHS3mF7?tea^ zaa*O#@#j0S+386#eeU5DCA0YF7jck3aScr2r^@EjXwbF=nsvwo;~FVIQK&HeuA z)89)%ZO&`fG`O^!{5I(>=Pv#O(NFz1Em;y2GiUz!?(Vw%`?v1g>73@`redkPmg%lp zz{>SO1}+olSlYh*TE$&mef;plYZ)#^N*?DXg*)8--*bKawEutp1ub2ru~}_S(zGI85u(~G^Ir^K+%w! zpOTqYiCe>G>&G%c4Mrd*`D7-i<`t(hWR#Q?Sn2Dh=INDZW@i?prer4S}eUBg+t=Ka4GaUeN_Q)WBfUY=c`s4U!=1 zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i77f?G~vx`JnN zeqM3td6B(9WhMw^@u5LJFxQutm+Pe^=0cEOa(=FUPGXXNCP<@x8qkbl{X$jOyFmR6 Mp00i_>zopr0E$02eEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHBdb&7E@w}X*D#XomqA}p{ zjeozg?|+wVzN+D$|HJ3~yL*v$|IK;VqHFm1xBhycX)}*HF*t|J-u2hA;bBQ?f}Q_A zgU?U5r$$Z_kFVEU`pL%svWe#;70*W&@4i-rZMU!gxMgCBj*=3S1B+5pL;AsJuWKia z0xi1^eUtlVvA@7kU}4{T-eddc|GuZtWA$&bLQhghbrI8oxGQ2ewr!T+i)EUaAfV@( zBH-4*l32p6qgYiR-{sWhw8bsd(%Smo)v4Ui)Yq~f)Ohvdo^qlX5bX<5Ti;6EpMd|Gqj8 zvkqbt+(V|i1{S(TmLWiY7+V0nq6>7Wfx)EN2DgA3Btg~%=ckpFCl;kLIHu$$r7C#l zCZ?wbr6#6S7M@JC0Vra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIMdb&7bqpYQQx-w+>-066HSptQr<>BrYVx-aCK!A?P_p~(NnMA_0?PD`OD+hKfZKo|J$_9lE(`dU;N>kSozbJ@4?T|hqmX=zEMB#o)%(o z^`kYTsg;H4(Wt``5{IMY_f>D*6)L***0mcq44=yg8X60}J$fN>n(X=HZ*O1Ux%hMW zqd!w8PBl7iIEf|5$t&Zm*TE>cLzY^1Ew=oP&dK|yBjWev^H1h5P*~!iOg^^X`0AtnmzuXxONvj@-q-OwQRJFu4q9nN}HL)aBHw8#A z7#SE?>KYpA8k&U|8Ce+`SecmV8kk!d7%X$x{S>AFq|yqa3#h@+K-U1M!7#+Y%*xcz z%E%a^p(!nT0g8s){FKbJO57SgTR)ZoYA^yh$tN>8HLp08A)}rSC{4=AOpZ^<&rQtCv;X_*Jj^hsH>Ka(+8d-(_{b6hY^olOf zp#}z%W*giBYLEn37o49~Ql40p%HWuipOmWLnVXoN8kCxtQdxL1)dr|Y8ltGQC^?nE z&CwTv6x?zW(-l0E^Ye;B&x`B@DlldoJ-UaGs@O1TaS?83{1OTlYa~%Kx literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/uy.png b/examples/compass/images/flag/uy.png new file mode 100644 index 0000000000000000000000000000000000000000..8a174a4db0f74707a0bbc5ac7c9fdda85dd1b6a2 GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kIoJY5_^G|s0^+}JfaP^9Jj-km#-Ic@4b zB(~`X$F^xr`Wx~S)K}bX>gC_CuW4J?0<%M19dlb-BQg>@xHdUPdT#u4s$anT=lPoB zNs~1!&d#*FdfX@L_O&x-cy!X4jhnyz^gntgt2EPIHLL#kZ|LQ_?nD**=qNaMa5RG&r6c3H~YP>^>jab{_MkojW3iI z#d90XZvH6VsTy(e=ie8_H*1S3z82-B>p3wfwsNpCP3LrBkY0YecQ^afgNyTTM;|^c z-z|E0R!eBe@(GU)-3F$tb8pTF$n^_7oLOZv~T>`Q*|ZU$qUb=u80{AVUlS?S^%$_os7)e_f; zlH{V)#FA9q6d=K1WME*aYiOuzXcl5*WMybzWn!jlU~Xk#u*_liQ^AD^o)&BV&k$rnKknC}Q!>*kaclT&{a6O5!3g9epUmXcyy8@bjFOT9 zD}DXcJiYSF?977Hl*~lE{GxPy5Klj#G$|)DIX)#nH!(BM{_m^vFzX;T!98TEYha;k zWEleVhp`3FE4o038W>EPZEy>yK@wzLaDG}zd16s2gJVj5QmTSyZen_BP-ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kH-JY5_^G|tyfwDpcj6lrm}9=Us`E}10q@{**7@YJK>G$m=fAe7cPDWtg(I zzP>yB_}+r)flFq0i)b#soLWC?R&>>l(5>CqjHme5%f!wLSdx*awm8GcO4nm%x1R2F zNl~sI$DdBgjf=eHN`EZ*TQJ=_Xqpp)(5%Ut`TSAYdy9_c)-hYzure{zH88g_Fj(fW`zcHVNTn4-7f^$t zfvy2igJFn)nU$%bm60(-LsMGx0u&9o`6-!cmAEy0wtft9k`c&BKAFj>dBv#=86_nJ zR{Hv>d3xoU*_j2YDVd3S`9J&%r>mdKI;Vst0C_1q-v9sr literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/va.png b/examples/compass/images/flag/va.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c15e840ce826ac34338906061f748de14a4a30 GIT binary patch literal 876 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI|JzX3_G|q=k+~^mQDAMx$&-eWs*6ms? zy-mPGEsJL6C7E_$}|-Q3olYpvuI#KtncK1*aan{1}l(~lRgy?giia^&8s?}6*L>u7qm z*q+xDTYD_)&7b7|6`wD!-sK{19esbke|^33OohWGtILwj&E6hMt*U+cY4dV@zi;2% z;(vWNzgPCVUp1A{ZD#eYA2Syh>CBVa_tUhpeD(JN)pfQ1ek5+FNnW^WGsljIUdQfq z=Lu_d-X)6r*}GMrKlwe zUlmB3;o)NGTB0PR#1JFFlf#hryZ>VK3x1Xk0Y|5n2Ji1?txNykza#aJDR`Qj-iy9{ zD}ZsJTH+c}l3bLUSdyxn0wfrW3=AxF4Gnb-%|eWftPBmTOw4o*%&iOzmO1Qx3ex~m zX$8>*)L>|!YXH<>7-C>%Wol?;WDL>Jloq`JMMG|WN@iLmZVjKUAIktW7=fJRlbM{F zSDea_QBqQ1rLUiwr&petomr5Yl9{NNUzDy7;^_yJCgo%%$EW1yCT8Z@|9y2HW*x*P zxQ9%24J>qxEJJ|)Ftz}CMHlE$1A|Gk4Q>H7NP?^j&QB{TPb^Aha7@WhN>%X8O-xS> zN=;0uEIgTN15_jpQB+!#oXX(l=nFv#ZaInR3ZBXNdBvgUMfL)fnIM$KhX(n;Twh*Z su9udW3qg9x`MLTziAnmIAdUKIKr@Q<3sqh30`)U^y85}Sb4q9e0C&hj%>V!Z literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/vc.png b/examples/compass/images/flag/vc.png new file mode 100644 index 0000000000000000000000000000000000000000..212e211de9e131808cba9a5ad7e3e20ed149daa7 GIT binary patch literal 868 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 lmzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI^d%8G=Xq-j&;C=@lrHs|)2c58hdvSh44Em3jL7NM-qJWiE!v zua3=iI{4t}Cx6Yv(qyTha)urYd2YS?HvRk3SC1Y(+iu|czR4ltX7bEGZ!QI0{LH4s z{^O%k=*orvKmm9J=>)XZ5wMt8e$qEi>6EdhhR!ijuTrlL{L;_B>f)tG`XB zx8a=qJ`vXFo`(WTQ+PJlx|+{gEq?3myk(4nN=lz=@0<84F*W#oKGVIb@Z*V_y;IHi zznc4~W%A~^H6M%W^pUNeuVF$ppT zDyfD4;C=B>?X%&j1Khy)RxNRjC`m3#O)N>(O#u=NMg|6!x`u|jhGro~MplLfRwib; z2If`<2Fo0FKZR)kskDOV0%|Zc&@}*RFbpv;vobZbGBSo}XiAG-fTAHcKP5A*61RrW z){kX?8jL_r^2tn2%_~l2$S5f(u+rC0&C@H-%+4%GP038u%P&gT2l4a+N|SOjljBqJ za}zW3?Ek(x53>$p6Wl|lx&{`yMwTH!e;8W;y`l?rsDZ(x*#@_O8YDs11?Q)glqVLY zGB~E>C#5QQ<|d}62BjvZR2H60wE-%UhA1j6N={{PbM%EE1-G2UbOq1k{Ji4O^CEkJ z%1jW-;zNUcV6HDOFV{;;%!MGmra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ3JzX3_G|tyfRP?)>C~)Mt|9l2VVUn|uc90A^3zyRVLgnX{+Oh+o#zt@S2#uiPasq2}JV zT78Gt{fyk9;otN|ac$d{5^cr6cJ9yTYm8=`PFnxtkJE)c3%-vnuQn{Ss5BwnV9Jsm|GbbEOXfX z6s7^B(h8yrsKL-c*8r%&FvP&j%GA)x$QYubDJ^;diiX_$l+3hB+!{VxKb8S%FakNr zCo?%UuQ-(>PJF_4)B{NYkzbIWF#M2KbP0Gnkj!((YP0Y-*|NH7Z z%sPloa1WX48d&HWS%v`pVQc~PiZ0Nh1_qO68{7hFkOWy5oS#-wo>-L1;Fyx1l&avF zo0y&&l$w}QS$Hzl2B=6HqNubeIhDc9(HDXg+;S4r6+Dyk^NK^yi|hp|GeIbe4-N8x wxxT!-TrVv#7lQPX^Kra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHRdb&7aO!4eS=;kM>`yv>QfZf%JT1*rZ1G~oD-12q zXS43VzE&?*cis;BrM$tLpD3Jdo4`1Q;hfy}wX?VWi7l6Veab{HF4^5=`5m7$zg;tn zr+>b=-#PT>+23<^Etvj!mDas|dg+3VJxYtj0#mLWuD!dg>b;;B!~A`(ZnR7bUvo2H zcj%mbF*5^AlrxB(NaW*qtf zOafPPHr&-ZR~nXkXjSvEF0o?^SZ6LgTn`?#L%l+>D-TU^5n3;$A^Ewlp@FUe zP=jHJfti)5p_P#dM1%XmR6P_8x%nxXX_dG&n9aF638=vc7^73-Mw8UHp(o4?I i)z3*x($55G)K3GNQLJC6>UtNbpTX1B&t;ucLK6U`aaSM! literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/wales.png b/examples/compass/images/flag/wales.png new file mode 100644 index 0000000000000000000000000000000000000000..05838f9f9b2bbd097bce92a50cf04a9670844b74 GIT binary patch literal 1013 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ9c)B=-Xq-`Fiv& zc{FA6=QVqZ-`^=d|8str4$RB(|yjxSjgJlKV0i5+8{88dE>gt&vxc{ceKgw)>3xP+sI~| zQjzz1?{541d-Rsrzw%agS;7<$>dSLyV$h}T^weW(&d-1I(Xe-h{_p0pywF**_J1!q z&ad)EaB{~M-R0M=U)Sfd_YeP;r}gE&!JoSKA2)n1)w+=3G5cguVBcQ;m&g82D=9wy zE#%qKpzGcHY^Q&^dh^`AppcK(ot8Y0of@ne5N+^d7N_m^)p?k85S!p0GSxM(&^59Q z0s6z(0_YW8phFD|Ce1du1=Ju3vMxA3t)x7$D3!r6B|j-u!8128JvAsbF{QHbWU38N zku*e6X;E@2gPWr-1Sz=XB&I8PCggOaT>1Tp8>ZbwCDAq4jb-fGJ&*16m=d#Wzp$P!ch>Yw2 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/wf.png b/examples/compass/images/flag/wf.png new file mode 100644 index 0000000000000000000000000000000000000000..6434e110b8882d599944a78fe0eb4d1350a8361b GIT binary patch literal 895 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJrJY5_^G|s0^wD*o?6glcI#~+xyB39*^ zmtzn+r&3vgwpi(h>=lX^azY;|JQ6>lRZ{XY>c~;0DSm$$^71oYcZa^Xa`xAr=l@=Q z5E5uH{Y*zV?R@&IwEw78TqIN@Cx?U(G2>O|AJ? z$`O0@WB~7_khy<~%BC@C++}#Te*M%nW>QB(^Z5DwW(8;pa2A!6iKRAMvl(7Gd*_U& zxZ2jvor@Q5Y;9e1|9q6S-?Z?ZGpDQi`A$+%TB8y2n8Fo znVvoWb^fwE`#S!u>F>i1$Gm^%bL7Oww9l@~KX1OhcKhwguU}WLU+(bh_3P~$pFOIb zXMJ>~pViS;y`V3@_gC+&TK)C;lO?;humm-RFsjEM35`uTpmHK7J3B4^{m)}=rInW1 z+ugIaIx1|5Inx+@#8dd;S>J0fcX((loMtA)wS>u{G^NVQBfMBvEws5LG@N&H5Np6s zmOs^Byz7q`&G{kV*7$##qitaok1iW9T2xD1BTABsQWHy3byI)@gOP!OrLLi&uAy0o zk&%_5ft87wu7SCgfx$9|-A`c}Kq{>ux_}xC4Rj5F8Vo}W%&bfet&B_{8r%=2>Y-@J z%}>cptHiCrY|hGGvsL6jq^4vh>g5-u>w|du z0i{VfnaS}f`MHUidG>!_orhTmu?g-WQ(XfKT_ej7pg)W)fL_rBI@G{m(rklUKn;>0 z>w@#sO3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%NkbHs7A2=LxHV*Nr@*SkRd N44$rjF6*2UngBw1P{;rP literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ws.png b/examples/compass/images/flag/ws.png new file mode 100644 index 0000000000000000000000000000000000000000..47c0eb03e1720f81b52b7796bd120e653f1910aa GIT binary patch literal 810 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHfJzX3_G|s0^Jm}>VDB}A4^7LjmCtsO} zD;pMCaQtGlUl6(f;u-ms_X{E#1rh~3OeS~)FH&%lQW3E^fA9M|Hvizy8*WbCE%yA7 zXM?hi8k5=koUTNcf2yn(a^}5zn}7ZF?(pgTTcft#u9e>3*PIk+&U#68{`d0LQ<)fQ z%F|!}d2>r=%IVp2&lPtD8@ce^ePLo=Y_u{=Ie;OlCu943waIHPTD0FBd*W!!MKc0LT{_O9+87#ggyJq_5Mlwubnx>^~xO;bn1fQLmNP^;7fo$}_Vw z3sO@u6ZP_o()B?+{eaS>oXq6-l>FSp%sl(Qug=4)gV+T3kg2YLg|3lh2+$wK7C^7) z0v&2#Fln~IEuaQTkafZNX(i=}MX3yqDfvmM3ZA)%>8U}fi7AzZCsS>JiliZmN{f8UZ64)gtGY1ARn0P%gf94(h_qaNG~}*S3f5)Nk0>$ aQ9li6MzMaOs_R{#eg;ohKbLh*2~7Z)Z5U<% literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/ye.png b/examples/compass/images/flag/ye.png new file mode 100644 index 0000000000000000000000000000000000000000..54b83d0cc140276174e78844a41db0dc1ed1abcd GIT binary patch literal 761 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGPft(+nE{-7@=co4DdN~IQw4R@O+s4CT4O7zO z-X)xoer5@|Gu_1=a>clo337CliFxY0n`wFc(ZqBv(LWMt=l&d;!e6tvd%xIXR)qyj zFXqWH-f-gba#uPm*;jBukfZD2gWsRMSs5bo*Pkd^)|_DVVu2_7-B~w$?%lEHSh0O} zuQ>M{zYV&Mo1XYA&#}DhePH#5JNMxhOTUBvm&B zNH7=~7+C5W8tNLFg%}xG85&rbnCTjrTNxNEbJ+b9rU9hV3Ze_B!O%e00I0z*#K6qT z)X>Vv1fs$HV5%O9hTQy=%(P0}8qDV0odnci1agv3W^!s?aVkSbNlAf~zJ6++UU_DA zWFYKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkDP?0o5QE5?f zDubJ&F9a#L0J88sr0WeR+AgURq)<1nDK`=j!JqCh2E_ bH0q}T%_!C{RCT=z)X(7Q>gTe~DWM4fKXeE3 literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/yt.png b/examples/compass/images/flag/yt.png new file mode 100644 index 0000000000000000000000000000000000000000..045a76f97deb78ab6c4a9ba9487885f81d18e3e5 GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHRd%8G=Xq-1aZ=W5UD0B4V=Rb;^=2FU% zGO;{b+d{iCWSjPhgx|IL#l})tSa5awBaKU3PFtHNlyP%jKN3;&`0VFD?=1ON-v4{x z`HoeqHuSQ1GARTv`tH%GlDy=*il>w$qlhb`!)D38z6)k$H73g>D9~e; z-|}^>Wq^g!YHm4Jh*7X}5bRy|;8KGR2u!E?gDHDPQqZ_E1o)lc8=4Epe` zq~x=b>bkJMb@!{!>vA5r`SWMd#)1oLZ+QLHPi2x#jLqktuiiUv$oDZF=(m%p^%&)k$e?3Rg>eE*|&hXsD0P*4PvCX5)QeT&b40 zMwBEMr6!i7>ZSk*1|tIlOI<@lT|=`FBO@zA11l3VT?2C~1A}D_yPv`|fK*yRbOALO z8t57TH5i5%m|2+`S{a!@G`Js3)kD#co1c=IR*74K*_^wRfEtWIPV&i2PR%P$WymNg zDX`MlPtDUS&&GEra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kHZd%8G=Xq@*w=I=4NQ0Dl@^PB%}+xA>i zY8J28!~|3RQVpk;NlO+iP*}KNU1_J173b$5w~m1AYw{drtvv$V1YBK0nlul-3Xt1W zd1Bri%arPG&%giu{93{B!=tm(GhQ5V`Q2&0nEU9?EIa)JY)nxO%pDC{8~8#R>>J7- z%jP_io3dH(Zt7{ST*KT=?1g zwW+c3bFc2c6OlzJbGP=Lc>OZ)0JFjGvK;ri)IY2Lug-LlQm)p2HtDTw_i4SZIje#T z7x`WF{{1>QSgyfo;fCG%GEzrUH2+Q(&fccVx3a=(il>=?<-2n!^Y6?wVVLps<>wVK zo#K9Gd4D~oUd=Ds8^ybJf~dDsSZ9m5C$}OGgP>iNMcI=H_w-f0*SbtrE_=m3*E3K^ zDKSjxY0rLENePC-$M@{By?3_tLGjfH>ASWSwjHdi?>ATZx&WP0x@Z=s&-ZoQ&mLNQ z`upru&h4xt9v4phD_$?BI?r}p%hOb)txry9Z8pl*o31AoFJ;@e`sjiFqwH0?&*ezh zeN?dhzfx?=!t4IRnwyiu1l1QQFux_}xC4Rj5F8Vo}W%&bfet&B_{8r%=2>Y-@J%}>cptHiCrY|hGGvsL6jq^4vh>g5-u>w|du0i{VfnaS}f`MHUidG>!_ zorhTmu?g-WQ(XfKT_ej7pg)W)fL_rBI@G{m(rklUKn;>0>w@#sO3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%NkbHs7A2=LxHV*Nr@*SkRd44$rjF6*2UngGmvbx8mK literal 0 HcmV?d00001 diff --git a/examples/compass/images/flag/zm.png b/examples/compass/images/flag/zm.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ab90f56cfb56b6658e54254c10213a6b7bf5a5 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kJ#JY5_^G|q=kwD!82C~)+A@BH2-7sCZ& z)4HZsdx#f^YX+tADyDMD?_l=ct{CC9YRMK4O{Xa;3D0cQj@p0kI&9$c(fad)Gt=z! z6Xp5@9U2-KSUFaRpJgcc_fE#4eD_>Gq2qbh_o^yve*HZV61jS5^W@WpXZQUseqJWz zy6wuewI6Q3SUq*Q{&xFmq3PA__T>fwCAT(O_ob{$SZi|elx2(7z0#W0B9JL`;{5arb1tlGyBaFO>C9vh5U^$EF3b2uM_>0H zf44sTb$$7*_3GUXlK1wPlssJBaOf+qSpze}f$#+0AM9t>mwPL&5Z?j}M%5D6h?3-@ z)Wnih-4r0fU}RumscUGcYiJf?WMpM%U}a*aYhZ3=V6e<#_fwb#kV-3vE}#ZO16>24 z2Ez~oGb>X=Dez3>hUQ1y=g{ zsd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`CY=V2pRM)^l*T^yi z=nrEHpjUK(4mB{CG~3`7P=h4My5Rh@lJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1G z(hxh*5iMbG@mzra@ocD)4hISV`@ zi-EKU7`vU!wgU;46*#5?X|QgFuOHGP85kI6dAc};Xq@+*XrD2;P{j4V{@+pUEt?B-AC4HXN0n0 z{Nz2q@9pL@71~j7zQ!*rfBW<4&r>~*xHze}v*~%==_xZxH#3$^72EsE8NFjz>Iud_7esUh>&~`;1GAF#l)q zr`@MlXMfL&>2OrkJj=8|)Az7LhQub#E%Kh%YWD=KkY6A3^V9E_>yN&Cc|Cr+-%y)7&F`(&^EKv%duo8qa;cU3$7&Rb&vG z(}5)u1w3aSXcFx~Cp2_)n#i8d#_5zieAe6<22Km5TUtV6W rmzJ0dL3+vgx%xSYN&1-}jrwUoGm7;KRbB4_^)q<7`njxgN@xNA*kM=H literal 0 HcmV?d00001 diff --git a/examples/compass/sprites.html.haml b/examples/compass/sprites.html.haml new file mode 100644 index 00000000..32a3d771 --- /dev/null +++ b/examples/compass/sprites.html.haml @@ -0,0 +1,23 @@ +!!! +%html + %head + %link{:href => "stylesheets/sprites.css", :rel => "stylesheet", :type => "text/css"} + %body + %h1 Flags + %table#flags + %tr + %td.us + %td.de + %td.ca + %tr + %td.au + %td.cn + %td.cz + %tr + %td.nz + %td.jp + %td.scotland + %tr + %td.tw + %td.rs + %td.gb diff --git a/examples/compass/src/sprites.scss b/examples/compass/src/sprites.scss new file mode 100644 index 00000000..24e8d2bb --- /dev/null +++ b/examples/compass/src/sprites.scss @@ -0,0 +1,12 @@ +$flag-position: 2px; +@import "flag/*.png"; + +.flag-sprite { + width: image-width("flag/us.png"); + height: image-height("flag/us.png"); + padding: 0; +} + +#flags { + @include sprites($flag-sprites, us de ca au cn cz nz jp scotland tw rs gb, $flag-sprite-base-class, $prefix: false); +} \ No newline at end of file From 181895713184335d124e6d13876371e326737368 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 18:02:49 -0800 Subject: [PATCH 05/24] fix some bugs when building examples --- Gemfile | 1 + Rakefile | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7f1994df..7bc25b52 100644 --- a/Gemfile +++ b/Gemfile @@ -7,6 +7,7 @@ gem "rails", "~>3.0.0.rc" gem "compass-validator", "3.0.0" gem "css_parser", "~> 1.0.1" gem "sass" +gem "haml", "~> 3.1.alpha" gem "rcov" gem "rubyzip" gem "livereload" diff --git a/Rakefile b/Rakefile index 772acd60..dcb44d0c 100644 --- a/Rakefile +++ b/Rakefile @@ -61,7 +61,7 @@ task :examples do puts "=" * "Compiling #{example}".length Dir.chdir example do load "bootstrap.rb" if File.exists?("bootstrap.rb") - Compass::Exec::SwitchUI.new(["--force"]).run! + Compass::Exec::SubCommandUI.new(%w(compile --force)).run! end # compile any haml templates to html FileList["#{example}/**/*.haml"].each do |haml_file| From 6c7b20764a5bffa86e8f31aaba3a2e684fe2e235 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 20:20:18 -0800 Subject: [PATCH 06/24] Another sprite example, this one uses the generated mixins. --- examples/compass/config.rb | 1 + examples/compass/images/.gitignore | 1 + examples/compass/images/emblem/favorite.png | Bin 0 -> 1507 bytes examples/compass/images/emblem/important.png | Bin 0 -> 1468 bytes examples/compass/images/emblem/photos.png | Bin 0 -> 1435 bytes examples/compass/images/emblem/readonly.png | Bin 0 -> 1050 bytes .../compass/images/emblem/symbolic-link.png | Bin 0 -> 1111 bytes examples/compass/images/emblem/system.png | Bin 0 -> 1785 bytes examples/compass/images/emblem/unreadable.png | Bin 0 -> 1268 bytes examples/compass/sprites.html.haml | 14 ++++++++++++++ examples/compass/src/sprites.scss | 17 +++++++++++++++-- 11 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 examples/compass/images/emblem/favorite.png create mode 100644 examples/compass/images/emblem/important.png create mode 100644 examples/compass/images/emblem/photos.png create mode 100644 examples/compass/images/emblem/readonly.png create mode 100644 examples/compass/images/emblem/symbolic-link.png create mode 100644 examples/compass/images/emblem/system.png create mode 100644 examples/compass/images/emblem/unreadable.png diff --git a/examples/compass/config.rb b/examples/compass/config.rb index bbb651ed..9c3646d5 100644 --- a/examples/compass/config.rb +++ b/examples/compass/config.rb @@ -5,3 +5,4 @@ sass_dir = "src" images_dir = "images" output_style = :compact relative_assets = true +line_comments = false diff --git a/examples/compass/images/.gitignore b/examples/compass/images/.gitignore index 266ce3ac..6bdf2a8d 100644 --- a/examples/compass/images/.gitignore +++ b/examples/compass/images/.gitignore @@ -1 +1,2 @@ flag-*.png +emblem-*.png diff --git a/examples/compass/images/emblem/favorite.png b/examples/compass/images/emblem/favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..8482a047ff5fe0afb254a8601772e2b9b318a3d4 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fr0ssr;B5V#p$h6Vmm@oC63p>w@kMyEBki1 zY;~-7lxe5QnN21|uDlxqG??^xG^Z?(c6_0vwMpo+)2^3`@^sekTIKP@NyE#?_{3Dv ztqXE>e?`Q$m&%lu-M(o#|NZ{%nX=Q%zMNy1i#x~sy!_th>iORdC+!e^ct=p{!QcHG z&d-=`d%pIR_s-LkG+rLOHF@Gy_xB$5b(uZZOt&wut32Ap%BFYZ(ge}?z1p?*vy;<8 z-k2Wy$ip7}S@-rdKAp4M?%wsxj_x~jVn&^<>6`Yt3W>vywtc(vDOEZw#kzWzhIoE} zUd+`K7g+84Chgt5_TGHvd+)8=2zuYz7qNe!63VYk9^&i8M%1sVb_wLl6UFN>+&7C_*O7hab6dc4D*_vm+ zXHn3b?%*Wk#>BaNE%W7@rx)_uegA7vSJYo}kGUZ6@}GUXWrW+0Ocw4HXGzeVUM zHdFs()AU0U##b}8-^kh!qqF|q%Qs~rEL&r*g`VK*>F^3Yw0i2S-)a+Iy-Lejv%tmb z-VTM%t2aNMHm^~idzej-ODRVnxtZg2`;W!KEk~oBd!Il2cK^J5eeX}9cBzDe6F>EO zWqz6ex+v=QMn{(*UXJyC5BvQlg(&5T|8x&GDk-|q|LDi%?MsDuKggZ*7s|CP&N{OG zlB>y6K@qJZ!hv@`<}T0<`}BKhQc>!jlAW=8tb+5;bltrq8M*h{-HpMQ9p5`$`hITz zUju`-ZR%_ia=OQq_x~{yi&}eEm9;qUp3k22Gn+M!*KEuB+7+`s+xP3C4>2nqUohOz zSNz=l&_#Rq|9oq&y_x9cn|}1ojr23g>yrCyzkHbV?dV_IcUNXQPEqM?&XSKff8pil zhflj(6OU*8mA-Ujj(irI*|C(k7FT|&XRrUU*6!_JA31fNO{I*gp=`GKhs&J@7X)bh zt8uCNr{lxaxMYXs4T;ALkqegYOA~jx?%md3z3Z87Z9e>)KVq_jrC-js%fL*pTH+c}l3bLUSdyxn z0wfrW3=AxF4Gnb-4MGept&A*)L>|!Yha{nWDsIx zY-MC-Wn>J|@H!IUxVPy)`U;)wal5K%LP=gW3Nj{m$ zsd>ez3>hUQ1y=g{sd;+knc0~IsVSL>dih1^`XHWuKxtA=W^#N=er{rBp8elf=V8`C zY$D*HBe!>c1!|B4Sr?q2R#Ki=l*&+EUaps!mtCBkSda>`X!biBDTJcZqU2PDki@+7 zd0#dJ+R+O5Wl3JWyl3xJ!0N9jx ZkSXy{Q}&!#dkts`gQu&X%Q~loCIGy1hM)id literal 0 HcmV?d00001 diff --git a/examples/compass/images/emblem/important.png b/examples/compass/images/emblem/important.png new file mode 100644 index 0000000000000000000000000000000000000000..260bd900dc07dd1d7a46b38923ea9e86c76d37d7 GIT binary patch literal 1468 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fr0s!r;B5V#p%|mu^BR#qEob@7AYt#)or!Q zm>T6Ra5>5+N$T>JpEpcyrfimGnAX=hu(D7QC~& z;vms^ME99yTHfTD5|g+OGw0na;w!IJ=Krt%?QZVwbS!w-%nAgka=oAzwkuEj53Yo)Qt ztai(pYuC_mCw|@b`7a%H*u6SlUOoF;%h)bUyLaurfQE$omWSH&rmTOH>{TNBGUS%2 z@9zlFJ0DHs)Ba1I5qYF*c5ub|3zAl?#{X9Tm&s;4lM$rX*Q@jX)$_+%5)OiU%zyrF zZQ8V#J!Eg$EIqlUKYki-^%dhf)qK{c_s*83+TX+bR^RV>94=Awd*RaF%FDUgFDjy@ ze|}u9d)jN6mD0^aPkJ8f_}uyP@Z{t@@yu*L-e{%Y^EsDyW{LRrw%cVZ7fx8`VZ2+- zn=wj2^cZ+h@{^*8wns|DE!Pc^)NSzfioHKHWBC^fMpRW}7l zFc=vaSn3)Y>KYn^7+P8xTUZ%d>Kd3^85qpYI)4zR0i@Cjq6?_O&_LI~NY}_9#K_pn z$jr*f7^2~IN*=Hrf!F}nkei>9nN|ta0JOm{#K6MJ6sW-hqTwam0)3zcBaoAPGLuvD zic=XfN=gc>^z~Eo^vW}{GYe8vG86Uki_-N$JpF*uq@2v;_>}zI#LPVVzpu{2tb^D@ zz(YrF@B9kXAPKTAIKQ+gIh7$KF)uw|!818OPr)ZMsVK3iGUWW*CZHlKgrfM+ARm~s uNBblYRaAyYp(%KVeoYIb6Mw<&;$T_mUk}z literal 0 HcmV?d00001 diff --git a/examples/compass/images/emblem/photos.png b/examples/compass/images/emblem/photos.png new file mode 100644 index 0000000000000000000000000000000000000000..3e991907bc0a1f013c6067e09294ad553506bd9e GIT binary patch literal 1435 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fq{9ar;B5V#p$h6d^2QHC63pB-fDgKOx?DZ zX1n1+)_69@n*Y8!Go>u8?3lCK!Xvz$?9V^(z5i@yKkxbfKljD|E%(3i#-YA` zKM#*t2Cx3Di<=koUq3zBym8;c%v;5qbe1o^xMIcYU%?YS zQkDd*l<7a3eBY|?ao!Z|JP`>Ai606=oqHyGs933bR^2L;5pk6?^c8+kv@;}*$?m6r z&>Sh7ue<8p>ouo(-JN_k&5(!L_j15hg{4O$qeXn&xjC=v_n!Td!!qqv?lIwy{cUY+ z-&~ah4{p+_s;=Is!yS6p?fyaKprY{An+&FB`n>hsTb3|C`jn6K{yfe-+g<-zY|r3g z=zDBnY<&2~4~wHof{p?lt9VV`-qdeZK6xOgY}@j^rd35{>;C*)c6jqDvt4-xmX@9x zB1&`pg!$TmZV3%NnPQ~T^YWqCCXO}3u==6E#ScJ`|1C4SNm@$7oyMh3RLYGqC;|Zsq z-ViKXn{p;-8%tiEN#&o7W?WSh`}*{F4jk?{3sl z#+wVXEceu^ojJ1Q-B4opA_adsM+JS^pAP#Q5(n1uG8VNmwv}9&hb#{_Pe_~fM17U#i}zC-7n4AJz?SQ z(@+2XZi?9E;S?=7MWN$sM0RkDyl5j^Lr`VsG~2*?HCx+-k4JU7s=Dppb#!gbZ?^{; z3$8GCJ8<0C8MN)h&CilHdqkJBsLZR}G_~(r$Ng(vOxse|d2N&p2%ot+p>b;TjR*1! zDQtXOKmKdqZ}{!9&DB+>zn)|YzC3knS8Alol+ag=@2^ELG1W~dy1C-+pIS#Lxi<@z zdLA$Cdab6Yz>#3R?Ya1}J8KWT>Sw>gz-{pVRPobqZ%<~$-&Z_VH|OCY^T;O0iSGQ` zChup&75Zs(D&4*}wR^spmsRiqS^N93#RsZ-gU`x%Z2xrRz`HYIDO8{bwgx$^my z{O1^p|IF_hBNs5tsQX?jUv==h-HY-CKX09`JM;N(7Bkz1H|w{CY8P##uiqFmbwP!Rt5&Mv(6ucX#lCT zg6INjFf`CLFw!+L2r)9YGBUF=GKOe)ostJECLlI|HRR@}WTsU@H2`fe3^A~Qy4s5 L{an^LB{Ts5*ZXBU literal 0 HcmV?d00001 diff --git a/examples/compass/images/emblem/readonly.png b/examples/compass/images/emblem/readonly.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6e08fb6dc3c2f46c6b43e4178c1feab9ee6680 GIT binary patch literal 1050 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fq}`w)5S5w;`H1pXR|~c1&-H;8Y;N0zj^lv zdw{;y&k82NS~l?-7Eu=gmk$CQf}Ir~RTL#YXjPe1eVOn?W46r!HDh6ZwzI1e(oQ*F zfAcNJ&YacR|GLTkpWpZI^8PSm?(CT??-+gk#JyMj`gQT}@%YXK!t!?ewyWISblGiE z&do!Qq^k}8|6w~InSOu%tT}1<`pfU;DRU?#C~+t_cu26djC*KK8Bb*tv84T{D%H zpG(T`_t+bD{EPvQ;L0@@U!7TKC&$A2qNMERot*Nit5^3gUL_I#;FR}^r{3YGawje0 zd@ZeOH8)nkbwdF6_g?}>UsbHt$S^s!>y%V-vgqp&XWcIv+Adz^Ejr$dYcl&6ePOs+ zc1>5wJyI}4i(^gxmR$J@zPC`YZ$H@UOu--@Qcf4aETdlfyx5q0;9xWGrLmJbCU-)=kGtQwEO?%PewkFDPWZN_|qVOp}sNxfd2#Y59~KS=gY9^?G^uja>M_O6UA&#_~RsBZCklV=E&wD1z*Gvc0jwc6KP5A*5~=}c zgJFn)g_S8#g9SvxOST32Kn+G9C;4P1r{)!>GGvsL6jq^4vh>g5-u z>w|du0i{VfnaS}f`MHUidG>!_orhTmv5A0(j@;h)6{tZHWLFVdQ&MBb@0G70%5&!@I literal 0 HcmV?d00001 diff --git a/examples/compass/images/emblem/symbolic-link.png b/examples/compass/images/emblem/symbolic-link.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee44a05aef40dacbb61439b07ae4c35e3687344 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fq|*i)5S5w;`H1p=eE!i`$auOz)`@F+p)*s))uabE!zSEIMsG!F3dZvAZz}pCuH^%u4CrQ zkM4c{bKYZ)$_IO^-&cOGJ!g6Ux3i1%dOp zCV%zSSKs-w>K^*5$;Y!{@At2sd)RzbLY&?rcL%*I{ou=w(n}Y z9~-uKpXkoe?&C2C3*Ue7?q%nlF~?-RmI_5j^X^+ybI!z6n4A0ajMl9i4lkMT;CcW1 zIg%FKOigHZZbDmcMX~ua zKRGDFy$iT5{K9T z){vW@l9^Ts)c~}?FvP&Z$`q)<0;1t1+X8){1|yJ@d@_?$^NLd$GD=Dctn~F$^YqFy zvoi})Q!*3v@{7{-K|K9{(xjZsohYM8HEwZtwgG)F276E;zrm zC^?lOBrz{NU%@juKTp9YGpQ)Cs50dI+a{nQD}&>$a}vr0hf_0oz`Q&UolvrF;| fz-|MZ5)U#Z9%{;-6Kk&lO=0kK^>bP0l+XkK%F~(!euPDqUSx>`^iI}n;GMFMvGij6u>t}79G!~P!U)j$7x%ZrV-{;=*d41lW`*7~%(4ztR zh@A)k0Q50uZ*({e8oR$qH~=o-GZqLhtA z0naB6(hoeK=$ShK09$vE{Cp_xeMQ&fgOK4!`TAKwtRR+NnP>H~#6}uHF54-JxYHcH zCK-Bhf?YJUoV}V^F=E3m`0{*$oy7P##a=?OjJfCU7{NNmDvY`7#~xj7aMRp%OQQSq z(G7VAz7_S<*z(0Yn@`Hb3bklmyy%sr^QYV%0CA`=|2#hKU;-GJ}XVrqfR!rY7By=3efn|%}r-)1oK zIu0O!ysfC251$#Nyf$|CN;JQ_->^*2M3EBqtmtn(d%bNpS@c8-^}cP%+J?5 zq^4o zkLUQlR4M?})yG*Qfda%8ZQmM+lII?63OnVrgG?r06ABRn9&n`*F^nQKaLu(Q2?}a$ zn`s@#ORZTy`4=1;g03t@Zog!c@_;4m#_HwQ=9k@$;CErI3dv0&z*JdH=SSuVYQ1qvj~uG)Tsu&n0RDr|g$`Cx660p^jdk zuO0ezKwKmuGy3m4>NYl7IXM}WT0hwr{7$8+X=yPjCx;#`DJi+wvJlr*+x1nnB9lT5 zmqPEj`dL*~l^gi9oFX$_RjVb9PB-dx4$rm4`TG-opP0|BwGBKH(v_z>dk3VoEG{CX zdWQM+@zmE%Cx{A8>lHF0a*Vg6F!TI$vguh0+eWV|lO>EU^fA&>JV@(%Bv><4H|^yf zusoO&XrBF8!%BuUTz8-ltESGsKU2vbZ?DΞ57YX=Xh-i}Fh6uk*(Tm%1;T&`n`3 zc>GGw)u}E+)Y8n7O65!#O?~T=nkxKx^?9*IUkqMe^zH}I>6hXut=-G&fr$lI*Ka3) zNjtl>Y16uq9R`xR4t?*z-ibFQ{R^v~tc4t}tXydS^WiSPg@p^>1XHiG zATAP60Mll5g}7J{1U>kXt)>hEz!}INu{iT)ONxazGE+12Q{8*vzrC2yP}*d+)yyRN z<_nh9^$kj%k?h6{FCXa*&xA!AWg4LM&~Hzniod@Chyf-r90~^#fP}y=a7aA>rL(M^ zeV}Bo*WEqOp#O3&pLl}LNCfG85W|E9zy*u-z~FEg9F~IfAmH5zI1dbVKLLvseKz>y zBd`%k*rXr;hs9uBFfLe%3!dQOMsUGz0`p7`^a*b|d;r*7CM)*b-vH!*qhQ?$t`Ok9 z3CzJH&Jf_TQBn|#0dkT+;0&M7BRD&Q9H+Cacoq+2vgl6S#5m`TnR94zOahA$#pJT- zERNUO{|7(XZ94tShPuZes35>>!|oV2IgtSZ6gnr4izYF+9CQ#XCXt?ajxxBA4FwVY z35ueUgFcqU--vgLO$0$Em=w?F@;=n|AxqRomZ-n8Jp8`tM<@$GA|CaV`bKB}1@dqB Ao&W#< literal 0 HcmV?d00001 diff --git a/examples/compass/images/emblem/unreadable.png b/examples/compass/images/emblem/unreadable.png new file mode 100644 index 0000000000000000000000000000000000000000..9e74190f87f18cf5a0b1a3fb2f9f98a516c03f8c GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE0z%d<2gY`4qIr=h!fr06*r;B5V#p$h6_Gd?jiyXIq{?fB*+Qh<8 z=QcjI-~}dXDlY?89rWJpQtx0i?S`MGAJf5;@eg$QR95vGeqFHAenHDDp-ou@-g71# z^j2t0u$iJ)mg+t2-sQ>fY$fL{N!RRkY?Iqzv*Y_7{rSIbpUVY?{_8JbymtLM>yBr; z-qj|b5nnFor6TnH*4uAF0kdY#%-lWq?`vUUVf$yFfBNW6cXnwL3JukodTQs{vu7XO zyLZoGgUTwel_9tEM7V-qitBS+zb0^B-p^vLnyIz7_WbnZ?`i_ zx9mPLSLxJ&$>N=#cS#G0K4*E9d^9+D0=M{wu<%8%+Y?>p`8-^!^SGvR=k)Zoy*Ym} zKK6y)u;RP-*nPrD2Z4b3yH8%+Zhpay*`|Nu)KrtnosND=%O)?lTgF|p<>CUf^2yKU z*9-2e@qBwsr>dY~ZJ6P{`@*&tlUGYszxgdwQ_Ong;4iz9by9h`AK!<^E1y)6V%h8d zkSF3|yv@~)Fwsy}`;KpH>D%5b%LcyXc-?tuo_J^3%Ko(nUrg%a=vbhv9BaXNg|#5| z``3pLA71%!h-oT2{|0yWy=6gHSG?^zn-SW3YmK$IoBPiv?_#sIN*y@(=uy&P)*JWl z>rXrVRDRj=FLj}-@SX+c+skq%{Slt`Sa(_lP6EgPo{i& z6R@gq^}oG)_x`P38S-mq-1_|!*VQXMVoG)>kV;gz`tw@o)~|BEZ0{dWIQOm!m=DS5!G1+f9FAvZrIGp!P;0ce9^h=GNbDNqB{hL>y$ z^nn_TKu+?>Ois-!PG!g_DJihh*H6vUE6>c%EJ#hsOw`LSO4kSR^aDzhax#FYKdq!Zu_%?Hyu4g5GcUV1Ik6xWWYO$*Hc|*h zrA5i93?Yem>G=wt$@zH-KAA~HiA9wm=ifE~6;bST@gP&;p{DFPvGy9!6b4UMKbLh*2~7Z>@Ds2A literal 0 HcmV?d00001 diff --git a/examples/compass/sprites.html.haml b/examples/compass/sprites.html.haml index 32a3d771..c33bdc72 100644 --- a/examples/compass/sprites.html.haml +++ b/examples/compass/sprites.html.haml @@ -21,3 +21,17 @@ %td.tw %td.rs %td.gb + %h1 Emblems + %table#emblems + %tr + %td.favorite + %td.important + %td.photos + %tr + %td.readonly + %td.symbolic-link + %td.system + %tr + %td.unreadable + %td + %td diff --git a/examples/compass/src/sprites.scss b/examples/compass/src/sprites.scss index 24e8d2bb..e791f095 100644 --- a/examples/compass/src/sprites.scss +++ b/examples/compass/src/sprites.scss @@ -1,5 +1,5 @@ -$flag-position: 2px; @import "flag/*.png"; +@import "emblem/*.png"; .flag-sprite { width: image-width("flag/us.png"); @@ -7,6 +7,19 @@ $flag-position: 2px; padding: 0; } +.emblem-sprite { + width: image-width("emblem/favorite.png"); + height: image-height("emblem/favorite.png"); + padding: 0; +} + #flags { - @include sprites($flag-sprites, us de ca au cn cz nz jp scotland tw rs gb, $flag-sprite-base-class, $prefix: false); + @include sprites($flag-sprites, + us de ca au cn cz nz jp scotland tw rs gb, + $flag-sprite-base-class, + $prefix: false); +} + +#emblems { + @include all-emblem-sprites($prefix: false); } \ No newline at end of file From 1f1d93a072a2f2f82476f371301b41167e0508a6 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 19 Dec 2010 20:20:58 -0800 Subject: [PATCH 07/24] Touch up these docs based on a review from Brandon. --- doc-src/content/help/tutorials/spriting.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc-src/content/help/tutorials/spriting.markdown b/doc-src/content/help/tutorials/spriting.markdown index 90ec7e42..40f0e6a4 100644 --- a/doc-src/content/help/tutorials/spriting.markdown +++ b/doc-src/content/help/tutorials/spriting.markdown @@ -146,9 +146,11 @@ this in mind. ## Large numbers of sprites The magic stylesheet can get very large when there are large numbers of sprites. 50 sprites -will cause there to be over 150 variables created and then passed into the `sprite` function. +will cause there to be over 150 variables created and then passed into the +`sprite-map` [function](/reference/compass/helpers/sprites/#sprite-map). You may find that customizing the sprite function call to only pass those values that you -are overriding will provide a performance boost. +are overriding will provide a small performance boost. +See a [concrete example](https://gist.github.com/747970). ## Oily PNG From 42a6dadbc084945f6b20bfa396f2174d51611bbe Mon Sep 17 00:00:00 2001 From: Eric Meyer Date: Tue, 21 Dec 2010 14:31:50 -0700 Subject: [PATCH 08/24] properly document transform variables --- .../stylesheets/compass/css3/_transform.scss | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/frameworks/compass/stylesheets/compass/css3/_transform.scss b/frameworks/compass/stylesheets/compass/css3/_transform.scss index 064f7ce3..e6fa3b4b 100644 --- a/frameworks/compass/stylesheets/compass/css3/_transform.scss +++ b/frameworks/compass/stylesheets/compass/css3/_transform.scss @@ -47,31 +47,45 @@ // Defaults ------------------------------------------------------------------ // @doc on -// Transform Origin +// The default x-origin for transforms $default-origin-x : 50% !default; +// The default y-origin for transforms $default-origin-y : 50% !default; +// The default z-origin for transforms $default-origin-z : 50% !default; -// Scale + +// The default x-multiplier for scaling $default-scale-x : 1.25 !default; +// The default y-multiplier for scaling $default-scale-y : $default-scale-x !default; +// The default z-multiplier for scaling $default-scale-z : $default-scale-x !default; -// Rotate + +// The default angle for rotations $default-rotate : 45deg !default; -// Rotate3d + +// The default x-vector for the axis of 3d rotations $default-vector-x : 1 !default; +// The default y-vector for the axis of 3d rotations $default-vector-y : 1 !default; +// The default z-vector for the axis of 3d rotations $default-vector-z : 1 !default; -// Translate + +// The default x-length for translations $default-translate-x : 1em !default; +// The default y-length for translations $default-translate-y : $default-translate-x !default; +// The default z-length for translations $default-translate-z : $default-translate-x !default; -// Skew + +// The default x-angle for skewing $default-skew-x : 5deg !default; +// The default y-angle for skewing $default-skew-y : 5deg !default; From 3c99f5eaa83f86b1f6dfdc5c30b5f76e1c10df05 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Thu, 23 Dec 2010 09:40:07 -0800 Subject: [PATCH 09/24] Better docs for the images module and deprecated gradients module. Silence deprecation warnings. --- .../examples/compass/css3/gradient.haml | 4 +-- .../compass/css3/gradient/stylesheet.sass | 14 ++++----- .../reference/compass/css3/gradient.haml | 13 +++------ .../reference/compass/css3/images.haml | 29 ++++++++++++++++++- .../stylesheets/partials/_typography.scss | 2 ++ 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/doc-src/content/examples/compass/css3/gradient.haml b/doc-src/content/examples/compass/css3/gradient.haml index c15144bf..3417cc46 100644 --- a/doc-src/content/examples/compass/css3/gradient.haml +++ b/doc-src/content/examples/compass/css3/gradient.haml @@ -1,8 +1,8 @@ --- -title: Gradient +title: Background Gradients description: css3 mixin for css gradients framework: compass -stylesheet: compass/css3/_gradient.scss +stylesheet: compass/css3/_images.scss example: true --- = render "partials/example" \ No newline at end of file diff --git a/doc-src/content/examples/compass/css3/gradient/stylesheet.sass b/doc-src/content/examples/compass/css3/gradient/stylesheet.sass index 77aea812..d5edcdbb 100644 --- a/doc-src/content/examples/compass/css3/gradient/stylesheet.sass +++ b/doc-src/content/examples/compass/css3/gradient/stylesheet.sass @@ -14,30 +14,30 @@ // This will yield a radial gradient with an apparent specular highlight #radial-gradient - +radial-gradient(color-stops(#00FFFF 10px, #1E90FF 30px), 45 45) + +background-image(radial-gradient(45 45, #0ff 10px, #1e90ff 30px)) // This yields a linear gradient spanning from the upper left corner to the lower right corner #linear-gradient - +linear-gradient(color-stops(#fff, #ddd), left top) + +background-image(linear-gradient(left top, #fff, #ddd)) // This yields a gradient starting at the top with #fff, ending in #aaa #v-gradient - +linear-gradient(color-stops(#fff, #aaa)) + +background-image(linear-gradient(#fff, #aaa)) // Same as above but with a #ccc at the halfway point #v-gradient-2 - +linear-gradient(color-stops(#fff, #ccc, #aaa)) + +background-image(linear-gradient(#fff, #ccc, #aaa)) // Same as the first example but with #ccc at the 30% from the top, and #bbb at 70% from the top #v-gradient-3 - +linear-gradient(color-stops(#fff, #ccc 30%, #bbb 70%, #aaa)) + +background-image(linear-gradient(#fff, #ccc 30%, #bbb 70%, #aaa)) // This yields a horizontal linear gradient spanning from left to right. #h-gradient - +linear-gradient(color-stops(#fff, #ddd), left) + +background-image(linear-gradient(left, #fff, #ddd)) #svg-gradient $experimental-support-for-svg: true - +linear-gradient(color-stops(#2AC363, #CD8C14, #9C4CC2), left) + +background-image(linear-gradient(left, #2ac363, #cd8c14, #9c4cc2)) width: 80px height: 80px diff --git a/doc-src/content/reference/compass/css3/gradient.haml b/doc-src/content/reference/compass/css3/gradient.haml index dfd70112..745e320a 100644 --- a/doc-src/content/reference/compass/css3/gradient.haml +++ b/doc-src/content/reference/compass/css3/gradient.haml @@ -12,13 +12,8 @@ classnames: - css3 --- - render 'reference' do - %p + :markdown + **IMPORTANT:** This module has been deprecated. See the new + [images module](../images/) for the new, more flexible approach to gradients. + Provides mixins to create cross-browser CSS3 gradients. - %p - To enable SVG gradient support in Opera and IE9, set - $experimental-support-for-svg: true in your stylesheet. - %p - NOTE: At this time, Opera renders incorrectly an SVG background on a element - with a border, repeating the gradient towards the end. You can set - background-repeat: no-repeat to avoid this, but the gradient - will not fill the area completely. diff --git a/doc-src/content/reference/compass/css3/images.haml b/doc-src/content/reference/compass/css3/images.haml index 5436dadb..667b8238 100644 --- a/doc-src/content/reference/compass/css3/images.haml +++ b/doc-src/content/reference/compass/css3/images.haml @@ -12,6 +12,33 @@ classnames: - css3 --- - render 'reference' do - %p + :markdown Provides mixins that work across many modern browsers with the latest CSS3 image rendering primitives. + + These mixins provide intelligent cross-browser access to properties that accept + images or image-like values (e.g. gradients). The syntax is very straightforward, + it is exactly like the css syntax that you would use for the corresponding CSS3 + properties: Values are comma and space delimited, just as they would be for a property. + Vendor prefixes are use only when they are necessary. + + Example (more examples are available by following the links below): + +
.in-css3 {
+      background: image-url("foo.png"),
+                  linear-gradient(top left, #333, #0c0),
+                  radial-gradient(#c00, #fff 100px);
+    }
+    .with-compass {
+      @include background(image-url("foo.png"),
+                          linear-gradient(top left, #333, #0c0),
+                          radial-gradient(#c00, #fff 100px));
+    }
+ + To enable SVG gradient support in Opera and IE9, set + $experimental-support-for-svg: true in your stylesheet. + + NOTE: At this time, Opera renders incorrectly an SVG background on a element + with a border, repeating the gradient towards the end. You can set + background-repeat: no-repeat to avoid this, but the gradient + will not fill the area completely. diff --git a/doc-src/content/stylesheets/partials/_typography.scss b/doc-src/content/stylesheets/partials/_typography.scss index ab16fe3b..fe85f130 100644 --- a/doc-src/content/stylesheets/partials/_typography.scss +++ b/doc-src/content/stylesheets/partials/_typography.scss @@ -42,3 +42,5 @@ em { font-style: italic; } dl.table dt, dl.table dd { display: inline-block; } dg { display: block; margin-bottom: 1.5em; } + +.warning { color: #c00; } \ No newline at end of file From 4c289c9db08d5b7a52d8b20d25b3a55e1152f013 Mon Sep 17 00:00:00 2001 From: Jordan Byron Date: Thu, 23 Dec 2010 13:43:34 -0500 Subject: [PATCH 10/24] Fix typo in css3 image documentation --- doc-src/content/reference/compass/css3/images.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc-src/content/reference/compass/css3/images.haml b/doc-src/content/reference/compass/css3/images.haml index 667b8238..73fa5d3b 100644 --- a/doc-src/content/reference/compass/css3/images.haml +++ b/doc-src/content/reference/compass/css3/images.haml @@ -20,7 +20,7 @@ classnames: images or image-like values (e.g. gradients). The syntax is very straightforward, it is exactly like the css syntax that you would use for the corresponding CSS3 properties: Values are comma and space delimited, just as they would be for a property. - Vendor prefixes are use only when they are necessary. + Vendor prefixes are used only when necessary. Example (more examples are available by following the links below): From 15f760e0020a74e219f745211bc8f17fb0237fde Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Thu, 30 Dec 2010 12:19:00 -0800 Subject: [PATCH 11/24] Infrastructure for cross browser support of simple, experimental functions --- doc-src/content/CHANGELOG.markdown | 15 ++ .../functions/gradient_support.rb | 50 +++--- lib/compass/sass_extensions/monkey_patches.rb | 2 +- .../monkey_patches/browser_support.rb | 152 ++++++++++++++++++ .../stylesheets/compass/css/gradients.css | 15 ++ test/fixtures/stylesheets/compass/css/pie.css | 1 - .../stylesheets/compass/sass/gradients.sass | 9 ++ 7 files changed, 223 insertions(+), 21 deletions(-) create mode 100644 lib/compass/sass_extensions/monkey_patches/browser_support.rb diff --git a/doc-src/content/CHANGELOG.markdown b/doc-src/content/CHANGELOG.markdown index 349b9f14..07c24743 100644 --- a/doc-src/content/CHANGELOG.markdown +++ b/doc-src/content/CHANGELOG.markdown @@ -26,6 +26,21 @@ The Documentation for the [latest preview release](http://beta.compass-style.org The CLI options will still override the values set within the config file, but they might inform other values. For instance `compass compile -e production` will have the environment parameter preset to `:production` so that you can set other values in the project accordingly. +* New infrastructure for supporting experimental css3 functions that have the same syntax + across all browsers. It is now possible to configure which browsers support which experimental + functions outside of the compass release cycle by calling + `Compass::BrowserSupport.add_support('function', 'prefix')` and + `Compass::BrowserSupport.remove_support('function', 'prefix')`. + Once properly configured, the browser specific aspect can be inspected + via the `prefixed()` helper function and accessed via the various support + aspect helpers like `-moz()` and `-webkit()`. For example, if you call: + `Compass::BrowserSupport.add_support('image', 'webkit')` in your config + then in your stylesheet, `prefixed(-webkit, image("foo.png", "foo.gif"))` would + return true and `prefixed(-moz, image("foo.png", "foo.gif"))` would return false. + Additionally `-webkit(image("foo.png", "foo.gif"))` will return + `-webkit-image("foo.png", "foo.gif")`. This is very useful for creating mixins + that can support a range of inputs and vary the outputs according to the + support needs. 0.11.alpha.4 (12/08/2010) diff --git a/lib/compass/sass_extensions/functions/gradient_support.rb b/lib/compass/sass_extensions/functions/gradient_support.rb index ee3d27d3..7ebdae4c 100644 --- a/lib/compass/sass_extensions/functions/gradient_support.rb +++ b/lib/compass/sass_extensions/functions/gradient_support.rb @@ -133,29 +133,29 @@ module Compass::SassExtensions::Functions::GradientSupport # Check if any of the arguments passed have a tendency towards vendor prefixing. def prefixed(prefix, *args) - method = prefix.value.sub(/^-/,"to_").to_sym + method = prefix.value.sub(/^-/,"") args.map!{|a| a.is_a?(List) ? a.values : a}.flatten! - Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)}) + Sass::Script::Bool.new(args.any?{|a| a.supports?(method)}) end %w(webkit moz o ms svg pie css2).each do |prefix| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def _#{prefix}(*args) - List.new(*args.map! {|a| add_prefix(:to_#{prefix}, a)}) + List.new(*args.map! {|a| add_prefix("#{prefix}", a)}) end RUBY end protected - def add_prefix(prefix_method, object) + def add_prefix(prefix, object) if object.is_a?(List) object.class.new(object.value.map{|e| - add_prefix(prefix_method, e) + add_prefix(prefix, e) }) - elsif object.respond_to?(prefix_method) + elsif object.respond_to?(:supports?) && object.supports?(prefix) object.options = options - object.send(prefix_method) + object.send(:"to_#{prefix_method}") else object end @@ -269,33 +269,31 @@ module Compass::SassExtensions::Functions::GradientSupport Sass::Script::List.new list.values[start_index..end_index], list.separator end - # Check if any of the arguments passed have a tendency towards vendor prefixing. + # Check if any of the arguments passed have require the vendor prefix. def prefixed(prefix, *args) - method = prefix.value.sub(/^-/,"to_").to_sym - 2.times do - args.map!{|a| a.is_a?(Sass::Script::List) ? a.value : a}.flatten! - end - Sass::Script::Bool.new(args.any?{|a| a.respond_to?(method)}) + aspect = prefix.value.sub(/^-/,"") + needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)} + Sass::Script::Bool.new(needed) end %w(webkit moz o ms svg pie css2).each do |prefix| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def _#{prefix}(*args) - Sass::Script::List.new(args.map! {|a| add_prefix(:to_#{prefix}, a)}, :comma) + Sass::Script::List.new(args.map! {|a| add_prefix("#{prefix}", a)}, :comma) end RUBY end protected - def add_prefix(prefix_method, object) + def add_prefix(prefix, object) if object.is_a?(Sass::Script::List) Sass::Script::List.new(object.value.map{|e| - add_prefix(prefix_method, e) + add_prefix(prefix, e) }, object.separator) - elsif object.respond_to?(prefix_method) + elsif object.respond_to?(:supports?) && object.supports?(prefix) object.options = options - object.send(prefix_method) + object.send(:"to_#{prefix}") else object end @@ -317,7 +315,6 @@ module Compass::SassExtensions::Functions::GradientSupport end - class ColorStop < Sass::Script::Literal attr_accessor :color, :stop def children @@ -349,6 +346,8 @@ module Compass::SassExtensions::Functions::GradientSupport end end + GRADIENT_ASPECTS = %w(webkit moz svg pie css2).freeze + class RadialGradient < Sass::Script::Literal attr_accessor :position_and_angle, :shape_and_size, :color_stops def children @@ -372,6 +371,12 @@ module Compass::SassExtensions::Functions::GradientSupport s << color_stops.to_s(options) s << ")" end + def supports?(aspect) + GRADIENT_ASPECTS.include?(aspect) + end + def has_aspect? + true + end def to_webkit(options = self.options) args = [ grad_point(position_and_angle || _center_position), @@ -421,6 +426,12 @@ module Compass::SassExtensions::Functions::GradientSupport s << color_stops.to_s(options) s << ")" end + def supports?(aspect) + GRADIENT_ASPECTS.include?(aspect) + end + def has_aspect? + true + end def to_webkit(options = self.options) args = [] args << grad_point(position_and_angle || Sass::Script::String.new("top")) @@ -726,6 +737,7 @@ EOS end end + class LinearGradient < Sass::Script::Literal include Functions include Compass::SassExtensions::Functions::Constants diff --git a/lib/compass/sass_extensions/monkey_patches.rb b/lib/compass/sass_extensions/monkey_patches.rb index f0c04196..9762ac31 100644 --- a/lib/compass/sass_extensions/monkey_patches.rb +++ b/lib/compass/sass_extensions/monkey_patches.rb @@ -1,3 +1,3 @@ -%w(traversal).each do |patch| +%w(traversal browser_support).each do |patch| require "compass/sass_extensions/monkey_patches/#{patch}" end diff --git a/lib/compass/sass_extensions/monkey_patches/browser_support.rb b/lib/compass/sass_extensions/monkey_patches/browser_support.rb new file mode 100644 index 00000000..c76aa90c --- /dev/null +++ b/lib/compass/sass_extensions/monkey_patches/browser_support.rb @@ -0,0 +1,152 @@ +require 'sass/script/node' +require 'sass/script/literal' +require 'sass/script/funcall' + +module Compass + module BrowserSupport + extend self + + ASPECTS = %w(webkit moz o ms svg pie css2) + + SIMPLE_FUNCTIONS = { + "image" => %w(), # No browsers implement this yet. + "cross-fade" => %w() # No browsers implement this yet. + } + + # Adds support for one or more aspects for the given simple function + # Example: + # + # Compass::BrowserSupport.add_support("image", "moz", "webkit") + # # => Adds support for moz and webkit to the image() function. + # + # This function can be called one or more times in a compass configuration + # file in order to add support for new, simple browser functions without + # waiting for a new compass release. + def add_support(function, *aspects) + aspects.each do |aspect| + unless ASPECTS.include?(aspect) + Compass::Util.compass_warn "Unknown support aspect: #{aspect}" + next + end + unless supports?(function, aspect) + SIMPLE_FUNCTIONS[function.to_s] ||= [] + SIMPLE_FUNCTIONS[function.to_s] << aspect.to_s + end + end + end + + # Removes support for one or more aspects for the given simple function + # Example: + # + # Compass::BrowserSupport.remove_support("image", "o", "ms") + # # => Adds support for moz and webkit to the image() function. + # + # This function can be called one or more times in a compass configuration + # file in order to remove support for simple functions that no longer need to + # a prefix without waiting for a new compass release. + def remove_support(function, *aspects) + aspects.each do |aspect| + unless ASPECTS.include?(aspect) + Compass::Util.compass_warn "Unknown support aspect: #{aspect}" + next + end + SIMPLE_FUNCTIONS[function.to_s].reject!{|a| a == aspect.to_s} + end + end + + def supports?(function, aspect) + SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].include?(aspect.to_s) + end + + def has_aspect?(function) + SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].size > 0 + end + + end +end + +module Sass::Script + module HasSimpleCrossBrowserFunctionSupport + def supports?(aspect) + return true if Compass::BrowserSupport.supports?(name, aspect) + children.any? {|child| child.respond_to?(:supports?) && child.supports?(aspect) } + end + + def has_aspect?(children = nil) + children ||= self.children + return true if Compass::BrowserSupport.has_aspect?(name) + children.any? {|child| child.respond_to?(:has_aspect?) && child.has_aspect? } + end + end + + class CrossBrowserFunctionCall < Literal + + attr_accessor :name, :args + + include HasSimpleCrossBrowserFunctionSupport + + def initialize(name, args) + self.name = name + self.args = args + end + + def children + args + end + + def inspect + to_s + end + + def to_s(options = self.options) + s = "#{name}(#{args.join(", ")})" + end + + %w(webkit moz o ms svg pie css2).each do |prefix| + class_eval <<-RUBY, __FILE__, __LINE__ + 1 + def to_#{prefix}(options = self.options) + prefixed_args = args.map do |arg| + arg.respond_to?(:to_#{prefix}) ? arg.to_#{prefix}(options) : arg + end + prefixed_name = if Compass::BrowserSupport.supports?(name, "#{prefix}") + "-#{prefix}-\#{name}" + else + name + end + contents = prefixed_args.join(', ') + if contents.size > 0 + opts(Sass::Script::String.new("\#{prefixed_name}(\#{contents})")) + else + opts(Sass::Script::String.new("")) + end + end + RUBY + end + + end + + class Funcall < Node + include HasSimpleCrossBrowserFunctionSupport + + alias sass_to_literal to_literal + + def to_literal(args) + if has_aspect?(args) + CrossBrowserFunctionCall.new(name, args) + else + sass_to_literal(args) + end + end + end + + class List < Literal + def supports?(aspect) + children.any? {|child| child.respond_to?(:supports?) && child.supports?(aspect) } + end + + def has_aspect? + children.any? {|child| child.respond_to?(:has_aspect?) && child.has_aspect? } + end + end + +end diff --git a/test/fixtures/stylesheets/compass/css/gradients.css b/test/fixtures/stylesheets/compass/css/gradients.css index 60f1cdba..c3586f46 100644 --- a/test/fixtures/stylesheets/compass/css/gradients.css +++ b/test/fixtures/stylesheets/compass/css/gradients.css @@ -96,6 +96,21 @@ background-image: -moz-radial-gradient(#dddddd, #aaaaaa 100px); background-image: radial-gradient(#dddddd, #aaaaaa 100px); } +.image-fallback { + background-image: image(-webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), url('/images/4x6.png?busted=true'), #cc0000); + background-image: image(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000); + background-image: image(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true'), #cc0000); } + +.cross-fade { + background-image: cross-fade(-webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)), url('/images/4x6.png?busted=true')); + background-image: cross-fade(-moz-radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true')); + background-image: cross-fade(radial-gradient(#dddddd, #aaaaaa 100px), url('/images/4x6.png?busted=true')); } + +.unknown-function-wrapper { + background: foo(-webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa))); + background: foo(-moz-radial-gradient(#dddddd, #aaaaaa 100px)); + background: foo(radial-gradient(#dddddd, #aaaaaa 100px)); } + .linear-1 { background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #aaaaaa)); background-image: -moz-linear-gradient(top, #dddddd, #aaaaaa); diff --git a/test/fixtures/stylesheets/compass/css/pie.css b/test/fixtures/stylesheets/compass/css/pie.css index d7898353..c911df07 100644 --- a/test/fixtures/stylesheets/compass/css/pie.css +++ b/test/fixtures/stylesheets/compass/css/pie.css @@ -1,4 +1,3 @@ -@charset "UTF-8"; .pie-element, .bordered, .gradient { behavior: url('/tmp/PIE.htc'); position: relative; } diff --git a/test/fixtures/stylesheets/compass/sass/gradients.sass b/test/fixtures/stylesheets/compass/sass/gradients.sass index 8c8a656c..fd0ec96a 100644 --- a/test/fixtures/stylesheets/compass/sass/gradients.sass +++ b/test/fixtures/stylesheets/compass/sass/gradients.sass @@ -58,6 +58,15 @@ $experimental-support-for-svg: false .bg-radial-gradient-no-position +background-image(radial-gradient(#ddd, #aaa 100px)) +.image-fallback + +background-image(image(radial-gradient(#ddd, #aaa 100px), image-url("4x6.png"), #c00)) + +.cross-fade + +background-image(cross-fade(radial-gradient(#ddd, #aaa 100px), image-url("4x6.png"))) + +.unknown-function-wrapper + +background(foo(radial-gradient(#ddd, #aaa 100px))) + .linear-1 +linear-gradient(color-stops(#dddddd, #aaaaaa)) From e11f1035bfc2f42b1059d3c4bbd1c5ee25f9b014 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Fri, 31 Dec 2010 12:55:14 -0800 Subject: [PATCH 12/24] Refactor the cross browser support and list functions from gradient module. --- lib/compass.rb | 2 +- lib/compass/browser_support.rb | 62 +++ lib/compass/sass_extensions/functions.rb | 3 +- .../functions/cross_browser_support.rb | 39 ++ .../functions/gradient_support.rb | 452 +++--------------- .../sass_extensions/functions/lists.rb | 84 ++++ .../monkey_patches/browser_support.rb | 63 --- 7 files changed, 262 insertions(+), 443 deletions(-) create mode 100644 lib/compass/browser_support.rb create mode 100644 lib/compass/sass_extensions/functions/cross_browser_support.rb diff --git a/lib/compass.rb b/lib/compass.rb index bb85f181..2f0b7ec7 100644 --- a/lib/compass.rb +++ b/lib/compass.rb @@ -1,7 +1,7 @@ module Compass end -%w(dependencies util sass_extensions core_ext version errors quick_cache).each do |lib| +%w(dependencies util browser_support sass_extensions core_ext version errors quick_cache).each do |lib| require "compass/#{lib}" end diff --git a/lib/compass/browser_support.rb b/lib/compass/browser_support.rb new file mode 100644 index 00000000..cbe617f0 --- /dev/null +++ b/lib/compass/browser_support.rb @@ -0,0 +1,62 @@ +module Compass + module BrowserSupport + extend self + + ASPECTS = %w(webkit moz o ms svg pie css2) + + SIMPLE_FUNCTIONS = { + "image" => %w(), # No browsers implement this yet. + "cross-fade" => %w() # No browsers implement this yet. + } + + # Adds support for one or more aspects for the given simple function + # Example: + # + # Compass::BrowserSupport.add_support("image", "moz", "webkit") + # # => Adds support for moz and webkit to the image() function. + # + # This function can be called one or more times in a compass configuration + # file in order to add support for new, simple browser functions without + # waiting for a new compass release. + def add_support(function, *aspects) + aspects.each do |aspect| + unless ASPECTS.include?(aspect) + Compass::Util.compass_warn "Unknown support aspect: #{aspect}" + next + end + unless supports?(function, aspect) + SIMPLE_FUNCTIONS[function.to_s] ||= [] + SIMPLE_FUNCTIONS[function.to_s] << aspect.to_s + end + end + end + + # Removes support for one or more aspects for the given simple function + # Example: + # + # Compass::BrowserSupport.remove_support("image", "o", "ms") + # # => Adds support for moz and webkit to the image() function. + # + # This function can be called one or more times in a compass configuration + # file in order to remove support for simple functions that no longer need to + # a prefix without waiting for a new compass release. + def remove_support(function, *aspects) + aspects.each do |aspect| + unless ASPECTS.include?(aspect) + Compass::Util.compass_warn "Unknown support aspect: #{aspect}" + next + end + SIMPLE_FUNCTIONS[function.to_s].reject!{|a| a == aspect.to_s} + end + end + + def supports?(function, aspect) + SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].include?(aspect.to_s) + end + + def has_aspect?(function) + SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].size > 0 + end + + end +end diff --git a/lib/compass/sass_extensions/functions.rb b/lib/compass/sass_extensions/functions.rb index 895455ed..99cf687a 100644 --- a/lib/compass/sass_extensions/functions.rb +++ b/lib/compass/sass_extensions/functions.rb @@ -4,7 +4,7 @@ end %w( selectors enumerate urls display inline_image image_size constants gradient_support - font_files lists colors trig sprites + font_files lists colors trig sprites cross_browser_support ).each do |func| require "compass/sass_extensions/functions/#{func}" end @@ -23,6 +23,7 @@ module Sass::Script::Functions include Compass::SassExtensions::Functions::Colors include Compass::SassExtensions::Functions::Trig include Compass::SassExtensions::Functions::Sprites + include Compass::SassExtensions::Functions::CrossBrowserSupport end # Wierd that this has to be re-included to pick up sub-modules. Ruby bug? diff --git a/lib/compass/sass_extensions/functions/cross_browser_support.rb b/lib/compass/sass_extensions/functions/cross_browser_support.rb new file mode 100644 index 00000000..92bab46e --- /dev/null +++ b/lib/compass/sass_extensions/functions/cross_browser_support.rb @@ -0,0 +1,39 @@ +module Compass::SassExtensions::Functions::CrossBrowserSupport + # Check if any of the arguments passed require a vendor prefix. + def prefixed(prefix, *args) + aspect = prefix.value.sub(/^-/,"") + needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)} + Sass::Script::Bool.new(needed) + end + + %w(webkit moz o ms svg pie css2).each do |prefix| + class_eval <<-RUBY, __FILE__, __LINE__ + 1 + # Syntactic sugar to apply the given prefix + # -moz($arg) is the same as calling prefix(-moz, $arg) + def _#{prefix}(*args) + prefix("#{prefix}", *args) + end + RUBY + end + + def prefix(prefix, *objects) + prefix = prefix.value if prefix.is_a?(Sass::Script::String) + prefix = prefix[1..-1] if prefix[0] == ?- + if objects.size > 1 + self.prefix(prefix, Sass::Script::List.new(objects, :comma)) + else + object = objects.first + if object.is_a?(Sass::Script::List) + Sass::Script::List.new(object.value.map{|e| + self.prefix(prefix, e) + }, object.separator) + elsif object.respond_to?(:supports?) && object.supports?(prefix) && object.respond_to?(:"to_#{prefix}") + object.options = options + object.send(:"to_#{prefix}") + else + object + end + end + end + +end diff --git a/lib/compass/sass_extensions/functions/gradient_support.rb b/lib/compass/sass_extensions/functions/gradient_support.rb index 7ebdae4c..1aadd511 100644 --- a/lib/compass/sass_extensions/functions/gradient_support.rb +++ b/lib/compass/sass_extensions/functions/gradient_support.rb @@ -1,319 +1,6 @@ module Compass::SassExtensions::Functions::GradientSupport - module ListFreeSassSupport - class List < Sass::Script::Literal - attr_accessor :values - def children - values - end - def value - # duck type to a Sass List - values - end - def initialize(*values) - self.values = values - end - def join_with - ", " - end - def inspect - to_s - end - def to_s(options = self.options) - values.map {|v| v.to_s }.join(join_with) - end - def size - values.size - end - end - - class SpaceList < List - def join_with - " " - end - end - - # given a position list, return a corresponding position in percents - def grad_point(position) - position = position.is_a?(Sass::Script::String) ? position.value : position.to_s - position = if position[" "] - if position =~ /(top|bottom|center) (left|right|center)/ - "#{$2} #{$1}" - else - position - end - else - case position - when /top|bottom/ - "center #{position}" - when /left|right/ - "#{position} center" - when /center/ - "center center" - else - "#{position} center" - end - end - position = position. - gsub(/top/, "0%"). - gsub(/bottom/, "100%"). - gsub(/left/,"0%"). - gsub(/right/,"100%"). - gsub(/center/, "50%") - SpaceList.new(*position.split(/ /).map{|s| Sass::Script::String.new(s)}) - end - - def color_stops(*args) - List.new(*args.map do |arg| - case arg - when ColorStop - arg - when Sass::Script::Color - ColorStop.new(arg) - when Sass::Script::String - # We get a string as the result of concatenation - # So we have to reparse the expression - parse_color_stop(arg) - else - raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}" - end - end) - end - - # Returns a comma-delimited list after removing any non-true values - def compact(*args) - List.new(*args.reject{|a| !a.to_bool}) - end - - # Returns a list object from a value that was passed. - # This can be used to unpack a space separated list that got turned - # into a string by sass before it was passed to a mixin. - def _compass_list(arg) - return arg if arg.is_a?(List) - values = case arg - when Sass::Script::String - expr = Sass::Script::Parser.parse(arg.value, 0, 0) - if expr.is_a?(Sass::Script::Operation) - extract_list_values(expr) - elsif expr.is_a?(Sass::Script::Funcall) - expr.perform(Sass::Environment.new) #we already evaluated the args in context so no harm in using a fake env - else - [arg] - end - else - [arg] - end - - SpaceList.new(*values) - end - - def _compass_space_list(list) - if list.is_a?(List) && !list.is_a?(SpaceList) - SpaceList.new(*list.values) - elsif list.is_a?(SpaceList) - list - else - SpaceList.new(list) - end - end - - def _compass_list_size(list) - Sass::Script::Number.new(list.size) - end - - # slice a sublist from a list - def _compass_slice(list, start_index, end_index = nil) - end_index ||= Sass::Script::Number.new(-1) - start_index = start_index.value - end_index = end_index.value - start_index -= 1 unless start_index < 0 - end_index -= 1 unless end_index < 0 - list.class.new *list.values[start_index..end_index] - end - - # Check if any of the arguments passed have a tendency towards vendor prefixing. - def prefixed(prefix, *args) - method = prefix.value.sub(/^-/,"") - args.map!{|a| a.is_a?(List) ? a.values : a}.flatten! - Sass::Script::Bool.new(args.any?{|a| a.supports?(method)}) - end - - %w(webkit moz o ms svg pie css2).each do |prefix| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def _#{prefix}(*args) - List.new(*args.map! {|a| add_prefix("#{prefix}", a)}) - end - RUBY - end - - protected - - def add_prefix(prefix, object) - if object.is_a?(List) - object.class.new(object.value.map{|e| - add_prefix(prefix, e) - }) - elsif object.respond_to?(:supports?) && object.supports?(prefix) - object.options = options - object.send(:"to_#{prefix_method}") - else - object - end - end - - def color_stop?(arg) - parse_color_stop(arg) - rescue - nil - end - - def assert_list(value) - unless value.is_a?(List) - raise ArgumentError.new("#{value.inspect} is not a list") - end - end - - end - - module ListBasedSassSupport - # given a position list, return a corresponding position in percents - def grad_point(position) - position = unless position.is_a?(Sass::Script::List) - Sass::Script::List.new([position], :space) - else - Sass::Script::List.new(position.value.dup, position.separator) - end - position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")} - if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/) - # browsers are pretty forgiving of reversed positions so we are too. - position.value.reverse! - end - if position.value.size == 1 - if position.value.first.value =~ /top|bottom/ - position.value.unshift Sass::Script::String.new("center") - elsif position.value.first.value =~ /left|right/ - position.value.push Sass::Script::String.new("center") - end - end - position.value.map! do |p| - case p.value - when /top|left/ - Sass::Script::Number.new(0, ["%"]) - when /bottom|right/ - Sass::Script::Number.new(100, ["%"]) - when /center/ - Sass::Script::Number.new(50, ["%"]) - else - p - end - end - position - end - - def color_stops(*args) - Sass::Script::List.new(args.map do |arg| - case arg - when ColorStop - arg - when Sass::Script::Color - ColorStop.new(arg) - when Sass::Script::List - ColorStop.new(*arg.value) - else - raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}" - end - end, :comma) - end - - # Returns a comma-delimited list after removing any non-true values - def compact(*args) - sep = :comma - if args.size == 1 && args.first.is_a?(Sass::Script::List) - args = args.first.value - sep = args.first.separator - end - Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep) - end - - # Returns a list object from a value that was passed. - # This can be used to unpack a space separated list that got turned - # into a string by sass before it was passed to a mixin. - def _compass_list(arg) - if arg.is_a?(Sass::Script::List) - Sass::Script::List.new(arg.value.dup, arg.separator) - else - Sass::Script::List.new([arg], :space) - end - end - - def _compass_space_list(list) - if list.is_a?(Sass::Script::List) - Sass::Script::List.new(list.value.dup, :space) - else - Sass::Script::List.new([list], :space) - end - end - - def _compass_list_size(list) - assert_list list - Sass::Script::Number.new(list.value.size) - end - - # slice a sublist from a list - def _compass_slice(list, start_index, end_index = nil) - end_index ||= Sass::Script::Number.new(-1) - start_index = start_index.value - end_index = end_index.value - start_index -= 1 unless start_index < 0 - end_index -= 1 unless end_index < 0 - Sass::Script::List.new list.values[start_index..end_index], list.separator - end - - # Check if any of the arguments passed have require the vendor prefix. - def prefixed(prefix, *args) - aspect = prefix.value.sub(/^-/,"") - needed = args.any?{|a| a.respond_to?(:supports?) && a.supports?(aspect)} - Sass::Script::Bool.new(needed) - end - - %w(webkit moz o ms svg pie css2).each do |prefix| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def _#{prefix}(*args) - Sass::Script::List.new(args.map! {|a| add_prefix("#{prefix}", a)}, :comma) - end - RUBY - end - - protected - - def add_prefix(prefix, object) - if object.is_a?(Sass::Script::List) - Sass::Script::List.new(object.value.map{|e| - add_prefix(prefix, e) - }, object.separator) - elsif object.respond_to?(:supports?) && object.supports?(prefix) - object.options = options - object.send(:"to_#{prefix}") - else - object - end - end - - def color_stop?(arg) - arg.is_a?(ColorStop) || - (arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) || - ColorStop.new(arg) - rescue - nil - end - - def assert_list(value) - unless value.is_a?(Sass::Script::List) - raise ArgumentError.new("#{value.inspect} is not a list") - end - end - - end + GRADIENT_ASPECTS = %w(webkit moz svg pie css2).freeze class ColorStop < Sass::Script::Literal attr_accessor :color, :stop @@ -346,8 +33,6 @@ module Compass::SassExtensions::Functions::GradientSupport end end - GRADIENT_ASPECTS = %w(webkit moz svg pie css2).freeze - class RadialGradient < Sass::Script::Literal attr_accessor :position_and_angle, :shape_and_size, :color_stops def children @@ -458,11 +143,53 @@ module Compass::SassExtensions::Functions::GradientSupport module Functions - # While supporting sass 3.1 and older versions, we need two different implementations. - if defined?(Sass::Script::List) - include ListBasedSassSupport - else - include ListFreeSassSupport + # given a position list, return a corresponding position in percents + def grad_point(position) + position = unless position.is_a?(Sass::Script::List) + Sass::Script::List.new([position], :space) + else + Sass::Script::List.new(position.value.dup, position.separator) + end + position.value.reject!{|p| p.is_a?(Sass::Script::Number) && p.numerator_units.include?("deg")} + if (position.value.first.value =~ /top|bottom/) or (position.value.last.value =~ /left|right/) + # browsers are pretty forgiving of reversed positions so we are too. + position.value.reverse! + end + if position.value.size == 1 + if position.value.first.value =~ /top|bottom/ + position.value.unshift Sass::Script::String.new("center") + elsif position.value.first.value =~ /left|right/ + position.value.push Sass::Script::String.new("center") + end + end + position.value.map! do |p| + case p.value + when /top|left/ + Sass::Script::Number.new(0, ["%"]) + when /bottom|right/ + Sass::Script::Number.new(100, ["%"]) + when /center/ + Sass::Script::Number.new(50, ["%"]) + else + p + end + end + position + end + + def color_stops(*args) + Sass::Script::List.new(args.map do |arg| + case arg + when ColorStop + arg + when Sass::Script::Color + ColorStop.new(arg) + when Sass::Script::List + ColorStop.new(*arg.value) + else + raise Sass::SyntaxError, "Not a valid color stop: #{arg.class.name}: #{arg}" + end + end, :comma) end def radial_gradient(position_and_angle, shape_and_size, *color_stops) @@ -519,7 +246,7 @@ module Compass::SassExtensions::Functions::GradientSupport end def color_stops_in_percentages(color_list) - assert_list(color_list) + assert_type color_list, :List color_list = normalize_stops(color_list) max = color_list.value.last.stop last_value = nil @@ -538,13 +265,13 @@ module Compass::SassExtensions::Functions::GradientSupport # returns the end position of the gradient from the color stop def grad_end_position(color_list, radial = Sass::Script::Bool.new(false)) - assert_list(color_list) + assert_type color_list, :List default = Sass::Script::Number.new(100) grad_position(color_list, Sass::Script::Number.new(color_list.value.size), default, radial) end def grad_position(color_list, index, default, radial = Sass::Script::Bool.new(false)) - assert_list(color_list) + assert_type color_list, :List stop = color_list.value[index.value - 1].stop if stop && radial.to_bool orig_stop = stop @@ -587,55 +314,16 @@ module Compass::SassExtensions::Functions::GradientSupport inline_image_string(svg.gsub(/\s+/, ' '), 'image/svg+xml') end - # Get the nth value from a list - def _compass_nth(list, place) - assert_list list - if place.value == "first" - list.value.first - elsif place.value == "last" - list.value.last - else - list.value[place.value - 1] - end - end - - def blank(obj) - case obj - when Sass::Script::Bool - Sass::Script::Bool.new !obj.to_bool - when Sass::Script::String - Sass::Script::Bool.new obj.value.strip.size == 0 - when Sass::Script::List - Sass::Script::Bool.new obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool} - else - Sass::Script::Bool.new false - end - end - private - # After using the sass script parser to parse a string, this reconstructs - # a list from operands to the space/concat operation - def extract_list_values(operation) - left = operation.instance_variable_get("@operand1") - right = operation.instance_variable_get("@operand2") - left = extract_list_values(left) if left.is_a?(Sass::Script::Operation) - right = extract_list_values(right) if right.is_a?(Sass::Script::Operation) - left = literalize(left) unless left.is_a?(Array) - right = literalize(right) unless right.is_a?(Array) - Array(left) + Array(right) - end - # Makes a literal from other various script nodes. - def literalize(node) - case node - when Sass::Script::Literal - node - when Sass::Script::Funcall - node.perform(Sass::Environment.new) - else - Sass::Script::String.new(node.to_s) - end + def color_stop?(arg) + arg.is_a?(ColorStop) || + (arg.is_a?(Sass::Script::List) && ColorStop.new(*arg.value)) || + ColorStop.new(arg) + rescue + nil end + def normalize_stops(color_list) positions = color_list.value.map{|obj| obj.dup} # fill in the start and end positions, if unspecified @@ -726,24 +414,32 @@ EOS end def _center_position - if defined?(Sass::Script::List) - Sass::Script::List.new([ - Sass::Script::String.new("center"), - Sass::Script::String.new("center") - ],:space) - else - Sass::Script::String.new("center center") - end + Sass::Script::List.new([ + Sass::Script::String.new("center"), + Sass::Script::String.new("center") + ],:space) end end + module Assertions + def assert_type(value, type, name = nil) + return if value.is_a?(Sass::Script.const_get(type)) + err = "#{value.inspect} is not a #{type.to_s.downcase}" + err = "$#{name}: " + err if name + raise ArgumentError.new(err) + end + end + class LinearGradient < Sass::Script::Literal + include Assertions include Functions include Compass::SassExtensions::Functions::Constants include Compass::SassExtensions::Functions::InlineImage end + class RadialGradient < Sass::Script::Literal + include Assertions include Functions include Compass::SassExtensions::Functions::Constants include Compass::SassExtensions::Functions::InlineImage diff --git a/lib/compass/sass_extensions/functions/lists.rb b/lib/compass/sass_extensions/functions/lists.rb index 5b1a7e53..e82a6757 100644 --- a/lib/compass/sass_extensions/functions/lists.rb +++ b/lib/compass/sass_extensions/functions/lists.rb @@ -1,4 +1,79 @@ module Compass::SassExtensions::Functions::Lists + + # Returns true when the object is false, an empty string, or an empty list + def blank(obj) + case obj + when Sass::Script::Bool + Sass::Script::Bool.new !obj.to_bool + when Sass::Script::String + Sass::Script::Bool.new obj.value.strip.size == 0 + when Sass::Script::List + Sass::Script::Bool.new obj.value.size == 0 || obj.value.all?{|el| blank(el).to_bool} + else + Sass::Script::Bool.new false + end + end + + # Returns a new list after removing any non-true values + def compact(*args) + sep = :comma + if args.size == 1 && args.first.is_a?(Sass::Script::List) + args = args.first.value + sep = args.first.separator + end + Sass::Script::List.new(args.reject{|a| !a.to_bool}, sep) + end + + # Get the nth value from a list + def _compass_nth(list, place) + assert_type list, :List + if place.value == "first" + list.value.first + elsif place.value == "last" + list.value.last + else + list.value[place.value - 1] + end + end + + # Returns a list object from a value that was passed. + # This can be used to unpack a space separated list that got turned + # into a string by sass before it was passed to a mixin. + def _compass_list(arg) + if arg.is_a?(Sass::Script::List) + Sass::Script::List.new(arg.value.dup, arg.separator) + else + Sass::Script::List.new([arg], :space) + end + end + + # If the argument is a list, it will return a new list that is space delimited + # Otherwise it returns a new, single element, space-delimited list. + def _compass_space_list(list) + if list.is_a?(Sass::Script::List) + Sass::Script::List.new(list.value.dup, :space) + else + Sass::Script::List.new([list], :space) + end + end + + # Returns the size of the list. + def _compass_list_size(list) + assert_list list + Sass::Script::Number.new(list.value.size) + end + + # slice a sublist from a list + def _compass_slice(list, start_index, end_index = nil) + end_index ||= Sass::Script::Number.new(-1) + start_index = start_index.value + end_index = end_index.value + start_index -= 1 unless start_index < 0 + end_index -= 1 unless end_index < 0 + Sass::Script::List.new list.values[start_index..end_index], list.separator + end + + # returns the first value of a space delimited list. def first_value_of(list) if list.is_a?(Sass::Script::String) Sass::Script::String.new(list.value.split(/\s+/).first) @@ -8,4 +83,13 @@ module Compass::SassExtensions::Functions::Lists list end end + + protected + + def assert_list(value) + unless value.is_a?(Sass::Script::List) + raise ArgumentError.new("#{value.inspect} is not a list") + end + end + end diff --git a/lib/compass/sass_extensions/monkey_patches/browser_support.rb b/lib/compass/sass_extensions/monkey_patches/browser_support.rb index c76aa90c..c1b55e58 100644 --- a/lib/compass/sass_extensions/monkey_patches/browser_support.rb +++ b/lib/compass/sass_extensions/monkey_patches/browser_support.rb @@ -2,69 +2,6 @@ require 'sass/script/node' require 'sass/script/literal' require 'sass/script/funcall' -module Compass - module BrowserSupport - extend self - - ASPECTS = %w(webkit moz o ms svg pie css2) - - SIMPLE_FUNCTIONS = { - "image" => %w(), # No browsers implement this yet. - "cross-fade" => %w() # No browsers implement this yet. - } - - # Adds support for one or more aspects for the given simple function - # Example: - # - # Compass::BrowserSupport.add_support("image", "moz", "webkit") - # # => Adds support for moz and webkit to the image() function. - # - # This function can be called one or more times in a compass configuration - # file in order to add support for new, simple browser functions without - # waiting for a new compass release. - def add_support(function, *aspects) - aspects.each do |aspect| - unless ASPECTS.include?(aspect) - Compass::Util.compass_warn "Unknown support aspect: #{aspect}" - next - end - unless supports?(function, aspect) - SIMPLE_FUNCTIONS[function.to_s] ||= [] - SIMPLE_FUNCTIONS[function.to_s] << aspect.to_s - end - end - end - - # Removes support for one or more aspects for the given simple function - # Example: - # - # Compass::BrowserSupport.remove_support("image", "o", "ms") - # # => Adds support for moz and webkit to the image() function. - # - # This function can be called one or more times in a compass configuration - # file in order to remove support for simple functions that no longer need to - # a prefix without waiting for a new compass release. - def remove_support(function, *aspects) - aspects.each do |aspect| - unless ASPECTS.include?(aspect) - Compass::Util.compass_warn "Unknown support aspect: #{aspect}" - next - end - SIMPLE_FUNCTIONS[function.to_s].reject!{|a| a == aspect.to_s} - end - end - - def supports?(function, aspect) - SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].include?(aspect.to_s) - end - - def has_aspect?(function) - SIMPLE_FUNCTIONS.has_key?(function.to_s) && SIMPLE_FUNCTIONS[function.to_s].size > 0 - end - - end -end - module Sass::Script module HasSimpleCrossBrowserFunctionSupport def supports?(aspect) From 068ee421f1cc697cf91da8c0682ef9ba5dc08846 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Fri, 31 Dec 2010 15:06:41 -0800 Subject: [PATCH 13/24] Add docs on the compass cross browser helper functions. --- doc-src/Gemfile | 2 +- doc-src/Gemfile.lock | 11 +- .../content/reference/compass/helpers.haml | 9 ++ .../compass/helpers/cross-browser.haml | 104 ++++++++++++++++++ 4 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 doc-src/content/reference/compass/helpers/cross-browser.haml diff --git a/doc-src/Gemfile b/doc-src/Gemfile index d82f7a7e..aea55426 100644 --- a/doc-src/Gemfile +++ b/doc-src/Gemfile @@ -8,7 +8,7 @@ gem 'mime-types' gem 'serve', "1.0.0" gem 'nokogiri' gem 'coderay' -gem 'sass', ">= 3.1.0.alpha.50", :git => "git://github.com/chriseppstein/sass.git" +gem 'sass', ">= 3.1.0.alpha.50" gem 'fssm', '0.1.2' gem 'haml', ">= 3.1.0.alpha.36" gem 'rake' diff --git a/doc-src/Gemfile.lock b/doc-src/Gemfile.lock index 20ea7971..d9511225 100644 --- a/doc-src/Gemfile.lock +++ b/doc-src/Gemfile.lock @@ -5,16 +5,10 @@ GIT nanoc3 (3.2.0a3) cri (>= 1.0.0) -GIT - remote: git://github.com/chriseppstein/sass.git - revision: c9de58c678644ec9b0ae5103ab595815e5aa4ecf - specs: - sass (3.1.0.alpha.50) - PATH remote: .. specs: - compass (0.11.alpha.4.02d6292) + compass (0.11.alpha.4.e11f103) chunky_png (~> 0.10.3) sass (>= 3.1.0.alpha.50) @@ -40,6 +34,7 @@ GEM rake (0.8.7) rdiscount (1.6.5) ruby-prof (0.9.2) + sass (3.1.0.alpha.214) serve (1.0.0) activesupport (~> 3.0.1) i18n (~> 0.4.1) @@ -67,6 +62,6 @@ DEPENDENCIES rake rdiscount ruby-prof - sass (>= 3.1.0.alpha.50)! + sass (>= 3.1.0.alpha.50) serve (= 1.0.0) thor diff --git a/doc-src/content/reference/compass/helpers.haml b/doc-src/content/reference/compass/helpers.haml index 4903d283..340e1f45 100644 --- a/doc-src/content/reference/compass/helpers.haml +++ b/doc-src/content/reference/compass/helpers.haml @@ -35,9 +35,18 @@ layout: core * [inline-font-files()](/reference/compass/helpers/inline-data/#inline-font-files) * [inline-image()](/reference/compass/helpers/inline-data/#inline-image) * [nest()](/reference/compass/helpers/selectors/#nest) + * [prefix()](/reference/compass/helpers/cross-browser/#prefix) + * [prefixed()](/reference/compass/helpers/cross-browser/#prefixed) * [pi()](/reference/compass/helpers/trig/#pi) * [sin()](/reference/compass/helpers/trig/#sin) * [stylesheet-url()](/reference/compass/helpers/urls/#stylesheet-url) * [scale-lightness()](/reference/compass/helpers/colors/#scale-lightness) * [tan()](/reference/compass/helpers/trig/#tan) + * [-css2()](/reference/compass/helpers/cross-browser/#-css2) + * [-moz()](/reference/compass/helpers/cross-browser/#-moz) + * [-ms()](/reference/compass/helpers/cross-browser/#-ms) + * [-o()](/reference/compass/helpers/cross-browser/#-o) + * [-pie()](/reference/compass/helpers/cross-browser/#-pie) + * [-svg()](/reference/compass/helpers/cross-browser/#-svg) + * [-webkit()](/reference/compass/helpers/cross-browser/#-webkit) diff --git a/doc-src/content/reference/compass/helpers/cross-browser.haml b/doc-src/content/reference/compass/helpers/cross-browser.haml new file mode 100644 index 00000000..b11f68d9 --- /dev/null +++ b/doc-src/content/reference/compass/helpers/cross-browser.haml @@ -0,0 +1,104 @@ +--- +title: Compass Cross Browser Helpers +crumb: Cross Browser +framework: compass +meta_description: Helper functions for working with vendor prefixed functions. +layout: core +classnames: + - reference + - core + - helpers +--- +%h1 Compass Cross Browser Helpers + +:markdown + These helpers are used by compass to create mixins that can insulate + the user from cross browser syntax and vendor prefix complexities. + + If you need to support a new experimental (prefixed) function in your + project using these helpers, you can add support for it adding the following + to your compass configuration file: + + Compass::BrowserSupport.add_support("function-name", "webkit", "moz") + + For an example of how to use these functions see the + [compass images module](https://github.com/chriseppstein/compass/blob/master/frameworks/compass/stylesheets/compass/css3/_images.scss). + +#prefixed.helper + %h3 + %a(href="#prefixed") + prefixed($prefix, $arg, ...) + .details + %p + Returns true if any of the arguments require the given prefix. + +#prefix.helper + %h3 + %a(href="#prefix") + prefix($prefix, $arg, ...) + .details + %p + Transforms the argument(s) into a representation for the rendering engine + indicated by $prefix. Usually this means just adding a prefix, + but in some cases, this may result in entirely different representations for + the given rendering engine (E.g. linear-gradient). + %p + Values that do not have a specific representation are passed through without + being transformed. + +#-webkit.helper + %h3 + %a(href="#-webkit") + \-webkit($arg, ...) + .details + %p + This is a shortcut for calling prefix(-webkit, $arg, ...). +#-moz.helper + %h3 + %a(href="#-moz") + \-moz($arg, ...) + .details + %p + This is a shortcut for calling prefix(-moz, $arg, ...). +#-o.helper + %h3 + %a(href="#-o") + \-o($arg, ...) + .details + %p + This is a shortcut for calling prefix(-o, $arg, ...). +#-ms.helper + %h3 + %a(href="#-ms") + \-ms($arg, ...) + .details + %p + This is a shortcut for calling prefix(-ms, $arg, ...). +#-svg.helper + %h3 + %a(href="#-svg") + \-svg($arg, ...) + .details + %p + This is a shortcut for calling prefix(-svg, $arg, ...). + Instead of adding a prefix, it returns a representation of the + arguments using SVG to render them where it can. +#-pie.helper + %h3 + %a(href="#-pie") + \-pie($arg, ...) + .details + %p + This is a shortcut for calling prefix(-pie, $arg, ...). + It it used to get
CSS3 PIE + support where necessary. +#-css2.helper + %h3 + %a(href="#-css2") + \-css2($arg, ...) + .details + %p + This is a shortcut for calling prefix(-css2, $arg, ...). + It is a kind of hack to sanitize the output of experimental code + into a form that can be parsed by a css2.1 compliant parser. + Usually this results in causing some functions to be omitted. From d67a43ad4bc70d4764c1f3eb8f4afdeeb07be007 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 2 Jan 2011 10:43:59 -0800 Subject: [PATCH 14/24] Make a span() function for blueprint that returns the width in pixels of $n columns. --- .../blueprint/stylesheets/blueprint/_grid.scss | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/frameworks/blueprint/stylesheets/blueprint/_grid.scss b/frameworks/blueprint/stylesheets/blueprint/_grid.scss index 30a38e06..6b6aa28d 100644 --- a/frameworks/blueprint/stylesheets/blueprint/_grid.scss +++ b/frameworks/blueprint/stylesheets/blueprint/_grid.scss @@ -108,16 +108,20 @@ $blueprint-container-size: $blueprint-grid-outer-width * $blueprint-grid-columns @include column-base($last); @include span($n); } +// Return the width of `$n` columns. +@function span($n) { + @return $blueprint-grid-width * $n + $blueprint-grid-margin * ($n - 1); +} + // Set only the width of an element to align it with the grid. // Most of the time you'll want to use `+column` instead. // // This mixin is especially useful for aligning tables to the grid. -@mixin span($n, $override: false) { - $width: $blueprint-grid-width * $n + $blueprint-grid-margin * ($n - 1); - @if $override { - width: $width !important; } +@mixin span($n, $important: false) { + @if $important { + width: span($n) !important; } @else { - width: $width; } } + width: span($n); } } // The basic set of styles needed to make an element // behave like a column: From 48e3825053d01f00f0f4be4f83273d5ba7ac3adc Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Sun, 2 Jan 2011 12:34:16 -0800 Subject: [PATCH 15/24] Document Sass Functions --- doc-src/Gemfile.lock | 2 +- doc-src/assets/javascripts/site.js | 2 +- doc-src/content/index/functions.haml | 18 +++++++++ doc-src/content/index/mixins.haml | 2 +- .../content/stylesheets/partials/_code.scss | 10 ++--- .../content/stylesheets/partials/_theme.scss | 2 +- .../layouts/partials/reference/functions.haml | 19 +++++++++ .../layouts/partials/reference/mixins.haml | 2 +- doc-src/layouts/reference.haml | 2 + doc-src/lib/stylesheets.rb | 33 +++++++++++++++- doc-src/lib/stylesheets/sass_extensions.rb | 39 +++++++++++++------ .../sass_extensions/functions/colors.rb | 5 +-- 12 files changed, 109 insertions(+), 27 deletions(-) create mode 100644 doc-src/content/index/functions.haml create mode 100644 doc-src/layouts/partials/reference/functions.haml diff --git a/doc-src/Gemfile.lock b/doc-src/Gemfile.lock index d9511225..ac01405d 100644 --- a/doc-src/Gemfile.lock +++ b/doc-src/Gemfile.lock @@ -8,7 +8,7 @@ GIT PATH remote: .. specs: - compass (0.11.alpha.4.e11f103) + compass (0.11.alpha.4.d67a43a) chunky_png (~> 0.10.3) sass (>= 3.1.0.alpha.50) diff --git a/doc-src/assets/javascripts/site.js b/doc-src/assets/javascripts/site.js index b273aee4..e977a384 100644 --- a/doc-src/assets/javascripts/site.js +++ b/doc-src/assets/javascripts/site.js @@ -109,7 +109,7 @@ $('document').ready(function(){ changeTheme(); event.preventDefault(); - // View source for mixins + // View source for mixins & functions } else if (target.attr("rel") == "view source") { $(target.attr("href")).toggle(); event.preventDefault(); diff --git a/doc-src/content/index/functions.haml b/doc-src/content/index/functions.haml new file mode 100644 index 00000000..6f918437 --- /dev/null +++ b/doc-src/content/index/functions.haml @@ -0,0 +1,18 @@ +--- +title: Compass Documentation | All Functions +crumb: Docs +body_id: home +--- +%article + %h1#logo Sass Based Functions + + - all_functions.sort_by{|i| i.first.identifier}.each do |item, functions| + %h3= link_to item[:title], item + %ul + - functions.sort_by{|f| f.name}.each do |f| + %li= f.sass_signature(:html) + + %h1#logo All Ruby Based Functions + %ul + - Sass::Script::Functions.public_instance_methods.sort_by{|m| m.to_s}.each do |m| + %li= m.to_s.gsub("_","-") diff --git a/doc-src/content/index/mixins.haml b/doc-src/content/index/mixins.haml index 3980026e..4dc8a10b 100644 --- a/doc-src/content/index/mixins.haml +++ b/doc-src/content/index/mixins.haml @@ -10,5 +10,5 @@ body_id: home %h3= link_to item[:title], item %ul - mixins.sort_by{|m| m.name}.each do |m| - %li= mixin_signature(m) + %li= m.sass_signature(:none, :html) diff --git a/doc-src/content/stylesheets/partials/_code.scss b/doc-src/content/stylesheets/partials/_code.scss index 9349495f..710b75f3 100644 --- a/doc-src/content/stylesheets/partials/_code.scss +++ b/doc-src/content/stylesheets/partials/_code.scss @@ -1,18 +1,18 @@ //html.sass .mixin-source .scss, html.scss .mixin-source .sass { @extend .hide;} -.mixin-source, .example-source { +.mixin-source, .example-source, .function-source { position: relative; @extend .fixed-font; .syntaxhighlighter, pre { &.scss, &.sass, &.css, &.haml, &.html { display: none; } } } -html.sass { .mixin-source .syntaxhighlighter.sass, .example-source .syntaxhighlighter.sass { display: block; } } -html.scss { .mixin-source .syntaxhighlighter.scss, .example-source .syntaxhighlighter.scss { display: block; } } +html.sass { .mixin-source, .example-source, .function-source { .syntaxhighlighter.sass { display: block; } } } +html.scss { .mixin-source, .example-source, .function-source { .syntaxhighlighter.scss { display: block; } } } html.css .example-source .syntaxhighlighter.css { display: block; } html.html .example-source .syntaxhighlighter.html { display: block; } html.haml .example-source .syntaxhighlighter.haml { display: block; } -.mixin-source { display: none; } +.mixin-source, .function-source { display: none; } html.light .syntaxhighlighter, html.dark .syntaxhighlighter { margin: 0 0 2px; @@ -59,7 +59,7 @@ h3 { @include round-corners; a { text-decoration: none;} code, .arg { font-weight: normal; } } -h3.mixin { @include round-top-corners; margin-bottom: 2px;} +h3.mixin, h3.function { @include round-top-corners; margin-bottom: 2px;} .arg { display: inline-block; padding: 0 2px; diff --git a/doc-src/content/stylesheets/partials/_theme.scss b/doc-src/content/stylesheets/partials/_theme.scss index d5c4d114..e60b6270 100644 --- a/doc-src/content/stylesheets/partials/_theme.scss +++ b/doc-src/content/stylesheets/partials/_theme.scss @@ -74,7 +74,7 @@ &.sass a[rel=sass], &.scss a[rel=scss], &.css a[rel=css], &.html a[rel=html], &.haml a[rel=haml] { color: $heading; color: rgba($heading, .7); @extend .round-corners-em; @extend .inset-panel-#{$theme}; } #version { color: rgba($heading, .3); a { color: rgba($nav-link, .7); } } - .mixin-source, .example-source { @extend .mixin-panel-#{$theme}; + .mixin-source, .example-source, .function-source { @extend .mixin-panel-#{$theme}; .container textarea { color: $code; } } h2 a.help { color: $heading;} diff --git a/doc-src/layouts/partials/reference/functions.haml b/doc-src/layouts/partials/reference/functions.haml new file mode 100644 index 00000000..51b945e3 --- /dev/null +++ b/doc-src/layouts/partials/reference/functions.haml @@ -0,0 +1,19 @@ +- if (functions = functions(@item)).any? + %h2 Functions + + - functions.each do |function| + %a{:href=>"#function-#{function.name}-source", :rel => "view source"} view source + %h3.function{:id=>"function-#{function.name}"} + %a.permalink{:href => "#function-#{function.name}"}= function.sass_signature(:html) + .function-source{:id=>"function-#{function.name}-source"} + %pre.source-code.sass= function.to_sass + %pre.source-code.scss= function.to_scss + + .source-documentation + = format_doc(function.comment) + - if (examples = examples(@item, function)).any? + %dl.examples + - examples.each do |example| + %dt= link_to example.item[:title], example + - if example.item[:description] + %dd= example.item[:description] diff --git a/doc-src/layouts/partials/reference/mixins.haml b/doc-src/layouts/partials/reference/mixins.haml index 8a4a60cb..e3b35441 100644 --- a/doc-src/layouts/partials/reference/mixins.haml +++ b/doc-src/layouts/partials/reference/mixins.haml @@ -4,7 +4,7 @@ - mixin_defs.each do |mixin| %a{:href=>"#mixin-#{mixin.name}-source", :rel => "view source"} view source %h3.mixin{:id=>"mixin-#{mixin.name}"} - %a.permalink{:href => "#mixin-#{mixin.name}"}= mixin_signature(mixin) + %a.permalink{:href => "#mixin-#{mixin.name}"}= mixin.sass_signature(:none, :html) .mixin-source{:id=>"mixin-#{mixin.name}-source"} %pre.source-code.sass= mixin.to_sass %pre.source-code.scss= mixin.to_scss diff --git a/doc-src/layouts/reference.haml b/doc-src/layouts/reference.haml index ef5cafe4..cad6909c 100644 --- a/doc-src/layouts/reference.haml +++ b/doc-src/layouts/reference.haml @@ -20,4 +20,6 @@ = render "partials/reference/constants" += render "partials/reference/functions" + = render "partials/reference/mixins" diff --git a/doc-src/lib/stylesheets.rb b/doc-src/lib/stylesheets.rb index 113baa20..bd15624b 100644 --- a/doc-src/lib/stylesheets.rb +++ b/doc-src/lib/stylesheets.rb @@ -118,6 +118,26 @@ def mixins(item) mixins.reject{|m| m.comment =~ /@private/} end +def functions(item) + sass_tree = tree(item) + functions = [] + comment = nil + sass_tree.children.each do |child| + if child.is_a?(Sass::Tree::FunctionNode) + child.comment = comment && Sass::Tree::CommentNode.clean(comment) + comment = nil + functions << child + elsif child.is_a?(Sass::Tree::CommentNode) + comment ||= "" + comment << "\n" unless comment.empty? + comment << child.docstring + else + comment = nil + end + end + functions.reject{|m| m.comment =~ /@private/} +end + def constants(item) sass_tree = tree(item) constants = [] @@ -165,8 +185,17 @@ def all_mixins all_mixins end -def mixin_signature(mixin, format = :html) - mixin.sass_signature(:none, format) +def all_functions + all_functions = [] + @items.each do |item| + next unless item.identifier =~ %r{/reference} + next unless item[:stylesheet] + fns = functions(item) + if fns.any? + all_functions << [item, fns] + end + end + all_functions end def example_items diff --git a/doc-src/lib/stylesheets/sass_extensions.rb b/doc-src/lib/stylesheets/sass_extensions.rb index dcf77717..a22ca076 100644 --- a/doc-src/lib/stylesheets/sass_extensions.rb +++ b/doc-src/lib/stylesheets/sass_extensions.rb @@ -19,18 +19,9 @@ module Sass class VariableNode < Node attr_accessor :comment unless method_defined? :comment end - class MixinDefNode < Node - attr_accessor :name unless method_defined? :name - attr_accessor :args unless method_defined? :args - attr_accessor :comment unless method_defined? :comment - def sass_signature(mode = :definition, format = :text) - prefix = case mode - when :definition - "=" - when :include - "+" - end - "#{prefix}#{name}#{arglist_to_sass(format)}" + module HasSignature + def sass_signature(format = :text) + "#{name}#{arglist_to_sass(format)}" end private @@ -57,6 +48,30 @@ module Sass sass_str end end + class MixinDefNode < Node + attr_accessor :name unless method_defined? :name + attr_accessor :args unless method_defined? :args + attr_accessor :comment unless method_defined? :comment + unless included_modules.include?(HasSignature) + include HasSignature + alias sass_signature_without_prefix sass_signature + def sass_signature(mode = :definition, format = :text) + prefix = case mode + when :definition + "=" + when :include + "+" + end + "#{prefix}#{sass_signature_without_prefix(format)}" + end + end + end + class FunctionNode < Node + attr_accessor :name unless method_defined? :name + attr_accessor :args unless method_defined? :args + attr_accessor :comment unless method_defined? :comment + include HasSignature unless included_modules.include?(HasSignature) + end class ImportNode < RootNode attr_accessor :imported_filename unless method_defined? :imported_filename end diff --git a/lib/compass/sass_extensions/functions/colors.rb b/lib/compass/sass_extensions/functions/colors.rb index f7ba0173..70be6162 100644 --- a/lib/compass/sass_extensions/functions/colors.rb +++ b/lib/compass/sass_extensions/functions/colors.rb @@ -1,11 +1,10 @@ module Compass::SassExtensions::Functions::Colors - include Compass::Util # a genericized version of lighten/darken so that negative values can be used. def adjust_lightness(color, amount) assert_type color, :Color assert_type amount, :Number - color.with(:lightness => restrict(color.lightness + amount.value, 0..100)) + color.with(:lightness => Compass::Util.restrict(color.lightness + amount.value, 0..100)) end # Scales a color's lightness by some percentage. @@ -21,7 +20,7 @@ module Compass::SassExtensions::Functions::Colors def adjust_saturation(color, amount) assert_type color, :Color assert_type amount, :Number - color.with(:saturation => restrict(color.saturation + amount.value, 0..100)) + color.with(:saturation => Compass::Util.restrict(color.saturation + amount.value, 0..100)) end # Scales a color's saturation by some percentage. From 2ad47f5c167081d784614e079a9a8f459857311f Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Mon, 3 Jan 2011 09:29:19 -0800 Subject: [PATCH 16/24] Better changelog entry for the new css3 cross browser function support. --- doc-src/content/CHANGELOG.markdown | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/doc-src/content/CHANGELOG.markdown b/doc-src/content/CHANGELOG.markdown index 07c24743..60d7a2d7 100644 --- a/doc-src/content/CHANGELOG.markdown +++ b/doc-src/content/CHANGELOG.markdown @@ -26,21 +26,10 @@ The Documentation for the [latest preview release](http://beta.compass-style.org The CLI options will still override the values set within the config file, but they might inform other values. For instance `compass compile -e production` will have the environment parameter preset to `:production` so that you can set other values in the project accordingly. -* New infrastructure for supporting experimental css3 functions that have the same syntax - across all browsers. It is now possible to configure which browsers support which experimental - functions outside of the compass release cycle by calling - `Compass::BrowserSupport.add_support('function', 'prefix')` and - `Compass::BrowserSupport.remove_support('function', 'prefix')`. - Once properly configured, the browser specific aspect can be inspected - via the `prefixed()` helper function and accessed via the various support - aspect helpers like `-moz()` and `-webkit()`. For example, if you call: - `Compass::BrowserSupport.add_support('image', 'webkit')` in your config - then in your stylesheet, `prefixed(-webkit, image("foo.png", "foo.gif"))` would - return true and `prefixed(-moz, image("foo.png", "foo.gif"))` would return false. - Additionally `-webkit(image("foo.png", "foo.gif"))` will return - `-webkit-image("foo.png", "foo.gif")`. This is very useful for creating mixins - that can support a range of inputs and vary the outputs according to the - support needs. +* New infrastructure for supporting experimental css3 functions that are prefixed but have the same + syntax across all browsers. It is now possible to configure which browsers support which + experimental functions outside of the compass release cycle. For details, see the + [cross browser helpers](/reference/compass/helpers/cross-browser/). 0.11.alpha.4 (12/08/2010) From 136954561f1c541f19549dde962c81a310c276bb Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Mon, 3 Jan 2011 09:30:18 -0800 Subject: [PATCH 17/24] Deprecate the blueprint span mixin in favor of the blueprint span function. --- doc-src/content/CHANGELOG.markdown | 6 +++ examples/blueprint_semantic/src/liquid.scss | 6 +-- examples/blueprint_semantic/src/screen.scss | 6 +-- .../stylesheets/blueprint/_grid.scss | 13 +++-- .../stylesheets/blueprint/css/screen.css | 48 +++++++++---------- .../blueprint/css/single-imports/grid.css | 48 +++++++++---------- .../blueprint/css/single-imports/rtl.css | 48 +++++++++---------- 7 files changed, 92 insertions(+), 83 deletions(-) diff --git a/doc-src/content/CHANGELOG.markdown b/doc-src/content/CHANGELOG.markdown index 60d7a2d7..19f04ecb 100644 --- a/doc-src/content/CHANGELOG.markdown +++ b/doc-src/content/CHANGELOG.markdown @@ -30,6 +30,12 @@ The Documentation for the [latest preview release](http://beta.compass-style.org syntax across all browsers. It is now possible to configure which browsers support which experimental functions outside of the compass release cycle. For details, see the [cross browser helpers](/reference/compass/helpers/cross-browser/). +* [Blueprint] Added a new sass function called span($n) to the grid module which replaces + the now **deprecated span mixin**. If you are using this mixin, please replace it with: + `width: span($n)`. +* [Blueprint] Blueprint no longer adds `!important` to the widths of `input`, `textarea`, + and `select` form fields, so compass no longer defaults to using `!important` in those cases. + If you were relying on this behavior, you may need to adjust your stylesheets accordingly. 0.11.alpha.4 (12/08/2010) diff --git a/examples/blueprint_semantic/src/liquid.scss b/examples/blueprint_semantic/src/liquid.scss index 79ca5dc2..0668be8d 100644 --- a/examples/blueprint_semantic/src/liquid.scss +++ b/examples/blueprint_semantic/src/liquid.scss @@ -20,11 +20,11 @@ body.blueprint { body#index { #page-header { - @include span(6); } + width: span(6); } #files-header { - @include span(8); } + width: span(8); } #description-header { - @include span(10); } + width: span(10); } #info { @include box; ul { diff --git a/examples/blueprint_semantic/src/screen.scss b/examples/blueprint_semantic/src/screen.scss index 889f12c7..b600ab27 100644 --- a/examples/blueprint_semantic/src/screen.scss +++ b/examples/blueprint_semantic/src/screen.scss @@ -20,11 +20,11 @@ body.blueprint { body#index { #page-header { - @include span(6); } + width: span(6); } #files-header { - @include span(8); } + width: span(8); } #description-header { - @include span(10); } + width: span(10); } #info { @include box; ul { diff --git a/frameworks/blueprint/stylesheets/blueprint/_grid.scss b/frameworks/blueprint/stylesheets/blueprint/_grid.scss index 6b6aa28d..2b35b331 100644 --- a/frameworks/blueprint/stylesheets/blueprint/_grid.scss +++ b/frameworks/blueprint/stylesheets/blueprint/_grid.scss @@ -54,15 +54,15 @@ $blueprint-container-size: $blueprint-grid-outer-width * $blueprint-grid-columns @for $n from 1 to $blueprint-grid-columns { .span-#{$n} { @extend .column; - @include span($n); } } + width: span($n); } } .span-#{$blueprint-grid-columns} { @extend .column; - @include span($blueprint-grid-columns); + width: span($blueprint-grid-columns); margin: 0; } input, textarea, select { @for $n from 1 through $blueprint-grid-columns { &.span-#{$n} { - @include span($n, true); } } } + width: span($n); } } } // Add these to a column to append empty cols. @for $n from 1 to $blueprint-grid-columns { .append-#{$n} { @@ -106,9 +106,9 @@ $blueprint-container-size: $blueprint-grid-outer-width * $blueprint-grid-columns // Use this mixins to set the width of n columns. @mixin column($n, $last: false) { @include column-base($last); - @include span($n); } + width: span($n); } -// Return the width of `$n` columns. +// Return the width in pixels of `$n` columns. @function span($n) { @return $blueprint-grid-width * $n + $blueprint-grid-margin * ($n - 1); } @@ -117,7 +117,10 @@ $blueprint-container-size: $blueprint-grid-outer-width * $blueprint-grid-columns // Most of the time you'll want to use `+column` instead. // // This mixin is especially useful for aligning tables to the grid. +// +// @deprecated Please use the span function with the width property instead. @mixin span($n, $important: false) { + @warn "The span mixin is deprecated. Please use the span function instead. E.g. width: span(#{$n})"; @if $important { width: span($n) !important; } @else { diff --git a/test/fixtures/stylesheets/blueprint/css/screen.css b/test/fixtures/stylesheets/blueprint/css/screen.css index 8f301369..db7e3410 100644 --- a/test/fixtures/stylesheets/blueprint/css/screen.css +++ b/test/fixtures/stylesheets/blueprint/css/screen.css @@ -315,53 +315,53 @@ caption { margin: 0; } input.span-1, textarea.span-1, select.span-1 { - width: 30px !important; } + width: 30px; } input.span-2, textarea.span-2, select.span-2 { - width: 70px !important; } + width: 70px; } input.span-3, textarea.span-3, select.span-3 { - width: 110px !important; } + width: 110px; } input.span-4, textarea.span-4, select.span-4 { - width: 150px !important; } + width: 150px; } input.span-5, textarea.span-5, select.span-5 { - width: 190px !important; } + width: 190px; } input.span-6, textarea.span-6, select.span-6 { - width: 230px !important; } + width: 230px; } input.span-7, textarea.span-7, select.span-7 { - width: 270px !important; } + width: 270px; } input.span-8, textarea.span-8, select.span-8 { - width: 310px !important; } + width: 310px; } input.span-9, textarea.span-9, select.span-9 { - width: 350px !important; } + width: 350px; } input.span-10, textarea.span-10, select.span-10 { - width: 390px !important; } + width: 390px; } input.span-11, textarea.span-11, select.span-11 { - width: 430px !important; } + width: 430px; } input.span-12, textarea.span-12, select.span-12 { - width: 470px !important; } + width: 470px; } input.span-13, textarea.span-13, select.span-13 { - width: 510px !important; } + width: 510px; } input.span-14, textarea.span-14, select.span-14 { - width: 550px !important; } + width: 550px; } input.span-15, textarea.span-15, select.span-15 { - width: 590px !important; } + width: 590px; } input.span-16, textarea.span-16, select.span-16 { - width: 630px !important; } + width: 630px; } input.span-17, textarea.span-17, select.span-17 { - width: 670px !important; } + width: 670px; } input.span-18, textarea.span-18, select.span-18 { - width: 710px !important; } + width: 710px; } input.span-19, textarea.span-19, select.span-19 { - width: 750px !important; } + width: 750px; } input.span-20, textarea.span-20, select.span-20 { - width: 790px !important; } + width: 790px; } input.span-21, textarea.span-21, select.span-21 { - width: 830px !important; } + width: 830px; } input.span-22, textarea.span-22, select.span-22 { - width: 870px !important; } + width: 870px; } input.span-23, textarea.span-23, select.span-23 { - width: 910px !important; } + width: 910px; } input.span-24, textarea.span-24, select.span-24 { - width: 950px !important; } + width: 950px; } .append-1 { padding-right: 40px; } diff --git a/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css b/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css index a0174227..e017275e 100644 --- a/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css +++ b/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css @@ -88,53 +88,53 @@ margin: 0; } input.span-1, textarea.span-1, select.span-1 { - width: 30px !important; } + width: 30px; } input.span-2, textarea.span-2, select.span-2 { - width: 70px !important; } + width: 70px; } input.span-3, textarea.span-3, select.span-3 { - width: 110px !important; } + width: 110px; } input.span-4, textarea.span-4, select.span-4 { - width: 150px !important; } + width: 150px; } input.span-5, textarea.span-5, select.span-5 { - width: 190px !important; } + width: 190px; } input.span-6, textarea.span-6, select.span-6 { - width: 230px !important; } + width: 230px; } input.span-7, textarea.span-7, select.span-7 { - width: 270px !important; } + width: 270px; } input.span-8, textarea.span-8, select.span-8 { - width: 310px !important; } + width: 310px; } input.span-9, textarea.span-9, select.span-9 { - width: 350px !important; } + width: 350px; } input.span-10, textarea.span-10, select.span-10 { - width: 390px !important; } + width: 390px; } input.span-11, textarea.span-11, select.span-11 { - width: 430px !important; } + width: 430px; } input.span-12, textarea.span-12, select.span-12 { - width: 470px !important; } + width: 470px; } input.span-13, textarea.span-13, select.span-13 { - width: 510px !important; } + width: 510px; } input.span-14, textarea.span-14, select.span-14 { - width: 550px !important; } + width: 550px; } input.span-15, textarea.span-15, select.span-15 { - width: 590px !important; } + width: 590px; } input.span-16, textarea.span-16, select.span-16 { - width: 630px !important; } + width: 630px; } input.span-17, textarea.span-17, select.span-17 { - width: 670px !important; } + width: 670px; } input.span-18, textarea.span-18, select.span-18 { - width: 710px !important; } + width: 710px; } input.span-19, textarea.span-19, select.span-19 { - width: 750px !important; } + width: 750px; } input.span-20, textarea.span-20, select.span-20 { - width: 790px !important; } + width: 790px; } input.span-21, textarea.span-21, select.span-21 { - width: 830px !important; } + width: 830px; } input.span-22, textarea.span-22, select.span-22 { - width: 870px !important; } + width: 870px; } input.span-23, textarea.span-23, select.span-23 { - width: 910px !important; } + width: 910px; } input.span-24, textarea.span-24, select.span-24 { - width: 950px !important; } + width: 950px; } .append-1 { padding-right: 40px; } diff --git a/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css b/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css index a49ae0ce..c8b84ff6 100644 --- a/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css +++ b/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css @@ -90,53 +90,53 @@ margin: 0; } input.span-1, textarea.span-1, select.span-1 { - width: 30px !important; } + width: 30px; } input.span-2, textarea.span-2, select.span-2 { - width: 70px !important; } + width: 70px; } input.span-3, textarea.span-3, select.span-3 { - width: 110px !important; } + width: 110px; } input.span-4, textarea.span-4, select.span-4 { - width: 150px !important; } + width: 150px; } input.span-5, textarea.span-5, select.span-5 { - width: 190px !important; } + width: 190px; } input.span-6, textarea.span-6, select.span-6 { - width: 230px !important; } + width: 230px; } input.span-7, textarea.span-7, select.span-7 { - width: 270px !important; } + width: 270px; } input.span-8, textarea.span-8, select.span-8 { - width: 310px !important; } + width: 310px; } input.span-9, textarea.span-9, select.span-9 { - width: 350px !important; } + width: 350px; } input.span-10, textarea.span-10, select.span-10 { - width: 390px !important; } + width: 390px; } input.span-11, textarea.span-11, select.span-11 { - width: 430px !important; } + width: 430px; } input.span-12, textarea.span-12, select.span-12 { - width: 470px !important; } + width: 470px; } input.span-13, textarea.span-13, select.span-13 { - width: 510px !important; } + width: 510px; } input.span-14, textarea.span-14, select.span-14 { - width: 550px !important; } + width: 550px; } input.span-15, textarea.span-15, select.span-15 { - width: 590px !important; } + width: 590px; } input.span-16, textarea.span-16, select.span-16 { - width: 630px !important; } + width: 630px; } input.span-17, textarea.span-17, select.span-17 { - width: 670px !important; } + width: 670px; } input.span-18, textarea.span-18, select.span-18 { - width: 710px !important; } + width: 710px; } input.span-19, textarea.span-19, select.span-19 { - width: 750px !important; } + width: 750px; } input.span-20, textarea.span-20, select.span-20 { - width: 790px !important; } + width: 790px; } input.span-21, textarea.span-21, select.span-21 { - width: 830px !important; } + width: 830px; } input.span-22, textarea.span-22, select.span-22 { - width: 870px !important; } + width: 870px; } input.span-23, textarea.span-23, select.span-23 { - width: 910px !important; } + width: 910px; } input.span-24, textarea.span-24, select.span-24 { - width: 950px !important; } + width: 950px; } .append-1 { padding-left: 40px; } From 7b5aabd21a79e632775f7250b9d13fa0f36c7870 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Mon, 3 Jan 2011 10:30:01 -0800 Subject: [PATCH 18/24] Upgrade some examples that were generating deprecation warnings. --- .../blueprint_plugins/src/link_icons.scss | 2 +- examples/blueprint_semantic/src/screen.scss | 2 +- examples/compass/src/sticky_footer.scss | 2 +- examples/compass/src/utilities.scss | 2 +- examples/css3/src/gradients.scss | 60 +++++++++---------- examples/css3/src/main.scss | 32 ++++------ 6 files changed, 47 insertions(+), 53 deletions(-) diff --git a/examples/blueprint_plugins/src/link_icons.scss b/examples/blueprint_plugins/src/link_icons.scss index 53274cf3..c4e28a75 100644 --- a/examples/blueprint_plugins/src/link_icons.scss +++ b/examples/blueprint_plugins/src/link_icons.scss @@ -10,4 +10,4 @@ body { // Not all links have a url structure that can be detected, // So you can set them explicitly yourself like so: a#this-is-a-pdf-link { - @include link-icon(unquote("pdf.png")); } } + @include link-icon("pdf.png"); } } diff --git a/examples/blueprint_semantic/src/screen.scss b/examples/blueprint_semantic/src/screen.scss index b600ab27..bc2a1c5d 100644 --- a/examples/blueprint_semantic/src/screen.scss +++ b/examples/blueprint_semantic/src/screen.scss @@ -9,7 +9,7 @@ body.blueprint { .container { @include container; } .showgrid { - background: inline_image(unquote("grid.png")); } + background: inline_image("grid.png"); } hr { @include colruler; } hr.space { diff --git a/examples/compass/src/sticky_footer.scss b/examples/compass/src/sticky_footer.scss index 4f3f807f..3c5bd4e0 100644 --- a/examples/compass/src/sticky_footer.scss +++ b/examples/compass/src/sticky_footer.scss @@ -1,7 +1,7 @@ @import "compass/reset"; @import "compass/layout"; -@include sticky-footer(72px, unquote("#layout"), unquote("#layout_footer"), unquote("#footer")); +@include sticky-footer(72px, "#layout", "#layout_footer", "#footer"); #header { background: #999999; diff --git a/examples/compass/src/utilities.scss b/examples/compass/src/utilities.scss index b15702f8..069c067b 100644 --- a/examples/compass/src/utilities.scss +++ b/examples/compass/src/utilities.scss @@ -57,7 +57,7 @@ h2 { ul.comma-delimited { @include comma-delimited-list; } ol.pretty { - @include pretty-bullets(unquote("blue_arrow.gif"), 5px, 7px, 18px); } } + @include pretty-bullets("blue_arrow.gif", 5px, 7px, 18px); } } #tables { @include column(16); diff --git a/examples/css3/src/gradients.scss b/examples/css3/src/gradients.scss index 6b39b710..ca55c6c7 100644 --- a/examples/css3/src/gradients.scss +++ b/examples/css3/src/gradients.scss @@ -11,76 +11,76 @@ thead th { @include text-shadow(white); } th.linear { - @include linear-gradient(color-stops(white, red 50%, yellow 75%, lime)); } + @include background-image(linear-gradient(white, red 50%, yellow 75%, lime)); } th.radial { - @include radial-gradient(color-stops(white, red 20px, yellow 30px, lime 40px)); } + @include background-image(radial-gradient(white, red 20px, yellow 30px, lime 40px)); } tr.default { td.linear { - @include linear-gradient(color-stops(#cc0000, #0000cc)); } + @include background-image(linear-gradient(#cc0000, #0000cc)); } td.radial { - @include radial-gradient(color-stops(#cc0000, #0000cc)); } + @include background-image(radial-gradient(#cc0000, #0000cc)); } td.linear-code:before { - content: "+linear-gradient(color-stops(#c00, #00c))"; } + content: "+background-image(linear-gradient(#c00, #00c))"; } td.radial-code:before { - content: "+radial-gradient(color-stops(#c00, #00c))"; } } + content: "+background-image(radial-gradient(#c00, #00c))"; } } tr.top-left { td.linear { - @include linear-gradient(color-stops(#cc0000, #0000cc), unquote("top left")); } + @include background-image(linear-gradient(top left, #cc0000, #0000cc)); } td.radial { - @include radial-gradient(color-stops(#cc0000, #0000cc), unquote("top left")); } + @include background-image(radial-gradient(top left, #cc0000, #0000cc)); } td.linear-code:before { - content: '+linear-gradient(color-stops(#c00, #00c), "top left")'; } + content: '+background-image(linear-gradient(top left, #c00, #00c))'; } td.radial-code:before { - content: '+radial-gradient(color-stops(#c00, #00c), "top left")'; } } + content: '+background-image(radial-gradient(top left, #c00, #00c))'; } } tr.bottom-right { td.linear { - @include linear-gradient(color-stops(#cc0000, #0000cc), unquote("bottom right")); } + @include background-image(linear-gradient(bottom right, #cc0000, #0000cc)); } td.radial { - @include radial-gradient(color-stops(#cc0000, #0000cc), unquote("bottom right")); } + @include background-image(radial-gradient(bottom right, #cc0000, #0000cc)); } td.linear-code:before { - content: '+linear-gradient(color-stops(#c00, #00c), "bottom right")'; } + content: '+background-image(linear-gradient(bottom right, #c00, #00c))'; } td.radial-code:before { - content: '+radial-gradient(color-stops(#c00, #00c), "bottom right")'; } } + content: '+background-image(radial-gradient(bottom right, #c00, #00c))'; } } tr.three-color { td.linear { - @include linear-gradient(color-stops(#cc0000, white, #0000cc)); } + @include background-image(linear-gradient(#cc0000, white, #0000cc)); } td.radial { - @include radial-gradient(color-stops(#cc0000, white, #0000cc 50px)); } + @include background-image(radial-gradient(#cc0000, white, #0000cc 50px)); } td.linear-code:before { - content: "+linear-gradient(color-stops(#c00, #fff, #00c))"; } + content: "+background-image(linear-gradient(#c00, #fff, #00c))"; } td.radial-code:before { - content: "+radial-gradient(color-stops(#c00, #fff, #00c 50px))"; } } + content: "+background-image(radial-gradient(#c00, #fff, #00c 50px))"; } } tr.four-color { td.linear { - @include linear-gradient(color-stops(#cc0000, #00cc00 25%, #00cccc 75%, #0000cc)); } + @include background-image(linear-gradient(#cc0000, #00cc00 25%, #00cccc 75%, #0000cc)); } td.radial { - @include radial-gradient(color-stops(#cc0000, #00cc00 25%, #00cccc 75%, #0000cc 50px)); } + @include background-image(radial-gradient(#cc0000, #00cc00 25%, #00cccc 75%, #0000cc 50px)); } td.linear-code:before { - content: "+linear-gradient(color-stops(#c00, #0c0 25%, #0cc 75%, #00c))"; } + content: "+background-image(linear-gradient(#c00, #0c0 25%, #0cc 75%, #00c))"; } td.radial-code:before { - content: "+radial-gradient(color-stops(#c00, #0c0 25%, #0cc 75%, #00c 50px))"; } } + content: "+background-image(radial-gradient(#c00, #0c0 25%, #0cc 75%, #00c 50px))"; } } tr.filled-in { td.linear { - @include linear-gradient(color-stops(#cc0000 33%, #0000cc 66%)); } + @include background-image(linear-gradient(#cc0000 33%, #0000cc 66%)); } td.radial { - @include radial-gradient(color-stops(#cc0000 25px, #0000cc 75px)); } + @include background-image(radial-gradient(#cc0000 25px, #0000cc 75px)); } td.linear-code:before { - content: "+linear-gradient(color-stops(#c00 33%, #00c 66%))"; } + content: "+background-image(linear-gradient(#c00 33%, #00c 66%))"; } td.radial-code:before { - content: "+radial-gradient(color-stops(#c00 25px, #00c 75px))"; } } + content: "+background-image(radial-gradient(#c00 25px, #00c 75px))"; } } tr.with-bg { td.linear { - @include linear-gradient(color-stops(#cc0000 33%, #0000cc 66%), top, image-url("button_bg.png")); } + @include background-image(image-url("button_bg.png"), linear-gradient(top, #c00 33%, #00c 66%)); } td.radial { - @include radial-gradient(color-stops(#cc0000 25px, #0000cc 75px), center center, image-url("button_bg.png")); } + @include background-image(image-url("button_bg.png"), radial-gradient(center center, #c00 25px, #00c 75px)); } td.linear-code:before { - content: "+linear-gradient(color-stops(#cc0000 33%, #0000cc 66%), top, image-url(\"button_bg.png\"))"; } + content: "+background-image(image-url(\"button_bg.png\"), linear-gradient(top, #c00 33%, #00c 66%))"; } td.radial-code:before { - content: "+radial-gradient(color-stops(#cc0000 25px, #0000cc 75px), center center, image-url(\"button_bg.png\"))"; } } \ No newline at end of file + content: "+background-image(image-url(\"button_bg.png\"), radial-gradient(center center, #c00 25px, #00c 75px))"; } } \ No newline at end of file diff --git a/examples/css3/src/main.scss b/examples/css3/src/main.scss index 5396a0c1..57d0d2f3 100644 --- a/examples/css3/src/main.scss +++ b/examples/css3/src/main.scss @@ -26,14 +26,14 @@ h1 { min-width: $min_width; border: 4px solid #{$border_color}; @include border-radius(0.667em); - @include box-shadow(darken($border_color, 40), 5px, 5px, 2px); + @include single-box-shadow(darken($border_color, 40), 5px, 5px, 2px); margin-bottom: 1em; h2 { margin: 0.5em 0 1em; text-align: center; } } .inset { - @include box-shadow(darken($border_color, 40), 5px, 5px, 2px, 3px, inset); + @include single-box-shadow(darken($border_color, 40), 5px, 5px, 2px, 3px, inset); } .gutter { @@ -44,7 +44,7 @@ h1 { content: " "; } .example { - @include linear-gradient(color_stops(white, #cccccc)); + @include background-image(linear-gradient(white, #cccccc)); pre { padding: 1em; margin: 1em; @@ -76,39 +76,33 @@ h1 { #gradients { .horizontal { - @include linear-gradient(color_stops(#d92626, #2626d9), left); } + @include background-image(left, linear-gradient(#d92626, #2626d9)); } .vertical { - @include linear-gradient(color_stops(#d92626, #2626d9)); } + @include background-image(linear-gradient(#d92626, #2626d9)); } .diagonal { - @include linear-gradient(color_stops(#d92626, #2626d9), unquote("right top")); } + @include background-image(linear-gradient(right top, #d92626, #2626d9)); } .radial { /* +radial-gradient(color_stops(#d92626 0, #2626d9 1)) */ - @include radial-gradient(color_stops(#d92626 10px, #2626d9 150px)); + @include background-image(radial-gradient(#d92626 10px, #2626d9 150px)); // +radial-gradient("center center, 10, center center, 100", #d92626, #2626d9) // background-image: -moz-radial-gradient(20px center, circle, #d92626 10px, #2626d9 100px) // background-color: #2626d9 } .radial-1 { // A default radial gradient: - /* +radial-gradient(color_stops(#ddd, #aaa)) */ - @include radial-gradient(color_stops(#dddddd, #aaaaaa)); } + @include background-image(radial-gradient(#dddddd, #aaaaaa)); } .radial-2 { // A centered gradient - /* +radial-gradient(color_stops(#ddd, #aaa)) */ - @include radial-gradient(color_stops(#dddddd, #aaaaaa)); } + @include background-image(radial-gradient(#dddddd, #aaaaaa)); } .radial-3 { // A centered radial gradient at the top - /* +radial-gradient(color_stops(#ddd, #aaa), "top center") */ - @include radial-gradient(color_stops(#dddddd, #aaaaaa), unquote("top center")); } + @include background-image(radial-gradient(top center, #dddddd, #aaaaaa)); } .radial-4 { // A centered radial gradient with fixed color stops - /* +radial-gradient(color_stops(#ddd 20px, #aaa 50px)) */ - @include radial-gradient(color_stops(#dddddd 20px, #aaaaaa 50px)); } + @include background-image(radial-gradient(#dddddd 20px, #aaaaaa 50px)); } .radial-5 { // A centered gradient with several color stops - /* +radial-gradient(color_stops(#ddd 20%, #aaa 50%, #c00)) */ - @include radial-gradient(color_stops(#dddddd 20px, #aaaaaa 50%, #cc0000 200px)); } + @include background-image(radial-gradient(#dddddd 20px, #aaaaaa 50%, #cc0000 200px)); } .radial-6 { // A centered gradient with color stops - /* +radial-gradient(color_stops(#0c0, #ddd 20%, #aaa 50%, #00c)) */ - @include radial-gradient(color_stops(#00cc00 0px, #dddddd 20px, #aaaaaa 50px, #0000cc 100px)); } } + @include background-image(radial-gradient(#00cc00 0px, #dddddd 20px, #aaaaaa 50px, #0000cc 100px)); } } From 8a995fe903d9cddaf4421846fe24457809ffe664 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Tue, 4 Jan 2011 10:01:46 -0800 Subject: [PATCH 19/24] homepage copy tweaks --- doc-src/content/index.haml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc-src/content/index.haml b/doc-src/content/index.haml index 74b49789..acd834f3 100644 --- a/doc-src/content/index.haml +++ b/doc-src/content/index.haml @@ -10,13 +10,18 @@ layout: homepage .compass %h4 Why designers love Compass. %ol - %li Get cleaner markup with no presentational classes. + %li Experience cleaner markup without presentational classes. %li It’s chock full of the web’s best reusable patterns. %li Developing a personal framework is simple. %li Compass mixins make CSS3 easy. + %li Download and create extensions with ease. .sass %h4 Compass uses Sass. - %p Sass is an extension of CSS3 which adds nested rules, variables, mixins, selector inheritance, and more. Sass generates well formatted CSS. + %p + Sass is an extension of CSS3 which + adds nested rules, variables, mixins, selector inheritance, and more. + Sass generates well formatted CSS and makes your stylesheets + easier to organize and maintain. %h3 Brilliant people use Compass, including these wildly talented folks: %ul#featured_sites %li From faf769cd39408805f02e897907cdce49cd069518 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Tue, 4 Jan 2011 10:42:05 -0800 Subject: [PATCH 20/24] Better index structure for vars, mixins, and functions. --- doc-src/content/index/functions.haml | 9 ++++--- doc-src/content/index/mixins.haml | 10 +++---- doc-src/content/index/variables.haml | 10 +++---- doc-src/lib/default.rb | 6 +++++ doc-src/lib/stylesheets.rb | 40 +++++++++------------------- 5 files changed, 34 insertions(+), 41 deletions(-) diff --git a/doc-src/content/index/functions.haml b/doc-src/content/index/functions.haml index 6f918437..423d5000 100644 --- a/doc-src/content/index/functions.haml +++ b/doc-src/content/index/functions.haml @@ -6,11 +6,12 @@ body_id: home %article %h1#logo Sass Based Functions - - all_functions.sort_by{|i| i.first.identifier}.each do |item, functions| - %h3= link_to item[:title], item + - all_functions.sorted_and_grouped_by_name{|f| f.last.name }.each do |(group, functions)| + %h3= group %ul - - functions.sort_by{|f| f.name}.each do |f| - %li= f.sass_signature(:html) + - functions.each do |(i, f)| + %li + %a{:href=>"#{i.path}#function-#{f.name}"}= f.sass_signature(:html) %h1#logo All Ruby Based Functions %ul diff --git a/doc-src/content/index/mixins.haml b/doc-src/content/index/mixins.haml index 4dc8a10b..1743fe8f 100644 --- a/doc-src/content/index/mixins.haml +++ b/doc-src/content/index/mixins.haml @@ -6,9 +6,9 @@ body_id: home %article %h1#logo Compass Mixins - - all_mixins.sort_by{|i| i.first.identifier}.each do |item, mixins| - %h3= link_to item[:title], item + - all_mixins.sorted_and_grouped_by_name{|m| m.last.name }.each do |(group, mixins)| + %h3= group %ul - - mixins.sort_by{|m| m.name}.each do |m| - %li= m.sass_signature(:none, :html) - + - mixins.each do |(i, m)| + %li + %a{:href=>"#{i.path}#mixin-#{m.name}"}= m.sass_signature(:none, :html) diff --git a/doc-src/content/index/variables.haml b/doc-src/content/index/variables.haml index dcb78594..cffd3731 100644 --- a/doc-src/content/index/variables.haml +++ b/doc-src/content/index/variables.haml @@ -6,10 +6,10 @@ body_id: home %article %h1#logo Compass Variables - - all_constants.sort_by{|i| i.first.identifier}.each do |item, constants| - %h3= link_to item[:title], item + - all_constants.sorted_and_grouped_by_name{|v| v.last.name }.each do |(group, variables)| + %h3= group %ul - - constants.sort_by{|c| c.name}.each do |c| - %li $#{c.name} - + - variables.each do |(i, v)| + %li + %a{:href=>"#{i.path}#const-#{v.name}"}= "$" + v.name \ No newline at end of file diff --git a/doc-src/lib/default.rb b/doc-src/lib/default.rb index 39b25dec..46b98745 100644 --- a/doc-src/lib/default.rb +++ b/doc-src/lib/default.rb @@ -28,6 +28,12 @@ def body_attributes(item) } end +module Enumerable + def sorted_and_grouped_by_name + sort_by{|i| yield(i)}.group_by{|i| yield(i).sub(/^[^\w]/,"")[0..0].upcase} + end +end + class Recycler attr_accessor :values attr_accessor :index diff --git a/doc-src/lib/stylesheets.rb b/doc-src/lib/stylesheets.rb index bd15624b..24921c1e 100644 --- a/doc-src/lib/stylesheets.rb +++ b/doc-src/lib/stylesheets.rb @@ -160,42 +160,28 @@ def constants(item) end def all_constants - variables = [] - @items.each do |item| - next unless item.identifier =~ %r{/reference} - next unless item[:stylesheet] - vars = constants(item) - if vars.any? - variables << [item, vars] - end + @items.inject([]) do |variables, item| + next variables unless item.identifier =~ %r{/reference} + next variables unless item[:stylesheet] + variables += constants(item).map{|v| [item, v] } end - variables end def all_mixins - all_mixins = [] - @items.each do |item| - next unless item.identifier =~ %r{/reference} - next unless item[:stylesheet] - ms = mixins(item) - if ms.any? - all_mixins << [item, ms] - end + @items.inject([]) do |all_mixins, item| + next all_mixins unless item.identifier =~ %r{/reference} + next all_mixins unless item[:stylesheet] + all_mixins += mixins(item).map{|m| [item, m] } end - all_mixins end def all_functions - all_functions = [] - @items.each do |item| - next unless item.identifier =~ %r{/reference} - next unless item[:stylesheet] - fns = functions(item) - if fns.any? - all_functions << [item, fns] - end + rv = @items.inject([]) do |all_functions, item| + next all_functions unless item.identifier =~ %r{/reference} + next all_functions unless item[:stylesheet] + all_functions += functions(item).map{|f| [item, f] } end - all_functions + rv end def example_items From 0fee93ff5bddbc1bfa85ac1d7771bb0a5e346fde Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Tue, 4 Jan 2011 10:42:19 -0800 Subject: [PATCH 21/24] rename docs to reference --- doc-src/layouts/partials/main-navigation.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc-src/layouts/partials/main-navigation.haml b/doc-src/layouts/partials/main-navigation.haml index 93fb6ab6..15d33110 100644 --- a/doc-src/layouts/partials/main-navigation.haml +++ b/doc-src/layouts/partials/main-navigation.haml @@ -7,7 +7,7 @@ %li.vcard %a.fn.org.url.uid{:href => "/", :rel => "home"} Home %li - %a{:href => "/reference/compass/", :rel => "documentation"} Docs + %a{:href => "/reference/compass/", :rel => "documentation"} Reference %li %a{:href => "/help", :rel=> "help"} Help %li From df756b194c61a209a29bbc8ad338ac0a01dd0a78 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Tue, 4 Jan 2011 19:20:00 -0800 Subject: [PATCH 22/24] Deprecate the span mixin in favor of the span-fluid() function in the blueprint fluid grid. --- .../stylesheets/blueprint/_liquid.scss | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/frameworks/blueprint/stylesheets/blueprint/_liquid.scss b/frameworks/blueprint/stylesheets/blueprint/_liquid.scss index 2c7e774c..ebe0e070 100644 --- a/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +++ b/frameworks/blueprint/stylesheets/blueprint/_liquid.scss @@ -55,8 +55,7 @@ $blueprint-liquid-grid-push-pull: -($blueprint-liquid-grid-margin + $blueprint-l @include container; } // Use these classes (or mixins) to set the width of a column. @for $n from 1 to $blueprint-liquid-grid-columns + 1 { - .span-#{$n} { - @include span($n); } + .span-#{$n} { width: span-fluid($n); } div { &.span-#{$n} { @include column($n, $n == $blueprint-liquid-grid-columns); } } } @@ -86,9 +85,15 @@ $blueprint-liquid-grid-push-pull: -($blueprint-liquid-grid-margin + $blueprint-l margin: 0 auto; @include clearfix; } -@mixin span($n, $override: false) { - $width: $blueprint-liquid-grid-width * $n + $blueprint-liquid-grid-margin * ($n - 1); - @if $override { +// Return the width of `$n` columns in percents. +@function span-fluid($n) { + @return $blueprint-liquid-grid-width * $n + $blueprint-liquid-grid-margin * ($n - 1); +} + +@mixin span($n, $important: false) { + @warn "The span mixin is deprecated. Please use the span-fluid function instead. E.g. width: span-fluid(#{$n})"; + $width: span-fluid($n); + @if $important { width: $width !important; } @else { width: $width; } } @@ -99,7 +104,7 @@ $blueprint-liquid-grid-push-pull: -($blueprint-liquid-grid-margin + $blueprint-l @mixin column($n, $last: false) { @include float-left; overflow: hidden; - @include span($n); + width: span-fluid($n); @if $last { @include last; } @else { From 2e2b38432713329a3908d81efb228c89fa16f8f6 Mon Sep 17 00:00:00 2001 From: Chris Eppstein Date: Wed, 5 Jan 2011 09:34:45 -0800 Subject: [PATCH 23/24] Link to index pages from the search page, link ruby functions to their appropriate compass docs, where they exist. --- doc-src/content/index/functions.haml | 7 ++++++- .../content/reference/compass/helpers/color-stops.haml | 2 ++ doc-src/content/reference/compass/helpers/colors.haml | 5 +++++ .../content/reference/compass/helpers/constants.haml | 2 ++ .../reference/compass/helpers/cross-browser.haml | 10 ++++++++++ doc-src/content/reference/compass/helpers/display.haml | 2 ++ .../content/reference/compass/helpers/font-files.haml | 2 ++ .../reference/compass/helpers/image-dimensions.haml | 3 +++ .../content/reference/compass/helpers/inline-data.haml | 3 +++ .../content/reference/compass/helpers/selectors.haml | 7 +++++++ doc-src/content/reference/compass/helpers/sprites.haml | 7 +++++++ doc-src/content/reference/compass/helpers/trig.haml | 5 +++++ doc-src/content/reference/compass/helpers/urls.haml | 4 ++++ doc-src/content/search.haml | 10 ++++++++++ doc-src/lib/stylesheets.rb | 9 +++++++-- 15 files changed, 75 insertions(+), 3 deletions(-) diff --git a/doc-src/content/index/functions.haml b/doc-src/content/index/functions.haml index 423d5000..3db82d99 100644 --- a/doc-src/content/index/functions.haml +++ b/doc-src/content/index/functions.haml @@ -16,4 +16,9 @@ body_id: home %h1#logo All Ruby Based Functions %ul - Sass::Script::Functions.public_instance_methods.sort_by{|m| m.to_s}.each do |m| - %li= m.to_s.gsub("_","-") + %li + - name = m.to_s.gsub("_","-") + - if i = item_for_function_name(name) + %a{:href=>"#{i.path}##{name}"}= name + - else + = name \ No newline at end of file diff --git a/doc-src/content/reference/compass/helpers/color-stops.haml b/doc-src/content/reference/compass/helpers/color-stops.haml index 01d3d5df..a95f629a 100644 --- a/doc-src/content/reference/compass/helpers/color-stops.haml +++ b/doc-src/content/reference/compass/helpers/color-stops.haml @@ -8,6 +8,8 @@ classnames: - reference - core - helpers +documented_functions: + - "color-stops" --- %h1 Compass Color Stops Helper diff --git a/doc-src/content/reference/compass/helpers/colors.haml b/doc-src/content/reference/compass/helpers/colors.haml index 0e99a04d..3c49e423 100644 --- a/doc-src/content/reference/compass/helpers/colors.haml +++ b/doc-src/content/reference/compass/helpers/colors.haml @@ -8,6 +8,11 @@ classnames: - reference - core - helpers +documented_functions: + - "adjust-lightness" + - "adjust-saturation" + - "scale-lightness" + - "scale-saturation" --- %h1 Compass Color Helpers %p diff --git a/doc-src/content/reference/compass/helpers/constants.haml b/doc-src/content/reference/compass/helpers/constants.haml index b619dfe4..e1995322 100644 --- a/doc-src/content/reference/compass/helpers/constants.haml +++ b/doc-src/content/reference/compass/helpers/constants.haml @@ -8,6 +8,8 @@ classnames: - reference - core - helpers +documented_functions: + - "opposite-position" --- %h1 Compass Constant Helpers diff --git a/doc-src/content/reference/compass/helpers/cross-browser.haml b/doc-src/content/reference/compass/helpers/cross-browser.haml index b11f68d9..f8097bd7 100644 --- a/doc-src/content/reference/compass/helpers/cross-browser.haml +++ b/doc-src/content/reference/compass/helpers/cross-browser.haml @@ -8,6 +8,16 @@ classnames: - reference - core - helpers +documented_functions: + - "prefixed" + - "prefix" + - "-webkit" + - "-moz" + - "-o" + - "-ms" + - "-svg" + - "-pie" + - "-css2" --- %h1 Compass Cross Browser Helpers diff --git a/doc-src/content/reference/compass/helpers/display.haml b/doc-src/content/reference/compass/helpers/display.haml index d4f5396f..c0c3924e 100644 --- a/doc-src/content/reference/compass/helpers/display.haml +++ b/doc-src/content/reference/compass/helpers/display.haml @@ -8,6 +8,8 @@ classnames: - reference - core - helpers +documented_functions: + - "elements-of-type" --- %h1 Compass Display Helpers diff --git a/doc-src/content/reference/compass/helpers/font-files.haml b/doc-src/content/reference/compass/helpers/font-files.haml index 170c1bf5..d055c900 100644 --- a/doc-src/content/reference/compass/helpers/font-files.haml +++ b/doc-src/content/reference/compass/helpers/font-files.haml @@ -8,6 +8,8 @@ classnames: - reference - core - helpers +documented_functions: + - "font-files" --- %h1 Compass Font Files Helper diff --git a/doc-src/content/reference/compass/helpers/image-dimensions.haml b/doc-src/content/reference/compass/helpers/image-dimensions.haml index 13533d9f..c1f99cca 100644 --- a/doc-src/content/reference/compass/helpers/image-dimensions.haml +++ b/doc-src/content/reference/compass/helpers/image-dimensions.haml @@ -8,6 +8,9 @@ classnames: - reference - core - helpers +documented_functions: + - "image-width" + - "image-height" --- %h1 Compass Image Dimension Helpers diff --git a/doc-src/content/reference/compass/helpers/inline-data.haml b/doc-src/content/reference/compass/helpers/inline-data.haml index eac0bf10..9c212392 100644 --- a/doc-src/content/reference/compass/helpers/inline-data.haml +++ b/doc-src/content/reference/compass/helpers/inline-data.haml @@ -8,6 +8,9 @@ classnames: - reference - core - helpers +documented_functions: + - "inline-image" + - "inline-font-files" --- %h1 Compass Inline Data Helpers diff --git a/doc-src/content/reference/compass/helpers/selectors.haml b/doc-src/content/reference/compass/helpers/selectors.haml index 472c79d4..ed80584e 100644 --- a/doc-src/content/reference/compass/helpers/selectors.haml +++ b/doc-src/content/reference/compass/helpers/selectors.haml @@ -8,6 +8,12 @@ classnames: - reference - core - helpers +documented_functions: + - "nest" + - "append-selector" + - "enumerate" + - "headings" + - "headers" --- %h1 Compass Selector Helpers @@ -67,6 +73,7 @@ classnames: %li %a(href="/examples/compass/helpers/using-extend-in-place-of-enumerate/") Example of using @extend in place of enumerate +%a(name="headers") #headings.helper %h3 %a(href="#append-selector") diff --git a/doc-src/content/reference/compass/helpers/sprites.haml b/doc-src/content/reference/compass/helpers/sprites.haml index 91f70f2e..3a2eb5d3 100644 --- a/doc-src/content/reference/compass/helpers/sprites.haml +++ b/doc-src/content/reference/compass/helpers/sprites.haml @@ -8,6 +8,13 @@ classnames: - reference - core - helpers +documented_functions: + - "sprite-map" + - "sprite" + - "sprite-map-name" + - "sprite-file" + - "sprite-url" + - "sprite-position" --- %h1 Compass Sprite Helpers diff --git a/doc-src/content/reference/compass/helpers/trig.haml b/doc-src/content/reference/compass/helpers/trig.haml index cf1e5320..2147d2b2 100644 --- a/doc-src/content/reference/compass/helpers/trig.haml +++ b/doc-src/content/reference/compass/helpers/trig.haml @@ -8,6 +8,11 @@ classnames: - reference - core - helpers +documented_functions: + - "pi" + - "sin" + - "cos" + - "tan" --- %h1 Compass Trig Helpers diff --git a/doc-src/content/reference/compass/helpers/urls.haml b/doc-src/content/reference/compass/helpers/urls.haml index 038efe66..da1d7853 100644 --- a/doc-src/content/reference/compass/helpers/urls.haml +++ b/doc-src/content/reference/compass/helpers/urls.haml @@ -8,6 +8,10 @@ classnames: - reference - core - helpers +documented_functions: + - "stylesheet-url" + - "font-url" + - "image-url" --- %h1 Compass URL Helpers diff --git a/doc-src/content/search.haml b/doc-src/content/search.haml index 49580019..fa0c31ff 100644 --- a/doc-src/content/search.haml +++ b/doc-src/content/search.haml @@ -30,5 +30,15 @@ body_id: search } %input#q{:type => "text", :placeholder=>"Search"} +%h2 Index of all: +%ul#indexes + %li + %a(href="/index/variables/") Variables + %li + %a(href="/index/mixins/") Mixins + %li + %a(href="/index/functions/") Functions + +%h2 Results %ol#results %li.none Please enter a search term. \ No newline at end of file diff --git a/doc-src/lib/stylesheets.rb b/doc-src/lib/stylesheets.rb index 24921c1e..6fa56b6b 100644 --- a/doc-src/lib/stylesheets.rb +++ b/doc-src/lib/stylesheets.rb @@ -176,12 +176,11 @@ def all_mixins end def all_functions - rv = @items.inject([]) do |all_functions, item| + @items.inject([]) do |all_functions, item| next all_functions unless item.identifier =~ %r{/reference} next all_functions unless item[:stylesheet] all_functions += functions(item).map{|f| [item, f] } end - rv end def example_items @@ -192,6 +191,12 @@ def example_items end end +def item_for_function_name(function_name) + @items.detect do |item| + (item.identifier =~ %r{helpers}) && item[:documented_functions] && item[:documented_functions].include?(function_name) + end +end + def examples_for_item(item) @site.cached("examples/#{item.identifier}") do example_items.select do |i| From 3f8e83208da8e92bde422ad168a08236aa62bc2e Mon Sep 17 00:00:00 2001 From: Travis Tilley Date: Sat, 25 Dec 2010 04:12:35 +0800 Subject: [PATCH 24/24] ruby-prof doesn't work on jruby --- Gemfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7bc25b52..47aa9a44 100644 --- a/Gemfile +++ b/Gemfile @@ -12,4 +12,6 @@ gem "rcov" gem "rubyzip" gem "livereload" gem "chunky_png", "~> 0.10.1" -gem "ruby-prof" + +gem "ruby-prof" unless RUBY_PLATFORM == "java" +