<svg id="mainSVG" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800">
<defs>
	<g id="dotContainer" >
   <circle cx="221.41" cy="467.38" r="4"/>
  <circle cx="233.34" cy="467.38" r="4"/>
  <circle cx="245.26" cy="467.38" r="4"/>
  <circle cx="245.26" cy="455.45" r="4"/>
  <circle cx="257.19" cy="467.38" r="4"/>
  <circle cx="257.19" cy="455.45" r="4"/>
  <circle cx="257.19" cy="443.53" r="4"/>
  <circle cx="257.19" cy="383.9" r="4"/>
  <circle cx="269.11" cy="467.38" r="4"/>
  <circle cx="269.11" cy="455.45" r="4"/>
  <circle cx="269.11" cy="443.53" r="4"/>
  <circle cx="269.11" cy="383.9" r="4"/>
  <circle cx="269.11" cy="371.98" r="4"/>
  <circle cx="281.04" cy="467.38" r="4"/>
  <circle cx="281.04" cy="455.45" r="4"/>
  <circle cx="281.04" cy="443.53" r="4"/>
  <circle cx="281.04" cy="431.6" r="4"/>
  <circle cx="281.04" cy="383.9" r="4"/>
  <circle cx="281.04" cy="371.98" r="4"/>
  <circle cx="281.04" cy="360.05" r="4"/>
  <circle cx="292.96" cy="467.38" r="4"/>
  <circle cx="292.96" cy="455.45" r="4"/>
  <circle cx="292.96" cy="443.53" r="4"/>
  <circle cx="292.96" cy="431.6" r="4"/>
  <circle cx="292.96" cy="419.68" r="4"/>
  <circle cx="292.96" cy="383.9" r="4"/>
  <circle cx="292.96" cy="371.98" r="4"/>
  <circle cx="292.96" cy="360.05" r="4"/>
  <circle cx="292.96" cy="348.13" r="4"/>
  <circle cx="304.89" cy="467.38" r="4"/>
  <circle cx="304.89" cy="455.45" r="4"/>
  <circle cx="304.89" cy="443.53" r="4"/>
  <circle cx="304.89" cy="431.6" r="4"/>
  <circle cx="304.89" cy="419.68" r="4"/>
  <circle cx="304.89" cy="407.75" r="4"/>
  <circle cx="304.89" cy="371.98" r="4"/>
  <circle cx="304.89" cy="360.05" r="4"/>
  <circle cx="304.89" cy="348.13" r="4"/>
  <circle cx="304.89" cy="336.2" r="4"/>
  <circle cx="304.89" cy="288.5" r="4"/>
  <circle cx="316.81" cy="467.38" r="4"/>
  <circle cx="316.81" cy="455.45" r="4"/>
  <circle cx="316.81" cy="443.53" r="4"/>
  <circle cx="316.81" cy="431.6" r="4"/>
  <circle cx="316.81" cy="419.68" r="4"/>
  <circle cx="316.81" cy="407.75" r="4"/>
  <circle cx="316.81" cy="395.83" r="4"/>
  <circle cx="316.81" cy="371.98" r="4"/>
  <circle cx="316.81" cy="360.05" r="4"/>
  <circle cx="316.81" cy="348.13" r="4"/>
  <circle cx="316.81" cy="336.2" r="4"/>
  <circle cx="316.81" cy="324.28" r="4"/>
  <circle cx="316.81" cy="288.5" r="4"/>
  <circle cx="316.81" cy="276.58" r="4"/>
  <circle cx="316.81" cy="264.65" r="4"/>
  <circle cx="328.74" cy="467.38" r="4"/>
  <circle cx="328.74" cy="455.45" r="4"/>
  <circle cx="328.74" cy="443.53" r="4"/>
  <circle cx="328.74" cy="431.6" r="4"/>
  <circle cx="328.74" cy="419.68" r="4"/>
  <circle cx="328.74" cy="407.75" r="4"/>
  <circle cx="328.74" cy="395.83" r="4"/>
  <circle cx="328.74" cy="383.9" r="4"/>
  <circle cx="328.74" cy="371.98" r="4"/>
  <circle cx="328.74" cy="360.05" r="4"/>
  <circle cx="328.74" cy="348.13" r="4"/>
  <circle cx="328.74" cy="336.2" r="4"/>
  <circle cx="328.74" cy="324.28" r="4"/>
  <circle cx="328.74" cy="312.35" r="4"/>
  <circle cx="328.74" cy="276.58" r="4"/>
  <circle cx="328.74" cy="264.65" r="4"/>
  <circle cx="328.74" cy="252.73" r="4"/>
  <circle cx="340.66" cy="467.38" r="4"/>
  <circle cx="340.66" cy="455.45" r="4"/>
  <circle cx="340.66" cy="443.53" r="4"/>
  <circle cx="340.66" cy="431.6" r="4"/>
  <circle cx="340.66" cy="419.68" r="4"/>
  <circle cx="340.66" cy="407.75" r="4"/>
  <circle cx="340.66" cy="395.83" r="4"/>
  <circle cx="340.66" cy="383.9" r="4"/>
  <circle cx="340.66" cy="371.98" r="4"/>
  <circle cx="340.66" cy="360.05" r="4"/>
  <circle cx="340.66" cy="348.13" r="4"/>
  <circle cx="340.66" cy="336.2" r="4"/>
  <circle cx="340.66" cy="324.28" r="4"/>
  <circle cx="340.66" cy="312.35" r="4"/>
  <circle cx="340.66" cy="300.43" r="4"/>
  <circle cx="340.66" cy="276.58" r="4"/>
  <circle cx="340.66" cy="264.65" r="4"/>
  <circle cx="340.66" cy="252.73" r="4"/>
  <circle cx="340.66" cy="240.8" r="4"/>
  <circle cx="340.66" cy="205.03" r="4"/>
  <circle cx="340.66" cy="193.1" r="4"/>
  <circle cx="352.59" cy="467.38" r="4"/>
  <circle cx="352.59" cy="455.45" r="4"/>
  <circle cx="352.59" cy="443.53" r="4"/>
  <circle cx="352.59" cy="431.6" r="4"/>
  <circle cx="352.59" cy="419.68" r="4"/>
  <circle cx="352.59" cy="407.75" r="4"/>
  <circle cx="352.59" cy="395.83" r="4"/>
  <circle cx="352.59" cy="383.9" r="4"/>
  <circle cx="352.59" cy="371.98" r="4"/>
  <circle cx="352.59" cy="360.05" r="4"/>
  <circle cx="352.59" cy="348.13" r="4"/>
  <circle cx="352.59" cy="336.2" r="4"/>
  <circle cx="352.59" cy="324.28" r="4"/>
  <circle cx="352.59" cy="312.35" r="4"/>
  <circle cx="352.59" cy="300.43" r="4"/>
  <circle cx="352.59" cy="288.5" r="4"/>
  <circle cx="352.59" cy="276.58" r="4"/>
  <circle cx="352.59" cy="264.65" r="4"/>
  <circle cx="352.59" cy="252.73" r="4"/>
  <circle cx="352.59" cy="240.8" r="4"/>
  <circle cx="352.59" cy="228.88" r="4"/>
  <circle cx="352.59" cy="193.1" r="4"/>
  <circle cx="352.59" cy="181.18" r="4"/>
  <circle cx="352.59" cy="169.25" r="4"/>
  <circle cx="364.51" cy="467.38" r="4"/>
  <circle cx="364.51" cy="455.45" r="4"/>
  <circle cx="364.51" cy="443.53" r="4"/>
  <circle cx="364.51" cy="431.6" r="4"/>
  <circle cx="364.51" cy="419.68" r="4"/>
  <circle cx="364.51" cy="407.75" r="4"/>
  <circle cx="364.51" cy="395.83" r="4"/>
  <circle cx="364.51" cy="383.9" r="4"/>
  <circle cx="364.51" cy="371.98" r="4"/>
  <circle cx="364.51" cy="360.05" r="4"/>
  <circle cx="364.51" cy="348.13" r="4"/>
  <circle cx="364.51" cy="336.2" r="4"/>
  <circle cx="364.51" cy="324.28" r="4"/>
  <circle cx="364.51" cy="312.35" r="4"/>
  <circle cx="364.51" cy="300.43" r="4"/>
  <circle cx="364.51" cy="288.5" r="4"/>
  <circle cx="364.51" cy="276.58" r="4"/>
  <circle cx="364.51" cy="264.65" r="4"/>
  <circle cx="364.51" cy="252.73" r="4"/>
  <circle cx="364.51" cy="240.8" r="4"/>
  <circle cx="364.51" cy="228.88" r="4"/>
  <circle cx="364.51" cy="216.95" r="4"/>
  <circle cx="364.51" cy="205.03" r="4"/>
  <circle cx="364.51" cy="193.1" r="4"/>
  <circle cx="364.51" cy="181.18" r="4"/>
  <circle cx="364.51" cy="169.25" r="4"/>
  <circle cx="364.51" cy="157.33" r="4"/>
  <circle cx="376.44" cy="455.45" r="4"/>
  <circle cx="376.44" cy="443.53" r="4"/>
  <circle cx="376.44" cy="431.6" r="4"/>
  <circle cx="376.44" cy="419.68" r="4"/>
  <circle cx="376.44" cy="407.75" r="4"/>
  <circle cx="376.44" cy="395.83" r="4"/>
  <circle cx="376.44" cy="383.9" r="4"/>
  <circle cx="376.44" cy="371.98" r="4"/>
  <circle cx="376.44" cy="360.05" r="4"/>
  <circle cx="376.44" cy="348.13" r="4"/>
  <circle cx="376.44" cy="336.2" r="4"/>
  <circle cx="376.44" cy="324.28" r="4"/>
  <circle cx="376.44" cy="312.35" r="4"/>
  <circle cx="376.44" cy="300.43" r="4"/>
  <circle cx="376.44" cy="288.5" r="4"/>
  <circle cx="376.44" cy="276.58" r="4"/>
  <circle cx="376.44" cy="264.65" r="4"/>
  <circle cx="376.44" cy="252.73" r="4"/>
  <circle cx="376.44" cy="240.8" r="4"/>
  <circle cx="376.44" cy="228.88" r="4"/>
  <circle cx="376.44" cy="216.95" r="4"/>
  <circle cx="376.44" cy="205.03" r="4"/>
  <circle cx="376.44" cy="193.1" r="4"/>
  <circle cx="376.44" cy="181.18" r="4"/>
  <circle cx="376.44" cy="169.25" r="4"/>
  <circle cx="376.44" cy="157.33" r="4"/>
  <circle cx="376.44" cy="145.4" r="4"/>
  <circle cx="376.44" cy="133.48" r="4"/>
  <circle cx="388.36" cy="527" r="4"/>
  <circle cx="388.36" cy="515.08" r="4"/>
  <circle cx="388.36" cy="503.15" r="4"/>
  <circle cx="388.36" cy="491.23" r="4"/>
  <circle cx="388.36" cy="479.3" r="4"/>
  <circle cx="388.36" cy="467.38" r="4"/>
  <circle cx="388.36" cy="455.45" r="4"/>
  <circle cx="388.36" cy="443.53" r="4"/>
  <circle cx="388.36" cy="431.6" r="4"/>
  <circle cx="388.36" cy="419.68" r="4"/>
  <circle cx="388.36" cy="407.75" r="4"/>
  <circle cx="388.36" cy="395.83" r="4"/>
  <circle cx="388.36" cy="383.9" r="4"/>
  <circle cx="388.36" cy="371.98" r="4"/>
  <circle cx="388.36" cy="360.05" r="4"/>
  <circle cx="388.36" cy="348.13" r="4"/>
  <circle cx="388.36" cy="336.2" r="4"/>
  <circle cx="388.36" cy="324.28" r="4"/>
  <circle cx="388.36" cy="312.35" r="4"/>
  <circle cx="388.36" cy="300.43" r="4"/>
  <circle cx="388.36" cy="288.5" r="4"/>
  <circle cx="388.36" cy="276.58" r="4"/>
  <circle cx="388.36" cy="264.65" r="4"/>
  <circle cx="388.36" cy="252.73" r="4"/>
  <circle cx="388.36" cy="240.8" r="4"/>
  <circle cx="388.36" cy="228.88" r="4"/>
  <circle cx="388.36" cy="216.95" r="4"/>
  <circle cx="388.36" cy="205.03" r="4"/>
  <circle cx="388.36" cy="193.1" r="4"/>
  <circle cx="388.36" cy="181.18" r="4"/>
  <circle cx="388.36" cy="169.25" r="4"/>
  <circle cx="388.36" cy="157.33" r="4"/>
  <circle cx="388.36" cy="145.4" r="4"/>
  <circle cx="388.36" cy="133.48" r="4"/>
  <circle cx="388.36" cy="121.55" r="4"/>
  <circle cx="388.36" cy="109.63" r="4"/>
  <circle cx="400.29" cy="527" r="4"/>
  <circle cx="400.29" cy="515.08" r="4"/>
  <circle cx="400.29" cy="503.15" r="4"/>
  <circle cx="400.29" cy="491.23" r="4"/>
  <circle cx="400.29" cy="479.3" r="4"/>
  <circle cx="400.29" cy="467.38" r="4"/>
  <circle cx="400.29" cy="455.45" r="4"/>
  <circle cx="400.29" cy="443.53" r="4"/>
  <circle cx="400.29" cy="431.6" r="4"/>
  <circle cx="400.29" cy="419.68" r="4"/>
  <circle cx="400.29" cy="407.75" r="4"/>
  <circle cx="400.29" cy="395.83" r="4"/>
  <circle cx="400.29" cy="383.9" r="4"/>
  <circle cx="400.29" cy="371.98" r="4"/>
  <circle cx="400.29" cy="360.05" r="4"/>
  <circle cx="400.29" cy="348.13" r="4"/>
  <circle cx="400.29" cy="336.2" r="4"/>
  <circle cx="400.29" cy="324.28" r="4"/>
  <circle cx="400.29" cy="312.35" r="4"/>
  <circle cx="400.29" cy="300.43" r="4"/>
  <circle cx="400.29" cy="288.5" r="4"/>
  <circle cx="400.29" cy="276.58" r="4"/>
  <circle cx="400.29" cy="264.65" r="4"/>
  <circle cx="400.29" cy="252.73" r="4"/>
  <circle cx="400.29" cy="240.8" r="4"/>
  <circle cx="400.29" cy="228.88" r="4"/>
  <circle cx="400.29" cy="216.95" r="4"/>
  <circle cx="400.29" cy="205.03" r="4"/>
  <circle cx="400.29" cy="193.1" r="4"/>
  <circle cx="400.29" cy="181.18" r="4"/>
  <circle cx="400.29" cy="169.25" r="4"/>
  <circle cx="400.29" cy="157.33" r="4"/>
  <circle cx="400.29" cy="145.4" r="4"/>
  <circle cx="400.29" cy="133.48" r="4"/>
  <circle cx="400.29" cy="121.55" r="4"/>
  <circle cx="400.29" cy="109.63" r="4"/>
  <circle cx="400.29" cy="97.7" r="4"/>
  <circle cx="400.29" cy="85.78" r="4"/>
  <circle cx="400.29" cy="73.85" r="4"/>
  <circle cx="412.21" cy="527" r="4"/>
  <circle cx="412.21" cy="515.08" r="4"/>
  <circle cx="412.21" cy="503.15" r="4"/>
  <circle cx="412.21" cy="491.23" r="4"/>
  <circle cx="412.21" cy="479.3" r="4"/>
  <circle cx="412.21" cy="467.38" r="4"/>
  <circle cx="412.21" cy="455.45" r="4"/>
  <circle cx="412.21" cy="443.53" r="4"/>
  <circle cx="412.21" cy="431.6" r="4"/>
  <circle cx="412.21" cy="419.68" r="4"/>
  <circle cx="412.21" cy="407.75" r="4"/>
  <circle cx="412.21" cy="395.83" r="4"/>
  <circle cx="412.21" cy="383.9" r="4"/>
  <circle cx="412.21" cy="371.98" r="4"/>
  <circle cx="412.21" cy="360.05" r="4"/>
  <circle cx="412.21" cy="348.13" r="4"/>
  <circle cx="412.21" cy="336.2" r="4"/>
  <circle cx="412.21" cy="324.28" r="4"/>
  <circle cx="412.21" cy="312.35" r="4"/>
  <circle cx="412.21" cy="300.43" r="4"/>
  <circle cx="412.21" cy="288.5" r="4"/>
  <circle cx="412.21" cy="276.58" r="4"/>
  <circle cx="412.21" cy="264.65" r="4"/>
  <circle cx="412.21" cy="252.73" r="4"/>
  <circle cx="412.21" cy="240.8" r="4"/>
  <circle cx="412.21" cy="228.88" r="4"/>
  <circle cx="412.21" cy="216.95" r="4"/>
  <circle cx="412.21" cy="205.03" r="4"/>
  <circle cx="412.21" cy="193.1" r="4"/>
  <circle cx="412.21" cy="181.18" r="4"/>
  <circle cx="412.21" cy="169.25" r="4"/>
  <circle cx="412.21" cy="157.33" r="4"/>
  <circle cx="412.21" cy="145.4" r="4"/>
  <circle cx="412.21" cy="133.48" r="4"/>
  <circle cx="412.21" cy="121.55" r="4"/>
  <circle cx="412.21" cy="109.63" r="4"/>
  <circle cx="412.21" cy="97.7" r="4"/>
  <circle cx="412.21" cy="85.78" r="4"/>
  <circle cx="424.14" cy="527" r="4"/>
  <circle cx="424.14" cy="515.08" r="4"/>
  <circle cx="424.14" cy="503.15" r="4"/>
  <circle cx="424.14" cy="491.23" r="4"/>
  <circle cx="424.14" cy="479.3" r="4"/>
  <circle cx="424.14" cy="467.38" r="4"/>
  <circle cx="424.14" cy="455.45" r="4"/>
  <circle cx="424.14" cy="443.53" r="4"/>
  <circle cx="424.14" cy="431.6" r="4"/>
  <circle cx="424.14" cy="419.68" r="4"/>
  <circle cx="424.14" cy="407.75" r="4"/>
  <circle cx="424.14" cy="395.83" r="4"/>
  <circle cx="424.14" cy="383.9" r="4"/>
  <circle cx="424.14" cy="371.98" r="4"/>
  <circle cx="424.14" cy="360.05" r="4"/>
  <circle cx="424.14" cy="348.13" r="4"/>
  <circle cx="424.14" cy="336.2" r="4"/>
  <circle cx="424.14" cy="324.28" r="4"/>
  <circle cx="424.14" cy="312.35" r="4"/>
  <circle cx="424.14" cy="300.43" r="4"/>
  <circle cx="424.14" cy="288.5" r="4"/>
  <circle cx="424.14" cy="276.58" r="4"/>
  <circle cx="424.14" cy="264.65" r="4"/>
  <circle cx="424.14" cy="252.73" r="4"/>
  <circle cx="424.14" cy="240.8" r="4"/>
  <circle cx="424.14" cy="228.88" r="4"/>
  <circle cx="424.14" cy="216.95" r="4"/>
  <circle cx="424.14" cy="205.03" r="4"/>
  <circle cx="424.14" cy="193.1" r="4"/>
  <circle cx="424.14" cy="181.18" r="4"/>
  <circle cx="424.14" cy="169.25" r="4"/>
  <circle cx="424.14" cy="157.33" r="4"/>
  <circle cx="424.14" cy="145.4" r="4"/>
  <circle cx="424.14" cy="133.48" r="4"/>
  <circle cx="424.14" cy="121.55" r="4"/>
  <circle cx="424.14" cy="109.63" r="4"/>
  <circle cx="436.06" cy="455.45" r="4"/>
  <circle cx="436.06" cy="443.53" r="4"/>
  <circle cx="436.06" cy="431.6" r="4"/>
  <circle cx="436.06" cy="419.68" r="4"/>
  <circle cx="436.06" cy="407.75" r="4"/>
  <circle cx="436.06" cy="395.83" r="4"/>
  <circle cx="436.06" cy="383.9" r="4"/>
  <circle cx="436.06" cy="371.98" r="4"/>
  <circle cx="436.06" cy="360.05" r="4"/>
  <circle cx="436.06" cy="348.13" r="4"/>
  <circle cx="436.06" cy="336.2" r="4"/>
  <circle cx="436.06" cy="324.28" r="4"/>
  <circle cx="436.06" cy="312.35" r="4"/>
  <circle cx="436.06" cy="300.43" r="4"/>
  <circle cx="436.06" cy="288.5" r="4"/>
  <circle cx="436.06" cy="276.58" r="4"/>
  <circle cx="436.06" cy="264.65" r="4"/>
  <circle cx="436.06" cy="252.73" r="4"/>
  <circle cx="436.06" cy="240.8" r="4"/>
  <circle cx="436.06" cy="228.88" r="4"/>
  <circle cx="436.06" cy="216.95" r="4"/>
  <circle cx="436.06" cy="205.03" r="4"/>
  <circle cx="436.06" cy="193.1" r="4"/>
  <circle cx="436.06" cy="181.18" r="4"/>
  <circle cx="436.06" cy="169.25" r="4"/>
  <circle cx="436.06" cy="157.33" r="4"/>
  <circle cx="436.06" cy="145.4" r="4"/>
  <circle cx="436.06" cy="133.48" r="4"/>
  <circle cx="447.99" cy="467.38" r="4"/>
  <circle cx="447.99" cy="455.45" r="4"/>
  <circle cx="447.99" cy="443.53" r="4"/>
  <circle cx="447.99" cy="431.6" r="4"/>
  <circle cx="447.99" cy="419.68" r="4"/>
  <circle cx="447.99" cy="407.75" r="4"/>
  <circle cx="447.99" cy="395.83" r="4"/>
  <circle cx="447.99" cy="383.9" r="4"/>
  <circle cx="447.99" cy="371.98" r="4"/>
  <circle cx="447.99" cy="360.05" r="4"/>
  <circle cx="447.99" cy="348.13" r="4"/>
  <circle cx="447.99" cy="336.2" r="4"/>
  <circle cx="447.99" cy="324.28" r="4"/>
  <circle cx="447.99" cy="312.35" r="4"/>
  <circle cx="447.99" cy="300.43" r="4"/>
  <circle cx="447.99" cy="288.5" r="4"/>
  <circle cx="447.99" cy="276.58" r="4"/>
  <circle cx="447.99" cy="264.65" r="4"/>
  <circle cx="447.99" cy="252.73" r="4"/>
  <circle cx="447.99" cy="240.8" r="4"/>
  <circle cx="447.99" cy="228.88" r="4"/>
  <circle cx="447.99" cy="216.95" r="4"/>
  <circle cx="447.99" cy="193.1" r="4"/>
  <circle cx="447.99" cy="181.18" r="4"/>
  <circle cx="447.99" cy="169.25" r="4"/>
  <circle cx="447.99" cy="157.33" r="4"/>
  <circle cx="459.91" cy="467.38" r="4"/>
  <circle cx="459.91" cy="455.45" r="4"/>
  <circle cx="459.91" cy="443.53" r="4"/>
  <circle cx="459.91" cy="431.6" r="4"/>
  <circle cx="459.91" cy="419.68" r="4"/>
  <circle cx="459.91" cy="407.75" r="4"/>
  <circle cx="459.91" cy="395.83" r="4"/>
  <circle cx="459.91" cy="383.9" r="4"/>
  <circle cx="459.91" cy="371.98" r="4"/>
  <circle cx="459.91" cy="360.05" r="4"/>
  <circle cx="459.91" cy="348.13" r="4"/>
  <circle cx="459.91" cy="336.2" r="4"/>
  <circle cx="459.91" cy="324.28" r="4"/>
  <circle cx="459.91" cy="312.35" r="4"/>
  <circle cx="459.91" cy="300.43" r="4"/>
  <circle cx="459.91" cy="288.5" r="4"/>
  <circle cx="459.91" cy="276.58" r="4"/>
  <circle cx="459.91" cy="264.65" r="4"/>
  <circle cx="459.91" cy="252.73" r="4"/>
  <circle cx="459.91" cy="240.8" r="4"/>
  <circle cx="459.91" cy="228.88" r="4"/>
  <circle cx="459.91" cy="193.1" r="4"/>
  <circle cx="459.91" cy="181.18" r="4"/>
  <circle cx="471.84" cy="467.38" r="4"/>
  <circle cx="471.84" cy="455.45" r="4"/>
  <circle cx="471.84" cy="443.53" r="4"/>
  <circle cx="471.84" cy="431.6" r="4"/>
  <circle cx="471.84" cy="419.68" r="4"/>
  <circle cx="471.84" cy="407.75" r="4"/>
  <circle cx="471.84" cy="395.83" r="4"/>
  <circle cx="471.84" cy="383.9" r="4"/>
  <circle cx="471.84" cy="371.98" r="4"/>
  <circle cx="471.84" cy="360.05" r="4"/>
  <circle cx="471.84" cy="348.13" r="4"/>
  <circle cx="471.84" cy="336.2" r="4"/>
  <circle cx="471.84" cy="324.28" r="4"/>
  <circle cx="471.84" cy="312.35" r="4"/>
  <circle cx="471.84" cy="300.43" r="4"/>
  <circle cx="471.84" cy="276.58" r="4"/>
  <circle cx="471.84" cy="264.65" r="4"/>
  <circle cx="471.84" cy="252.73" r="4"/>
  <circle cx="471.84" cy="240.8" r="4"/>
  <circle cx="471.84" cy="205.03" r="4"/>
  <circle cx="483.76" cy="467.38" r="4"/>
  <circle cx="483.76" cy="455.45" r="4"/>
  <circle cx="483.76" cy="443.53" r="4"/>
  <circle cx="483.76" cy="431.6" r="4"/>
  <circle cx="483.76" cy="419.68" r="4"/>
  <circle cx="483.76" cy="407.75" r="4"/>
  <circle cx="483.76" cy="395.83" r="4"/>
  <circle cx="483.76" cy="383.9" r="4"/>
  <circle cx="483.76" cy="371.98" r="4"/>
  <circle cx="483.76" cy="360.05" r="4"/>
  <circle cx="483.76" cy="348.13" r="4"/>
  <circle cx="483.76" cy="336.2" r="4"/>
  <circle cx="483.76" cy="324.28" r="4"/>
  <circle cx="483.76" cy="312.35" r="4"/>
  <circle cx="483.76" cy="276.58" r="4"/>
  <circle cx="483.76" cy="264.65" r="4"/>
  <circle cx="495.69" cy="467.38" r="4"/>
  <circle cx="495.69" cy="455.45" r="4"/>
  <circle cx="495.69" cy="443.53" r="4"/>
  <circle cx="495.69" cy="431.6" r="4"/>
  <circle cx="495.69" cy="419.68" r="4"/>
  <circle cx="495.69" cy="407.75" r="4"/>
  <circle cx="495.69" cy="395.83" r="4"/>
  <circle cx="495.69" cy="371.98" r="4"/>
  <circle cx="495.69" cy="360.05" r="4"/>
  <circle cx="495.69" cy="348.13" r="4"/>
  <circle cx="495.69" cy="336.2" r="4"/>
  <circle cx="495.69" cy="288.5" r="4"/>
  <circle cx="495.69" cy="276.58" r="4"/>
  <circle cx="507.61" cy="467.38" r="4"/>
  <circle cx="507.61" cy="455.45" r="4"/>
  <circle cx="507.61" cy="443.53" r="4"/>
  <circle cx="507.61" cy="431.6" r="4"/>
  <circle cx="507.61" cy="419.68" r="4"/>
  <circle cx="507.61" cy="407.75" r="4"/>
  <circle cx="507.61" cy="371.98" r="4"/>
  <circle cx="507.61" cy="360.05" r="4"/>
  <circle cx="507.61" cy="348.13" r="4"/>
  <circle cx="507.61" cy="288.5" r="4"/>
  <circle cx="519.54" cy="467.38" r="4"/>
  <circle cx="519.54" cy="455.45" r="4"/>
  <circle cx="519.54" cy="443.53" r="4"/>
  <circle cx="519.54" cy="431.6" r="4"/>
  <circle cx="519.54" cy="419.68" r="4"/>
  <circle cx="519.54" cy="383.9" r="4"/>
  <circle cx="519.54" cy="371.98" r="4"/>
  <circle cx="519.54" cy="360.05" r="4"/>
  <circle cx="531.46" cy="467.38" r="4"/>
  <circle cx="531.46" cy="455.45" r="4"/>
  <circle cx="531.46" cy="443.53" r="4"/>
  <circle cx="531.46" cy="431.6" r="4"/>
  <circle cx="531.46" cy="383.9" r="4"/>
  <circle cx="531.46" cy="371.98" r="4"/>
  <circle cx="543.38" cy="467.38" r="4"/>
  <circle cx="543.38" cy="455.45" r="4"/>
  <circle cx="543.38" cy="443.53" r="4"/>
  <circle cx="543.38" cy="383.9" r="4"/>
  <circle cx="555.31" cy="467.38" r="4"/>
  <circle cx="555.31" cy="455.45" r="4"/>
  <circle cx="567.23" cy="467.38" r="4"/>
  <circle cx="567.23" cy="455.45" r="4"/>
  <circle cx="579.16" cy="467.38" r="4"/>
  <circle cx="412.21" cy="73.85" r="4"/>
		</g>	
	<circle class="dot" cx="0" cy="0" r="2" fill="#696969"/>
