this repo has no description
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

✨ Implement Fill::Dotted

authored by

Gwenn Le Bihan and committed by
Ewen Le Bihan
006a9eb4 dc6c78bc

+643 -478
+7
Cargo.lock
··· 599 599 checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" 600 600 601 601 [[package]] 602 + name = "roxmltree" 603 + version = "0.19.0" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" 606 + 607 + [[package]] 602 608 name = "rust-analyzer" 603 609 version = "0.0.1" 604 610 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 687 693 "nanoid", 688 694 "once_cell", 689 695 "rand", 696 + "roxmltree", 690 697 "rust-analyzer", 691 698 "serde", 692 699 "serde_cbor",
+1
Cargo.toml
··· 48 48 console = { version = "0.15.8", features = ["windows-console-colors"] } 49 49 backtrace = "0.3.71" 50 50 slug = "0.1.5" 51 + roxmltree = "0.19.0" 51 52 52 53 53 54 [dev-dependencies]
+3 -1
Justfile
··· 1 + export RUST_BACKTRACE := "1" 2 + 1 3 build: 2 4 cargo build --bin shapemaker 3 5 cp target/debug/shapemaker . ··· 18 20 ./shapemaker video --colors colorschemes/palenight.css {{out}} --sync-with fixtures/schedule-hell.midi --audio fixtures/schedule-hell.flac --grid-size 16x10 --resolution 1920 {{args}} 19 21 20 22 example-image out="out.png" args='': 21 - ./shapemaker image --colors colorschemes/snazzy-light.json --resolution 3000 {{out}} {{args}} 23 + ./shapemaker image --colors colorschemes/palenight.css --resolution 3000 {{out}} {{args}}
+566 -404
out.svg
··· 1 - <svg height="470" viewBox="-10 -10 470 470" width="470" xmlns="http://www.w3.org/2000/svg"> 2 - <rect fill="#000000" height="470" width="470" x="-10" y="-10"/> 3 - <g class="layer" data-layer="root"> 4 - <g data-object="4-6" style="fill: url(#pattern-hatched-bottom-up-white-6.5);"> 5 - <circle cx="200" cy="300" r="2"/> 1 + <svg height="470" viewBox="-10 -10 820 470" width="820" xmlns="http://www.w3.org/2000/svg"> 2 + <rect fill="#000000" height="470" width="820" x="-10" y="-10"/> 3 + <g class="layer" data-layer="title"> 4 + <g data-object="4" style="fill: #ffffff;transform-box: fill-box;"> 5 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="175"> 6 + e 7 + </text> 8 + </g> 9 + <g data-object="5" style="fill: #ffffff;transform-box: fill-box;"> 10 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="175"> 11 + m 12 + </text> 13 + </g> 14 + <g data-object="6" style="fill: #ffffff;transform-box: fill-box;"> 15 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="225"> 16 + a 17 + </text> 18 + </g> 19 + <g data-object="8" style="fill: #ffffff;transform-box: fill-box;"> 20 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="225"> 21 + e 22 + </text> 23 + </g> 24 + <g data-object="9" style="fill: #ffffff;transform-box: fill-box;"> 25 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="575" y="225"> 26 + r 27 + </text> 28 + </g> 29 + <g data-object="3" style="fill: #ffffff;transform-box: fill-box;"> 30 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="175"> 31 + p 32 + </text> 33 + </g> 34 + <g data-object="7" style="fill: #ffffff;transform-box: fill-box;"> 35 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="225"> 36 + k 37 + </text> 38 + </g> 39 + <g data-object="0" style="fill: #ffffff;transform-box: fill-box;"> 40 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="425" y="125"> 41 + s 42 + </text> 43 + </g> 44 + <g data-object="1" style="fill: #ffffff;transform-box: fill-box;"> 45 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="475" y="125"> 46 + h 47 + </text> 48 + </g> 49 + <g data-object="2" style="fill: #ffffff;transform-box: fill-box;"> 50 + <text dominant-baseline="middle" font-family="Victor Mono" font-size="30pt" text-anchor="middle" x="525" y="125"> 51 + a 52 + </text> 53 + </g> 54 + </g> 55 + <g class="layer" data-layer="splines"> 56 + <g data-object="splines#17" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 57 + <line stroke-width="2" x1="150" x2="250" y1="250" y2="250"/> 58 + </g> 59 + <g data-object="splines#0" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 60 + <line stroke-width="2" x1="250" x2="200" y1="200" y2="200"/> 61 + </g> 62 + <g data-object="splines#23" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 63 + <path d="M250,300 Q250,350,200,350"/> 64 + </g> 65 + <g data-object="splines#2" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 66 + <line stroke-width="2" x1="200" x2="250" y1="300" y2="300"/> 67 + </g> 68 + <g data-object="splines#29" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 69 + <path d="M150,300 Q200,300,200,350"/> 70 + </g> 71 + <g data-object="splines#13" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 72 + <path d="M150,300 Q150,200,250,200"/> 73 + </g> 74 + <g data-object="splines#3" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 75 + <path d="M200,200 Q200,250,150,250"/> 76 + </g> 77 + <g data-object="splines#15" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 78 + <path d="M150,300 Q200,300,200,350"/> 79 + </g> 80 + <g data-object="splines#1" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 81 + <path d="M250,200 Q250,250,300,250"/> 82 + </g> 83 + <g data-object="splines#8" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 84 + <line stroke-width="2" x1="150" x2="200" y1="250" y2="200"/> 85 + </g> 86 + <g data-object="splines#22" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 87 + <line stroke-width="2" x1="150" x2="250" y1="250" y2="250"/> 88 + </g> 89 + <g data-object="splines#4" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 90 + <path d="M200,300 Q300,300,300,200"/> 91 + </g> 92 + <g data-object="splines#9" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 93 + <line stroke-width="2" x1="150" x2="200" y1="300" y2="200"/> 94 + </g> 95 + <g data-object="splines#14" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 96 + <path d="M250,250 Q250,300,200,300"/> 97 + </g> 98 + <g data-object="splines#7" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 99 + <path d="M250,250 Q200,250,200,300"/> 100 + </g> 101 + <g data-object="splines#27" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 102 + <path d="M250,250 Q200,250,200,200"/> 103 + </g> 104 + <g data-object="splines#11" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 105 + <path d="M150,200 Q300,200,300,350"/> 106 + </g> 107 + <g data-object="splines#21" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 108 + <line stroke-width="2" x1="250" x2="200" y1="200" y2="300"/> 109 + </g> 110 + <g data-object="splines#25" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 111 + <path d="M200,200 Q200,250,150,250"/> 112 + </g> 113 + <g data-object="splines#16" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 114 + <path d="M200,200 Q250,200,250,250"/> 115 + </g> 116 + <g data-object="splines#20" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 117 + <line stroke-width="2" x1="150" x2="200" y1="300" y2="250"/> 118 + </g> 119 + <g data-object="splines#5" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 120 + <path d="M200,200 Q200,300,300,300"/> 121 + </g> 122 + <g data-object="splines#12" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 123 + <path d="M150,300 Q150,250,200,250"/> 124 + </g> 125 + <g data-object="splines#10" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 126 + <path d="M150,250 Q250,250,250,350"/> 127 + </g> 128 + <g data-object="splines#18" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 129 + <path d="M200,200 Q250,200,250,250"/> 130 + </g> 131 + <g data-object="splines#19" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 132 + <path d="M150,250 Q200,250,200,200"/> 133 + </g> 134 + <g data-object="splines#24" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 135 + <path d="M250,200 Q200,200,200,250"/> 136 + </g> 137 + <g data-object="splines#28" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 138 + <path d="M250,300 Q250,350,200,350"/> 139 + </g> 140 + <g data-object="splines#26" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 141 + <path d="M250,300 Q200,300,200,250"/> 142 + </g> 143 + <g data-object="splines#6" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 144 + <line stroke-width="2" x1="150" x2="150" y1="200" y2="300"/> 145 + </g> 146 + </g> 147 + <g class="layer" data-layer="red dot"> 148 + <g data-object="red circle @ (10, 1)" style="fill: #cf0a2b;transform-box: fill-box;filter: url(#filter-glow-5); overflow: visible;"> 149 + <circle cx="525" cy="75" r="25"/> 150 + </g> 151 + </g> 152 + <g class="layer" data-layer="hatches"> 153 + <g data-object="(11, 3)" style="fill: url(#pattern-hatched-299.32755deg-white-4.3-0.25);transform-box: fill-box;"> 154 + <circle cx="575" cy="175" r="25"/> 6 155 </g> 7 - <g data-object="4-5" style="fill: url(#pattern-hatched-bottom-up-white-5.5);"> 8 - <circle cx="200" cy="250" r="2"/> 156 + <g data-object="(13, 3)" style="fill: url(#pattern-hatched-211.33258deg-white-4.5-0.25);transform-box: fill-box;"> 157 + <rect height="50" width="50" x="650" y="150"/> 9 158 </g> 10 - <g data-object="2-0" style="fill: url(#pattern-hatched-bottom-up-white-0.3);"> 11 - <circle cx="100" cy="0" r="2"/> 159 + <g data-object="(12, 3)" style="fill: url(#pattern-hatched-27.08044deg-white-4.4-0.25);transform-box: fill-box;"> 160 + <circle cx="625" cy="175" r="25"/> 12 161 </g> 13 - <g data-object="5-4" style="fill: url(#pattern-hatched-bottom-up-white-4.6);"> 14 - <circle cx="250" cy="200" r="2"/> 162 + <g data-object="(14, 4)" style="fill: url(#pattern-hatched-282.0688deg-white-6-0.25);transform-box: fill-box;"> 163 + <rect height="50" width="50" x="700" y="200"/> 15 164 </g> 16 - <g data-object="5-1" style="fill: url(#pattern-hatched-bottom-up-white-1.6);"> 17 - <circle cx="250" cy="50" r="2"/> 165 + <g data-object="(14, 5)" style="fill: url(#pattern-hatched-33.544266deg-white-7.4-0.25);transform-box: fill-box;"> 166 + <rect height="50" width="50" x="700" y="250"/> 167 + </g> 168 + <g data-object="(13, 4)" style="fill: url(#pattern-hatched-215.58922deg-white-5.9-0.25);transform-box: fill-box;"> 169 + <circle cx="675" cy="225" r="25"/> 18 170 </g> 19 - <g data-object="6-1" style="fill: url(#pattern-hatched-bottom-up-white-1.7);"> 20 - <circle cx="300" cy="50" r="2"/> 171 + <g data-object="(1, 7)" style="fill: url(#pattern-hatched-96.993355deg-white-8.9-0.25);transform-box: fill-box;"> 172 + <rect height="50" width="50" x="50" y="350"/> 21 173 </g> 22 - <g data-object="0-5" style="fill: url(#pattern-hatched-bottom-up-white-5.1);"> 23 - <circle cx="0" cy="250" r="2"/> 174 + <g data-object="(8, 6)" style="fill: url(#pattern-hatched-107.339775deg-white-8.2-0.25);transform-box: fill-box;"> 175 + <circle cx="425" cy="325" r="25"/> 24 176 </g> 25 - <g data-object="8-3" style="fill: url(#pattern-hatched-bottom-up-white-3.9);"> 26 - <circle cx="400" cy="150" r="2"/> 177 + <g data-object="(3, 7)" style="fill: url(#pattern-hatched-71.766174deg-white-9.1-0.25);transform-box: fill-box;"> 178 + <rect height="50" width="50" x="150" y="350"/> 27 179 </g> 28 - <g data-object="5-6" style="fill: url(#pattern-hatched-bottom-up-white-6.6);"> 29 - <circle cx="250" cy="300" r="2"/> 180 + <g data-object="(12, 1)" style="fill: url(#pattern-hatched-186.63586deg-white-1.6-0.25);transform-box: fill-box;"> 181 + <rect height="50" width="50" x="600" y="50"/> 30 182 </g> 31 - <g data-object="1-6" style="fill: url(#pattern-hatched-bottom-up-white-6.2);"> 32 - <circle cx="50" cy="300" r="2"/> 183 + <g data-object="(6, 6)" style="fill: url(#pattern-hatched-243.80658deg-white-8-0.25);transform-box: fill-box;"> 184 + <rect height="50" width="50" x="300" y="300"/> 33 185 </g> 34 - <g data-object="8-2" style="fill: url(#pattern-hatched-bottom-up-white-2.9);"> 35 - <circle cx="400" cy="100" r="2"/> 186 + <g data-object="(13, 1)" style="fill: url(#pattern-hatched-253.68701deg-white-1.7-0.25);transform-box: fill-box;"> 187 + <circle cx="675" cy="75" r="25"/> 36 188 </g> 37 - <g data-object="0-3" style="fill: url(#pattern-hatched-bottom-up-white-3.1);"> 38 - <circle cx="0" cy="150" r="2"/> 189 + <g data-object="(4, 3)" style="fill: url(#pattern-hatched-310.7585deg-white-3.6-0.25);transform-box: fill-box;"> 190 + <circle cx="225" cy="175" r="25"/> 39 191 </g> 40 - <g data-object="0-4" style="fill: url(#pattern-hatched-bottom-up-white-4.1);"> 41 - <circle cx="0" cy="200" r="2"/> 192 + <g data-object="(5, 3)" style="fill: url(#pattern-hatched-299.28848deg-white-3.7-0.25);transform-box: fill-box;"> 193 + <circle cx="275" cy="175" r="25"/> 42 194 </g> 43 - <g data-object="7-2" style="fill: url(#pattern-hatched-bottom-up-white-2.8);"> 44 - <circle cx="350" cy="100" r="2"/> 195 + <g data-object="(4, 2)" style="fill: url(#pattern-hatched-233.53273deg-white-2.2-0.25);transform-box: fill-box;"> 196 + <circle cx="225" cy="125" r="25"/> 45 197 </g> 46 - <g data-object="1-3" style="fill: url(#pattern-hatched-bottom-up-white-3.2);"> 47 - <circle cx="50" cy="150" r="2"/> 198 + <g data-object="(10, 5)" style="fill: url(#pattern-hatched-220.6095deg-white-7-0.25);transform-box: fill-box;"> 199 + <circle cx="525" cy="275" r="25"/> 48 200 </g> 49 - <g data-object="3-1" style="fill: url(#pattern-hatched-bottom-up-white-1.4);"> 50 - <circle cx="150" cy="50" r="2"/> 201 + <g data-object="(1, 2)" style="fill: url(#pattern-hatched-358.5839deg-white-1.9-0.25);transform-box: fill-box;"> 202 + <circle cx="75" cy="125" r="25"/> 51 203 </g> 52 - <g data-object="2-2" style="fill: url(#pattern-hatched-bottom-up-white-2.3);"> 53 - <circle cx="100" cy="100" r="2"/> 204 + <g data-object="(7, 4)" style="fill: url(#pattern-hatched-167.84358deg-white-5.3-0.25);transform-box: fill-box;"> 205 + <circle cx="375" cy="225" r="25"/> 54 206 </g> 55 - <g data-object="3-3" style="fill: url(#pattern-hatched-bottom-up-white-3.4);"> 56 - <circle cx="150" cy="150" r="2"/> 207 + <g data-object="(6, 3)" style="fill: url(#pattern-hatched-278.33463deg-white-3.8-0.25);transform-box: fill-box;"> 208 + <rect height="50" width="50" x="300" y="150"/> 57 209 </g> 58 - <g data-object="5-3" style="fill: url(#pattern-hatched-bottom-up-white-3.6);"> 59 - <circle cx="250" cy="150" r="2"/> 210 + <g data-object="(6, 2)" style="fill: url(#pattern-hatched-310.2893deg-white-2.4-0.25);transform-box: fill-box;"> 211 + <circle cx="325" cy="125" r="25"/> 60 212 </g> 61 - <g data-object="7-3" style="fill: url(#pattern-hatched-bottom-up-white-3.8);"> 62 - <circle cx="350" cy="150" r="2"/> 213 + <g data-object="(11, 6)" style="fill: url(#pattern-hatched-15.570846deg-white-8.5-0.25);transform-box: fill-box;"> 214 + <rect height="50" width="50" x="550" y="300"/> 63 215 </g> 64 - <g data-object="1-4" style="fill: url(#pattern-hatched-bottom-up-white-4.2);"> 65 - <circle cx="50" cy="200" r="2"/> 216 + <g data-object="(2, 7)" style="fill: url(#pattern-hatched-220.13795deg-white-9-0.25);transform-box: fill-box;"> 217 + <circle cx="125" cy="375" r="25"/> 66 218 </g> 67 - <g data-object="2-4" style="fill: url(#pattern-hatched-bottom-up-white-4.3);"> 68 - <circle cx="100" cy="200" r="2"/> 219 + <g data-object="(13, 5)" style="fill: url(#pattern-hatched-50.404415deg-white-7.3-0.25);transform-box: fill-box;"> 220 + <rect height="50" width="50" x="650" y="250"/> 69 221 </g> 70 - <g data-object="0-6" style="fill: url(#pattern-hatched-bottom-up-white-6.1);"> 71 - <circle cx="0" cy="300" r="2"/> 222 + <g data-object="(6, 1)" style="fill: url(#pattern-hatched-183.30246deg-white-1-0.25);transform-box: fill-box;"> 223 + <circle cx="325" cy="75" r="25"/> 72 224 </g> 73 - <g data-object="1-8" style="fill: url(#pattern-hatched-bottom-up-white-8.2);"> 74 - <circle cx="50" cy="400" r="2"/> 225 + <g data-object="(12, 4)" style="fill: url(#pattern-hatched-131.70145deg-white-5.8-0.25);transform-box: fill-box;"> 226 + <circle cx="625" cy="225" r="25"/> 75 227 </g> 76 - <g data-object="3-0" style="fill: url(#pattern-hatched-bottom-up-white-0.4);"> 77 - <circle cx="150" cy="0" r="2"/> 228 + <g data-object="(4, 7)" style="fill: url(#pattern-hatched-244.81346deg-white-9.2-0.25);transform-box: fill-box;"> 229 + <rect height="50" width="50" x="200" y="350"/> 78 230 </g> 79 - <g data-object="4-4" style="fill: url(#pattern-hatched-bottom-up-white-4.5);"> 80 - <circle cx="200" cy="200" r="2"/> 231 + <g data-object="(10, 7)" style="fill: url(#pattern-hatched-335.19543deg-white-9.8-0.25);transform-box: fill-box;"> 232 + <circle cx="525" cy="375" r="25"/> 81 233 </g> 82 - <g data-object="6-6" style="fill: url(#pattern-hatched-bottom-up-white-6.7);"> 83 - <circle cx="300" cy="300" r="2"/> 234 + <g data-object="(2, 4)" style="fill: url(#pattern-hatched-6.4409494deg-white-4.8-0.25);transform-box: fill-box;"> 235 + <rect height="50" width="50" x="100" y="200"/> 84 236 </g> 85 - <g data-object="5-2" style="fill: url(#pattern-hatched-bottom-up-white-2.6);"> 86 - <circle cx="250" cy="100" r="2"/> 237 + <g data-object="(1, 1)" style="fill: url(#pattern-hatched-218.48544deg-white-0.5-0.25);transform-box: fill-box;"> 238 + <rect height="50" width="50" x="50" y="50"/> 87 239 </g> 88 - <g data-object="4-7" style="fill: url(#pattern-hatched-bottom-up-white-7.5);"> 89 - <circle cx="200" cy="350" r="2"/> 240 + <g data-object="(6, 5)" style="fill: url(#pattern-hatched-106.67879deg-white-6.6-0.25);transform-box: fill-box;"> 241 + <rect height="50" width="50" x="300" y="250"/> 90 242 </g> 91 - <g data-object="7-6" style="fill: url(#pattern-hatched-bottom-up-white-6.8);"> 92 - <circle cx="350" cy="300" r="2"/> 243 + <g data-object="(3, 2)" style="fill: url(#pattern-hatched-118.944214deg-white-2.1-0.25);transform-box: fill-box;"> 244 + <circle cx="175" cy="125" r="25"/> 93 245 </g> 94 - <g data-object="6-0" style="fill: url(#pattern-hatched-bottom-up-white-0.7);"> 95 - <circle cx="300" cy="0" r="2"/> 246 + <g data-object="(2, 5)" style="fill: url(#pattern-hatched-227.94576deg-white-6.2-0.25);transform-box: fill-box;"> 247 + <circle cx="125" cy="275" r="25"/> 96 248 </g> 97 - <g data-object="0-2" style="fill: url(#pattern-hatched-bottom-up-white-2.1);"> 98 - <circle cx="0" cy="100" r="2"/> 249 + <g data-object="(8, 7)" style="fill: url(#pattern-hatched-299.81985deg-white-9.6-0.25);transform-box: fill-box;"> 250 + <circle cx="425" cy="375" r="25"/> 99 251 </g> 100 - <g data-object="0-8" style="fill: url(#pattern-hatched-bottom-up-white-8.1);"> 101 - <circle cx="0" cy="400" r="2"/> 252 + <g data-object="(8, 1)" style="fill: url(#pattern-hatched-279.28082deg-white-1.2-0.25);transform-box: fill-box;"> 253 + <rect height="50" width="50" x="400" y="50"/> 102 254 </g> 103 - <g data-object="7-5" style="fill: url(#pattern-hatched-bottom-up-white-5.8);"> 104 - <circle cx="350" cy="250" r="2"/> 255 + <g data-object="(9, 7)" style="fill: url(#pattern-hatched-75.52045deg-white-9.7-0.25);transform-box: fill-box;"> 256 + <circle cx="475" cy="375" r="25"/> 105 257 </g> 106 - <g data-object="8-5" style="fill: url(#pattern-hatched-bottom-up-white-5.9);"> 107 - <circle cx="400" cy="250" r="2"/> 258 + <g data-object="(8, 5)" style="fill: url(#pattern-hatched-115.57184deg-white-6.8-0.25);transform-box: fill-box;"> 259 + <circle cx="425" cy="275" r="25"/> 108 260 </g> 109 - <g data-object="8-0" style="fill: url(#pattern-hatched-bottom-up-white-0.9);"> 110 - <circle cx="400" cy="0" r="2"/> 261 + <g data-object="(3, 1)" style="fill: url(#pattern-hatched-120.974106deg-white-0.7-0.25);transform-box: fill-box;"> 262 + <circle cx="175" cy="75" r="25"/> 111 263 </g> 112 - <g data-object="8-1" style="fill: url(#pattern-hatched-bottom-up-white-1.9);"> 113 - <circle cx="400" cy="50" r="2"/> 264 + <g data-object="(2, 1)" style="fill: url(#pattern-hatched-159.69516deg-white-0.6-0.25);transform-box: fill-box;"> 265 + <rect height="50" width="50" x="100" y="50"/> 114 266 </g> 115 - <g data-object="3-4" style="fill: url(#pattern-hatched-bottom-up-white-4.4);"> 116 - <circle cx="150" cy="200" r="2"/> 267 + <g data-object="(11, 1)" style="fill: url(#pattern-hatched-123.144165deg-white-1.5-0.25);transform-box: fill-box;"> 268 + <circle cx="575" cy="75" r="25"/> 117 269 </g> 118 - <g data-object="3-7" style="fill: url(#pattern-hatched-bottom-up-white-7.4);"> 119 - <circle cx="150" cy="350" r="2"/> 270 + <g data-object="(4, 1)" style="fill: url(#pattern-hatched-220.77296deg-white-0.8-0.25);transform-box: fill-box;"> 271 + <circle cx="225" cy="75" r="25"/> 120 272 </g> 121 - <g data-object="7-1" style="fill: url(#pattern-hatched-bottom-up-white-1.8);"> 122 - <circle cx="350" cy="50" r="2"/> 273 + <g data-object="(6, 4)" style="fill: url(#pattern-hatched-53.81241deg-white-5.2-0.25);transform-box: fill-box;"> 274 + <circle cx="325" cy="225" r="25"/> 123 275 </g> 124 - <g data-object="2-8" style="fill: url(#pattern-hatched-bottom-up-white-8.3);"> 125 - <circle cx="100" cy="400" r="2"/> 276 + <g data-object="(5, 7)" style="fill: url(#pattern-hatched-5.1831865deg-white-9.3-0.25);transform-box: fill-box;"> 277 + <circle cx="275" cy="375" r="25"/> 126 278 </g> 127 - <g data-object="2-7" style="fill: url(#pattern-hatched-bottom-up-white-7.3);"> 128 - <circle cx="100" cy="350" r="2"/> 279 + <g data-object="(9, 1)" style="fill: url(#pattern-hatched-97.158325deg-white-1.3-0.25);transform-box: fill-box;"> 280 + <circle cx="475" cy="75" r="25"/> 129 281 </g> 130 - <g data-object="1-2" style="fill: url(#pattern-hatched-bottom-up-white-2.2);"> 131 - <circle cx="50" cy="100" r="2"/> 282 + <g data-object="(7, 5)" style="fill: url(#pattern-hatched-188.27026deg-white-6.7-0.25);transform-box: fill-box;"> 283 + <circle cx="375" cy="275" r="25"/> 132 284 </g> 133 - <g data-object="4-0" style="fill: url(#pattern-hatched-bottom-up-white-0.5);"> 134 - <circle cx="200" cy="0" r="2"/> 285 + <g data-object="(7, 2)" style="fill: url(#pattern-hatched-284.93896deg-white-2.5-0.25);transform-box: fill-box;"> 286 + <rect height="50" width="50" x="350" y="100"/> 135 287 </g> 136 - <g data-object="5-0" style="fill: url(#pattern-hatched-bottom-up-white-0.6);"> 137 - <circle cx="250" cy="0" r="2"/> 288 + <g data-object="(9, 5)" style="fill: url(#pattern-hatched-150.21457deg-white-6.9-0.25);transform-box: fill-box;"> 289 + <circle cx="475" cy="275" r="25"/> 138 290 </g> 139 - <g data-object="8-4" style="fill: url(#pattern-hatched-bottom-up-white-4.9);"> 140 - <circle cx="400" cy="200" r="2"/> 291 + <g data-object="(5, 1)" style="fill: url(#pattern-hatched-56.571136deg-white-0.9-0.25);transform-box: fill-box;"> 292 + <rect height="50" width="50" x="250" y="50"/> 141 293 </g> 142 - <g data-object="4-1" style="fill: url(#pattern-hatched-bottom-up-white-1.5);"> 143 - <circle cx="200" cy="50" r="2"/> 294 + <g data-object="(12, 5)" style="fill: url(#pattern-hatched-26.9968deg-white-7.2-0.25);transform-box: fill-box;"> 295 + <circle cx="625" cy="275" r="25"/> 144 296 </g> 145 - <g data-object="6-3" style="fill: url(#pattern-hatched-bottom-up-white-3.7);"> 146 - <circle cx="300" cy="150" r="2"/> 297 + <g data-object="(2, 2)" style="fill: url(#pattern-hatched-18.678516deg-white-2-0.25);transform-box: fill-box;"> 298 + <rect height="50" width="50" x="100" y="100"/> 147 299 </g> 148 - <g data-object="8-7" style="fill: url(#pattern-hatched-bottom-up-white-7.9);"> 149 - <circle cx="400" cy="350" r="2"/> 300 + <g data-object="(14, 2)" style="fill: url(#pattern-hatched-119.76716deg-white-3.2-0.25);transform-box: fill-box;"> 301 + <circle cx="725" cy="125" r="25"/> 150 302 </g> 151 - <g data-object="6-5" style="fill: url(#pattern-hatched-bottom-up-white-5.7);"> 152 - <circle cx="300" cy="250" r="2"/> 303 + <g data-object="(7, 1)" style="fill: url(#pattern-hatched-52.797806deg-white-1.1-0.25);transform-box: fill-box;"> 304 + <rect height="50" width="50" x="350" y="50"/> 153 305 </g> 154 - <g data-object="5-7" style="fill: url(#pattern-hatched-bottom-up-white-7.6);"> 155 - <circle cx="250" cy="350" r="2"/> 306 + <g data-object="(2, 3)" style="fill: url(#pattern-hatched-320.13602deg-white-3.4-0.25);transform-box: fill-box;"> 307 + <circle cx="125" cy="175" r="25"/> 156 308 </g> 157 - <g data-object="8-6" style="fill: url(#pattern-hatched-bottom-up-white-6.9);"> 158 - <circle cx="400" cy="300" r="2"/> 309 + <g data-object="(11, 5)" style="fill: url(#pattern-hatched-184.18352deg-white-7.1-0.25);transform-box: fill-box;"> 310 + <rect height="50" width="50" x="550" y="250"/> 159 311 </g> 160 - <g data-object="7-7" style="fill: url(#pattern-hatched-bottom-up-white-7.8);"> 161 - <circle cx="350" cy="350" r="2"/> 312 + <g data-object="(1, 6)" style="fill: url(#pattern-hatched-224.83627deg-white-7.5-0.25);transform-box: fill-box;"> 313 + <rect height="50" width="50" x="50" y="300"/> 162 314 </g> 163 - <g data-object="3-6" style="fill: url(#pattern-hatched-bottom-up-white-6.4);"> 164 - <circle cx="150" cy="300" r="2"/> 315 + <g data-object="(7, 6)" style="fill: url(#pattern-hatched-124.3612deg-white-8.1-0.25);transform-box: fill-box;"> 316 + <circle cx="375" cy="325" r="25"/> 165 317 </g> 166 - <g data-object="7-0" style="fill: url(#pattern-hatched-bottom-up-white-0.8);"> 167 - <circle cx="350" cy="0" r="2"/> 318 + <g data-object="(10, 6)" style="fill: url(#pattern-hatched-297.89606deg-white-8.4-0.25);transform-box: fill-box;"> 319 + <circle cx="525" cy="325" r="25"/> 168 320 </g> 169 - <g data-object="0-7" style="fill: url(#pattern-hatched-bottom-up-white-7.1);"> 170 - <circle cx="0" cy="350" r="2"/> 321 + <g data-object="(12, 7)" style="fill: url(#pattern-hatched-59.988743deg-white-10-0.25);transform-box: fill-box;"> 322 + <circle cx="625" cy="375" r="25"/> 171 323 </g> 172 - <g data-object="5-8" style="fill: url(#pattern-hatched-bottom-up-white-8.6);"> 173 - <circle cx="250" cy="400" r="2"/> 324 + <g data-object="(5, 2)" style="fill: url(#pattern-hatched-56.978703deg-white-2.3-0.25);transform-box: fill-box;"> 325 + <rect height="50" width="50" x="250" y="100"/> 174 326 </g> 175 - <g data-object="2-1" style="fill: url(#pattern-hatched-bottom-up-white-1.3);"> 176 - <circle cx="100" cy="50" r="2"/> 327 + <g data-object="(7, 3)" style="fill: url(#pattern-hatched-216.24454deg-white-3.9-0.25);transform-box: fill-box;"> 328 + <rect height="50" width="50" x="350" y="150"/> 177 329 </g> 178 - <g data-object="7-8" style="fill: url(#pattern-hatched-bottom-up-white-8.8);"> 179 - <circle cx="350" cy="400" r="2"/> 330 + <g data-object="(7, 7)" style="fill: url(#pattern-hatched-317.81348deg-white-9.5-0.25);transform-box: fill-box;"> 331 + <circle cx="375" cy="375" r="25"/> 180 332 </g> 181 - <g data-object="3-5" style="fill: url(#pattern-hatched-bottom-up-white-5.4);"> 182 - <circle cx="150" cy="250" r="2"/> 333 + <g data-object="(10, 1)" style="fill: url(#pattern-dotted-white-3-2);transform-box: fill-box;"> 334 + <circle cx="525" cy="75" r="25"/> 183 335 </g> 184 - <g data-object="6-2" style="fill: url(#pattern-hatched-bottom-up-white-2.7);"> 185 - <circle cx="300" cy="100" r="2"/> 336 + <g data-object="(3, 3)" style="fill: url(#pattern-hatched-274.77606deg-white-3.5-0.25);transform-box: fill-box;"> 337 + <rect height="50" width="50" x="150" y="150"/> 186 338 </g> 187 - <g data-object="6-7" style="fill: url(#pattern-hatched-bottom-up-white-7.7);"> 188 - <circle cx="300" cy="350" r="2"/> 339 + <g data-object="(6, 7)" style="fill: url(#pattern-hatched-89.04904deg-white-9.4-0.25);transform-box: fill-box;"> 340 + <circle cx="325" cy="375" r="25"/> 189 341 </g> 190 - <g data-object="1-1" style="fill: url(#pattern-hatched-bottom-up-white-1.2);"> 191 - <circle cx="50" cy="50" r="2"/> 342 + <g data-object="(13, 2)" style="fill: url(#pattern-hatched-48.199726deg-white-3.1-0.25);transform-box: fill-box;"> 343 + <rect height="50" width="50" x="650" y="100"/> 192 344 </g> 193 - <g data-object="2-3" style="fill: url(#pattern-hatched-bottom-up-white-3.3);"> 194 - <circle cx="100" cy="150" r="2"/> 345 + <g data-object="(13, 7)" style="fill: url(#pattern-hatched-88.31214deg-white-10.1-0.25);transform-box: fill-box;"> 346 + <circle cx="675" cy="375" r="25"/> 195 347 </g> 196 - <g data-object="4-8" style="fill: url(#pattern-hatched-bottom-up-white-8.5);"> 197 - <circle cx="200" cy="400" r="2"/> 348 + <g data-object="(12, 2)" style="fill: url(#pattern-hatched-289.82617deg-white-3-0.25);transform-box: fill-box;"> 349 + <circle cx="625" cy="125" r="25"/> 198 350 </g> 199 - <g data-object="2-6" style="fill: url(#pattern-hatched-bottom-up-white-6.3);"> 200 - <circle cx="100" cy="300" r="2"/> 351 + <g data-object="(11, 2)" style="fill: url(#pattern-hatched-324.32974deg-white-2.9-0.25);transform-box: fill-box;"> 352 + <circle cx="575" cy="125" r="25"/> 201 353 </g> 202 - <g data-object="1-7" style="fill: url(#pattern-hatched-bottom-up-white-7.2);"> 203 - <circle cx="50" cy="350" r="2"/> 354 + <g data-object="(12, 6)" style="fill: url(#pattern-hatched-162.45045deg-white-8.6-0.25);transform-box: fill-box;"> 355 + <circle cx="625" cy="325" r="25"/> 204 356 </g> 205 - <g data-object="4-2" style="fill: url(#pattern-hatched-bottom-up-white-2.5);"> 206 - <circle cx="200" cy="100" r="2"/> 357 + <g data-object="(2, 6)" style="fill: url(#pattern-hatched-113.16188deg-white-7.6-0.25);transform-box: fill-box;"> 358 + <rect height="50" width="50" x="100" y="300"/> 207 359 </g> 208 - <g data-object="7-4" style="fill: url(#pattern-hatched-bottom-up-white-4.8);"> 209 - <circle cx="350" cy="200" r="2"/> 360 + <g data-object="(1, 3)" style="fill: url(#pattern-hatched-139.60207deg-white-3.3-0.25);transform-box: fill-box;"> 361 + <circle cx="75" cy="175" r="25"/> 210 362 </g> 211 - <g data-object="6-8" style="fill: url(#pattern-hatched-bottom-up-white-8.7);"> 212 - <circle cx="300" cy="400" r="2"/> 363 + <g data-object="(9, 6)" style="fill: url(#pattern-hatched-183.72543deg-white-8.3-0.25);transform-box: fill-box;"> 364 + <rect height="50" width="50" x="450" y="300"/> 213 365 </g> 214 - <g data-object="6-4" style="fill: url(#pattern-hatched-bottom-up-white-4.7);"> 215 - <circle cx="300" cy="200" r="2"/> 366 + <g data-object="(14, 1)" style="fill: url(#pattern-hatched-104.70095deg-white-1.8-0.25);transform-box: fill-box;"> 367 + <rect height="50" width="50" x="700" y="50"/> 216 368 </g> 217 - <g data-object="1-0" style="fill: url(#pattern-hatched-bottom-up-white-0.2);"> 218 - <circle cx="50" cy="0" r="2"/> 369 + <g data-object="(1, 5)" style="fill: url(#pattern-hatched-17.959814deg-white-6.1-0.25);transform-box: fill-box;"> 370 + <rect height="50" width="50" x="50" y="250"/> 219 371 </g> 220 - <g data-object="0-1" style="fill: url(#pattern-hatched-bottom-up-white-1.1);"> 221 - <circle cx="0" cy="50" r="2"/> 372 + <g data-object="(1, 4)" style="fill: url(#pattern-hatched-340.9856deg-white-4.7-0.25);transform-box: fill-box;"> 373 + <rect height="50" width="50" x="50" y="200"/> 222 374 </g> 223 - <g data-object="3-2" style="fill: url(#pattern-hatched-bottom-up-white-2.4);"> 224 - <circle cx="150" cy="100" r="2"/> 375 + <g data-object="(11, 7)" style="fill: url(#pattern-hatched-345.39377deg-white-9.9-0.25);transform-box: fill-box;"> 376 + <rect height="50" width="50" x="550" y="350"/> 225 377 </g> 226 - <g data-object="4-3" style="fill: url(#pattern-hatched-bottom-up-white-3.5);"> 227 - <circle cx="200" cy="150" r="2"/> 378 + <g data-object="(14, 3)" style="fill: url(#pattern-hatched-288.15714deg-white-4.6-0.25);transform-box: fill-box;"> 379 + <circle cx="725" cy="175" r="25"/> 228 380 </g> 229 - <g data-object="2-5" style="fill: url(#pattern-hatched-bottom-up-white-5.3);"> 230 - <circle cx="100" cy="250" r="2"/> 381 + <g data-object="(14, 6)" style="fill: url(#pattern-hatched-1.6552448deg-white-8.8-0.25);transform-box: fill-box;"> 382 + <rect height="50" width="50" x="700" y="300"/> 231 383 </g> 232 - <g data-object="1-5" style="fill: url(#pattern-hatched-bottom-up-white-5.2);"> 233 - <circle cx="50" cy="250" r="2"/> 384 + <g data-object="(14, 7)" style="fill: url(#pattern-hatched-257.7593deg-white-10.2-0.25);transform-box: fill-box;"> 385 + <circle cx="725" cy="375" r="25"/> 234 386 </g> 235 - <g data-object="5-5" style="fill: url(#pattern-hatched-bottom-up-white-5.6);"> 236 - <circle cx="250" cy="250" r="2"/> 387 + <g data-object="(13, 6)" style="fill: url(#pattern-hatched-173.94572deg-white-8.7-0.25);transform-box: fill-box;"> 388 + <circle cx="675" cy="325" r="25"/> 237 389 </g> 238 - <g data-object="3-8" style="fill: url(#pattern-hatched-bottom-up-white-8.4);"> 239 - <circle cx="150" cy="400" r="2"/> 240 390 </g> 241 - <g data-object="0-0" style="fill: url(#pattern-hatched-bottom-up-white-0.1);"> 242 - <circle cx="0" cy="0" r="2"/> 391 + <g class="layer" data-layer="red dot friends"> 392 + <g data-object="reddot @ (11, 2)" style="fill: #cf0a2b;transform-box: fill-box;"> 393 + <circle cx="550" cy="100" r="5"/> 243 394 </g> 244 - <g data-object="8-8" style="fill: url(#pattern-hatched-bottom-up-white-8.9);"> 245 - <circle cx="400" cy="400" r="2"/> 395 + <g data-object="reddot @ (10, 1)" style="fill: #cf0a2b;transform-box: fill-box;"> 396 + <circle cx="500" cy="50" r="5"/> 397 + </g> 398 + <g data-object="reddot @ (11, 1)" style="fill: #cf0a2b;transform-box: fill-box;"> 399 + <circle cx="550" cy="50" r="5"/> 400 + </g> 401 + <g data-object="line" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;"> 402 + <line stroke-width="4" x1="750" x2="550" y1="200" y2="400"/> 246 403 </g> 247 404 </g> 248 405 <g class="layer" data-layer="root"/> 249 406 <defs> 250 - <pattern height="13" id="pattern-hatched-bottom-up-white-6.5" patternUnits="userSpaceOnUse" viewBox="0,0,6.5,6.5" width="13"> 251 - <polygon fill="#ffffff" points="0,0 1.625,0 0,1.625"/> 252 - <polygon fill="#ffffff" points="0,6.5 6.5,0 6.5,1.625 1.625,6.5"/> 407 + <filter filterUnit="userSpaceOnUse" id="filter-glow-4"> 408 + <feGaussianBlur result="coloredBlur" stdDeviation="4"/> 409 + <feMerge> 410 + <feMergeNode in="coloredBlur"/> 411 + <feMergeNode in="SourceGraphic"/> 412 + </feMerge> 413 + </filter> 414 + <filter filterUnit="userSpaceOnUse" id="filter-glow-5"> 415 + <feGaussianBlur result="coloredBlur" stdDeviation="5"/> 416 + <feMerge> 417 + <feMergeNode in="coloredBlur"/> 418 + <feMergeNode in="SourceGraphic"/> 419 + </feMerge> 420 + </filter> 421 + <pattern height="8.6" id="pattern-hatched-299.32755deg-white-4.3-0.25" patternTransform="rotate(254.32755)" patternUnits="userSpaceOnUse" viewBox="0,0,4.3,4.3" width="8.6"> 422 + <polygon fill="#ffffff" points="0,0 1.075,0 0,1.075"/> 423 + <polygon fill="#ffffff" points="0,4.3 4.3,0 4.3,1.075 1.075,4.3"/> 424 + </pattern> 425 + <pattern height="9" id="pattern-hatched-211.33258deg-white-4.5-0.25" patternTransform="rotate(166.33258)" patternUnits="userSpaceOnUse" viewBox="0,0,4.5,4.5" width="9"> 426 + <polygon fill="#ffffff" points="0,0 1.125,0 0,1.125"/> 427 + <polygon fill="#ffffff" points="0,4.5 4.5,0 4.5,1.125 1.125,4.5"/> 428 + </pattern> 429 + <pattern height="8.8" id="pattern-hatched-27.08044deg-white-4.4-0.25" patternTransform="rotate(-17.91956)" patternUnits="userSpaceOnUse" viewBox="0,0,4.4,4.4" width="8.8"> 430 + <polygon fill="#ffffff" points="0,0 1.1,0 0,1.1"/> 431 + <polygon fill="#ffffff" points="0,4.4 4.4,0 4.4,1.1 1.1,4.4"/> 432 + </pattern> 433 + <pattern height="12" id="pattern-hatched-282.0688deg-white-6-0.25" patternTransform="rotate(237.06879)" patternUnits="userSpaceOnUse" viewBox="0,0,6,6" width="12"> 434 + <polygon fill="#ffffff" points="0,0 1.5,0 0,1.5"/> 435 + <polygon fill="#ffffff" points="0,6 6,0 6,1.5 1.5,6"/> 253 436 </pattern> 254 - <pattern height="11" id="pattern-hatched-bottom-up-white-5.5" patternUnits="userSpaceOnUse" viewBox="0,0,5.5,5.5" width="11"> 255 - <polygon fill="#ffffff" points="0,0 1.375,0 0,1.375"/> 256 - <polygon fill="#ffffff" points="0,5.5 5.5,0 5.5,1.375 1.375,5.5"/> 437 + <pattern height="14.8" id="pattern-hatched-33.544266deg-white-7.4-0.25" patternTransform="rotate(-11.455734)" patternUnits="userSpaceOnUse" viewBox="0,0,7.4,7.4" width="14.8"> 438 + <polygon fill="#ffffff" points="0,0 1.85,0 0,1.85"/> 439 + <polygon fill="#ffffff" points="0,7.4 7.4,0 7.4,1.85 1.85,7.4"/> 257 440 </pattern> 258 - <pattern height="0.6" id="pattern-hatched-bottom-up-white-0.3" patternUnits="userSpaceOnUse" viewBox="0,0,0.3,0.3" width="0.6"> 259 - <polygon fill="#ffffff" points="0,0 0.075,0 0,0.075"/> 260 - <polygon fill="#ffffff" points="0,0.3 0.3,0 0.3,0.075 0.075,0.3"/> 441 + <pattern height="11.8" id="pattern-hatched-215.58922deg-white-5.9-0.25" patternTransform="rotate(170.58922)" patternUnits="userSpaceOnUse" viewBox="0,0,5.9,5.9" width="11.8"> 442 + <polygon fill="#ffffff" points="0,0 1.475,0 0,1.475"/> 443 + <polygon fill="#ffffff" points="0,5.9 5.9,0 5.9,1.475 1.475,5.9"/> 261 444 </pattern> 262 - <pattern height="9.2" id="pattern-hatched-bottom-up-white-4.6" patternUnits="userSpaceOnUse" viewBox="0,0,4.6,4.6" width="9.2"> 263 - <polygon fill="#ffffff" points="0,0 1.15,0 0,1.15"/> 264 - <polygon fill="#ffffff" points="0,4.6 4.6,0 4.6,1.15 1.15,4.6"/> 445 + <pattern height="17.8" id="pattern-hatched-96.993355deg-white-8.9-0.25" patternTransform="rotate(51.993355)" patternUnits="userSpaceOnUse" viewBox="0,0,8.9,8.9" width="17.8"> 446 + <polygon fill="#ffffff" points="0,0 2.225,0 0,2.225"/> 447 + <polygon fill="#ffffff" points="0,8.9 8.9,0 8.9,2.225 2.225,8.9"/> 448 + </pattern> 449 + <pattern height="16.4" id="pattern-hatched-107.339775deg-white-8.2-0.25" patternTransform="rotate(62.339775)" patternUnits="userSpaceOnUse" viewBox="0,0,8.2,8.2" width="16.4"> 450 + <polygon fill="#ffffff" points="0,0 2.05,0 0,2.05"/> 451 + <polygon fill="#ffffff" points="0,8.2 8.2,0 8.2,2.05 2.05,8.2"/> 452 + </pattern> 453 + <pattern height="18.2" id="pattern-hatched-71.766174deg-white-9.1-0.25" patternTransform="rotate(26.766174)" patternUnits="userSpaceOnUse" viewBox="0,0,9.1,9.1" width="18.2"> 454 + <polygon fill="#ffffff" points="0,0 2.275,0 0,2.275"/> 455 + <polygon fill="#ffffff" points="0,9.1 9.1,0 9.1,2.275 2.275,9.1"/> 265 456 </pattern> 266 - <pattern height="3.2" id="pattern-hatched-bottom-up-white-1.6" patternUnits="userSpaceOnUse" viewBox="0,0,1.6,1.6" width="3.2"> 457 + <pattern height="3.2" id="pattern-hatched-186.63586deg-white-1.6-0.25" patternTransform="rotate(141.63586)" patternUnits="userSpaceOnUse" viewBox="0,0,1.6,1.6" width="3.2"> 267 458 <polygon fill="#ffffff" points="0,0 0.4,0 0,0.4"/> 268 459 <polygon fill="#ffffff" points="0,1.6 1.6,0 1.6,0.4 0.4,1.6"/> 269 460 </pattern> 270 - <pattern height="3.4" id="pattern-hatched-bottom-up-white-1.7" patternUnits="userSpaceOnUse" viewBox="0,0,1.7,1.7" width="3.4"> 461 + <pattern height="16" id="pattern-hatched-243.80658deg-white-8-0.25" patternTransform="rotate(198.80658)" patternUnits="userSpaceOnUse" viewBox="0,0,8,8" width="16"> 462 + <polygon fill="#ffffff" points="0,0 2,0 0,2"/> 463 + <polygon fill="#ffffff" points="0,8 8,0 8,2 2,8"/> 464 + </pattern> 465 + <pattern height="3.4" id="pattern-hatched-253.68701deg-white-1.7-0.25" patternTransform="rotate(208.68701)" patternUnits="userSpaceOnUse" viewBox="0,0,1.7,1.7" width="3.4"> 271 466 <polygon fill="#ffffff" points="0,0 0.425,0 0,0.425"/> 272 467 <polygon fill="#ffffff" points="0,1.7 1.7,0 1.7,0.425 0.425,1.7"/> 273 468 </pattern> 274 - <pattern height="10.2" id="pattern-hatched-bottom-up-white-5.1" patternUnits="userSpaceOnUse" viewBox="0,0,5.1,5.1" width="10.2"> 275 - <polygon fill="#ffffff" points="0,0 1.275,0 0,1.275"/> 276 - <polygon fill="#ffffff" points="0,5.1 5.1,0 5.1,1.275 1.275,5.1"/> 469 + <pattern height="7.2" id="pattern-hatched-310.7585deg-white-3.6-0.25" patternTransform="rotate(265.7585)" patternUnits="userSpaceOnUse" viewBox="0,0,3.6,3.6" width="7.2"> 470 + <polygon fill="#ffffff" points="0,0 0.9,0 0,0.9"/> 471 + <polygon fill="#ffffff" points="0,3.6 3.6,0 3.6,0.9 0.9,3.6"/> 277 472 </pattern> 278 - <pattern height="7.8" id="pattern-hatched-bottom-up-white-3.9" patternUnits="userSpaceOnUse" viewBox="0,0,3.9,3.9" width="7.8"> 279 - <polygon fill="#ffffff" points="0,0 0.975,0 0,0.975"/> 280 - <polygon fill="#ffffff" points="0,3.9 3.9,0 3.9,0.975 0.975,3.9"/> 473 + <pattern height="7.4" id="pattern-hatched-299.28848deg-white-3.7-0.25" patternTransform="rotate(254.28848)" patternUnits="userSpaceOnUse" viewBox="0,0,3.7,3.7" width="7.4"> 474 + <polygon fill="#ffffff" points="0,0 0.925,0 0,0.925"/> 475 + <polygon fill="#ffffff" points="0,3.7 3.7,0 3.7,0.925 0.925,3.7"/> 281 476 </pattern> 282 - <pattern height="13.2" id="pattern-hatched-bottom-up-white-6.6" patternUnits="userSpaceOnUse" viewBox="0,0,6.6,6.6" width="13.2"> 283 - <polygon fill="#ffffff" points="0,0 1.65,0 0,1.65"/> 284 - <polygon fill="#ffffff" points="0,6.6 6.6,0 6.6,1.65 1.65,6.6"/> 477 + <pattern height="4.4" id="pattern-hatched-233.53273deg-white-2.2-0.25" patternTransform="rotate(188.53273)" patternUnits="userSpaceOnUse" viewBox="0,0,2.2,2.2" width="4.4"> 478 + <polygon fill="#ffffff" points="0,0 0.55,0 0,0.55"/> 479 + <polygon fill="#ffffff" points="0,2.2 2.2,0 2.2,0.55 0.55,2.2"/> 285 480 </pattern> 286 - <pattern height="12.4" id="pattern-hatched-bottom-up-white-6.2" patternUnits="userSpaceOnUse" viewBox="0,0,6.2,6.2" width="12.4"> 287 - <polygon fill="#ffffff" points="0,0 1.55,0 0,1.55"/> 288 - <polygon fill="#ffffff" points="0,6.2 6.2,0 6.2,1.55 1.55,6.2"/> 481 + <pattern height="14" id="pattern-hatched-220.6095deg-white-7-0.25" patternTransform="rotate(175.6095)" patternUnits="userSpaceOnUse" viewBox="0,0,7,7" width="14"> 482 + <polygon fill="#ffffff" points="0,0 1.75,0 0,1.75"/> 483 + <polygon fill="#ffffff" points="0,7 7,0 7,1.75 1.75,7"/> 289 484 </pattern> 290 - <pattern height="5.8" id="pattern-hatched-bottom-up-white-2.9" patternUnits="userSpaceOnUse" viewBox="0,0,2.9,2.9" width="5.8"> 291 - <polygon fill="#ffffff" points="0,0 0.725,0 0,0.725"/> 292 - <polygon fill="#ffffff" points="0,2.9 2.9,0 2.9,0.725 0.725,2.9"/> 485 + <pattern height="3.8" id="pattern-hatched-358.5839deg-white-1.9-0.25" patternTransform="rotate(313.5839)" patternUnits="userSpaceOnUse" viewBox="0,0,1.9,1.9" width="3.8"> 486 + <polygon fill="#ffffff" points="0,0 0.475,0 0,0.475"/> 487 + <polygon fill="#ffffff" points="0,1.9 1.9,0 1.9,0.475 0.475,1.9"/> 293 488 </pattern> 294 - <pattern height="6.2" id="pattern-hatched-bottom-up-white-3.1" patternUnits="userSpaceOnUse" viewBox="0,0,3.1,3.1" width="6.2"> 295 - <polygon fill="#ffffff" points="0,0 0.775,0 0,0.775"/> 296 - <polygon fill="#ffffff" points="0,3.1 3.1,0 3.1,0.775 0.775,3.1"/> 489 + <pattern height="10.6" id="pattern-hatched-167.84358deg-white-5.3-0.25" patternTransform="rotate(122.84358)" patternUnits="userSpaceOnUse" viewBox="0,0,5.3,5.3" width="10.6"> 490 + <polygon fill="#ffffff" points="0,0 1.325,0 0,1.325"/> 491 + <polygon fill="#ffffff" points="0,5.3 5.3,0 5.3,1.325 1.325,5.3"/> 297 492 </pattern> 298 - <pattern height="8.2" id="pattern-hatched-bottom-up-white-4.1" patternUnits="userSpaceOnUse" viewBox="0,0,4.1,4.1" width="8.2"> 299 - <polygon fill="#ffffff" points="0,0 1.025,0 0,1.025"/> 300 - <polygon fill="#ffffff" points="0,4.1 4.1,0 4.1,1.025 1.025,4.1"/> 493 + <pattern height="7.6" id="pattern-hatched-278.33463deg-white-3.8-0.25" patternTransform="rotate(233.33463)" patternUnits="userSpaceOnUse" viewBox="0,0,3.8,3.8" width="7.6"> 494 + <polygon fill="#ffffff" points="0,0 0.95,0 0,0.95"/> 495 + <polygon fill="#ffffff" points="0,3.8 3.8,0 3.8,0.95 0.95,3.8"/> 301 496 </pattern> 302 - <pattern height="5.6" id="pattern-hatched-bottom-up-white-2.8" patternUnits="userSpaceOnUse" viewBox="0,0,2.8,2.8" width="5.6"> 303 - <polygon fill="#ffffff" points="0,0 0.7,0 0,0.7"/> 304 - <polygon fill="#ffffff" points="0,2.8 2.8,0 2.8,0.7 0.7,2.8"/> 497 + <pattern height="4.8" id="pattern-hatched-310.2893deg-white-2.4-0.25" patternTransform="rotate(265.2893)" patternUnits="userSpaceOnUse" viewBox="0,0,2.4,2.4" width="4.8"> 498 + <polygon fill="#ffffff" points="0,0 0.6,0 0,0.6"/> 499 + <polygon fill="#ffffff" points="0,2.4 2.4,0 2.4,0.6 0.6,2.4"/> 305 500 </pattern> 306 - <pattern height="6.4" id="pattern-hatched-bottom-up-white-3.2" patternUnits="userSpaceOnUse" viewBox="0,0,3.2,3.2" width="6.4"> 307 - <polygon fill="#ffffff" points="0,0 0.8,0 0,0.8"/> 308 - <polygon fill="#ffffff" points="0,3.2 3.2,0 3.2,0.8 0.8,3.2"/> 501 + <pattern height="17" id="pattern-hatched-15.570846deg-white-8.5-0.25" patternTransform="rotate(-29.429153)" patternUnits="userSpaceOnUse" viewBox="0,0,8.5,8.5" width="17"> 502 + <polygon fill="#ffffff" points="0,0 2.125,0 0,2.125"/> 503 + <polygon fill="#ffffff" points="0,8.5 8.5,0 8.5,2.125 2.125,8.5"/> 309 504 </pattern> 310 - <pattern height="2.8" id="pattern-hatched-bottom-up-white-1.4" patternUnits="userSpaceOnUse" viewBox="0,0,1.4,1.4" width="2.8"> 311 - <polygon fill="#ffffff" points="0,0 0.35,0 0,0.35"/> 312 - <polygon fill="#ffffff" points="0,1.4 1.4,0 1.4,0.35 0.35,1.4"/> 505 + <pattern height="18" id="pattern-hatched-220.13795deg-white-9-0.25" patternTransform="rotate(175.13795)" patternUnits="userSpaceOnUse" viewBox="0,0,9,9" width="18"> 506 + <polygon fill="#ffffff" points="0,0 2.25,0 0,2.25"/> 507 + <polygon fill="#ffffff" points="0,9 9,0 9,2.25 2.25,9"/> 313 508 </pattern> 314 - <pattern height="4.6" id="pattern-hatched-bottom-up-white-2.3" patternUnits="userSpaceOnUse" viewBox="0,0,2.3,2.3" width="4.6"> 315 - <polygon fill="#ffffff" points="0,0 0.575,0 0,0.575"/> 316 - <polygon fill="#ffffff" points="0,2.3 2.3,0 2.3,0.575 0.575,2.3"/> 509 + <pattern height="14.6" id="pattern-hatched-50.404415deg-white-7.3-0.25" patternTransform="rotate(5.404415)" patternUnits="userSpaceOnUse" viewBox="0,0,7.3,7.3" width="14.6"> 510 + <polygon fill="#ffffff" points="0,0 1.825,0 0,1.825"/> 511 + <polygon fill="#ffffff" points="0,7.3 7.3,0 7.3,1.825 1.825,7.3"/> 317 512 </pattern> 318 - <pattern height="6.8" id="pattern-hatched-bottom-up-white-3.4" patternUnits="userSpaceOnUse" viewBox="0,0,3.4,3.4" width="6.8"> 319 - <polygon fill="#ffffff" points="0,0 0.85,0 0,0.85"/> 320 - <polygon fill="#ffffff" points="0,3.4 3.4,0 3.4,0.85 0.85,3.4"/> 513 + <pattern height="2" id="pattern-hatched-183.30246deg-white-1-0.25" patternTransform="rotate(138.30246)" patternUnits="userSpaceOnUse" viewBox="0,0,1,1" width="2"> 514 + <polygon fill="#ffffff" points="0,0 0.25,0 0,0.25"/> 515 + <polygon fill="#ffffff" points="0,1 1,0 1,0.25 0.25,1"/> 321 516 </pattern> 322 - <pattern height="7.2" id="pattern-hatched-bottom-up-white-3.6" patternUnits="userSpaceOnUse" viewBox="0,0,3.6,3.6" width="7.2"> 323 - <polygon fill="#ffffff" points="0,0 0.9,0 0,0.9"/> 324 - <polygon fill="#ffffff" points="0,3.6 3.6,0 3.6,0.9 0.9,3.6"/> 517 + <pattern height="11.6" id="pattern-hatched-131.70145deg-white-5.8-0.25" patternTransform="rotate(86.70145)" patternUnits="userSpaceOnUse" viewBox="0,0,5.8,5.8" width="11.6"> 518 + <polygon fill="#ffffff" points="0,0 1.45,0 0,1.45"/> 519 + <polygon fill="#ffffff" points="0,5.8 5.8,0 5.8,1.45 1.45,5.8"/> 325 520 </pattern> 326 - <pattern height="7.6" id="pattern-hatched-bottom-up-white-3.8" patternUnits="userSpaceOnUse" viewBox="0,0,3.8,3.8" width="7.6"> 327 - <polygon fill="#ffffff" points="0,0 0.95,0 0,0.95"/> 328 - <polygon fill="#ffffff" points="0,3.8 3.8,0 3.8,0.95 0.95,3.8"/> 521 + <pattern height="18.4" id="pattern-hatched-244.81346deg-white-9.2-0.25" patternTransform="rotate(199.81346)" patternUnits="userSpaceOnUse" viewBox="0,0,9.2,9.2" width="18.4"> 522 + <polygon fill="#ffffff" points="0,0 2.3,0 0,2.3"/> 523 + <polygon fill="#ffffff" points="0,9.2 9.2,0 9.2,2.3 2.3,9.2"/> 329 524 </pattern> 330 - <pattern height="8.4" id="pattern-hatched-bottom-up-white-4.2" patternUnits="userSpaceOnUse" viewBox="0,0,4.2,4.2" width="8.4"> 331 - <polygon fill="#ffffff" points="0,0 1.05,0 0,1.05"/> 332 - <polygon fill="#ffffff" points="0,4.2 4.2,0 4.2,1.05 1.05,4.2"/> 525 + <pattern height="19.6" id="pattern-hatched-335.19543deg-white-9.8-0.25" patternTransform="rotate(290.19543)" patternUnits="userSpaceOnUse" viewBox="0,0,9.8,9.8" width="19.6"> 526 + <polygon fill="#ffffff" points="0,0 2.45,0 0,2.45"/> 527 + <polygon fill="#ffffff" points="0,9.8 9.8,0 9.8,2.45 2.45,9.8"/> 333 528 </pattern> 334 - <pattern height="8.6" id="pattern-hatched-bottom-up-white-4.3" patternUnits="userSpaceOnUse" viewBox="0,0,4.3,4.3" width="8.6"> 335 - <polygon fill="#ffffff" points="0,0 1.075,0 0,1.075"/> 336 - <polygon fill="#ffffff" points="0,4.3 4.3,0 4.3,1.075 1.075,4.3"/> 529 + <pattern height="9.6" id="pattern-hatched-6.4409494deg-white-4.8-0.25" patternTransform="rotate(-38.55905)" patternUnits="userSpaceOnUse" viewBox="0,0,4.8,4.8" width="9.6"> 530 + <polygon fill="#ffffff" points="0,0 1.2,0 0,1.2"/> 531 + <polygon fill="#ffffff" points="0,4.8 4.8,0 4.8,1.2 1.2,4.8"/> 337 532 </pattern> 338 - <pattern height="12.2" id="pattern-hatched-bottom-up-white-6.1" patternUnits="userSpaceOnUse" viewBox="0,0,6.1,6.1" width="12.2"> 339 - <polygon fill="#ffffff" points="0,0 1.525,0 0,1.525"/> 340 - <polygon fill="#ffffff" points="0,6.1 6.1,0 6.1,1.525 1.525,6.1"/> 533 + <pattern height="1" id="pattern-hatched-218.48544deg-white-0.5-0.25" patternTransform="rotate(173.48544)" patternUnits="userSpaceOnUse" viewBox="0,0,0.5,0.5" width="1"> 534 + <polygon fill="#ffffff" points="0,0 0.125,0 0,0.125"/> 535 + <polygon fill="#ffffff" points="0,0.5 0.5,0 0.5,0.125 0.125,0.5"/> 341 536 </pattern> 342 - <pattern height="16.4" id="pattern-hatched-bottom-up-white-8.2" patternUnits="userSpaceOnUse" viewBox="0,0,8.2,8.2" width="16.4"> 343 - <polygon fill="#ffffff" points="0,0 2.05,0 0,2.05"/> 344 - <polygon fill="#ffffff" points="0,8.2 8.2,0 8.2,2.05 2.05,8.2"/> 537 + <pattern height="13.2" id="pattern-hatched-106.67879deg-white-6.6-0.25" patternTransform="rotate(61.678787)" patternUnits="userSpaceOnUse" viewBox="0,0,6.6,6.6" width="13.2"> 538 + <polygon fill="#ffffff" points="0,0 1.65,0 0,1.65"/> 539 + <polygon fill="#ffffff" points="0,6.6 6.6,0 6.6,1.65 1.65,6.6"/> 345 540 </pattern> 346 - <pattern height="0.8" id="pattern-hatched-bottom-up-white-0.4" patternUnits="userSpaceOnUse" viewBox="0,0,0.4,0.4" width="0.8"> 347 - <polygon fill="#ffffff" points="0,0 0.1,0 0,0.1"/> 348 - <polygon fill="#ffffff" points="0,0.4 0.4,0 0.4,0.1 0.1,0.4"/> 541 + <pattern height="4.2" id="pattern-hatched-118.944214deg-white-2.1-0.25" patternTransform="rotate(73.944214)" patternUnits="userSpaceOnUse" viewBox="0,0,2.1,2.1" width="4.2"> 542 + <polygon fill="#ffffff" points="0,0 0.525,0 0,0.525"/> 543 + <polygon fill="#ffffff" points="0,2.1 2.1,0 2.1,0.525 0.525,2.1"/> 349 544 </pattern> 350 - <pattern height="9" id="pattern-hatched-bottom-up-white-4.5" patternUnits="userSpaceOnUse" viewBox="0,0,4.5,4.5" width="9"> 351 - <polygon fill="#ffffff" points="0,0 1.125,0 0,1.125"/> 352 - <polygon fill="#ffffff" points="0,4.5 4.5,0 4.5,1.125 1.125,4.5"/> 545 + <pattern height="12.4" id="pattern-hatched-227.94576deg-white-6.2-0.25" patternTransform="rotate(182.94576)" patternUnits="userSpaceOnUse" viewBox="0,0,6.2,6.2" width="12.4"> 546 + <polygon fill="#ffffff" points="0,0 1.55,0 0,1.55"/> 547 + <polygon fill="#ffffff" points="0,6.2 6.2,0 6.2,1.55 1.55,6.2"/> 353 548 </pattern> 354 - <pattern height="13.4" id="pattern-hatched-bottom-up-white-6.7" patternUnits="userSpaceOnUse" viewBox="0,0,6.7,6.7" width="13.4"> 355 - <polygon fill="#ffffff" points="0,0 1.675,0 0,1.675"/> 356 - <polygon fill="#ffffff" points="0,6.7 6.7,0 6.7,1.675 1.675,6.7"/> 549 + <pattern height="19.2" id="pattern-hatched-299.81985deg-white-9.6-0.25" patternTransform="rotate(254.81985)" patternUnits="userSpaceOnUse" viewBox="0,0,9.6,9.6" width="19.2"> 550 + <polygon fill="#ffffff" points="0,0 2.4,0 0,2.4"/> 551 + <polygon fill="#ffffff" points="0,9.6 9.6,0 9.6,2.4 2.4,9.6"/> 357 552 </pattern> 358 - <pattern height="5.2" id="pattern-hatched-bottom-up-white-2.6" patternUnits="userSpaceOnUse" viewBox="0,0,2.6,2.6" width="5.2"> 359 - <polygon fill="#ffffff" points="0,0 0.65,0 0,0.65"/> 360 - <polygon fill="#ffffff" points="0,2.6 2.6,0 2.6,0.65 0.65,2.6"/> 553 + <pattern height="2.4" id="pattern-hatched-279.28082deg-white-1.2-0.25" patternTransform="rotate(234.28082)" patternUnits="userSpaceOnUse" viewBox="0,0,1.2,1.2" width="2.4"> 554 + <polygon fill="#ffffff" points="0,0 0.3,0 0,0.3"/> 555 + <polygon fill="#ffffff" points="0,1.2 1.2,0 1.2,0.3 0.3,1.2"/> 361 556 </pattern> 362 - <pattern height="15" id="pattern-hatched-bottom-up-white-7.5" patternUnits="userSpaceOnUse" viewBox="0,0,7.5,7.5" width="15"> 363 - <polygon fill="#ffffff" points="0,0 1.875,0 0,1.875"/> 364 - <polygon fill="#ffffff" points="0,7.5 7.5,0 7.5,1.875 1.875,7.5"/> 557 + <pattern height="19.4" id="pattern-hatched-75.52045deg-white-9.7-0.25" patternTransform="rotate(30.520447)" patternUnits="userSpaceOnUse" viewBox="0,0,9.7,9.7" width="19.4"> 558 + <polygon fill="#ffffff" points="0,0 2.425,0 0,2.425"/> 559 + <polygon fill="#ffffff" points="0,9.7 9.7,0 9.7,2.425 2.425,9.7"/> 365 560 </pattern> 366 - <pattern height="13.6" id="pattern-hatched-bottom-up-white-6.8" patternUnits="userSpaceOnUse" viewBox="0,0,6.8,6.8" width="13.6"> 561 + <pattern height="13.6" id="pattern-hatched-115.57184deg-white-6.8-0.25" patternTransform="rotate(70.57184)" patternUnits="userSpaceOnUse" viewBox="0,0,6.8,6.8" width="13.6"> 367 562 <polygon fill="#ffffff" points="0,0 1.7,0 0,1.7"/> 368 563 <polygon fill="#ffffff" points="0,6.8 6.8,0 6.8,1.7 1.7,6.8"/> 369 564 </pattern> 370 - <pattern height="1.4" id="pattern-hatched-bottom-up-white-0.7" patternUnits="userSpaceOnUse" viewBox="0,0,0.7,0.7" width="1.4"> 565 + <pattern height="1.4" id="pattern-hatched-120.974106deg-white-0.7-0.25" patternTransform="rotate(75.974106)" patternUnits="userSpaceOnUse" viewBox="0,0,0.7,0.7" width="1.4"> 371 566 <polygon fill="#ffffff" points="0,0 0.175,0 0,0.175"/> 372 567 <polygon fill="#ffffff" points="0,0.7 0.7,0 0.7,0.175 0.175,0.7"/> 373 568 </pattern> 374 - <pattern height="4.2" id="pattern-hatched-bottom-up-white-2.1" patternUnits="userSpaceOnUse" viewBox="0,0,2.1,2.1" width="4.2"> 375 - <polygon fill="#ffffff" points="0,0 0.525,0 0,0.525"/> 376 - <polygon fill="#ffffff" points="0,2.1 2.1,0 2.1,0.525 0.525,2.1"/> 569 + <pattern height="1.2" id="pattern-hatched-159.69516deg-white-0.6-0.25" patternTransform="rotate(114.69516)" patternUnits="userSpaceOnUse" viewBox="0,0,0.6,0.6" width="1.2"> 570 + <polygon fill="#ffffff" points="0,0 0.15,0 0,0.15"/> 571 + <polygon fill="#ffffff" points="0,0.6 0.6,0 0.6,0.15 0.15,0.6"/> 377 572 </pattern> 378 - <pattern height="16.2" id="pattern-hatched-bottom-up-white-8.1" patternUnits="userSpaceOnUse" viewBox="0,0,8.1,8.1" width="16.2"> 379 - <polygon fill="#ffffff" points="0,0 2.025,0 0,2.025"/> 380 - <polygon fill="#ffffff" points="0,8.1 8.1,0 8.1,2.025 2.025,8.1"/> 573 + <pattern height="3" id="pattern-hatched-123.144165deg-white-1.5-0.25" patternTransform="rotate(78.144165)" patternUnits="userSpaceOnUse" viewBox="0,0,1.5,1.5" width="3"> 574 + <polygon fill="#ffffff" points="0,0 0.375,0 0,0.375"/> 575 + <polygon fill="#ffffff" points="0,1.5 1.5,0 1.5,0.375 0.375,1.5"/> 381 576 </pattern> 382 - <pattern height="11.6" id="pattern-hatched-bottom-up-white-5.8" patternUnits="userSpaceOnUse" viewBox="0,0,5.8,5.8" width="11.6"> 383 - <polygon fill="#ffffff" points="0,0 1.45,0 0,1.45"/> 384 - <polygon fill="#ffffff" points="0,5.8 5.8,0 5.8,1.45 1.45,5.8"/> 577 + <pattern height="1.6" id="pattern-hatched-220.77296deg-white-0.8-0.25" patternTransform="rotate(175.77296)" patternUnits="userSpaceOnUse" viewBox="0,0,0.8,0.8" width="1.6"> 578 + <polygon fill="#ffffff" points="0,0 0.2,0 0,0.2"/> 579 + <polygon fill="#ffffff" points="0,0.8 0.8,0 0.8,0.2 0.2,0.8"/> 385 580 </pattern> 386 - <pattern height="11.8" id="pattern-hatched-bottom-up-white-5.9" patternUnits="userSpaceOnUse" viewBox="0,0,5.9,5.9" width="11.8"> 387 - <polygon fill="#ffffff" points="0,0 1.475,0 0,1.475"/> 388 - <polygon fill="#ffffff" points="0,5.9 5.9,0 5.9,1.475 1.475,5.9"/> 581 + <pattern height="10.4" id="pattern-hatched-53.81241deg-white-5.2-0.25" patternTransform="rotate(8.812408)" patternUnits="userSpaceOnUse" viewBox="0,0,5.2,5.2" width="10.4"> 582 + <polygon fill="#ffffff" points="0,0 1.3,0 0,1.3"/> 583 + <polygon fill="#ffffff" points="0,5.2 5.2,0 5.2,1.3 1.3,5.2"/> 389 584 </pattern> 390 - <pattern height="1.8" id="pattern-hatched-bottom-up-white-0.9" patternUnits="userSpaceOnUse" viewBox="0,0,0.9,0.9" width="1.8"> 391 - <polygon fill="#ffffff" points="0,0 0.225,0 0,0.225"/> 392 - <polygon fill="#ffffff" points="0,0.9 0.9,0 0.9,0.225 0.225,0.9"/> 585 + <pattern height="18.6" id="pattern-hatched-5.1831865deg-white-9.3-0.25" patternTransform="rotate(-39.816814)" patternUnits="userSpaceOnUse" viewBox="0,0,9.3,9.3" width="18.6"> 586 + <polygon fill="#ffffff" points="0,0 2.325,0 0,2.325"/> 587 + <polygon fill="#ffffff" points="0,9.3 9.3,0 9.3,2.325 2.325,9.3"/> 393 588 </pattern> 394 - <pattern height="3.8" id="pattern-hatched-bottom-up-white-1.9" patternUnits="userSpaceOnUse" viewBox="0,0,1.9,1.9" width="3.8"> 395 - <polygon fill="#ffffff" points="0,0 0.475,0 0,0.475"/> 396 - <polygon fill="#ffffff" points="0,1.9 1.9,0 1.9,0.475 0.475,1.9"/> 589 + <pattern height="2.6" id="pattern-hatched-97.158325deg-white-1.3-0.25" patternTransform="rotate(52.158325)" patternUnits="userSpaceOnUse" viewBox="0,0,1.3,1.3" width="2.6"> 590 + <polygon fill="#ffffff" points="0,0 0.325,0 0,0.325"/> 591 + <polygon fill="#ffffff" points="0,1.3 1.3,0 1.3,0.325 0.325,1.3"/> 397 592 </pattern> 398 - <pattern height="8.8" id="pattern-hatched-bottom-up-white-4.4" patternUnits="userSpaceOnUse" viewBox="0,0,4.4,4.4" width="8.8"> 399 - <polygon fill="#ffffff" points="0,0 1.1,0 0,1.1"/> 400 - <polygon fill="#ffffff" points="0,4.4 4.4,0 4.4,1.1 1.1,4.4"/> 593 + <pattern height="13.4" id="pattern-hatched-188.27026deg-white-6.7-0.25" patternTransform="rotate(143.27026)" patternUnits="userSpaceOnUse" viewBox="0,0,6.7,6.7" width="13.4"> 594 + <polygon fill="#ffffff" points="0,0 1.675,0 0,1.675"/> 595 + <polygon fill="#ffffff" points="0,6.7 6.7,0 6.7,1.675 1.675,6.7"/> 401 596 </pattern> 402 - <pattern height="14.8" id="pattern-hatched-bottom-up-white-7.4" patternUnits="userSpaceOnUse" viewBox="0,0,7.4,7.4" width="14.8"> 403 - <polygon fill="#ffffff" points="0,0 1.85,0 0,1.85"/> 404 - <polygon fill="#ffffff" points="0,7.4 7.4,0 7.4,1.85 1.85,7.4"/> 597 + <pattern height="5" id="pattern-hatched-284.93896deg-white-2.5-0.25" patternTransform="rotate(239.93896)" patternUnits="userSpaceOnUse" viewBox="0,0,2.5,2.5" width="5"> 598 + <polygon fill="#ffffff" points="0,0 0.625,0 0,0.625"/> 599 + <polygon fill="#ffffff" points="0,2.5 2.5,0 2.5,0.625 0.625,2.5"/> 405 600 </pattern> 406 - <pattern height="3.6" id="pattern-hatched-bottom-up-white-1.8" patternUnits="userSpaceOnUse" viewBox="0,0,1.8,1.8" width="3.6"> 407 - <polygon fill="#ffffff" points="0,0 0.45,0 0,0.45"/> 408 - <polygon fill="#ffffff" points="0,1.8 1.8,0 1.8,0.45 0.45,1.8"/> 601 + <pattern height="13.8" id="pattern-hatched-150.21457deg-white-6.9-0.25" patternTransform="rotate(105.21457)" patternUnits="userSpaceOnUse" viewBox="0,0,6.9,6.9" width="13.8"> 602 + <polygon fill="#ffffff" points="0,0 1.725,0 0,1.725"/> 603 + <polygon fill="#ffffff" points="0,6.9 6.9,0 6.9,1.725 1.725,6.9"/> 409 604 </pattern> 410 - <pattern height="16.6" id="pattern-hatched-bottom-up-white-8.3" patternUnits="userSpaceOnUse" viewBox="0,0,8.3,8.3" width="16.6"> 411 - <polygon fill="#ffffff" points="0,0 2.075,0 0,2.075"/> 412 - <polygon fill="#ffffff" points="0,8.3 8.3,0 8.3,2.075 2.075,8.3"/> 605 + <pattern height="1.8" id="pattern-hatched-56.571136deg-white-0.9-0.25" patternTransform="rotate(11.571136)" patternUnits="userSpaceOnUse" viewBox="0,0,0.9,0.9" width="1.8"> 606 + <polygon fill="#ffffff" points="0,0 0.225,0 0,0.225"/> 607 + <polygon fill="#ffffff" points="0,0.9 0.9,0 0.9,0.225 0.225,0.9"/> 413 608 </pattern> 414 - <pattern height="14.6" id="pattern-hatched-bottom-up-white-7.3" patternUnits="userSpaceOnUse" viewBox="0,0,7.3,7.3" width="14.6"> 415 - <polygon fill="#ffffff" points="0,0 1.825,0 0,1.825"/> 416 - <polygon fill="#ffffff" points="0,7.3 7.3,0 7.3,1.825 1.825,7.3"/> 609 + <pattern height="14.4" id="pattern-hatched-26.9968deg-white-7.2-0.25" patternTransform="rotate(-18.0032)" patternUnits="userSpaceOnUse" viewBox="0,0,7.2,7.2" width="14.4"> 610 + <polygon fill="#ffffff" points="0,0 1.8,0 0,1.8"/> 611 + <polygon fill="#ffffff" points="0,7.2 7.2,0 7.2,1.8 1.8,7.2"/> 417 612 </pattern> 418 - <pattern height="4.4" id="pattern-hatched-bottom-up-white-2.2" patternUnits="userSpaceOnUse" viewBox="0,0,2.2,2.2" width="4.4"> 419 - <polygon fill="#ffffff" points="0,0 0.55,0 0,0.55"/> 420 - <polygon fill="#ffffff" points="0,2.2 2.2,0 2.2,0.55 0.55,2.2"/> 613 + <pattern height="4" id="pattern-hatched-18.678516deg-white-2-0.25" patternTransform="rotate(-26.321484)" patternUnits="userSpaceOnUse" viewBox="0,0,2,2" width="4"> 614 + <polygon fill="#ffffff" points="0,0 0.5,0 0,0.5"/> 615 + <polygon fill="#ffffff" points="0,2 2,0 2,0.5 0.5,2"/> 421 616 </pattern> 422 - <pattern height="1" id="pattern-hatched-bottom-up-white-0.5" patternUnits="userSpaceOnUse" viewBox="0,0,0.5,0.5" width="1"> 423 - <polygon fill="#ffffff" points="0,0 0.125,0 0,0.125"/> 424 - <polygon fill="#ffffff" points="0,0.5 0.5,0 0.5,0.125 0.125,0.5"/> 617 + <pattern height="6.4" id="pattern-hatched-119.76716deg-white-3.2-0.25" patternTransform="rotate(74.76716)" patternUnits="userSpaceOnUse" viewBox="0,0,3.2,3.2" width="6.4"> 618 + <polygon fill="#ffffff" points="0,0 0.8,0 0,0.8"/> 619 + <polygon fill="#ffffff" points="0,3.2 3.2,0 3.2,0.8 0.8,3.2"/> 425 620 </pattern> 426 - <pattern height="1.2" id="pattern-hatched-bottom-up-white-0.6" patternUnits="userSpaceOnUse" viewBox="0,0,0.6,0.6" width="1.2"> 427 - <polygon fill="#ffffff" points="0,0 0.15,0 0,0.15"/> 428 - <polygon fill="#ffffff" points="0,0.6 0.6,0 0.6,0.15 0.15,0.6"/> 621 + <pattern height="2.2" id="pattern-hatched-52.797806deg-white-1.1-0.25" patternTransform="rotate(7.797806)" patternUnits="userSpaceOnUse" viewBox="0,0,1.1,1.1" width="2.2"> 622 + <polygon fill="#ffffff" points="0,0 0.275,0 0,0.275"/> 623 + <polygon fill="#ffffff" points="0,1.1 1.1,0 1.1,0.275 0.275,1.1"/> 429 624 </pattern> 430 - <pattern height="9.8" id="pattern-hatched-bottom-up-white-4.9" patternUnits="userSpaceOnUse" viewBox="0,0,4.9,4.9" width="9.8"> 431 - <polygon fill="#ffffff" points="0,0 1.225,0 0,1.225"/> 432 - <polygon fill="#ffffff" points="0,4.9 4.9,0 4.9,1.225 1.225,4.9"/> 625 + <pattern height="6.8" id="pattern-hatched-320.13602deg-white-3.4-0.25" patternTransform="rotate(275.13602)" patternUnits="userSpaceOnUse" viewBox="0,0,3.4,3.4" width="6.8"> 626 + <polygon fill="#ffffff" points="0,0 0.85,0 0,0.85"/> 627 + <polygon fill="#ffffff" points="0,3.4 3.4,0 3.4,0.85 0.85,3.4"/> 433 628 </pattern> 434 - <pattern height="3" id="pattern-hatched-bottom-up-white-1.5" patternUnits="userSpaceOnUse" viewBox="0,0,1.5,1.5" width="3"> 435 - <polygon fill="#ffffff" points="0,0 0.375,0 0,0.375"/> 436 - <polygon fill="#ffffff" points="0,1.5 1.5,0 1.5,0.375 0.375,1.5"/> 629 + <pattern height="14.2" id="pattern-hatched-184.18352deg-white-7.1-0.25" patternTransform="rotate(139.18352)" patternUnits="userSpaceOnUse" viewBox="0,0,7.1,7.1" width="14.2"> 630 + <polygon fill="#ffffff" points="0,0 1.775,0 0,1.775"/> 631 + <polygon fill="#ffffff" points="0,7.1 7.1,0 7.1,1.775 1.775,7.1"/> 437 632 </pattern> 438 - <pattern height="7.4" id="pattern-hatched-bottom-up-white-3.7" patternUnits="userSpaceOnUse" viewBox="0,0,3.7,3.7" width="7.4"> 439 - <polygon fill="#ffffff" points="0,0 0.925,0 0,0.925"/> 440 - <polygon fill="#ffffff" points="0,3.7 3.7,0 3.7,0.925 0.925,3.7"/> 633 + <pattern height="15" id="pattern-hatched-224.83627deg-white-7.5-0.25" patternTransform="rotate(179.83627)" patternUnits="userSpaceOnUse" viewBox="0,0,7.5,7.5" width="15"> 634 + <polygon fill="#ffffff" points="0,0 1.875,0 0,1.875"/> 635 + <polygon fill="#ffffff" points="0,7.5 7.5,0 7.5,1.875 1.875,7.5"/> 441 636 </pattern> 442 - <pattern height="15.8" id="pattern-hatched-bottom-up-white-7.9" patternUnits="userSpaceOnUse" viewBox="0,0,7.9,7.9" width="15.8"> 443 - <polygon fill="#ffffff" points="0,0 1.975,0 0,1.975"/> 444 - <polygon fill="#ffffff" points="0,7.9 7.9,0 7.9,1.975 1.975,7.9"/> 637 + <pattern height="16.2" id="pattern-hatched-124.3612deg-white-8.1-0.25" patternTransform="rotate(79.3612)" patternUnits="userSpaceOnUse" viewBox="0,0,8.1,8.1" width="16.2"> 638 + <polygon fill="#ffffff" points="0,0 2.025,0 0,2.025"/> 639 + <polygon fill="#ffffff" points="0,8.1 8.1,0 8.1,2.025 2.025,8.1"/> 445 640 </pattern> 446 - <pattern height="11.4" id="pattern-hatched-bottom-up-white-5.7" patternUnits="userSpaceOnUse" viewBox="0,0,5.7,5.7" width="11.4"> 447 - <polygon fill="#ffffff" points="0,0 1.425,0 0,1.425"/> 448 - <polygon fill="#ffffff" points="0,5.7 5.7,0 5.7,1.425 1.425,5.7"/> 641 + <pattern height="16.8" id="pattern-hatched-297.89606deg-white-8.4-0.25" patternTransform="rotate(252.89606)" patternUnits="userSpaceOnUse" viewBox="0,0,8.4,8.4" width="16.8"> 642 + <polygon fill="#ffffff" points="0,0 2.1,0 0,2.1"/> 643 + <polygon fill="#ffffff" points="0,8.4 8.4,0 8.4,2.1 2.1,8.4"/> 449 644 </pattern> 450 - <pattern height="15.2" id="pattern-hatched-bottom-up-white-7.6" patternUnits="userSpaceOnUse" viewBox="0,0,7.6,7.6" width="15.2"> 451 - <polygon fill="#ffffff" points="0,0 1.9,0 0,1.9"/> 452 - <polygon fill="#ffffff" points="0,7.6 7.6,0 7.6,1.9 1.9,7.6"/> 645 + <pattern height="20" id="pattern-hatched-59.988743deg-white-10-0.25" patternTransform="rotate(14.988743)" patternUnits="userSpaceOnUse" viewBox="0,0,10,10" width="20"> 646 + <polygon fill="#ffffff" points="0,0 2.5,0 0,2.5"/> 647 + <polygon fill="#ffffff" points="0,10 10,0 10,2.5 2.5,10"/> 453 648 </pattern> 454 - <pattern height="13.8" id="pattern-hatched-bottom-up-white-6.9" patternUnits="userSpaceOnUse" viewBox="0,0,6.9,6.9" width="13.8"> 455 - <polygon fill="#ffffff" points="0,0 1.725,0 0,1.725"/> 456 - <polygon fill="#ffffff" points="0,6.9 6.9,0 6.9,1.725 1.725,6.9"/> 649 + <pattern height="4.6" id="pattern-hatched-56.978703deg-white-2.3-0.25" patternTransform="rotate(11.978703)" patternUnits="userSpaceOnUse" viewBox="0,0,2.3,2.3" width="4.6"> 650 + <polygon fill="#ffffff" points="0,0 0.575,0 0,0.575"/> 651 + <polygon fill="#ffffff" points="0,2.3 2.3,0 2.3,0.575 0.575,2.3"/> 457 652 </pattern> 458 - <pattern height="15.6" id="pattern-hatched-bottom-up-white-7.8" patternUnits="userSpaceOnUse" viewBox="0,0,7.8,7.8" width="15.6"> 459 - <polygon fill="#ffffff" points="0,0 1.95,0 0,1.95"/> 460 - <polygon fill="#ffffff" points="0,7.8 7.8,0 7.8,1.95 1.95,7.8"/> 653 + <pattern height="7.8" id="pattern-hatched-216.24454deg-white-3.9-0.25" patternTransform="rotate(171.24454)" patternUnits="userSpaceOnUse" viewBox="0,0,3.9,3.9" width="7.8"> 654 + <polygon fill="#ffffff" points="0,0 0.975,0 0,0.975"/> 655 + <polygon fill="#ffffff" points="0,3.9 3.9,0 3.9,0.975 0.975,3.9"/> 461 656 </pattern> 462 - <pattern height="12.8" id="pattern-hatched-bottom-up-white-6.4" patternUnits="userSpaceOnUse" viewBox="0,0,6.4,6.4" width="12.8"> 463 - <polygon fill="#ffffff" points="0,0 1.6,0 0,1.6"/> 464 - <polygon fill="#ffffff" points="0,6.4 6.4,0 6.4,1.6 1.6,6.4"/> 657 + <pattern height="19" id="pattern-hatched-317.81348deg-white-9.5-0.25" patternTransform="rotate(272.81348)" patternUnits="userSpaceOnUse" viewBox="0,0,9.5,9.5" width="19"> 658 + <polygon fill="#ffffff" points="0,0 2.375,0 0,2.375"/> 659 + <polygon fill="#ffffff" points="0,9.5 9.5,0 9.5,2.375 2.375,9.5"/> 465 660 </pattern> 466 - <pattern height="1.6" id="pattern-hatched-bottom-up-white-0.8" patternUnits="userSpaceOnUse" viewBox="0,0,0.8,0.8" width="1.6"> 467 - <polygon fill="#ffffff" points="0,0 0.2,0 0,0.2"/> 468 - <polygon fill="#ffffff" points="0,0.8 0.8,0 0.8,0.2 0.2,0.8"/> 661 + <pattern height="7" id="pattern-dotted-white-3-2" patternUnits="userSpaceOnUse" viewBox="0,0,7,7" width="7"> 662 + <circle cx="3.5" cy="3.5" fill="#ffffff" r="1.5"/> 469 663 </pattern> 470 - <pattern height="14.2" id="pattern-hatched-bottom-up-white-7.1" patternUnits="userSpaceOnUse" viewBox="0,0,7.1,7.1" width="14.2"> 471 - <polygon fill="#ffffff" points="0,0 1.775,0 0,1.775"/> 472 - <polygon fill="#ffffff" points="0,7.1 7.1,0 7.1,1.775 1.775,7.1"/> 664 + <pattern height="7" id="pattern-hatched-274.77606deg-white-3.5-0.25" patternTransform="rotate(229.77606)" patternUnits="userSpaceOnUse" viewBox="0,0,3.5,3.5" width="7"> 665 + <polygon fill="#ffffff" points="0,0 0.875,0 0,0.875"/> 666 + <polygon fill="#ffffff" points="0,3.5 3.5,0 3.5,0.875 0.875,3.5"/> 473 667 </pattern> 474 - <pattern height="17.2" id="pattern-hatched-bottom-up-white-8.6" patternUnits="userSpaceOnUse" viewBox="0,0,8.6,8.6" width="17.2"> 475 - <polygon fill="#ffffff" points="0,0 2.15,0 0,2.15"/> 476 - <polygon fill="#ffffff" points="0,8.6 8.6,0 8.6,2.15 2.15,8.6"/> 668 + <pattern height="18.8" id="pattern-hatched-89.04904deg-white-9.4-0.25" patternTransform="rotate(44.04904)" patternUnits="userSpaceOnUse" viewBox="0,0,9.4,9.4" width="18.8"> 669 + <polygon fill="#ffffff" points="0,0 2.35,0 0,2.35"/> 670 + <polygon fill="#ffffff" points="0,9.4 9.4,0 9.4,2.35 2.35,9.4"/> 477 671 </pattern> 478 - <pattern height="2.6" id="pattern-hatched-bottom-up-white-1.3" patternUnits="userSpaceOnUse" viewBox="0,0,1.3,1.3" width="2.6"> 479 - <polygon fill="#ffffff" points="0,0 0.325,0 0,0.325"/> 480 - <polygon fill="#ffffff" points="0,1.3 1.3,0 1.3,0.325 0.325,1.3"/> 672 + <pattern height="6.2" id="pattern-hatched-48.199726deg-white-3.1-0.25" patternTransform="rotate(3.199726)" patternUnits="userSpaceOnUse" viewBox="0,0,3.1,3.1" width="6.2"> 673 + <polygon fill="#ffffff" points="0,0 0.775,0 0,0.775"/> 674 + <polygon fill="#ffffff" points="0,3.1 3.1,0 3.1,0.775 0.775,3.1"/> 481 675 </pattern> 482 - <pattern height="17.6" id="pattern-hatched-bottom-up-white-8.8" patternUnits="userSpaceOnUse" viewBox="0,0,8.8,8.8" width="17.6"> 483 - <polygon fill="#ffffff" points="0,0 2.2,0 0,2.2"/> 484 - <polygon fill="#ffffff" points="0,8.8 8.8,0 8.8,2.2 2.2,8.8"/> 676 + <pattern height="20.2" id="pattern-hatched-88.31214deg-white-10.1-0.25" patternTransform="rotate(43.31214)" patternUnits="userSpaceOnUse" viewBox="0,0,10.1,10.1" width="20.2"> 677 + <polygon fill="#ffffff" points="0,0 2.525,0 0,2.525"/> 678 + <polygon fill="#ffffff" points="0,10.1 10.1,0 10.1,2.525 2.525,10.1"/> 485 679 </pattern> 486 - <pattern height="10.8" id="pattern-hatched-bottom-up-white-5.4" patternUnits="userSpaceOnUse" viewBox="0,0,5.4,5.4" width="10.8"> 487 - <polygon fill="#ffffff" points="0,0 1.35,0 0,1.35"/> 488 - <polygon fill="#ffffff" points="0,5.4 5.4,0 5.4,1.35 1.35,5.4"/> 680 + <pattern height="6" id="pattern-hatched-289.82617deg-white-3-0.25" patternTransform="rotate(244.82617)" patternUnits="userSpaceOnUse" viewBox="0,0,3,3" width="6"> 681 + <polygon fill="#ffffff" points="0,0 0.75,0 0,0.75"/> 682 + <polygon fill="#ffffff" points="0,3 3,0 3,0.75 0.75,3"/> 489 683 </pattern> 490 - <pattern height="5.4" id="pattern-hatched-bottom-up-white-2.7" patternUnits="userSpaceOnUse" viewBox="0,0,2.7,2.7" width="5.4"> 491 - <polygon fill="#ffffff" points="0,0 0.675,0 0,0.675"/> 492 - <polygon fill="#ffffff" points="0,2.7 2.7,0 2.7,0.675 0.675,2.7"/> 684 + <pattern height="5.8" id="pattern-hatched-324.32974deg-white-2.9-0.25" patternTransform="rotate(279.32974)" patternUnits="userSpaceOnUse" viewBox="0,0,2.9,2.9" width="5.8"> 685 + <polygon fill="#ffffff" points="0,0 0.725,0 0,0.725"/> 686 + <polygon fill="#ffffff" points="0,2.9 2.9,0 2.9,0.725 0.725,2.9"/> 493 687 </pattern> 494 - <pattern height="15.4" id="pattern-hatched-bottom-up-white-7.7" patternUnits="userSpaceOnUse" viewBox="0,0,7.7,7.7" width="15.4"> 495 - <polygon fill="#ffffff" points="0,0 1.925,0 0,1.925"/> 496 - <polygon fill="#ffffff" points="0,7.7 7.7,0 7.7,1.925 1.925,7.7"/> 688 + <pattern height="17.2" id="pattern-hatched-162.45045deg-white-8.6-0.25" patternTransform="rotate(117.450455)" patternUnits="userSpaceOnUse" viewBox="0,0,8.6,8.6" width="17.2"> 689 + <polygon fill="#ffffff" points="0,0 2.15,0 0,2.15"/> 690 + <polygon fill="#ffffff" points="0,8.6 8.6,0 8.6,2.15 2.15,8.6"/> 497 691 </pattern> 498 - <pattern height="2.4" id="pattern-hatched-bottom-up-white-1.2" patternUnits="userSpaceOnUse" viewBox="0,0,1.2,1.2" width="2.4"> 499 - <polygon fill="#ffffff" points="0,0 0.3,0 0,0.3"/> 500 - <polygon fill="#ffffff" points="0,1.2 1.2,0 1.2,0.3 0.3,1.2"/> 692 + <pattern height="15.2" id="pattern-hatched-113.16188deg-white-7.6-0.25" patternTransform="rotate(68.16188)" patternUnits="userSpaceOnUse" viewBox="0,0,7.6,7.6" width="15.2"> 693 + <polygon fill="#ffffff" points="0,0 1.9,0 0,1.9"/> 694 + <polygon fill="#ffffff" points="0,7.6 7.6,0 7.6,1.9 1.9,7.6"/> 501 695 </pattern> 502 - <pattern height="6.6" id="pattern-hatched-bottom-up-white-3.3" patternUnits="userSpaceOnUse" viewBox="0,0,3.3,3.3" width="6.6"> 696 + <pattern height="6.6" id="pattern-hatched-139.60207deg-white-3.3-0.25" patternTransform="rotate(94.602066)" patternUnits="userSpaceOnUse" viewBox="0,0,3.3,3.3" width="6.6"> 503 697 <polygon fill="#ffffff" points="0,0 0.825,0 0,0.825"/> 504 698 <polygon fill="#ffffff" points="0,3.3 3.3,0 3.3,0.825 0.825,3.3"/> 505 699 </pattern> 506 - <pattern height="17" id="pattern-hatched-bottom-up-white-8.5" patternUnits="userSpaceOnUse" viewBox="0,0,8.5,8.5" width="17"> 507 - <polygon fill="#ffffff" points="0,0 2.125,0 0,2.125"/> 508 - <polygon fill="#ffffff" points="0,8.5 8.5,0 8.5,2.125 2.125,8.5"/> 700 + <pattern height="16.6" id="pattern-hatched-183.72543deg-white-8.3-0.25" patternTransform="rotate(138.72543)" patternUnits="userSpaceOnUse" viewBox="0,0,8.3,8.3" width="16.6"> 701 + <polygon fill="#ffffff" points="0,0 2.075,0 0,2.075"/> 702 + <polygon fill="#ffffff" points="0,8.3 8.3,0 8.3,2.075 2.075,8.3"/> 509 703 </pattern> 510 - <pattern height="12.6" id="pattern-hatched-bottom-up-white-6.3" patternUnits="userSpaceOnUse" viewBox="0,0,6.3,6.3" width="12.6"> 511 - <polygon fill="#ffffff" points="0,0 1.575,0 0,1.575"/> 512 - <polygon fill="#ffffff" points="0,6.3 6.3,0 6.3,1.575 1.575,6.3"/> 704 + <pattern height="3.6" id="pattern-hatched-104.70095deg-white-1.8-0.25" patternTransform="rotate(59.70095)" patternUnits="userSpaceOnUse" viewBox="0,0,1.8,1.8" width="3.6"> 705 + <polygon fill="#ffffff" points="0,0 0.45,0 0,0.45"/> 706 + <polygon fill="#ffffff" points="0,1.8 1.8,0 1.8,0.45 0.45,1.8"/> 513 707 </pattern> 514 - <pattern height="14.4" id="pattern-hatched-bottom-up-white-7.2" patternUnits="userSpaceOnUse" viewBox="0,0,7.2,7.2" width="14.4"> 515 - <polygon fill="#ffffff" points="0,0 1.8,0 0,1.8"/> 516 - <polygon fill="#ffffff" points="0,7.2 7.2,0 7.2,1.8 1.8,7.2"/> 708 + <pattern height="12.2" id="pattern-hatched-17.959814deg-white-6.1-0.25" patternTransform="rotate(-27.040186)" patternUnits="userSpaceOnUse" viewBox="0,0,6.1,6.1" width="12.2"> 709 + <polygon fill="#ffffff" points="0,0 1.525,0 0,1.525"/> 710 + <polygon fill="#ffffff" points="0,6.1 6.1,0 6.1,1.525 1.525,6.1"/> 517 711 </pattern> 518 - <pattern height="5" id="pattern-hatched-bottom-up-white-2.5" patternUnits="userSpaceOnUse" viewBox="0,0,2.5,2.5" width="5"> 519 - <polygon fill="#ffffff" points="0,0 0.625,0 0,0.625"/> 520 - <polygon fill="#ffffff" points="0,2.5 2.5,0 2.5,0.625 0.625,2.5"/> 521 - </pattern> 522 - <pattern height="9.6" id="pattern-hatched-bottom-up-white-4.8" patternUnits="userSpaceOnUse" viewBox="0,0,4.8,4.8" width="9.6"> 523 - <polygon fill="#ffffff" points="0,0 1.2,0 0,1.2"/> 524 - <polygon fill="#ffffff" points="0,4.8 4.8,0 4.8,1.2 1.2,4.8"/> 525 - </pattern> 526 - <pattern height="17.4" id="pattern-hatched-bottom-up-white-8.7" patternUnits="userSpaceOnUse" viewBox="0,0,8.7,8.7" width="17.4"> 527 - <polygon fill="#ffffff" points="0,0 2.175,0 0,2.175"/> 528 - <polygon fill="#ffffff" points="0,8.7 8.7,0 8.7,2.175 2.175,8.7"/> 529 - </pattern> 530 - <pattern height="9.4" id="pattern-hatched-bottom-up-white-4.7" patternUnits="userSpaceOnUse" viewBox="0,0,4.7,4.7" width="9.4"> 712 + <pattern height="9.4" id="pattern-hatched-340.9856deg-white-4.7-0.25" patternTransform="rotate(295.9856)" patternUnits="userSpaceOnUse" viewBox="0,0,4.7,4.7" width="9.4"> 531 713 <polygon fill="#ffffff" points="0,0 1.175,0 0,1.175"/> 532 714 <polygon fill="#ffffff" points="0,4.7 4.7,0 4.7,1.175 1.175,4.7"/> 533 715 </pattern> 534 - <pattern height="0.4" id="pattern-hatched-bottom-up-white-0.2" patternUnits="userSpaceOnUse" viewBox="0,0,0.2,0.2" width="0.4"> 535 - <polygon fill="#ffffff" points="0,0 0.05,0 0,0.05"/> 536 - <polygon fill="#ffffff" points="0,0.2 0.2,0 0.2,0.05 0.05,0.2"/> 537 - </pattern> 538 - <pattern height="2.2" id="pattern-hatched-bottom-up-white-1.1" patternUnits="userSpaceOnUse" viewBox="0,0,1.1,1.1" width="2.2"> 539 - <polygon fill="#ffffff" points="0,0 0.275,0 0,0.275"/> 540 - <polygon fill="#ffffff" points="0,1.1 1.1,0 1.1,0.275 0.275,1.1"/> 541 - </pattern> 542 - <pattern height="4.8" id="pattern-hatched-bottom-up-white-2.4" patternUnits="userSpaceOnUse" viewBox="0,0,2.4,2.4" width="4.8"> 543 - <polygon fill="#ffffff" points="0,0 0.6,0 0,0.6"/> 544 - <polygon fill="#ffffff" points="0,2.4 2.4,0 2.4,0.6 0.6,2.4"/> 545 - </pattern> 546 - <pattern height="7" id="pattern-hatched-bottom-up-white-3.5" patternUnits="userSpaceOnUse" viewBox="0,0,3.5,3.5" width="7"> 547 - <polygon fill="#ffffff" points="0,0 0.875,0 0,0.875"/> 548 - <polygon fill="#ffffff" points="0,3.5 3.5,0 3.5,0.875 0.875,3.5"/> 549 - </pattern> 550 - <pattern height="10.6" id="pattern-hatched-bottom-up-white-5.3" patternUnits="userSpaceOnUse" viewBox="0,0,5.3,5.3" width="10.6"> 551 - <polygon fill="#ffffff" points="0,0 1.325,0 0,1.325"/> 552 - <polygon fill="#ffffff" points="0,5.3 5.3,0 5.3,1.325 1.325,5.3"/> 553 - </pattern> 554 - <pattern height="10.4" id="pattern-hatched-bottom-up-white-5.2" patternUnits="userSpaceOnUse" viewBox="0,0,5.2,5.2" width="10.4"> 555 - <polygon fill="#ffffff" points="0,0 1.3,0 0,1.3"/> 556 - <polygon fill="#ffffff" points="0,5.2 5.2,0 5.2,1.3 1.3,5.2"/> 716 + <pattern height="19.8" id="pattern-hatched-345.39377deg-white-9.9-0.25" patternTransform="rotate(300.39377)" patternUnits="userSpaceOnUse" viewBox="0,0,9.9,9.9" width="19.8"> 717 + <polygon fill="#ffffff" points="0,0 2.475,0 0,2.475"/> 718 + <polygon fill="#ffffff" points="0,9.9 9.9,0 9.9,2.475 2.475,9.9"/> 557 719 </pattern> 558 - <pattern height="11.2" id="pattern-hatched-bottom-up-white-5.6" patternUnits="userSpaceOnUse" viewBox="0,0,5.6,5.6" width="11.2"> 559 - <polygon fill="#ffffff" points="0,0 1.4,0 0,1.4"/> 560 - <polygon fill="#ffffff" points="0,5.6 5.6,0 5.6,1.4 1.4,5.6"/> 720 + <pattern height="9.2" id="pattern-hatched-288.15714deg-white-4.6-0.25" patternTransform="rotate(243.15714)" patternUnits="userSpaceOnUse" viewBox="0,0,4.6,4.6" width="9.2"> 721 + <polygon fill="#ffffff" points="0,0 1.15,0 0,1.15"/> 722 + <polygon fill="#ffffff" points="0,4.6 4.6,0 4.6,1.15 1.15,4.6"/> 561 723 </pattern> 562 - <pattern height="16.8" id="pattern-hatched-bottom-up-white-8.4" patternUnits="userSpaceOnUse" viewBox="0,0,8.4,8.4" width="16.8"> 563 - <polygon fill="#ffffff" points="0,0 2.1,0 0,2.1"/> 564 - <polygon fill="#ffffff" points="0,8.4 8.4,0 8.4,2.1 2.1,8.4"/> 724 + <pattern height="17.6" id="pattern-hatched-1.6552448deg-white-8.8-0.25" patternTransform="rotate(-43.344757)" patternUnits="userSpaceOnUse" viewBox="0,0,8.8,8.8" width="17.6"> 725 + <polygon fill="#ffffff" points="0,0 2.2,0 0,2.2"/> 726 + <polygon fill="#ffffff" points="0,8.8 8.8,0 8.8,2.2 2.2,8.8"/> 565 727 </pattern> 566 - <pattern height="0.2" id="pattern-hatched-bottom-up-white-0.1" patternUnits="userSpaceOnUse" viewBox="0,0,0.1,0.1" width="0.2"> 567 - <polygon fill="#ffffff" points="0,0 0.025,0 0,0.025"/> 568 - <polygon fill="#ffffff" points="0,0.1 0.1,0 0.1,0.025 0.025,0.1"/> 728 + <pattern height="20.4" id="pattern-hatched-257.7593deg-white-10.2-0.25" patternTransform="rotate(212.75931)" patternUnits="userSpaceOnUse" viewBox="0,0,10.2,10.2" width="20.4"> 729 + <polygon fill="#ffffff" points="0,0 2.55,0 0,2.55"/> 730 + <polygon fill="#ffffff" points="0,10.2 10.2,0 10.2,2.55 2.55,10.2"/> 569 731 </pattern> 570 - <pattern height="17.8" id="pattern-hatched-bottom-up-white-8.9" patternUnits="userSpaceOnUse" viewBox="0,0,8.9,8.9" width="17.8"> 571 - <polygon fill="#ffffff" points="0,0 2.225,0 0,2.225"/> 572 - <polygon fill="#ffffff" points="0,8.9 8.9,0 8.9,2.225 2.225,8.9"/> 732 + <pattern height="17.4" id="pattern-hatched-173.94572deg-white-8.7-0.25" patternTransform="rotate(128.94572)" patternUnits="userSpaceOnUse" viewBox="0,0,8.7,8.7" width="17.4"> 733 + <polygon fill="#ffffff" points="0,0 2.175,0 0,2.175"/> 734 + <polygon fill="#ffffff" points="0,8.7 8.7,0 8.7,2.175 2.175,8.7"/> 573 735 </pattern> 574 736 </defs> 575 737 </svg>
+16 -18
src/canvas.rs
··· 393 393 394 394 pub fn random_fill(&self, hatchable: bool) -> Fill { 395 395 if hatchable { 396 - match rand::thread_rng().gen_range(1..=2) { 397 - 1 => Fill::Solid(random_color(self.background)), 398 - 2 => { 399 - let hatch_size = rand::thread_rng().gen_range(5..=100) as f32 * 1e-2; 400 - Fill::Hatched( 401 - random_color(self.background), 402 - Angle(rand::thread_rng().gen_range(0.0..360.0)), 403 - hatch_size, 404 - // under a certain hatch size, we can't see the hatching if the ratio is not ½ 405 - if hatch_size < 8.0 { 406 - 0.5 407 - } else { 408 - rand::thread_rng().gen_range(1..=4) as f32 / 4.0 409 - }, 410 - ) 411 - } 412 - _ => unreachable!(), 396 + if rand::thread_rng().gen_bool(0.75) { 397 + Fill::Solid(random_color(self.background)) 398 + } else { 399 + let hatch_size = rand::thread_rng().gen_range(5..=100) as f32 * 1e-2; 400 + Fill::Hatched( 401 + random_color(self.background), 402 + Angle(rand::thread_rng().gen_range(0.0..360.0)), 403 + hatch_size, 404 + // under a certain hatch size, we can't see the hatching if the ratio is not ½ 405 + if hatch_size < 8.0 { 406 + 0.5 407 + } else { 408 + rand::thread_rng().gen_range(1..=4) as f32 / 4.0 409 + }, 410 + ) 413 411 } 414 412 } else { 415 413 Fill::Solid(random_color(self.background)) ··· 488 486 self.layers 489 487 .iter() 490 488 .flat_map(|layer| layer.objects.iter().flat_map(|(_, o)| o.fill)) 491 - .filter(|fill| matches!(fill, Fill::Hatched(..))) 489 + .filter(|fill| matches!(fill, Fill::Hatched(..) | Fill::Dotted(..))) 492 490 .unique_by(|fill| fill.pattern_id()) 493 491 .collect() 494 492 }
+14 -7
src/examples.rs
··· 59 59 60 60 hatches_layer.add_object( 61 61 point, 62 - if rand::thread_rng().gen_bool(0.5) { 62 + if rand::thread_rng().gen_bool(0.5) || point == red_circle_at { 63 63 Object::BigCircle(point) 64 64 } else { 65 65 Object::Rectangle(point, point) 66 66 } 67 - .color(Fill::Hatched( 68 - Color::White, 69 - Angle(rand::thread_rng().gen_range(0.0..360.0)), 70 - (i + 5) as f32 / 10.0, 71 - 0.25, 72 - )), 67 + .color( 68 + // Fill::Dotted(Color::White, (i + 8) as f32 / 10.0, (i + 3) as f32 / 10.0), 69 + if point == red_circle_at { 70 + Fill::Dotted(Color::White, 3.0, 2.0) 71 + } else { 72 + Fill::Hatched( 73 + Color::White, 74 + Angle(rand::thread_rng().gen_range(0.0..360.0)), 75 + (i + 5) as f32 / 10.0, 76 + 0.25, 77 + ) 78 + }, 79 + ), 73 80 ); 74 81 } 75 82
+24 -4
src/fill.rs
··· 43 43 Solid(Color), 44 44 Translucent(Color, f32), 45 45 Hatched(Color, Angle, f32, f32), 46 - Dotted(Color, f32), 46 + Dotted(Color, f32, f32), 47 47 } 48 48 49 49 // Operations that can be applied on fills. ··· 86 86 Fill::Translucent(color, opacity) => { 87 87 format!("fill: {}; opacity: {};", color.render(colormap), opacity) 88 88 } 89 - Fill::Dotted(..) => unimplemented!(), 90 - Fill::Hatched(..) => { 89 + Fill::Dotted(..) | Fill::Hatched(..) => { 91 90 format!("fill: url(#{});", self.pattern_id()) 92 91 } 93 92 } ··· 115 114 pub fn pattern_id(&self) -> String { 116 115 if let Fill::Hatched(color, angle, thickness, spacing) = self { 117 116 return format!( 118 - "pattern-{}-{}-{}-{}", 117 + "pattern-hatched-{}-{}-{}-{}", 119 118 angle, 120 119 color.name(), 121 120 thickness, 122 121 spacing 123 122 ); 124 123 } 124 + if let Fill::Dotted(color, diameter, spacing) = self { 125 + return format!("pattern-dotted-{}-{}-{}", color.name(), diameter, spacing); 126 + } 125 127 String::from("") 126 128 } 127 129 ··· 166 168 size, 167 169 ), 168 170 ) 171 + .set("fill", color.render(colormapping)), 172 + ); 173 + 174 + Some(pattern) 175 + } 176 + Fill::Dotted(color, diameter, spacing) => { 177 + let box_size = diameter + 2.0 * spacing; 178 + let pattern = svg::node::element::Pattern::new() 179 + .set("id", self.pattern_id()) 180 + .set("patternUnits", "userSpaceOnUse") 181 + .set("height", box_size) 182 + .set("width", box_size) 183 + .set("viewBox", format!("0,0,{},{}", box_size, box_size)) 184 + .add( 185 + svg::node::element::Circle::new() 186 + .set("cx", box_size / 2.0) 187 + .set("cy", box_size / 2.0) 188 + .set("r", diameter / 2.0) 169 189 .set("fill", color.render(colormapping)), 170 190 ); 171 191
+1 -24
src/main.rs
··· 15 15 pub fn run(args: cli::Args) -> Result<()> { 16 16 let mut canvas = canvas_from_cli(&args); 17 17 18 - let qrname = env::var("QRCODE_NAME").unwrap(); 19 - 20 18 if args.cmd_image && !args.cmd_video { 21 - canvas.set_grid_size(3, 3); 22 - canvas.add_or_replace_layer(canvas.random_layer("root")); 23 - canvas.new_layer("qr"); 24 - let qrcode = Object::Image( 25 - vec![ 26 - canvas.world_region.topleft(), 27 - canvas.world_region.topright(), 28 - canvas.world_region.bottomright(), 29 - canvas.world_region.bottomleft(), 30 - ][rand::thread_rng().gen_range(0..4)] 31 - .region(), 32 - format!("./{qrname}-qr.png"), 33 - ); 34 - canvas.root().remove_all_objects_in(&qrcode.region()); 35 - canvas.set_background(Color::White); 36 - canvas.add_object("qr", "qr", qrcode, None).unwrap(); 37 - canvas.put_layer_on_top("qr"); 38 - canvas.root().objects.values_mut().for_each(|o| { 39 - if !o.object.fillable() { 40 - o.fill = Some(Fill::Solid(Color::Black)); 41 - } 42 - }); 19 + canvas = examples::title(); 43 20 44 21 let rendered = canvas.render(true)?; 45 22 if args.arg_file.ends_with(".svg") {
+11 -2
src/objects.rs
··· 1 - use std::{cell, collections::HashMap}; 2 - 3 1 use crate::{ColorMapping, Fill, Filter, Point, Region, Transformation}; 4 2 use itertools::Itertools; 5 3 use wasm_bindgen::prelude::*; ··· 36 34 pub fn filter(self, filter: Filter) -> ColoredObject { 37 35 ColoredObject::from((self, None)).filter(filter) 38 36 } 37 + 38 + pub fn transform(self, transformation: Transformation) -> ColoredObject { 39 + ColoredObject::from((self, None)).transform(transformation) 40 + } 39 41 } 40 42 41 43 #[derive(Debug, Clone)] ··· 52 54 self 53 55 } 54 56 57 + pub fn transform(mut self, transformation: Transformation) -> Self { 58 + self.transformations.push(transformation); 59 + self 60 + } 61 + 55 62 pub fn clear_filters(&mut self) { 56 63 self.filters.clear(); 57 64 } ··· 77 84 if !matches!(self.object, Object::RawSVG(..)) { 78 85 css = self.fill.render_css(colormap, !self.object.fillable()); 79 86 } 87 + 88 + css += "transform-box: fill-box;"; 80 89 81 90 css += self 82 91 .filters
-5
src/web.rs
··· 14 14 WEB_CANVAS.lock().unwrap() 15 15 } 16 16 17 - #[wasm_bindgen(start)] 18 - pub fn js_init() -> Result<(), JsValue> { 19 - render_image(0.0, Color::Black)?; 20 - Ok(()) 21 - } 22 17 23 18 // Can't bind Color.name directly, see https://github.com/rustwasm/wasm-bindgen/issues/1715 24 19 #[wasm_bindgen]
-13
street.fish
··· 1 - while true 2 - set id (nanoid -s 10) 3 - qrencode "https://shapemaker.ewen.works/found/$id" -o street/$id-qr.png 4 - QRCODE_NAME=street/$id just example-image out.svg "--objects-count 5..15" 5 - if test (read || echo "n") = "y" 6 - cp out.svg street/$id.svg 7 - resvg --width 2000 out.svg street/$id.png 8 - echo resvg --width 2000 street/$id.svg street/$id.png 9 - echo saved street/$id.svg \| street/$id.png 10 - else 11 - rm street/$id-qr.png 12 - end 13 - end