aboutsummaryrefslogtreecommitdiffhomepage
path: root/Q5.php
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2023-03-15 00:26:13 +0900
committernsfisis <nsfisis@gmail.com>2023-03-15 00:26:13 +0900
commitc830af9e843f5350d1f88bbeeda9aa7db859b75a (patch)
tree1c473964c451ff430c0d3d27681a8c1bed4050cc /Q5.php
parentd2193fdd6505fdb4b272359d9a82cdbe34c55dd5 (diff)
downloadPHPerKaigi2023-tokens-c830af9e843f5350d1f88bbeeda9aa7db859b75a.tar.gz
PHPerKaigi2023-tokens-c830af9e843f5350d1f88bbeeda9aa7db859b75a.tar.zst
PHPerKaigi2023-tokens-c830af9e843f5350d1f88bbeeda9aa7db859b75a.zip
add token quizzesHEADmain
Diffstat (limited to 'Q5.php')
-rw-r--r--Q5.php610
1 files changed, 610 insertions, 0 deletions
diff --git a/Q5.php b/Q5.php
new file mode 100644
index 0000000..ee56101
--- /dev/null
+++ b/Q5.php
@@ -0,0 +1,610 @@
+<?php
+
+declare(strict_types=1);
+
+if (php_sapi_name() !== 'cli-server') {
+ fwrite(STDERR, <<<EOS
+ Usage:
+ php -S localhost:8000 $argv[0]
+
+ Recommended options:
+ -d opcache.enable_cli=on
+ -d opcache.jit=on
+ -d opcache.jit_buffer_size=100M
+ -d max_execution_time=300
+
+ EOS);
+ exit(1);
+}
+
+if (!str_ends_with($_SERVER['REQUEST_URI'], '.png')) {
+ echo base64_decode(
+ 'PGhlYWQ+PHRpdGxlPkknbSBhIHRlYXBvdDwvdGl0bGU+PC9oZWFkPjxwPjxpbWcgc3JjPS90ZWFwb3Q'
+ . 'ucG5nIHdpZHRoPTQxOCBoZWlnaHQ9NDE4PjwvcD48c2NyaXB0PmNvbnNvbGUubG9nKGF0b2IoJw==')
+ . 'bm8gdG9rZW4gaGVyZSA7LSk='
+ . base64_decode('JykpPC9zY3JpcHQ+');
+ return;
+}
+
+// For slow machine, enable fast mode.
+const FAST_MODE = true;
+
+const w = FAST_MODE ? 104 : 209;
+const h = FAST_MODE ? 104 : 209;
+const rM = [[0.866,0.5,0,0],[-0.5,0.866,0,0],[0,0,1,0],[0,0,0,0]];
+const pM = [[1,0,0,0],[0,1,0,0],[0,0,-0.818,1.818],[0,0,-1,0]];
+
+[$vs, $ns, $ps] = T();
+
+$q = 0; $cP = [-5,0,0,0]; $cU = [0,1,0,0]; $L = [-0.41,0.82,-0.41,0];
+
+header('Content-Type: image/apng');
+APNG(); IHDR(); PLTE(); acTL(FAST_MODE ? 1 : 12);
+for ($f = 0; $f < 12; $f++) {
+ if (!FAST_MODE || $f === 9) {
+ $px = g($vs, $ns, $ps, cM($cP, $cU), $L);
+ fcTL($q++); $q === 1 ? IDAT($px) : fdAT($q++, $px);
+ }
+ $cP = mM(rM, $cP); $cU = mM(rM, $cU); $L = mM(rM, $L);
+}
+IEND();
+
+function T() {
+ $z = file_get_contents(__FILE__, offset: __COMPILER_HALT_OFFSET__);
+ $s = base64_decode(str_replace("\n", '', $z));
+ [$vsN, $tpsN, $rpsN, $tqsN, $rqsN] = array_values(unpack('va/vb/Cc/vd/Ce', $s));
+ $vs = array_chunk(unpack('g' . 3*$vsN, $s, $o=8), 3); $o += 4*3*$vsN;
+ $tps = array_chunk(unpack('v' . 3*$tpsN, $s, $o), 3); $o += 2*3*$tpsN;
+ $rps = array_chunk(unpack('v' . 4*$rpsN, $s, $o), 4); $o += 2*4*$rpsN;
+ $tqs = array_chunk(unpack('v' . 3*$tqsN, $s, $o), 3); $o += 2*3*$tqsN;
+ $rqs = array_chunk(unpack('v' . 4*$rqsN, $s, $o), 4);
+
+ $vs = array_map(fn($v) => [...$v, 1], $vs);
+ $ps = [];
+ foreach ($tps as [$a, $b, $c]) $ps[] = [$a, $b, $c, 0];
+ foreach ($rps as [$a, $b, $c, $d]) array_push($ps, [$a, $b, $c, 0], [$c, $d, $a, 0]);
+ foreach ($tqs as [$a, $b, $c]) $ps[] = [$a, $b, $c, 1];
+ foreach ($rqs as [$a, $b, $c, $d]) array_push($ps, [$a, $b, $c, 1], [$c, $d, $a, 1]);
+
+ $ns = array_fill(0, count($vs), []);
+ foreach ($ps as [$i1, $i2, $i3]) {
+ $n = vN(vC(vS($vs[$i2], $vs[$i1]), vS($vs[$i3], $vs[$i2])));
+ $ns[$i1][] = $n; $ns[$i2][] = $n; $ns[$i3][] = $n;
+ }
+ foreach ($ns as $i => $vn) {
+ $u = [0, 0, 0];
+ foreach ($vn as $n) {
+ $u[0] += $n[0]; $u[1] += $n[1]; $u[2] += $n[2];
+ }
+ $ns[$i] = vN($u);
+ }
+ return [$vs, $ns, $ps];
+}
+
+function cM($c, $u) {
+ $z = vN($c); $x = vN(vC($u, $z)); $y = vN(vC($z, $x));
+ return [
+ [$x[0], $x[1], $x[2], -vD($x, $c)],
+ [$y[0], $y[1], $y[2], -vD($y, $c)],
+ [$z[0], $z[1], $z[2], -vD($z, $c)],
+ [0, 0, 0, 1],
+ ];
+}
+
+function g($vs, $ns, $ps, $cM, $L) {
+ $us = array_fill(0, count($vs), 0);
+ foreach ($vs as $i => $v) {
+ [$x, $y, $z, $w] = mM(pM, mM($cM, $v));
+ $us[$i] = [$x/$w * w/2 + w/2, -$y/$w * h/2 + h/2, $z/$w];
+ }
+
+ $pp = array_fill(0, count($ps), 0);
+ foreach ($ps as $i => [$i1, $i2, $i3, $o]) {
+ $v1 = $us[$i1]; $v2 = $us[$i2]; $v3 = $us[$i3];
+ $n1 = $ns[$i1]; $n2 = $ns[$i2]; $n3 = $ns[$i3];
+ $mx = min($v1[0], $v2[0], $v3[0]);
+ $mX = max($v1[0], $v2[0], $v3[0]);
+ $my = min($v1[1], $v2[1], $v3[1]);
+ $mY = max($v1[1], $v2[1], $v3[1]);
+ $pp[$i] = [
+ $v1, $v2, $v3,
+ $n1, $n2, $n3,
+ $mx, $mX, $my, $mY,
+ $o,
+ ];
+ }
+
+ $px = array_fill(0, w*h, 0);
+ for ($y = 0; $y < h; $y++)
+ for ($x = 0; $x < w; $x++) {
+ $D = -INF;
+ foreach ($pp as [$v1, $v2, $v3, $n1, $n2, $n3, $mx, $mX, $my, $mY, $o]) {
+ if ($x < $mx || $mX < $x || $y < $my || $mY < $y) continue;
+ $e1 = ($v3[0]-$v2[0])*($y-$v2[1]) - ($v3[1]-$v2[1])*($x-$v2[0]);
+ $e2 = ($v1[0]-$v3[0])*($y-$v3[1]) - ($v1[1]-$v3[1])*($x-$v3[0]);
+ $e3 = ($v2[0]-$v1[0])*($y-$v1[1]) - ($v2[1]-$v1[1])*($x-$v1[0]);
+ if (0<$e1 || 0<$e2 || 0<$e3) continue;
+ $w1 = $e1 / ($e1+$e2+$e3);
+ $w2 = $e2 / ($e1+$e2+$e3);
+ $w3 = $e3 / ($e1+$e2+$e3);
+ $d = $w1*$v1[2] + $w2*$v2[2] + $w3*$v3[2];
+ if ($d < $D) continue;
+ $D = $d;
+ $n = vN(vA(vA(vM($n1, $w1), vM($n2, $w2)), vM($n3, $w3)));
+ $c = .2 + .8*max(0, vD($n, $L));
+ $px[$y*w+$x] = (int) ($c*127) + $o*128;
+ }
+ }
+ return $px;
+}
+
+function APNG() { echo pack('C*', 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A); }
+function acTL($n) { chunk('acTL', pack('NN', $n, 0)); }
+function fcTL($q) { chunk('fcTL', pack('NNNNNnnCC', $q, w, h, 0, 0, 50, 0, 1, 0)); }
+function IHDR() { chunk('IHDR', pack('NNCCCCC', w, h, 8, 3, 0, 0, 0)); }
+function IDAT($px) { xdat('IDAT', null, $px); }
+function fdAT($q, $px) { xdat('fdAT', $q, $px); }
+function IEND() { chunk('IEND', ''); }
+
+function PLTE() {
+ $s = '';
+ for ($i = 0; $i < 128; $i++) $s .= pack('CCC', $i*2, $i*2, $i*2);
+ for ($i = 0; $i < 128; $i++) $s .= pack('CCC', 0, 0, $i*2);
+ chunk('PLTE', $s);
+}
+
+function xdat($t, $q, $px) {
+ $s = $z = '';
+ if ($q !== null) $s .= pack('N', $q);
+ $l = h * (w+1);
+ $s .= pack('CCCvv', 0x78, 0x01, 1, $l, ~$l);
+ for ($y = 0; $y < h; $y++) {
+ $z .= pack('C', 0);
+ for ($x = 0; $x < w; $x++) {
+ $z .= pack('C', $px[$y*w+$x]);
+ }
+ }
+ $s .= $z . pack('N', hexdec(hash('adler32', $z)));
+ chunk($t, $s);
+}
+
+function chunk($t, $s) {
+ $z = $t . $s; echo pack('N', strlen($s)).$z.pack('N', crc32($z));
+}
+
+function vN($v) { $n = sqrt($v[0]**2+$v[1]**2+$v[2]**2); return $n == 0 ? $v : vM($v, 1/$n); }
+function vA($v, $u) { return [$v[0]+$u[0], $v[1]+$u[1], $v[2]+$u[2]]; }
+function vS($v, $u) { return [$v[0]-$u[0], $v[1]-$u[1], $v[2]-$u[2]]; }
+function vM($v, $k) { return [$v[0]*$k, $v[1]*$k, $v[2]*$k]; }
+function vD($v, $u) { return $v[0]*$u[0] + $v[1]*$u[1] + $v[2]*$u[2]; }
+function vC($v, $u) { return [$v[1]*$u[2]-$v[2]*$u[1], $v[2]*$u[0]-$v[0]*$u[2], $v[0]*$u[1]-$v[1]*$u[0]]; }
+function mM($m, $v) {
+ return [
+ $v[0]*$m[0][0] + $v[1]*$m[0][1] + $v[2]*$m[0][2] + $v[3]*$m[0][3],
+ $v[0]*$m[1][0] + $v[1]*$m[1][1] + $v[2]*$m[1][2] + $v[3]*$m[1][3],
+ $v[0]*$m[2][0] + $v[1]*$m[2][1] + $v[2]*$m[2][2] + $v[3]*$m[2][3],
+ $v[0]*$m[3][0] + $v[1]*$m[3][1] + $v[2]*$m[3][2] + $v[3]*$m[3][3],
+ ];
+}
+
+__halt_compiler();
+JAS6AV9HAYvOp+69cqZdPxJKs7+U9q4+QIddP/iIrr/j46s+6X5yP2LYq79Ap
+eq9QltyP6NasL89uT4/QIddPwcHmb9hqDs/zH1yP8mulr8e/Hw/DMpcP4P8fL
+8tBpk/24ZdPwa6Pr9/+p0/KGV2P2xcJ7+LG6k/deRcPwRW5r4SSrM/cqZdP0i
+n7r2jWrA/MVtyP7qk6r34iK4/QIddP5T2rj5i2Ks/6X5yP+Pjqz4HB5k/L4dd
+Pz25Pj/JrpY/u31yP2GoOz+T/Hw/+8lcPy/8fD8Xuj4/24ZdPzYGmT9sXCc/K
+GV2P3/6nT8mVuY+deRcP4sbqT/Op+49cqZdPxtKsz9Apeo9MVtyP6NasD+U9q
+6+L4ddPwGJrj/j46u+2H5yP2LYqz89uT6/L4ddPwcHmT9hqDu/u31yP9Gulj+
+hL5G/UBddP+okVz9/+p2/KGV2P31cJz+LG6m/deRcPyZW5j4SSrO/cqZdP86n
+7j2jWrC/MVtyP0Cl6j34iK6/QIddP3P2rr5i2Ku/6X5yP+Pjq74HB5m/QIddP
+yy5Pr/Jrpa/zH1yP1CoO7/qJFe/UBddP6Evkb8mVua+deRcP4sbqb9sXCe/KG
+V2P3b6nb+PG64+lBd1P2zrs78zTkM/DHd2P8vWnL9s67M/gxd1P48brj7L1pw
+/DHd2PzNOQz+PG66+gxd1P2zrsz8zTkO/DHd2P9TWnD9s67O/gxd1P20brr7L
+1py/DHd2PyNOQ78YtGC/MV1sP+9Zmb9MFre+DftlP8BZur9YjhA+/U10P7Ubu
+7/3WZk/MV1sPxi0YL/JWbo/DftlP0wWt761G7s//U10P1iOED4YtGA/MV1sP/
+dZmT9MFrc+DftlP8lZuj+THoY7Vfp1P+m5tz/3WZm/MV1sPym0YD/JWbq/Dft
+lP24Wtz61G7u//U10P1iOEL4czcm/Q1PePhMMK79BLai/P3LLPjxLkL+Tcme/
+kITdPnR6ur8TDCs/qFPePhTNyb88S5A/YHLLPjgtqL90ero/kITdPpNyZ78cz
+ck/Q1PePiQMKz9BLag/P3LLPjxLkD+Tcmc/b4TdPn16uj987jS+0xFAPRxd7z
+8TDCu/IlPePiXNyT88S5C/P3LLPkEtqD90erq/kITdPqRyZz/RsdO/Z38wvnB
+4gz8vTfG/dR8wvkQ28D5qwPa/+5YZvlMjJL5/MeW/RFEwvlhxQr/0wr2/xQRF
+vg/Ror9oeIO/Z38wvtGx079ENvC+Mh8wvi9N8b9TIyQ+t5YZvmrA9r9pcUI/v
+lAwvn8x5b8P0aI/xQRFvvTCvb/RsdM/Z38wvmh4g78vTfE/dR8wvkQ28L5qwP
+Y/+5YZvlMjJD5/MeU/RFEwvmlxQj/0wr0/CAVFvg/Roj9oeIM/Z38wvtmx0z9
+ENvA+dR8wvjhN8T9YcUK/RFEwvocx5T8P0aK/CAVFvvTCvT9MUhm+PX/6vh0f
+AECIgk2/cXYXv91B7D+FPpq/WHQ7v9L8zz86Ivm/yXUXv3rjAD+ULwDAN+AXv
++SHKr7dQey/YHYXv4iCTb/S/M+/R3Q7v4U+mr9p4wC/yXUXvzIi+b/khyo+N+
+AXv5AvAMCIgk0/YHYXv91B7L+FPpo/R3Q7v9L8z786Ivk/yXUXv2njAL+ULwB
+AN+AXv+SHKj7dQew/cXYXv4iCTT/S/M8/WHQ7v4U+mj9p4wA/2nUXvzoi+T/y
+YTY9BOUiv0UNAEAgm/S+gzJRv85U9j/vqic+Jv5Uv5oJ/D82PtG/NUM6vydpm
+D+Y/Om/by9Rv5g0Rj+aCfy/Jv5Uv++qJz7OVPa/gzJRvyCb9L4naZi/JEM6vy
+0+0b+YNEa/Xi9Rv5j86b/vqie+Ff5Uv5oJ/L8gm/Q+gzJRv85U9r82PtE/JEM
+6vydpmL+Y/Ok/Xi9Rv5g0Rr+aCfw/Jv5Uv++qJ77OVPY/gzJRv0Gb9D4naZg/
+NUM6vzY+0T+YNEY/by9Rv6D86T8TnBo+sW+Lv49y6D+/Dlg/LLmKv+CB0T9U/
++C+wkuKv0Kv4z8b2Iy/Y7SKv3h+vT/YgdG/LLmKv78OWD+Pcui/qG+LvxOcGj
+46r+O/wkuKv1T/4L5vfr2/Y7SKvxvYjL+/Dli/LLmKv9iB0b8TnBq+qG+Lv49
+y6L9U/+A+wkuKvzqv478b2Iw/Y7SKv29+vb/YgdE/LLmKv78OWL+Pcug/qG+L
+v9CbGr46r+M/wkuKv1T/4D5vfr0/Y7SKvxvYjD9PPC8/tKqtv+Ierz9QcAE+s
+5asv3Odwj/iHq+/tKqtv088Lz9zncK/s5asv1BwAT5PPC+/tKqtv+Ier79QcA
+G+q5asv3Odwr/iHq8/tKqtv088L79zncI/s5asv1BwAb7BxJs/vhauv2pnbD9
+qZ2y/vhauv8HEmz/BxJu/tRauv2pnbL9qZ2w/tRauv8HEm7/EQb4/88m2v5c5
+/T2FmUo/O6q2v+GXoj8E5UY+Ppe7v/t5uT/hl6K/O6q2v4WZSj/7ebm/Ppe7v
+wTlRj6FmUq/O6q2v+GXor8E5Ua+NZe7v/t5ub/hl6I/O6q2v4WZSr/7ebk/Pp
+e7vwTlRr5LkZI/mny7vx08az8eG7E/wqa0v+2dET8ROf2988m2v8RBvj9stDi
+/WMbCv46QHT8dPGu/mny7v0uRkj/tnRG/wqa0vx4bsT/EQb6/88m2vxE5/b1L
+kZK/kXy7vx08a78eG7G/wqa0v+2dEb8ROf0988m2v8RBvr8xz/o+ELLEv1iNv
+b4dPGs/kXy7v0uRkr/tnRE/wqa0vx4bsb+y9OG926bOP4bj+T3+0x0+QWHMP1
+r0fr6d9H4+QWHMP0HUHT6d9H6+QWHMP3jTHb6RJ6E+ngrIP2lVO77vVTs+ngr
+IP5EnoT6RJ6G+ngrIPzJWOz7vVTu+ngrIP3Anob46ebE9hpPCPyjXvL5J17w+
+hpPCP0Z6sT1MF+K9YCLIP8Xnrj5J17y+hpPCPzp5sb0GhK4+DRi+P/ht6L0sZ
+Rk99MO8Pw/xtz4GhK6+DRi+P35u6D34bei9DRi+P8ODrr4ogmg+Jc6+P+bmk7
+4I55M+Jc6+P2uCaD4ogmi+Jc6+Pynnkz4I55O+Jc6+PyiCaL43OTy9dCOkP+Z
+0Ob7pnco9lImjP5/II74pdTk+dCOkPzc5PL2fyCM+lImjP+mdyj03OTw9dCOk
+Pyl1OT7pncq9lImjP+LIIz4pdTm+dCOkP0M6PD2fyCO+lImjP2Kdyr2Dp1A90
+QWZP8csK74KLSs+0QWZP4OnUD2Dp1C90QWZPwotKz4KLSu+0QWZP4OnUL2P4b
+G9CcOYP775Hb6++R0+CcOYPwnhsb2P4bE9CcOYPwH6HT6++R2+CcOYP4/hsT2
+sraC+i1KMP7luOr4fR9O9uhWMPwExsb65bjo+i1KMP6ytoL4BMbE+uhWMP5lG
+072sraA+i1KMP/xuOj4fR9M9uhWMPyMxsT65bjq+i1KMP6ytoD4BMbG+uhWMP
+x9H0z3V6m+/G/V4PyS4JT+bOp+/2jlxPxDMEb4QzBE+6zlxP5s6n7+bOp8/2j
+lxP1PMET4QzBG+2jlxP5s6nz8kuCW/G/V4P8Tqb7/V6m8/G/V4PyS4Jb8kuCU
+/CvV4P9Xqbz+kcn+/pb1hP0D7Yb9A+2E/pb1hP5Nyf7+kcn8/pb1hP1D7YT9A
++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
+vzYhIT8tzlg9QQ21v9cXJT+ndoY8QQ21v15KLT9mMwe8QQ21v8pqNj/K+eK8Q
+Q21v0dUMD+gb0u9QQ21v2hZKz81f4y9QQ21v4f4Jz+5cMC9QQ21v+S/JD/FBP
+W9QQ21v/G6Ij8N5Bm+QQ21v5zDIT/fwjq+QQ21v1dDIj+laFW+QQ21v8qjIz8
+XRoq+QQ21vzC8Kj/YYp++QQ21v102Nj8ZcKa+QQ21v5PiOz+w6K6+QQ21vzLn
+RT8X1bK+QQ21vwbYTz9GtrO+QQ21v8dLVz+wqq6+QQ21vzC5aT9NSaa+QQ21v
+4i4cT/+J5++QQ21v4Qsdz9SuJa+QQ21v2IQfD/5E42+QQ21v6YrgD8qVYK+QQ
+21vxr6gT8bnl6+QQ21vxwmhD8f+Di+QQ21v54mhT+FshC+QQ21v41ehT8C0+m
+9QQ21v1K4hD+Crr29QQ21v87ggz9jmmm9QQ21v0w3gT/NWgq9QQ21vyhHfT+R
+tQa8QQ21v4o8dT+WJiU9QQ21v5pBgj+En7g9QQ21v51LhT8Bpuw9QQ21v0pGh
+j91djI+QQ21v1uVhj+9xWM+QQ21v44ehT9VS4I+QQ21v031gj+wx4w+QQ21vx
+0AgT8/NZY+QQ21v0JgfT/f4KM+QQ21v0fIdD+YGKs+QQ21vwLVaz9oPq8+QQ2
+1v9j0ZD81z7E+QQ21vz+qXT8hsLI+QQ21vxkEVj9FnYG+QQ21v69bTD8tWnC+
+QQ21vxjMQz8aFF2+QQ21v+FFPz/HR0u+QQ21v23mPD/vIDa+QQ21vzBLOz9cy
+gm+QQ21vzFDOz873++9QQ21v3cSPT/7scm9QQ21v5DAPz9vRaK9QQ21v7dCRD
+85tl69QQ21v5OoTz/9oVm9QQ21v4sXUz/Rsm69QQ21vzS+Xz+wq4m9QQ21vyc
+WZD+pMaG9QQ21v41jaD9txsm9QQ21v0YKbT98R+29QQ21vwqCbz8u4gu+QQ21
+v9B9cT9M3SW+QQ21v2mscT9UU0K+QQ21v25PcD+t31y+QQ21v2A6bT9pj3e+Q
+Q21v3juZT+cGoC+QQ21v3WSYT9d/oO+QQ21vxJLWj8HmDk9QQ21v7U1Sj8qb4
+c9QQ21v0FhQD//Qq89QQ21v16dOz8h6fM9QQ21v5SFNz9tyB8+QQ21vzbKNj/
+dJDY+QQ21v6/QNz8ls0o+QQ21v7jMOT+7C2Q+QQ21v7YxPj/Lvns+QQ21v+6T
+Rz9YO4I+QQ21v+9ZTz93EIM+QQ21v/URWD/x838+QQ21v5HxYD8aTmk+QQ21v
+xCvaz8ucVQ+QQ21v0Debz+Qvjk+QQ21v7A9cz9I/SU+QQ21v4IBdD9d/A0+QQ
+21vw4vdD9zofI9QQ21v4s2cz9Qcsc9QQ21vzsccT/NBpk9QQ21v6XdbD9qFX0
+9QQ21v3XkaD8eM1A9QQ21v9kIZD/exiY9QQ21v40KXD8K1yM9QQ21vxkEVj97
+FK4+QQ21v5hukj6gGq++QQ21v5hukj6gGq++QQ21v6abxD57FK4+QQ21v6abx
+D5CYOU8QQ21v65HYT1oke09QQ21v65HYT1oke09QQ21v7x0k7x7FK4+QQ21v7
+x0k7x7FK4+QQ21v2iR7b1oke09QQ21v2iR7b1oke09QQ21vylcz75zaJE9QQ2
+1vylcz75GtrO+QQ21v4/Cdb1GtrO+QQ21v7x0k7xCYOU8QQ21v7x0k7xCYOU8
+QQ21v2iR7b3yQiq+QQ21v0Hy7r1CYOU8QQ21v7pJjL6e76e9QQ21v1TjRb+e7
+6e9QQ21v1g5FL/y0o2+QQ21v166Cb/y0o2+QQ21v42X7r6e76e9QQ21v8HKAb
++e76e9QQ21v/T91L70/VS8QQ21v/T91L70/VS8QQ21v0JgBb+cxCA+QQ21v42
+XDr+cxCA+QQ21v/T91L6LbGc+QQ21v/T91L6LbGc+QQ21vw4tEr9Qjdc+QQ21
+vwisHL9Qjdc+QQ21v6AaL7+LbGc+QQ21v6abJL+LbGc+QQ21v6JFVr9Qjdc+Q
+Q21v5zEYL9Qjdc+QQ21vzMzc7+LbGc+QQ21vzm0aL+LbGc+QQ21v3e+f7+cxC
+A+QQ21v3e+f7+cxCA+QQ21v7geZb/0/VS8QQ21v23nW7/0/VS8QQ21v3e+f7+
+e76e9QQ21v3e+f7+e76e9QQ21v+xRWL/y0o2+QQ21v/LSTb/y0o2+QQ21v1pk
+O7+cxCA+QQ21vyUGIb/0/VS8QQ21v9nOF7/0/VS8QQ21v9V4Sb+cxCA+QQ21v
+yGwUr/0/VS826bOv/T91L70/VS826bOv9nOF7/0/VS826bOv9V4Sb+e76e926
+bOv1TjRb+e76e926bOv1g5FL/y0o2+26bOv166Cb/y0o2+26bOv42X7r6e76e
+926bOv8HKAb+e76e926bOv/T91L70/VS826bOv/T91L70/VS826bOv0JgBb+c
+xCA+26bOv42XDr+cxCA+26bOv/T91L6LbGc+26bOv/T91L6LbGc+26bOvw4tE
+r9Qjdc+26bOvwisHL9Qjdc+26bOv6AaL7+LbGc+26bOv6abJL+LbGc+26bOv6
+JFVr9Qjdc+26bOv5zEYL9Qjdc+26bOvzMzc7+LbGc+26bOvzm0aL+LbGc+26b
+Ov3e+f7+cxCA+26bOv3e+f7+cxCA+26bOv7geZb/0/VS826bOv23nW7/0/VS8
+26bOv3e+f7+e76e926bOv+xRWL/y0o2+26bOv/LSTb/y0o2+26bOv1pkO7+cx
+CA+26bOvyUGIb/0/VS826bOv9nOF7/0/VS826bOv9V4Sb+cxCA+26bOvyGwUr
++e76e926bOv1TjRb+e76e9QQ21v1TjRb+e76e926bOv1g5FL+e76e9QQ21v1g
+5FL/y0o2+26bOv166Cb/y0o2+QQ21v166Cb/y0o2+26bOv42X7r7y0o2+QQ21
+v42X7r6e76e926bOv8HKAb+e76e9QQ21v8HKAb+e76e926bOv/T91L6e76e9Q
+Q21v/T91L70/VS8QQ21v/T91L6LbGc+26bOvw4tEr9Qjdc+26bOvwisHL9Qjd
+c+QQ21vwisHL9Qjdc+26bOv6AaL79Qjdc+QQ21v6AaL7+LbGc+26bOv6abJL+
+LbGc+QQ21v6abJL+LbGc+26bOv6JFVr+LbGc+QQ21v6JFVr9Qjdc+26bOv5zE
+YL9Qjdc+QQ21v5zEYL9Qjdc+26bOvzMzc79Qjdc+QQ21vzMzc7+LbGc+26bOv
+zm0aL+LbGc+QQ21vzm0aL+LbGc+26bOv3e+f7+LbGc+QQ21v3e+f7+cxCA+26
+bOv3e+f7+cxCA+QQ21v3e+f7+cxCA+26bOv7geZb+cxCA+QQ21v7geZb/0/VS
+826bOv23nW7/0/VS8QQ21v23nW7/0/VS826bOv3e+f7/0/VS8QQ21v3e+f7+e
+76e926bOv3e+f7+e76e9QQ21v3e+f7+e76e926bOv+xRWL+e76e9QQ21v+xRW
+L/y0o2+26bOv/LSTb/y0o2+QQ21v/LSTb/y0o2+26bOv1pkO7/y0o2+QQ21v1
+pkO79oke0926bOvylcz75zaJE926bOvylcz75zaJE9QQ21vylcz75GtrO+26b
+Ov4/Cdb1GtrO+QQ21v4/Cdb1GtrO+26bOv7x0k7xGtrO+QQ21v7x0k7xCYOU8
+QQ21v7x0k7ywqq6+QQ21vzC5aT9NSaa+QQ21v4i4cT/+J5++QQ21v4Qsdz9Su
+Ja+QQ21v2IQfD/5E42+QQ21v6YrgD8qVYK+QQ21vxr6gT8bnl6+QQ21vxwmhD
+8f+Di+QQ21v54mhT+FshC+QQ21v41ehT8C0+m9QQ21v1K4hD+Crr29QQ21v87
+ggz9jmmm9QQ21v0w3gT/NWgq9QQ21vyhHfT+RtQa8QQ21v4o8dT+WJiU9QQ21
+v5pBgj+En7g9QQ21v51LhT8Bpuw9QQ21v0pGhj91djI+QQ21v1uVhj+9xWM+Q
+Q21v44ehT9VS4I+QQ21v031gj+wx4w+QQ21vx0AgT8/NZY+QQ21v0JgfT/f4K
+M+QQ21v0fIdD+YGKs+QQ21vwLVaz9oPq8+QQ21v9j0ZD/fqbA+26bOv2jLST8
+lBKs+26bOv/rSPz8UdqE+26bOv4ygNT+285U+26bOv7bzLT/mdYw+26bOv5s8
+KT8kfnU+26bOv8h6Ij/1MFQ+26bOv9KpHz+laFW+26bOv8qjIz8XRoq+26bOv
+zC8Kj/YYp++26bOv102Nj8ZcKa+26bOv5PiOz+w6K6+26bOvzLnRT8X1bK+26
+bOvwbYTz9GtrO+26bOv8dLVz+wqq6+26bOvzC5aT9NSaa+26bOv4i4cT/+J5+
++26bOv4Qsdz9SuJa+26bOv2IQfD/5E42+26bOv6YrgD8qVYK+26bOvxr6gT8b
+nl6+26bOvxwmhD8f+Di+26bOv54mhT+FshC+26bOv41ehT8C0+m926bOv1K4h
+D+Crr2926bOv87ggz9jmmm926bOv0w3gT/NWgq926bOvyhHfT+RtQa826bOv4
+o8dT+WJiU926bOv5pBgj+En7g926bOv51LhT8Bpuw926bOv0pGhj91djI+26b
+Ov1uVhj+9xWM+26bOv44ehT9VS4I+26bOv031gj+wx4w+26bOvx0AgT8/NZY+
+26bOv0JgfT/f4KM+26bOv0fIdD+YGKs+26bOvwLVaz9oPq8+26bOv9j0ZD81z
+7E+26bOvz+qXT8hsLI+26bOvxkEVj9FnYG+26bOv69bTD8tWnC+26bOvxjMQz
+8aFF2+26bOv+FFPz9UU0K+26bOv25PcD9pj3e+26bOv3juZT+cGoC+26bOv3W
+SYT+7C2Q+26bOv7YxPj/Lvns+26bOv+6TRz9YO4I+26bOv+9ZTz93EIM+26bO
+v/URWD/x838+26bOv5HxYD9CYOU826bOv65HYT1oke0926bOv65HYT1oke092
+6bOvylcz75zaJE926bOvylcz75GtrO+26bOv4/Cdb1GtrO+26bOv7x0k7xCYO
+U826bOv7x0k7xCYOU826bOv2iR7b3yQiq+26bOv0Hy7r1CYOU826bOv7pJjL6
+e76e926bOv1TjRb+e76e926bOv1g5FL+e76e926bOv8HKAb+e76e926bOv/T9
+1L70/VS826bOv3e+f7+e76e926bOv3e+f7+e76e926bOv+xRWL+e76e926bOv
+1TjRb+e76e9QQ21v1TjRb/y0o2+26bOv42X7r6e76e926bOv8HKAb+e76e9QQ
+21v8HKAb+e76e926bOv/T91L6e76e9QQ21v/T91L70/VS826bOv/T91L70/VS
+8QQ21v/T91L70/VS826bOv0JgBb/0/VS8QQ21v0JgBb+cxCA+26bOv42XDr+c
+xCA+QQ21v42XDr+cxCA+26bOv/T91L6cxCA+QQ21v/T91L6LbGc+QQ21v/T91
+L7y0o2+26bOv1pkO7+cxCA+26bOvyUGIb/0/VS826bOv9nOF7/0/VS8QQ21v9
+nOF7/0/VS826bOv9V4Sb/0/VS8QQ21v9V4Sb+cxCA+QQ21vyGwUr9CYOU826b
+Ov65HYT1CYOU8QQ21v65HYT1oke0926bOv65HYT1oke09QQ21v65HYT1oke09
+QQ21v7x0k7x7FK4+26bOv2iR7b1oke0926bOv2iR7b1oke09QQ21v2iR7b1ok
+e0926bOvylcz75oke09QQ21vylcz75zaJE9QQ21vylcz75GtrO+26bOv7x0k7
+xCYOU826bOv7x0k7xCYOU8QQ21v7x0k7xCYOU826bOv2iR7b1CYOU8QQ21v2i
+R7b1pNyq+26bOvy9v7r1pNyq+QQ21vy9v7r1CYOU826bOv7pJjL5CYOU8QQ21
+v7pJjL57FK4+26bOv5hukj6gGq++26bOv5hukj6gGq++QQ21v5hukj6gGq++2
+6bOv6abxD6gGq++QQ21v6abxD57FK4+QQ21v6abxD57FK4+26bOv5hukj6gGq
+++26bOv5hukj6gGq++26bOv6abxD57FK4+26bOv6abxD5CYOU826bOv65HYT1
+oke0926bOv7x0k7x7FK4+26bOv7x0k7x7FK4+26bOv2iR7b1oke0926bOv2iR
+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
+26bOvxr6gT8bnl6+26bOvxwmhD+FshC+26bOv41ehT8C0+m926bOv1K4hD+Cr
+r2926bOv87ggz9jmmm926bOv0w3gT/NWgq926bOvyhHfT+RtQa826bOv4o8dT
++WJiU926bOv5pBgj+En7g926bOv51LhT8Bpuw926bOv0pGhj91djI+26bOv1u
+Vhj+9xWM+26bOv44ehT9VS4I+26bOv031gj9oPq8+26bOv9j0ZD81z7E+26bO
+vz+qXT8hsLI+26bOvxkEVj9FnYG+26bOv69bTD8tWnC+26bOvxjMQz8aFF2+2
+6bOv+FFPz/HR0u+26bOv23mPD/vIDa+26bOvzBLOz9cygm+26bOvzFDOz873+
++926bOv3cSPT/7scm926bOv5DAPz9vRaK926bOv7dCRD85tl6926bOv5OoTz/
+9oVm926bOv4sXUz/Rsm6926bOvzS+Xz+wq4m926bOvycWZD+pMaG926bOv41j
+aD9txsm926bOv0YKbT98R+2926bOvwqCbz8u4gu+26bOv9B9cT9UU0K+26bOv
+25PcD+t31y+26bOv2A6bT9pj3e+26bOv3juZT+cGoC+26bOv3WSYT9d/oO+26
+bOvxJLWj8HmDk926bOv7U1Sj8qb4c926bOv0FhQD//Qq8926bOv16dOz8h6fM
+926bOv5SFNz9tyB8+26bOvzbKNj/dJDY+26bOv6/QNz8ls0o+26bOv7jMOT+7
+C2Q+26bOv7YxPj/Lvns+26bOv+6TRz9YO4I+26bOv+9ZTz93EIM+26bOv/URW
+D/x838+26bOv5HxYD8aTmk+26bOvxCvaz8ucVQ+26bOv0Debz+Qvjk+26bOv7
+A9cz9I/SU+26bOv4IBdD9d/A0+26bOvw4vdD9zofI926bOv4s2cz9Qcsc926b
+OvzsccT/NBpk926bOv6XdbD9qFX0926bOv3XkaD8eM1A926bOv9kIZD/exiY9
+26bOv40KXD8K1yM926bOvxkEVj8GnOU926bOvx+8Hj9M3SW+26bOv2mscT/fq
+bA+QQ21v2jLST8hsLI+QQ21vxkEVj/7scm9QQ21v5DAPz9vRaK9QQ21v7dCRD
+85tl69QQ21v5OoTz/9oVm9QQ21v4sXUz/Rsm69QQ21vzS+Xz+wq4m9QQ21vyc
+WZD9UU0K+QQ21v25PcD+t31y+QQ21v2A6bT8HmDk9QQ21v7U1Sj/dJDY+QQ21
+v6/QNz8ls0o+QQ21v7jMOT+7C2Q+QQ21v7YxPj93EIM+QQ21v/URWD/x838+Q
+Q21v5HxYD8K1yM9QQ21vxkEVj9M3SW+QQ21v2mscT/fqbA+26bOv2jLST8hsL
+I+26bOvxkEVj873++926bOv3cSPT/7scm926bOv5DAPz9vRaK926bOv7dCRD8
+5tl6926bOv5OoTz/9oVm926bOv4sXUz/Rsm6926bOvzS+Xz9UU0K+26bOv25P
+cD8HmDk926bOv7U1Sj9tyB8+26bOvzbKNj/dJDY+26bOv6/QNz8ls0o+26bOv
+7jMOT9YO4I+26bOv+9ZTz93EIM+26bOv/URWD/exiY926bOv40KXD8K1yM926
+bOvxkEVj9FnYG+QQ21v69bTD9d/oO+QQ21vxJLWj8bnl6+26bOvxwmhD8f+Di
++26bOv54mhT+FshC+26bOv41ehT8C0+m926bOv1K4hD9jmmm926bOv0w3gT+E
+n7g926bOv51LhT8Bpuw926bOv0pGhj91djI+26bOv1uVhj+9xWM+26bOv44eh
+T9FnYG+26bOv69bTD/9oVm926bOv4sXUz/Rsm6926bOvzS+Xz98R+2926bOvw
+qCbz8u4gu+26bOv9B9cT9UU0K+26bOv25PcD+cGoC+26bOv3WSYT9d/oO+26b
+OvxJLWj+Qvjk+26bOv7A9cz9I/SU+26bOv4IBdD9d/A0+26bOvw4vdD9zofI9
+26bOv4s2cz9Qcsc926bOvzsccT9M3SW+26bOv2mscT9oke0926bOv65HYT1ok
+e0926bOv7x0k7xoke0926bOv2iR7b30/VS826bOv/T91L70/VS826bOv0JgBb
++LbGc+26bOv/T91L6LbGc+26bOvw4tEr+LbGc+26bOv6abJL+LbGc+26bOv6J
+FVr+LbGc+26bOvzm0aL+LbGc+26bOv3e+f7/0/VS826bOv23nW7/0/VS826bO
+v3e+f7/0/VS826bOv9nOF7/0/VS826bOv9V4Sb9oke0926bOv65HYT1oke092
+6bOv2iR7b1oke0926bOvylcz76gb0u926bOv2hZKz9jmmm926bOv0w3gT/9oV
+m926bOv4sXUz8EAAYABQAJAAgABwAOABAADwATABIAEQAYABoAGQAcABsAGgA
+hACMAIgAkACUAIwAkAAMAJQAGAAgAJwAJAAsACAAQABIAKQATABUAEgAaABsA
+KwAcAB4AGwAjACUALQAlAC8ALgAIADIAMQASADUANAAbADgANwAtADoALAAuA
+DsALQAuADwAOwAuAC8APAAnAD0AJgAxAD4AJwAxAD8APgAxADIAPwApAEAAKA
+A0AEEAKQA0AEIAQQA0ADUAQgAqAEMANgArAEQAKgA3AEUAKwA3AEYARQA3ADg
+ARgA1AEMAVwBXAFoAaQBbAFwAawBdAG4AbQBeAG8AXQBeAHAAbwBfAGAAcABh
+AHIAcQBiAHMAYQBiAHQAcwBjAGQAdABlAHYAdQBmAHcAZQBmAHgAdwBnAGgAe
+ABpAHoAeQBqAGwAaQBuAH8AbQByAIMAcQB2AIcAdQB6AHwAeQCLAJMAigCNAJ
+QAfgCPAJUAggCRAJYAhgCTAKAAoQCUAKQApQCVAKcAqACWAKsArABhAZ8AoAC
+YAIsAmQCaAI0AmwBiAZsApwCcAI8AnQCeAJEAnwCtAK8ArgCtAK4AsACtALMA
+twCuALUAtACvALYAsQCwALgAswC1ALwAtAC2ALkAsQC3ALoAsgC3AL8AugC4A
+LsAswDIAM0AzADBAM0AyADCAM4AyQDDAM4AwgDEAM8AygDFAM8AxADGANAAyw
+DHANAAxgDNANEAzADNANIA0QDOANMAyQDOANQA0wDPANUAygDPANYA1QDQANc
+AywDQANgA1wDZANoA5QDeANsA5gDfANwA5wDgAN0A6ADZAOUA5ADeAOYA4QDf
+AOcA4gDgAOgA4wDaAOwA6wDbAPAA7wDcAPQA8wDdAPgA9wD7APwAEgH/AP0A/
+gAEAQMBAgEeAQkBBgEHAQgBHgEeAQgBCQEGAQkBCgEBAQMBCwH/AAwBDQEIAQ
+4BCQEJAQ4BEQEPAQwBCwEQAQoBCQEQAQkBEQELARYBEgELARABFgEVAREBEwE
+VARABEQEXARIBFgEWARUBGAEUAWoAGwETARQBGwEpARUBEwEZARUBKQEXARYB
+GAH7ABcB+QATARsBKQEaARwBGwEdAR4BIQEGAQUBHwECAQEBIgEiAQEBAAH/A
+P4AIwEhAQYBHwEeAQYBIQEiAQABIAEcASEBJAEhASIBJQElASABJgEjAScBJg
+EkASEBKAEbARwBJAEbASQBKAH6ACUBJgEYASUB+gApARsBKAEpASgBGQEZASU
+BGAEYAfoAFwEnAfkA+gAqASwBKwEsAS0BKwEuAS8BQgEuATABLwE1ATMBNAE2
+ATUBNAE4ATsBNwE8ATYBNwE1ATYBPAE3ATsBPwE7AToBPgFAATcBPwFAATwBN
+wFBATwBQAFBATUBPAFCATUBQQFCAT0BNQFAAT8BRQE/ATsBQwFDAT4BRAFGAU
+ABRQFBAUABRgEtAUIBQQEtAUEBRwFHAUEBRgFFAUMBSAFGAUUBSAErAS0BRwF
+JAUMBRAFJAUQBSgFIAUkBTwFOAUgBTwFOAUYBSAFLAUYBTgFLAUcBRgFMAUcB
+SwEqASsBTAEqAU0BXQFNASoBTAFeAUwBSwFOAV4BSwFQAV8BTwFRAVABSgFRA
+WABUAFSAWABUQE7ATgBWQE4ATcBUwFTATcBNgFTATYBVAFUATYBNAE0ATMBVQ
+EzAVcBVQEzATIBVwEyATEBVgFXATIBVgFUATQBVQFYATgBUwFZATgBWAFXAVY
+BWgFcAVUBWwFcAVQBVQFcAVMBVAFYAVMBXAFbAVoBXQFNAVsBXQFeAVsBTQFe
+AVwBWwFfAVgBXAFgAVkBXwFfAVwBTgFOAVwBXgFPAV8BTgEHAAgABgAKAAsAC
+QARABIAEAAUABUAEwAdAB4AHAAAAAMAJAAGACcABQAQACkADwAaACsAGQAjAC
+0AIgAlAAMAMAAIAAsAMwASABUANgAbAB4AOQAtACUALgAlADAALwAnAAgAMQA
+IADMAMgApABIANAASADYANQArABsANwAbADkAOAAsADoAOQAtADsAOgAmAD0A
+MAAnAD4APQAoAEAAMwApAEEAQAA1ADYAQwAqAEQAQwArAEUARABEAFgAQwBXA
+EMAWgBpAFoAagBaAFsAawBdAG8AbgBeAF8AcABhAHMAcgBiAGMAdABlAHcAdg
+BmAGcAeABpAGwAegBcAG0AfgBtAH8AfgBgAHEAggBxAIMAggBkAHUAhgB1AIc
+AhgBoAHkAigB5AHwAigB8AIsAigB/AI0AfgCDAI8AggCHAJEAhgCLAJgAkwCM
+AJkAiwCMAKIAmQCMAKUAogCNAJoAlACOAJsAjQCOAKYAmwCOAKgApgCPAJwAl
+QCQAJ0AjwCQAKkAnQCQAKwAqQCRAJ4AlgCSAJ8AkQCSAJcAnwCSAKEAlwBhAa
+oAnwCgAJMAmABhAaAAmQCgAJgAmQCkAJQAmgCjAKQAmwCkAJoAmwBiAaMAmwC
+nAJUAnABiAacAnQCnAJwAnQCrAJYAngCqAKsAnwCrAJ4AnwCwAK4AtACuAK8A
+sQCvAK0AsgCtALcAsgCtALAAswCuALEAtQCvALIAtgCwALQAuAC1ALEAvQCxA
+LkAvQC2ALIAvgCyALoAvgC3ALMAvwCzALsAvwC4ALQAwAC0ALwAwAC1AMEAvA
+C2AMMAuQC4AMcAuwDBALUAwgC1AL0AwgDDALYAxAC2AL4AxADFALoAxgC6AL8
+AxgDHALgAyAC4AMAAyADBAMkAzQDBAMIAyQDDAMoAzgDDAMQAygDFAMsAzwDF
+AMYAywDHAMwA0ADHAMgAzADMANEA2ADNAMkA0gDJANMA0gDOAMoA1ADKANUA1
+ADPAMsA1gDLANcA1gDQAMwA2ADXANgA2QDRANoA2ADRAN4A2gDRANIA3gDTAN
+sA0gDTAN8A2wDTANQA3wDVANwA1ADVAOAA3ADVANYA4ADXAN0A1gDXANkA3QD
+ZANgA2gDeANIA2wDfANQA3ADgANYA3QDeAOEA2gDfAOIA2wDgAOMA3ADZAOQA
+3QDlANoA6wDaAO0A7ADmANsA7wDbAPEA8ADnANwA8wDcAPUA9ADoAN0A9wDdA
+OkA+AD8AP0ADQEAAQwB/wAAAQEBDAECAQMBAQEFAQYBCgH9AP8ADQEMAQEBCw
+EEAQUBCgEDAQQBCgENAQwBDwH8AA0BDwEDAQoBCwELAQoBEAH8AA8BEgEPAQs
+BEgEWARABFQH7ABIBFwEYARUBGQH5ABcB+gBqABoBGwEcAR0BIQEdAQcBHgEf
+AQUBBAEgAQAB/wAfAQQBAgEiAR8BAgEgAf8AIwEhAR8BIgElASIBIAEmASABI
+wEoASEBJQH6ACYBJwEZASgBJQE7ATkBOgE9ATMBNQFCAS8BPQFDATsBPgFFAT
+8BQwFIAUMBSQFMASsBRwFeAU0BTAE5AVkBUgE5ATsBWQFSAVkBYAFfAVkBWAF
+QAWABXwFQAUkBSgFPAUkBUAGqAGEBowCjAJkApACqAKMAYgGqAJ0AqwCjAGEB
+mQCqAGIBnQBXAVoBWwFVAQUAAgABAAQADQALAAoADAAPAA0ADAAOABcAFQAUA
+BYAGQAXABYAGAAgAB4AHQAfACIAIAAfACEAMAADAAIAJgACAAMAAAABACYAAg
+AFACcAMwALAA0AKAAoAA0ADwApADYAFQAXACoAKgAXABkAKwA5AB4AIAAsACw
+AIAAiAC0ASABHAEYAOABJAEgAOAA5AEkAOQA6AEoASgA6ADsASwBMAEsAOwA8
+AE0ATAA8AC8ATgBNAC8AMABOADAAPQBPAE8APQA+AFAAUQBQAD4APwBSAFEAP
+wAyAFMAUgAyADMAUwAzAEAAVABUAEAAQQBVAFYAVQBBAEIAVwBWAEIANQBYAE
+QARQBZAEcAWQBFAEYAWwBYAFkAXABtAFwAWQBHAF0AbQBHAEgAXgBdAEgASQB
+eAEkASgBfAF8ASgBLAGAAcQBgAEsATABhAHEATABNAGIAYQBNAE4AYgBOAE8A
+YwBjAE8AUABkAHUAZABQAFEAZQB1AFEAUgBmAGUAUgBTAGYAUwBUAGcAZwBUA
+FUAaAB5AGgAVQBWAGkAeQBWAFcAWgBDAFgAWwBrAGwAagBaAHwAegBsAHsAfQ
+B7AGwAawB+AH0AawBcAH8AbgBvAIAAgQCAAG8AcACCAIEAcABgAIMAcgBzAIQ
+AhQCEAHMAdACGAIUAdABkAIcAdgB3AIgAiQCIAHcAeACKAIkAeABoAIsAfAB7
+AIwApQCMAHsAfQCUAKUAfQB+AI0AfwCAAI4AqACOAIAAgQCVAKgAgQCCAI8Ag
+wCEAJAArACQAIQAhQCWAKwAhQCGAJEAhwCIAJIAoQCSAIgAiQCTAKEAiQCKAJ
+cAoQCgAJ8AogClAKQAmQCmAKgApwCbAKkArACrAJ0AyADAALwAwQDCAL0AuQD
+DAMQAvgC6AMUAxgC/ALsAxwDpAN0A5ADqAO0A2gDhAO4A8QDbAOIA8gD1ANwA
+4wD2ABQBEwERAQ4BQgEtASwBLgEyAS8BMAExATMBPQEvATIBZQFjAWYBZAFjA
+WUBbwFnAXABcgFnAW8BcQFnAXIBaAFnAXEBbQFpAW4BbAFpAW0BawFpAWwBag
+FpAWsBjAGOAY0BiwGOAYwBigGOAYsBigGPAY4BiQGPAYoBiQGQAY8BiAGQAYk
+BiAGRAZABiAGSAZEBiAG/AZIBvwGTAZIBiAGpAb8BvwGUAZMBvgGUAb8BvQGU
+Ab4BiAGqAakBvAGUAb0BhwGqAYgBhwGrAaoBhwGsAasBhgGsAYcBuwGUAbwBu
+wGVAZQBhgGtAawBugGVAbsBhQGtAYYBugGWAZUBhQGuAa0BuQGWAboBhAGuAY
+UBhAGvAa4BuAGWAbkBuAGXAZYBhAGwAa8BtwGXAbgBtwGYAZcBgwGwAYQBgwG
+xAbABtgGYAbcBggGxAYMBtgGZAZgBggGyAbEBtQGZAbYBtAGZAbUBgQGyAYIB
+gQGzAbIBswGZAbQBgQGZAbMBgQGaAZkBgAGaAYEBgAGbAZoBfwGbAYABfwGcA
+ZsBfgGcAX8BfgHXAZwBfQHXAX4BfQHAAdcB1gGcAdcB1QGcAdYBfQHBAcAB1A
+GcAdUBfAHBAX0B0wGcAdQBfAHCAcEB0wGdAZwB0gGdAdMBewHCAXwB0gGeAZ0
+BewHDAcIB0QGeAdIB0AGeAdEBegHDAXsBegHEAcMB0AGfAZ4BzwGfAdABzgGf
+Ac8BegHFAcQBegHGAcUBeQHGAXoBzgGgAZ8BzQGgAc4BeQHHAcYBeAHHAXkBz
+AGgAc0BzAGhAaABeAHIAccBywGhAcwBeAHJAcgBygGhAcsBdwHJAXgBygGiAa
+EBdwHKAckBdwGiAcoBdgGiAXcBdgGjAaIBdQGjAXYBdQGkAaMBdAGkAXUBdAG
+lAaQBcwGlAXQBcwGmAaUBcwGnAaYBqAGnAXMB2AHaAdkB2AHbAdoB4wHlAeQB
+4wHoAeUB6AHmAeUB4wHpAegB5wHmAegB4wHnAekB4wHmAecB4wHcAeYB4wHdA
+dwB4gHdAeMB4AHeAeEB4AHfAd4BAwIFAgQCAwLqAQUC6wHtAewB6wHuAe0BAQ
+IDAgICAQLqAQMCAQLrAeoBAQLuAesBAQLvAe4BAQLwAe8B/wEIAgAC/wEJAgg
+CBgLxAQcCBgLyAfEB/QH/Af4B/QEJAv8B/QEGAgkC/QHyAQYC/QHzAfIB/QH0
+AfMB+wH5AfwB+wH6AfkB9wH1AfgB9wH2AfUBCwIMAgoCJQInAiYCJQINAicCD
+gIQAg8CDgIRAhACJAITAhICIgIqAiMCIgIrAioCKAIUAikCKAIVAhQCIAIiAi
+ECIAIrAiICIAIoAisCIAIVAigCIAIWAhUCIAIXAhYCHgIcAh8CHgIdAhwCGgI
+YAhsCGgIZAhgCLAIvAi0ChwKGAokCiAKHAokCigKJAosCigKEAosChAKDAosC
+iQKGAoUCiQKFAooChQKEAooCqAKPAqkCjQKMAoMCjAKLAoMCpAKDAqUCpgKDA
+oICgwKmAqUCrQKcAq4CrQKdApwCnQKtAn8CrQKsAn8CrAKAAn8CrAKrAoACqw
+KqAoACqgKBAoACfwJ+Ap0CnQJ+Ap4CfgJ9Ap4CngJ9Ap8CfQJ8Ap8CnwJ8AqA
+CfAJ7AqACoAJ7AqECkAKPAqcCsgK0ArMCsgK3ArQCtwK1ArQCsgK4ArcCtgK1
+ArcCsgK2ArgCsgK1ArYCsgKwAq8CsQKwArICvQK/Ar4CvQK5Ar8CvQK6ArkCv
+QK7AroCvQK8ArsCwQLQAsAC1wLaAtgC2ALjAtcC5QLoAuYC8QLzAvIC8QL0Av
+MC+gL1AvsC+AL2AvkC+AL3AvYCBgMIAwcDBwMKAwYDFQMWAxQDFwMZAxgDGAM
+bAxcDtAOTA7UDtQOTA7YDkwOSA7gDkgORA7gDkQOQA7gDuAOQA6MDpQOPA6YD
+jwOOA6YDpgOOA6cDjgONA6cDpwONA6gDjQOMA6gDqAOMA6kDqQOMA6oDjAOLA
+6oDqgOLA6sDiwOKA6sDxAOfA8UDnwOeA8UDxQOeA8YDxgOeA8cDxwOdA8gDyg
+OcA8sDwAO/A4IDvwODA4IDvwO+A4MDvgO9A4MDzQOaA84DzAOaA80DzAObA5o
+DzAPLA5sDzgOaA88DuQPQA4UDuQOFA7oDhQOEA7oDugOEA7sDvAPRA4MDvAOD
+A70DzwOGA9ADmgOGA88DmgOHA4YDmgOZA4cDmQOIA4cDmQOJA4gDmQOYA4kDr
+QOsA4kDlwOJA5gDrgOXA68DrwOXA7ADlwOWA7ADsAOWA7EDlgOVA7EDsQOVA7
+IDsgOUA7MDrAOKA4kDrAOrA4oDhgOFA9ADuwNnA2YDuQN6A9ADuQNlA2QDZgO
+6A7sDpANVA1QDVQOkA6UDowNUA1MDVAOjA6QDpQNWA1UDewOzA9IDtAN7A9ID
+YwO3A7gD4wP0A/UD4wPuA90D5APtA9sD7QPcA9sDBwT4AwgEAAT/AwkECgT/A
+wsE/wP+AwsECwT+AwwE/gP9Aw0EAgT8AwME+wP6AwQEBQT6Aw4E+gP5Aw4EDg
+T5AwYEAQT3AwgE9wMBBPYDEAQRBA8EGgQbBBIEHQQaBBIEEwQcBBIEGAQZBBQ
+EFwQYBBQEFgQXBBQEFQQWBBQEHwQgBB4EIQQjBCIELwIsAi4CMQIxAi4CMAIz
+AjMCMAIyAjUCNwI0AjYCOAI7AjkCOgI9Aj0COgI8Aj8CPwI8Aj4CQQJBAj4CQ
+AJDAkMCQAJCAkUCRQJCAkQCRwJHAkQCRgJJAkkCRgJIAksCSwJIAkoCTQJNAk
+oCTAJPAk8CTAJOAlECUQJOAlACUwJTAlACUgJVAlUCUgJUAlcCVwJUAlYCWQJ
+ZAlYCWAItAlwCWgJbAl4CXgJbAl0CYAJgAl0CXwJhAqECewKjAqICYwJiAokC
+igJkAmMCigKLAosCjAJlAmQCjAKNAmYCZQKNAo4CZwJmAo4CjwJoAmcCjwKQA
+mkCaAKQApECagJpApECkgJrAmoCkgKTAmwCawKTApQCbQJsApQClQJuAm0ClQ
+KWAm8CbgKWApcCcAJvApcCmAJxAnACmAKZAnICcQKZApoCcwJyApoCmwJ0AnM
+CmwKcAnUCdAKcAp0CdgJ1Ap0CngJ3AnYCngKfAngCdwKfAqACeQJ4AqACoQJ6
+AnkCxALCAsMCxgLIAsUCxwLKAsoCxwLJAswCzgLLAs0CzwLTAtEC0gLVAtUC0
+gLUAtYC2gLXAtkC2wLeAtwC3QLgAuAC3QLfAuEC5ALiAuMC2ALoAuUC5wLqAu
+oC5wLpAuYC7QLrAuwC7wLvAuwC7gLwAv4C/AL9AgADAgP/AgEDBAMEAwEDAwM
+FAwsDCQMKAwcDDgMMAw0DEAMSAw8DEQMTAxwDGgMbAxgDOgM7AysDKgMtAzwD
+LAMdAy4DHgMsAzwDLgMvAx8DHgMvAzADIAMfAzEDMgMiAyEDMgMzAyMDIgMzA
+zQDJAMjAzQDNQMlAyQDNQM2AyYDJQM2AzcDJwMmAzcDOAMoAycDOAM5AykDKA
+M5AzoDKgMpAz8DPQM+A0ADuwOEA9EDvANnA7sDvANoA2gDvAO9A2kDagO/A8A
+DawNrA8ADwQNsA2wDwQPCA20DbgPDA8QDbwNvA8QDxQNwA3ADxQPGA3EDcQPG
+A8cDcgNyA8cDyANzA3MDyAPJA3QDdAPJA8oDdQN1A8oDywN2A3YDywPMA3cDd
+wPMA80DeAN4A80DzgN5A3kDzgPPA3oDZQO5A7oDZgNWA6UDpgNXA1cDpgOnA1
+gDWAOnA6gDWQNZA6gDqQNaA1sDrgOvA1wDXAOvA7ADXQNdA7ADsQNeA14DsQO
+yA18DXwOyA7MDewNgA7QDtQNhA2EDtQO2A2IDYgO2A7cDYwOgA6EDUQNQA6ED
+ogNSA1EDfAN9A0IDQQN9A34DQwNCA34DfwNEA0MDfwOAA0UDRAOAA4EDRgNFA
+4EDggNHA0YDggODA0gDRwOGA4cDSgNJA4cDiANLA0oDiAOJA0wDSwOJA4oDTQ
+NMA4oDiwNOA00DiwOMA08DTgPeA+8D8APfA98D8APxA+AD4QPyA/MD4gPVA+c
+D6APWA9YD6APpA9cD1wPpA+oD2APYA+oD6wPZA9kD6wPsA9oD5QPTA9QD5gM=