</defs>
  <g id="f"></g>
	<g id="whole" opacity="0.1">
	<g id="lineContainer" />
	<g id="container" />
  <path id="star" d="M406.76,14.71l6.15,16.72c.11.31.4.52.73.53l17.81.68c.76.03,1.07.98.47,1.45l-14.01,11.01c-.26.2-.37.54-.28.86l4.86,17.14c.21.73-.61,1.32-1.24.9l-14.8-9.92c-.27-.18-.63-.18-.91,0l-14.8,9.92c-.63.42-1.44-.17-1.24-.9l4.86-17.14c.09-.32-.02-.66-.28-.86l-14.01-11.01c-.6-.47-.28-1.42.47-1.45l17.81-.68c.33-.01.62-.22.73-.53l6.15-16.72c.26-.71,1.27-.71,1.53,0Z" fill="#ff9f1c" stroke-width="0"/>	
		</g>
		<text id="m1" x="50%" y="670">MERRY CHRISTMAS!</text>
  <text id="introText" id="m2" x="50%" y="640"><tspan id="subm1" dx="0" dy="-230"></tspan><tspan id="subm2" dx="-390" dy="80"></tspan></text>
</svg>
@font-face {font-family: "Irregardless"; src: url("https://assets.codepen.io/35984/51550-webfont.woff2") format("woff2")}

body {
 background-color: #E8DDC5;
 overflow: hidden;
 text-align:center;
  display: flex;
  align-items: center;
  justify-content: center; 
}

body,
html {
 height: 100%;
 width: 100%;
 margin: 0;
 padding: 0;
}

svg {
 width: 100%;
 height: 100%;
 visibility: hidden;
	overflow: visible;
 
}

line {
	/* stroke: red; */
	stroke-width: 2px;
 }
text{
	user-select: none;
  pointer-events: none;
	text-anchor: middle;
	font-size: 5em;
	font-family: 'Irregardless'
}
#m1 {
  
	font-size: 6em;
}
gsap.config({trialWarn: false});
let select = s => document.querySelector(s),
		toArray = s => gsap.utils.toArray(s),
		mainSVG = select('#mainSVG'),
		xmlns = "http://www.w3.org/2000/svg",
		dotArr = toArray('#dotContainer circle'),
		cloneArr = [],
		num = dotArr.length,
		dot = select('.dot'),
		dotContainer = select('#dotContainer'),
		container = select('#container'),
		lineContainer = select('#lineContainer'),
		pt = mainSVG.createSVGPoint(),
		mousePos = {x: 0, y: 0},
		lineArr = [],
		colorArray = ["d6140a","ffb301","082970","fa7204","e33189","ffb501","a49e3b","3d2c74","ce1918","1c9ba2"],
		visibleArea = {
			value: 141,
      offset: 100
		},
		currColor = null,
		baublePosArray = [25, 56, 107, 164, 318, 365, 258, 419, 443],
		defaultColor = "",
		completedArray = [],
		baubleRadius = 14,
		bigBaubleArray = [],
		baubleArray = [],
		woodColor = '#A63C06',
		treeColor = '#0F7173',
    subm1Str = 'MOVE YOUR MOUSE TO FILL',
    subm2Str = 'THE TREE WITH COLOUR!',
		followerVX = 0,
		followerVY = 0
    

colorArray = colorArray.map(x => Array.from(x)[0] == '#' ? x : `#${x}`);


gsap.set('svg', {
	visibility: 'visible'
})

gsap.set('#star', {
	scale: 0,
	rotation: 90,
	transformOrigin: '50% 50%'
})

gsap.set('#whole', {
	y: `+=${visibleArea.offset}`,
	transformOrigin: '50% 50%'
})
gsap.set('#m1', {
	y: `-=${visibleArea.offset}`,
	opacity: 0,
  fill: colorArray[8],
	transformOrigin: '50% 50%'
})

gsap.from('#introText', {
  opacity: 0,
  duration: 0.61,
  ease: 'power2.inOut'
})

function setIntroTextColor () {
  let subMessage1 = subm1Str.split('');
  let subMessage2 = subm2Str.split('');
  let newSubm1Str = '';
  let newSubm2Str = '';
  subMessage1.forEach((char, index) => {
    newSubm1Str+=`<tspan style="fill:${colorArray[index % colorArray.length]}">${char}</tspan>`
  })
  subMessage2.forEach((char, index) => {
    //console.log(char, index);
    newSubm2Str+=`<tspan style="fill:${colorArray[index % colorArray.length]}">${char}</tspan>`
  })
  select('#subm1').innerHTML = newSubm1Str;  
  select('#subm2').innerHTML = newSubm2Str;  
}

// Get point in global SVG space
function cursorPoint(evt){
  pt.x = evt.clientX; 
  pt.y = evt.clientY;
  return pt.matrixTransform(mainSVG.getScreenCTM().inverse());
}


function emptyLineContainer () {
	lineContainer.innerHTML  = "";
}

class Particle {
  constructor(x, y, shape, hasConnection, id, fill, newFill) {		
   	this.x = x;
   	this.y = y;
   	this.shape = shape;
   	this.initX = this.x;
   	this.initY = this.y;
		this.hasConnection = false;
		this.id = id;
		this.fill = fill;
		this.newFill = newFill;
	
    }
  
}
class Line {
  constructor(x1, y1, x2, y2, strokeColor, shape, parent) {		
   	this.x1 = x1;
   	this.y1 = y1;
   	this.x2 = x2;
   	this.y2 = y2;
   	this.strokeColor = strokeColor;
   	this.shape = shape;
   	this.parent = parent;

    }
  
}
let pipeOpacity = gsap.utils.pipe(
	gsap.utils.clamp(0, visibleArea.value),
	gsap.utils.mapRange(0, visibleArea.value, 0.1, 1)

)		
let pipeRadius = gsap.utils.pipe(
	gsap.utils.clamp(0, visibleArea.value),
	gsap.utils.mapRange(0, visibleArea.value, 4, 2)

)		

const checkColor = (id) => {
	if(id >=172 && id < 177 || id >=208 && id < 213 || id >=247 && id < 252 || id >=285 && id < 290) {
		return true
	}	
	return false;
}

const checkBaublePos = (clone, d) => {
	if (baublePosArray.indexOf(clone.id) > -1){
		container.appendChild(clone.shape)
		return baubleRadius;		
	}
	return pipeRadius(d);
}
function showStar(){
	let tl = gsap.timeline();
	tl.to('#star', {
		scale: 1,
		duration: 1,
		transformOrigin: '50% 50%',
		ease: 'elastic(0.5, 0.39)'
}).to('#star', {
		rotation: 0,
		transformOrigin: '50% 50%',
		ease: 'sine'
}, 0)
	
}

function endAnim(){
	gsap.to(lineContainer, {
		opacity: 0,
		onComplete: emptyLineContainer
	})
	
	let endTl = gsap.timeline({onComplete: showStar})
	cloneArr.forEach((clone, cloneCount) => {
		let bigBauble = null;
		let tl = gsap.timeline();
		tl.to(clone.shape, {
			x: clone.initX,
			y: clone.initY,
			duration: 1.2,
			fill: (c, item) => parseInt(item.getAttribute('r')) == baubleRadius ? clone.fill : checkColor(cloneCount) ? woodColor : treeColor,			
			ease: 'elastic(0.486,0.53)'
		}) 		
		endTl.add(tl, cloneCount / num)
 		
	})
	
	endTl.add('message')
		.to('#whole', {
		y: 40,
		duration: 1.6,
		ease: 'expo.inOut'
	}, 'message')
	.to('#m1', {
		y: `+=${visibleArea.offset}`,
		opacity: 1,
		duration: 1.6,
		ease: 'expo.inOut'
	}, 'message')
	gsap.fromTo(bigBaubleArray, {
		rotation:-12, 
		transformOrigin: '50% -0%',
	}, {
		duration: 0.61,
		rotation: 12,
		transformOrigin: '50% -0%',
		stagger: {
			each: 0.21,
			repeat: -1,
			yoyo: true,
			from: 'random'
		},
		ease: 'power1.inOut'
	})

}

for(let i = 0; i < num; i++) {
	let shape = dot.cloneNode(true);
	let clone = new Particle(
		parseInt(dotArr[i].getAttribute('cx')),
		parseInt(dotArr[i].getAttribute('cy')),
		shape,
		false,
		i
	);

	container.appendChild(clone.shape);
	gsap.set(clone.shape, {
		x: clone.x,
		y: clone.y
	})
	cloneArr.push(clone);
	baubleArray.push(clone.shape)
	
}

function checkDistance(a, b) {
	return Math.hypot(a.x - b.x, a.y - b.y) < visibleArea.value * 0.45 ? true : false;
}
function calc () {
	emptyLineContainer();
	let i = num;
	let curr = null;
	while(--i > -1) {

		currColor = colorArray[i % colorArray.length];
		curr = cloneArr[i];
		curr.fill = currColor;
		
    let deltaX = curr.x - mousePos.x;
    let deltaY = curr.y - mousePos.y;
    let angle = Math.atan2(deltaY, deltaX);
    let distance = visibleArea.value*2 / Math.sqrt(deltaX * deltaX + deltaY * deltaY);
  	curr.x += Math.cos(angle) * distance;
    curr.y += Math.sin(angle) * distance;
    curr.x += (curr.initX - curr.x) * 0.16;
    curr.y += (curr.initY - curr.y) * 0.16;
		
		gsap.set(curr.shape, {
			x: curr.x,
			y: curr.y
		})
		
		let d = Math.sqrt(Math.pow(((curr.x ) - mousePos.x),2) + Math.pow(((curr.y) - mousePos.y),2));
	if(checkDistance(curr, mousePos)) {
				let shape = document.createElementNS(xmlns, 'line');
				let strokeColor = currColor
				let line = new Line(curr.x, curr.y, mousePos.x, mousePos.y, strokeColor, shape, lineContainer);
				lineContainer.appendChild(shape);
				lineArr.push(line);
				
				gsap.set(line.shape, {
					attr: {
						x1: line.x1,
						y1: line.y1,
						x2: line.x2,
						y2: line.y2
					},
					stroke: strokeColor,
					opacity: pipeOpacity(d)
				})
				gsap.set(curr.shape, {
					//fill: checkColor(curr.id) ? woodColor : curr.fill,
					fill: curr.fill,
					attr:{
						r: checkBaublePos(curr, d)
					}
				})

				if(completedArray.length == cloneArr.length) {
					completedArray.length = [];
					mainSVG.onmousemove = null;
					gsap.ticker.remove(calc);
					endAnim();
				} else {
					if(!completedArray.includes(curr)) {

						completedArray.push(curr);
					}					
				}		
			}
		
		
	}
}

function setMouseMove () {
  mainSVG.onpointermove = (e) => {
    mousePos.x = cursorPoint(e).x;
    mousePos.y = cursorPoint(e).y - visibleArea.offset;
  }
  gsap.ticker.add(calc);

  bigBaubleArray = baublePosArray.map((i) => baubleArray[i]);  
  mainSVG.onmousedown = null;
}
function init () {
  setIntroTextColor();
  mainSVG.onmousedown = (e) => {
    let tl = gsap.timeline({});
    tl.to('#introText', {
      opacity: 0
    })
    .to('#whole', {
      opacity: 1,
      onComplete: setMouseMove
    })
/*     .to(mousePos, {
      x: 400,
      y: 300,
      duration: 1
    }) */
  }  
}

init()
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://unpkg.com/gsap@3/dist/gsap.min.js