aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Graphics/Mobile/zeplin/drawable-mdpi/logo.png
blob: d9dc2cf1531eac58cb5ffe27651e7171b71102f4 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 c8 00 00 00 60 08 06 00 00 00 58 17 3d .PNG........IHDR.......`.....X.=
0020 1d 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 23 e7 49 44 41 54 78 01 ed 5d 07 60 14 55 fa 7f .....sRGB.......#.IDATx..].`.U..
0040 b3 2d 85 04 08 4d 4a 80 80 80 60 41 3c 51 d1 03 15 2b 72 96 b3 a1 a7 28 16 20 78 9e 48 17 f0 af .-...MJ...`A<Q...+r....(..x.H...
0060 86 93 13 51 69 7a 0a 21 28 1e 2a 48 b0 a0 88 8a 48 47 90 a6 88 34 a5 85 96 50 52 48 48 dd 64 77 ...Qiz.!(.*H....HG...4...PRHH.dw
0080 fe bf df ec ce 66 76 77 36 75 53 20 f3 c1 2f ef bd ef f5 ef bd ef b5 79 33 2b 44 2d 25 59 96 db .....fvw6uS.../........y3+D-%Y..
00a0 00 4b 81 b3 c0 32 20 aa 96 16 d5 28 96 21 81 ea 95 00 94 e1 42 e0 38 a0 a5 79 d5 5b 0a 23 37 43 .K...2.....(.!......B.8..y.[.#7C
00c0 02 b5 50 02 d0 88 18 e0 88 56 33 dc f6 3d b5 b0 b8 46 91 ce 73 09 98 6a 53 fd a0 08 ad 51 9e 55 ..P......V3..=...F..s..jS....Q.U
00e0 00 4d 5f 5a e2 cb 30 dc 86 04 ea 8c 04 a0 1c ad 80 fd ee d9 c2 d7 58 02 86 ad ce 08 c3 a8 a8 21 .M_Z..0...............X........!
0100 01 ad 04 d0 f9 9b 03 7b 7d b5 c2 ed 5e 0c d3 50 0e ad c0 0c 7b dd 91 00 3a 7f 53 60 97 5b 19 7c .......{}...^..P....{...:.S`.[.|
0120 8d cf c1 b0 d6 1d 69 18 35 35 24 a0 91 00 3a 7f 63 60 87 af 56 b8 dd 8b 60 5a 34 c1 0d ab 21 81 ......i.55$...:.c`..V...`Z4...!.
0140 ba 23 01 74 fe 28 e0 17 b7 32 f8 1a 9f 82 61 28 47 dd e9 0e 46 4d b5 12 40 e7 6f 00 6c f6 d5 0a .#.t.(...2....a(G...FM..@.o.l...
0160 b7 fb 13 98 66 6d 78 c3 6e 48 a0 ce 48 00 9d 3f 12 d8 e0 56 06 5f 63 1e 18 b5 ea e8 b9 ce 34 8c ....fmx.nH..H..?...V._c.......4.
0180 51 d1 9a 97 00 3a 7f 3d 60 ad af 56 b8 dd 73 61 1a ca 51 f3 cd 64 94 a0 26 24 80 ce 1f 06 ac 04 Q....:.=`..V..sa..Q..d..&$......
01a0 f4 68 0e 98 86 72 d4 44 c3 18 79 d6 bc 04 d0 f9 43 81 1f f4 34 03 bc 78 40 aa f9 52 1a 25 30 24 .h...r.D..y.....C...4..x@..R.%0$
01c0 e0 2f 81 2a 3f 29 42 e7 e7 43 be cf 81 5b fd b3 17 33 c1 7b 56 92 24 59 c7 cf 60 05 53 02 71 f1 ./.*?)B..C...[...3.{V.$Y..`.S.q.
01e0 e1 22 53 1a 21 24 d1 5d 08 f9 98 08 15 ff 11 af c5 a6 04 33 8b f3 31 2d cf c8 8d 8e cc fb 4f 61 ."S.!$.]...........3..1-......Oa
0200 55 50 c9 37 91 e6 dd 3a e9 2e 05 6f 24 50 55 ca 91 0b c5 3b a6 93 6f dd 63 c5 61 f9 7a 26 fe 90 UP.7...:...o$PU....;..o.c.a.z&..
0220 30 89 a6 90 b6 da c6 47 85 d9 7c a7 78 6b d0 8e ba 27 90 b2 d7 d8 02 c5 b8 0a c1 bf 00 a2 cb 1e 0......G..|.xk...'..............
0240 2d 28 21 ff 86 54 88 2a 23 d4 6d 3f 12 ef 0b 45 d9 57 65 99 9c 0b 09 67 ce 7c 4c 48 e6 86 02 fb -(!..T.*#.m?...E.We....g.|LH....
0260 40 4d 71 5b 0b a7 73 02 dc f7 6a 78 86 d5 47 02 dc 18 bf 03 54 b7 72 f8 14 a3 ca 9c 1d 90 72 5c @Mq[..s...jx..G.....T.r.......r\
0280 95 a5 7e ae 24 2c 99 3b 62 a2 ae af 53 dc 76 3a 3c 83 a5 91 00 15 24 46 e3 3e 1f ad 2d cf c7 4a ..~.$,.;b...S.v:<.....$F.>..-..J
02a0 95 ab 4e 92 bc 0b 7b 8f 0c ff 38 d2 09 7f 9e c1 d1 4a 80 0a f2 a9 96 71 1e da b9 d7 a9 db 74 4d ..N...{...8......J.....q......tM
02c0 a3 44 21 a4 e3 50 92 3c 45 10 92 70 c2 3c 28 ac f2 e0 ba 2d 98 d2 6b 2f 61 9d 4e 25 79 0a e8 05 .D!..P.<E..p.<(....-..k/a.N%y...
02e0 84 96 1e a5 c4 10 cd e0 7b a3 4e 08 6e c4 17 03 85 3a 7e 55 c5 62 67 58 0d fc cf 38 25 83 14 b8 ........{.N.n....:~U.bgX...8%...
0300 51 cf 4c 78 4e 48 4e ee 39 8f 08 c9 12 2f a6 0c 3c 0c bb 41 d5 21 01 28 5a 43 60 3b a0 47 c3 aa Q.LxNHN.9..../..<..A.!.(ZC`;.G..
0320 a3 0c 46 1e 86 04 6a a5 04 a0 11 e1 c0 7a 3d cd 00 8f c7 bc 06 19 12 38 27 25 20 55 b6 d4 50 00 ..F...j......z=........8'%.U..P.
0340 be d0 f4 35 d0 47 27 ad f9 e0 f5 37 96 38 3a 92 a9 20 2b 0e 4b e2 46 df ed b7 0e ed db b1 a0 5c ...5.G'....7.8:...+.K.F........\
0360 49 bc fd 6d 88 38 7c 64 88 70 4a 78 60 8b e3 de 06 11 f7 8a b8 fe 59 e5 4a 43 1b 38 2e d1 26 32 I..m.8|d.pJx`.........Y.JC.8..&2
0380 cf 5c 2b cc 52 07 1c 17 77 43 9a 4d e1 1d 29 84 a9 08 c7 c9 99 58 ca 25 09 49 da 2e 4c 21 bf 8b .\+.R...wC.M..)......X.%.I..L!..
03a0 37 9f ac fa 63 f6 b8 55 16 91 fb 47 37 e1 30 f1 41 68 6b 94 21 5a c8 52 73 94 e9 2c f6 5f c7 84 7...c..U...G7.0.Ahk.!Z.Rs..,._..
03c0 49 c6 72 52 de 26 22 43 36 8b b8 27 f3 b5 55 29 c9 5e 29 05 81 72 70 ff 42 25 78 48 27 93 15 e0 I.rR.&"C6..'..U).^)..rp.B%xH'...
03e0 f1 19 84 5d c7 cf 60 55 40 02 8f 2e 5c 33 60 d1 8e c3 73 65 a7 43 fa 4b ab c6 5f 8d 7c f6 ae fb pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Core;
using Tango.RemoteDesktop.Utils;

namespace Tango.RemoteDesktop
{
    /// <summary>
    /// Represents a generic screen capture engine.
    /// The <see cref="TFrame"/> type will be the type of difference object delivered by the engine.
    /// </summary>
    /// <typeparam name="TFrame">The type of the frame.</typeparam>
    /// <seealso cref="Tango.RemoteDesktop.IScreenCaptureEngine{TFrame}" />
    public class ScreenCaptureEngine<TFrame> : ExtendedObject, IScreenCaptureEngine<TFrame> where TFrame : class, IFrame
    {
        private Thread _captureThread;
        private Bitmap _previousBitmap;
        private bool _isDisposed;

        /// <summary>
        /// Occurs when a new screen frame is available.
        /// </summary>
        public event EventHandler<ScreenCaptureFrameReceivedEventArgs<TFrame>> FrameReceived;

        /// <summary>
        /// Gets or sets the screen capture method.
        /// </summary>
        public ICaptureMethod CaptureMethod { get; set; }

        /// <summary>
        /// Gets or sets the screen capture region.
        /// </summary>
        public CaptureRegion CaptureRegion { get; set; }

        /// <summary>
        /// Gets a value indicating whether this instance is currently capturing.
        /// </summary>
        public bool IsStarted { get; private set; }

        /// <summary>
        /// Gets or sets the frame rate per second.
        /// Default is 10.
        /// </summary>
        public int FrameRate { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to include the cursor when capturing.
        /// </summary>
        public bool CaptureCursor { get; set; }

        /// <summary>
        /// Gets or sets the bitmap comparer.
        /// </summary>
        public IBitmapComparer<TFrame> Comparer { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether to enable image comparison.
        /// </summary>
        public bool EnableComparer { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="ScreenCaptureEngine{TFrame}"/> class using the specified <see cref="IBitmapComparer{TFrame}"/>.
        /// </summary>
        /// <param name="comparer">The comparer.</param>
        public ScreenCaptureEngine(IBitmapComparer<TFrame> comparer)
        {
            FrameRate = 10;
            CaptureMethod = new CaptureMethods.GdiScreenCapture();
            CaptureRegion = new CaptureRegion(System.Windows.Forms.Screen.PrimaryScreen.Bounds);
            Comparer = comparer;
            CaptureCursor = true;

            if (Comparer != null)
            {
                EnableComparer = true;
            }
        }

        /// <summary>
        /// Start capturing.
        /// </summary>
        /// <exception cref="ObjectDisposedException">Screen capture engine cannot be started after disposed.</exception>
        public void Start()
        {
            if (_isDisposed)
            {
                throw new ObjectDisposedException("Screen capture engine cannot be started after disposed.");
            }

            if (!IsStarted)
            {
                IsStarted = true;

                _captureThread = new Thread(CaptureThreadMethod);
                _captureThread.IsBackground = true;
                _captureThread.Name = "Screen Capture Thread";
                _captureThread.Start();
            }
        }

        /// <summary>
        /// Stop capturing.
        /// </summary>
        public void Stop()
        {
            if (IsStarted)
            {
                IsStarted = false;
            }
        }

        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        public void Dispose()
        {
            if (!_isDisposed)
            {
                _isDisposed = true;
                Stop();
                CaptureMethod?.Dispose();
            }
        }

        private void CaptureThreadMethod()
        {
            Stopwatch watch = new Stopwatch();

            LogManager.Log($"Screen capture engine started with the following definitions:\nCapture Region: {CaptureRegion}\nCapture Method: {CaptureMethod.GetType().Name}\nFrame Rate: {FrameRate}\nComparer Enabled: {EnableComparer}");

            while (IsStarted)
            {
                watch.Restart();

                try
                {
                    var bitmap = CaptureMethod.GetDesktopBitmap(CaptureRegion);

                    if (CaptureCursor)
                    {
                        using (Graphics g = Graphics.FromImage(bitmap))
                        {
                            CursorUtils.ApplyCursor(g, bitmap, CaptureRegion.Left, CaptureRegion.Top);
                        }
                    }

                    if (EnableComparer && Comparer != null)
                    {
                        if (_previousBitmap == null)
                        {
                            _previousBitmap = bitmap.Clone() as Bitmap;
                            OnFrameReceived(bitmap, null, 0);
                        }
                        else
                        {
                            try
                            {
                                BitmapComparerResult<TFrame> result = Comparer.CreateDifference(_previousBitmap, bitmap);
                                _previousBitmap.Dispose();
                                _previousBitmap = bitmap.Clone() as Bitmap;
                                OnFrameReceived(bitmap, result.Frame, result.DifferenceCount);
                            }
                            catch (MaxDifferencesReachedException)
                            {
                                _previousBitmap.Dispose();
                                _previousBitmap = bitmap.Clone() as Bitmap;
                                OnFrameReceived(bitmap, null, (uint)(bitmap.Width * bitmap.Height));
                            }
                        }
                    }
                    else
                    {
                        OnFrameReceived(bitmap, null, 0);
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine($"Error in screen capture engine: {ex.Message}");
                    _previousBitmap = null;
                }

                int delay = Math.Max(5, (1000 / FrameRate) - (int)watch.ElapsedMilliseconds);
                Thread.Sleep(delay);
            }

            _previousBitmap = null;

            LogManager.Log("Screen capture engine stopped.");
        }

        private void OnFrameReceived(Bitmap currentBitmap, TFrame diffFrame, uint differenceCount)
        {
            if (!IsStarted) return;

            FrameReceived?.Invoke(this, new ScreenCaptureFrameReceivedEventArgs<TFrame>()
            {
                Frame = new ScreenCaptureFrame<TFrame>(currentBitmap, diffFrame)
                {
                    DifferenceCount = differenceCount
                }
            });
        }
    }
}
39 b7 e6 3b .4.#/.'RGl.......c7n.vwF...i9..; 19c0 f0 45 40 ce 24 ee de 41 a5 90 31 d5 2a a6 ca a7 f2 00 0d 42 6d e9 57 36 6b 98 d0 b9 49 c4 bb 13 .E@.$..A..1.*......Bm.W6k...I... 19e0 af bf f4 18 e5 39 b7 bc f2 0b 0f cb 12 59 39 a7 91 1d 8e 46 55 c2 37 a1 1c e6 24 d5 25 1c 45 69 .....9.......Y9....FU.7...$.%.Ei 1a00 b0 e7 7b dc 9c fb 25 b1 49 f0 2b 27 bc 9a 5e 15 24 33 3f 2e 6d dc df f9 95 25 74 24 f3 81 32 65 ..{...%.I.+'..^.$3?.m....%t$..2e 1a20 f5 66 ec 0f 38 e2 c5 33 9f 8c 58 84 1f 80 e2 e2 ba be 84 7d 85 32 ec 04 4e 82 37 94 65 39 19 4f .f..8..3..X........}.2..N.7.e9.O 1a40 e8 77 61 e3 ff 89 a8 e7 5c e2 7a 41 8b bb 0c 7f 62 33 f8 11 1a 94 f7 f0 ff 06 f4 00 ba 00 17 01 .wa.....\.zA....b3.............. 1a60 3c 0e c6 94 81 22 64 9c 92 e5 b4 53 c7 9d e9 27 93 44 4e d6 46 67 5e ce 26 91 97 bb cb 16 23 0e <...."d....S...'.DN.Fg^.&.....#. 1a80 48 dd ab 48 98 cc f8 3c 20 c8 56 9a b0 65 f7 05 d9 05 ce ce 99 0e b9 63 4e 81 a3 93 c3 81 db f9 H..H...<..V..e.........cN....... 1aa0 b2 13 9d 90 5f eb 70 16 d6 b7 59 f7 36 b0 88 5f a2 f3 c3 93 ca fd 33 07 81 64 34 72 4e 5b 7c 3d ...._.p...Y.6.._......3..d4rN[|= 1ac0 70 1f 3a 3d f6 91 9c 39 cc 43 c4 d4 81 2b bc 82 8f 9c cd af bf 7f 0c 45 6a 8a 70 12 4a 75 19 be p.:=...9.C...+.........Ej.p.Ju.. 1ae0 fc 71 cc 2b 4c 30 1d ca 6f b7 cb 0b 51 1e 3c 03 c3 cb 5a 66 f9 39 31 65 08 8f 74 cb 47 fc 6e d6 .q.+L0..o...Q.<...Zf.91e..t.G.n. 1b00 a6 33 7f 41 d9 ef 02 fe 8a 91 86 e5 0f c5 7a 15 b5 c0 c1 90 6b 32 c6 37 b4 e4 bd c8 6b 39 86 fe .3.A..........z.....k2.7....k9.. 1b20 1f b4 0f 03 4b ca 4c 57 41 02 45 40 e3 62 63 81 8a 08 91 83 91 cc 77 ca 0e 14 cd e0 d7 16 09 f0 ....K.LWA.E@.bc.......w......... 1b40 ec 3f 6f 76 b4 08 8b 4a 0f f8 11 06 86 c9 9f 1b 23 5e 7f 8a 4b 8f aa 27 fe ce 48 4e 4e 23 61 c1 .?ov...J........#^..K..'..HNN#a. 1b60 fb 28 c1 fc 69 04 2a 5f 96 b5 31 f6 2a 85 a2 5e bd ec 80 f5 ad fa 1a 1a 39 18 12 30 24 60 48 c0 .(..i.*_..1.*..^........9..0$`H. 1b80 90 80 21 01 43 02 86 04 0c 09 18 12 30 24 60 48 c0 90 80 21 01 43 02 86 04 0c 09 18 12 30 24 60 ..!.C.......0$`H...!.C.......0$` 1ba0 48 c0 90 80 21 01 43 02 86 04 0c 09 18 12 30 24 60 48 c0 90 80 21 01 43 02 86 04 0c 09 18 12 30 H...!.C.......0$`H...!.C.......0 1bc0 24 60 48 c0 90 80 21 01 43 02 86 04 0c 09 18 12 30 24 60 48 c0 90 80 21 01 43 02 86 04 0c 09 18 $`H...!.C.......0$`H...!.C...... 1be0 12 30 24 60 48 c0 90 80 21 81 f3 5c 02 78 03 95 bf 1e 10 05 e0 5d 73 83 82 2a 01 08 d5 06 b4 03 .0$`H...!..\.x.......]s..*...... 1c00 7a 00 37 00 57 02 6d 01 be f6 7b de 10 ea 73 09 50 e6 0e 84 b0 d1 c0 05 e7 82 00 dc 75 83 21 4f z.7.W.m...{...s.P...........u.!O 1c20 38 17 ca 7b 4e 94 11 c2 8c 04 a6 00 e9 80 1e d9 c1 e4 47 25 ce 79 42 3d ee 76 57 70 15 cc 52 bf 8..{N.............G%.yB=.vWp..R. 1c40 0f 80 30 5d 80 5c 20 15 c0 e7 64 82 4b 48 73 00 f0 4d b0 d2 46 3a 54 7e d2 39 ab 20 41 17 72 65 ..0].\....d.KHs..M..F:T~.9..A.re 1c60 9a 0c 82 64 27 99 07 fc 1d f8 05 78 1d d8 03 e4 00 fc 58 44 33 a0 09 3e 18 51 ae 4f a1 22 4e 6d ...d'......x......XD3..>.Q.O."Nm 1c80 a5 2b dc 05 bb 11 26 3f b5 f4 ad db 1d c8 78 15 1e 61 6e b4 81 19 ec 0f 2b dc 8e 34 f9 35 9b 52 .+....&?......x..an.....+..4.5.R 1ca0 95 15 61 ea 04 d5 2a 05 81 c4 f9 53 0c 54 8e 95 40 1f 28 42 d5 7c 8f 09 89 d7 12 c2 ef 5c 28 c4 ..a...*....S.T..@.(B.|.......\(. 1cc0 cf 8d f2 cb 96 01 15 04 83 c7 85 f0 bf 17 c8 04 18 af 3e 60 50 15 4b a0 b6 29 48 57 77 7d 3f ab ..................>`P.K..)HWw}?. 1ce0 88 72 a0 13 71 7f c2 34 5a 01 cd 01 76 a2 c3 c0 7e a4 f7 1b 4c 5d 42 bc 28 78 f0 3b c4 31 40 43 .r..q..4Z...v...~...L]B.(x.;.1@C 1d00 80 5f ea c3 47 cd f8 0d 29 b1 1c 71 d9 29 03 92 3b 3e bf 21 c6 3c 1b 01 29 40 12 b0 15 71 bd 3f ._..G...)..q.)..;>.!.<..)@...q.? 1d20 a2 0c a6 86 98 17 69 3a f0 32 d2 b9 02 e1 7f 55 38 fe 7f 46 80 95 0b bc 0f d0 ae 2a 17 ac 2e 72 ......i:.2.....U8..F.......*...r 1d40 d7 bf 3d 5c 54 26 b5 fe 21 b0 f3 a3 70 bf 23 ed 2d 30 fd 08 f1 fa 80 c9 70 ea a7 3c b9 f4 e3 67 ..=\T&..!...p.#.-0......p..<...g 1d60 9d d2 11 67 9d 5f 04 30 e0 cf 3c 28 b3 0e 00 67 f8 24 80 3f 85 77 0a a6 2f f1 57 87 d8 26 fc 70 ...g._.0..<(...g.$.?.w../.W..&.p 1d80 1d c3 73 cf c5 76 e1 0f 22 ed 87 69 50 59 24 00 21 f6 07 48 ec 00 65 26 84 e7 49 c9 47 40 1a a0 ..s..v.."..iPY$.!..H..e&..I.G@.. 1da0 52 1e 2c 45 aa 03 e6 f7 80 ee e6 16 fc 4f 34 e1 68 cd 02 f0 a5 50 85 b8 e6 1f a2 57 18 f0 99 ef R.,E.........O4.h....P.....W.... 1dc0 12 a0 00 20 39 80 4c c5 e6 fa b3 17 46 6f bd b8 e4 c1 ef 73 80 71 99 4e 36 f0 91 5e 58 f0 9b 00 ....9.L.....Fo.....s.q.N6..^X... 1de0 2c c7 db c0 50 80 74 b7 6f 58 f0 3a 2a 3e c5 7f f2 61 a5 1c 54 da 0a 0b 15 d8 8b c0 4b 51 03 f8 ,...P.t.oX.:*>...a..T.......KQ.. 1e00 98 7e ca 01 ff 86 40 a2 4f 38 b5 fe 63 b5 09 23 8c ba 07 d1 06 e7 1e 52 25 ca 38 1e 28 fd 73 a3 .~....@.O8..c..#.......R%.8.(.s. 1e20 da 84 eb aa 1d 82 ba cc 2d b9 3d 30 39 fa 97 89 10 56 6d 88 15 b0 f3 f7 37 94 91 19 a6 19 e0 49 ........-.=09....Vm.....7......I 1e40 d8 07 00 69 a6 5e 82 e0 b3 63 75 03 5a 02 f8 a6 aa d2 79 ad b0 f7 02 58 16 76 fc cb 7c e3 82 d7 ...i.^...cu.Z.....y....X.v..|... 1e60 19 20 2d 05 ba 02 f8 8c 9f 12 b7 31 ec ff 00 ce 00 39 40 20 c5 64 79 95 11 17 e6 7f 01 76 1e 75 ..-........1.....9@..dy......v.u 1e80 14 f7 64 07 1e 67 17 96 a1 3d 30 00 20 3d e6 09 e0 b6 80 c7 32 ff 15 60 7d 3c 33 0c ec 4d 81 ff ..d..g...=0..=......2..`}<3..M.. 1ea0 00 24 7e 5e d6 8b c0 a3 9c 88 4f 01 52 18 a0 f0 bc 02 c2 01 3e 07 1a 76 ec f7 00 ca 9d b3 2d f9 .$~^......O.R.......>..v......-. 1ec0 e1 aa 5d 8d e3 f6 87 21 2f 03 ee 01 58 7e ce 26 0c 7b 15 b0 06 20 3d ad c6 31 cc 52 24 00 61 7d ..]....!/...X~.&.{....=..1.R$.a} 1ee0 a8 88 0c 1d 07 e6 2b c0 a5 a5 44 61 e3 fc 05 20 bd ac 17 16 7c 36 f6 61 40 6f fa d7 8b e2 e1 21 ......+...Da........|6.a@o.....! 1f00 4e 5f 80 f4 8c 87 e9 b6 80 77 b9 e2 83 72 fa fa d1 0d 3f 35 ee d4 00 fe 1c d1 95 25 06 4c 76 6a N_.......w...r....?5.......%.Lvj 1f20 2a c1 1b da b0 70 87 02 94 c5 17 ee 34 ef 85 9d c4 9f ee 2e 17 21 ce 66 e0 64 a0 48 f0 9b 0f 90 *....p......4........!.f.d.H.... 1f40 94 41 c2 37 1c f8 2c 23 95 e3 43 5f 3f 3d 37 c2 a9 03 d7 84 00 fe 3c b2 e6 2c 1f 70 ef a5 17 af .A.7..,#..C_?=7.......<..,.p.... 1f60 3a 79 ca 88 57 9d 19 96 21 af 41 08 c3 0d 2b cb 16 07 fc 0e 01 72 14 e7 c7 b5 03 cd 2a 12 c2 91 :y..W...!.A...+......r......*... 1f80 74 37 f5 58 e7 3a e0 c7 3d 08 97 2a e5 ad f3 6e 26 0c e2 da d9 97 4a cc 17 81 bf 07 8e 03 37 f8 t7.X.:..=..*...n&.....J.......7. 1fa0 46 74 bb 39 d3 29 fb 1b 94 71 1f ec 4b 80 c1 28 23 4f ec 54 1a 00 0b 7f 0b 43 55 32 75 3f e4 99 Ft.9.)...q..K..(#O.T.....CU2u?.. 1fc0 21 d4 80 65 30 59 97 66 48 5f 19 f5 cb 10 de 37 08 97 8b ac 73 a2 af 47 45 dc a8 f3 31 c4 e3 a0 !..e0Y.fH_.....7....s..GE...1... 1fe0 d5 ac 22 f1 ab 23 8e a5 3a 32 29 4f 1e 10 1a 3b f9 54 34 e2 3b 30 6f 03 1e 02 ee 01 26 02 fc bd .."..#..:2)O...;.T4.;0o.....&... 2000 0d fe 9a d2 cf b0 eb 91 ac c7 74 f3 b2 60 b2 71 b9 41 cc 75 f3 3c 06 d2 e5 3a f8 7a a0 23 c0 0d ..........t..`.q.A.u.<...:.z.#.. 2020 2e 3f d6 5d 0f 50 d7 ec e5 55 2c 7e ad 9d a3 2d 3b 7e 17 40 8f d8 c9 8f 68 3c a8 04 ac eb 40 60 .?.].P...U,~...-;~.@....h<....@` 2040 3a e2 32 4f ee c7 36 23 ad f5 30 49 aa 82 04 1a 2c 38 73 c5 20 5c 4f a0 05 a0 6e d6 59 97 1e 00 :.2O..6#..0I....,8s..\O...n.Y... 2060 a9 dc 75 71 45 f3 fc 9e 65 b2 db 1d 0c 83 f5 e1 d1 75 ad a4 8a 0a aa ca 2b 43 45 01 96 02 8f 23 ..uqE...e........u......+CE....# 2080 33 fe 5c d6 6b 40 2b 20 11 1d a0 22 a3 67 40 e5 41 7a 7d 91 ee 09 60 39 30 0e b8 09 a0 82 38 01 3.\.k@+....".g@.Az}...`90.....8. 20a0 9e 00 55 86 52 11 99 a3 b6 de 60 c4 7a a8 1d 9e 0a b5 16 ee 6d c0 f3 08 6f 86 79 37 d0 09 50 67 ..U.R.....`.z.......m...o.y7..Pg 20c0 0f 58 05 15 9d e4 27 03 c4 a9 07 7c 0e bf 43 c0 6c a0 3f d0 19 e0 09 d5 59 c0 6f 60 00 af 3c d4 .X....'....|..C.l.?.....Y.o`..<. 20e0 d8 1d 98 69 05 8b 02 b6 4b b0 32 a8 4c 3a 7a 8d 56 99 f4 aa 24 2e 3a 0e 8f 11 b9 c4 6a 0b f3 51 ...i....K.2.L:z.V...$.:.....j..Q 2100 e0 06 e0 6b a0 d2 84 34 a3 90 c8 a7 c0 31 80 b3 d3 4a 6d a2 f0 e7 06 fb 09 2d af 9c 76 76 f4 22 ...k...4.....1...Jm......-..vv." 2120 80 cb 3c 0f 21 dd 70 38 b8 d6 f7 28 88 db 73 1a cc 8f 81 fb 81 e7 81 23 00 3b bd 4a 6a 78 3f 05 ..<.!.p8...(..s........#.;.Jjx?. 2140 41 80 b1 c0 7d c0 eb c0 1b a8 4b 06 4c 0f 21 4f 1e 52 5c e2 61 94 df 92 e7 8e c2 d9 b6 4e 50 ad A...}.....K.L.!O.R\.a........NP. 2160 9d 41 02 48 7f b5 9b cf 51 31 58 74 33 12 8a 04 5e f5 55 8e 20 65 40 05 3c 89 b4 7d 47 4a f5 19 .A.H....Q1Xt3...^.U..e@.<..}GJ.. 2180 88 da e1 d5 ec b8 be a7 b2 72 d6 b8 0e 78 1b 71 a9 60 2a 05 9c 41 10 e0 5e e0 0f 84 1f 07 78 29 .........r...x.q.`*..A..^.....x) 21a0 87 1a b9 92 66 9a 3b 7e c0 e5 5d 25 d3 af 75 d1 cf 35 05 e1 9a 9a c4 8d 6f b0 88 1b 60 52 8a cb ....f.;~..]%..u..5......o...`R.. 21c0 f0 fb 5b 61 19 61 c4 e6 48 7b 19 a0 57 5e 75 06 f0 52 10 74 ec 42 84 ff 2f c0 e5 24 97 32 73 00 ..[a.a..H{..W^u..R.t.B../..$.2s. 21e0 0f c1 3f 1f 0e 3b a0 c6 f7 f8 c1 c2 ba 9c d0 32 7c ec 65 ad 8b 7a f8 e0 13 5d b9 f6 43 5e 4f 5f ..?..;.........2|.e..z...]..C^O_ 2200 8f f3 d5 5d 56 81 d5 78 fd d1 d9 b8 fe 55 cf fe 7f 09 62 81 0e ba d3 ea 16 20 4d 75 39 a1 1d c5 ...]V..x.....U....b.......Mu9... 2220 03 04 f5 63 3f 01 0e cb cd 25 9c 2f 05 9a 41 18 ee 1d 60 31 f0 2f 28 84 97 02 d1 13 c4 59 44 6f ...c?....%./..A...`1./(......YDo 2240 14 67 5d f8 6c 26 94 81 74 a8 b4 ba a4 bb e3 70 63 af 47 3f 82 c9 59 84 27 6d dc 17 9e f7 54 ab .g].l&..t......pc.G?..Y.'m....T. 2260 f6 20 10 7a 0c 24 fe 12 c0 8d 2d c1 c6 e0 09 47 07 80 a7 59 9c 41 b8 b6 de 03 33 58 b4 01 09 1d ...z.$....-....G...Y.A....3X.... 2280 00 26 22 7f 76 ba 8d 00 47 ee 48 a0 3d c0 0d 3c 89 23 77 20 ea 87 b8 1c d5 ff 04 b2 01 ee 95 7a .&".v...G.H.=..<.#w............z 22a0 01 4f 02 9c 99 12 00 5f 52 67 00 3f 05 40 fd b8 99 e6 72 29 10 31 8e 1a 5f 1b 66 1e 1c ef 01 df .O....._Rg.?.@....r).1.._.f..... 22c0 a1 3c f1 30 39 73 71 69 c7 99 e5 1a e0 36 80 14 a8 2e 9b e1 f7 2c 30 1b f1 99 16 af 8e ec 80 a9 .<.09sqi.....6.......,0......... 22e0 10 ec 7c 66 31 1e 8e 59 c0 af b0 7f 04 73 1f 70 1a 68 0d 6c 41 18 ca d3 a0 aa 90 00 04 7e 1d 70 ..|f1..Y.....s.p.h.lA........~.p 2300 02 f0 25 36 0c 1f aa 0d 00 b8 e9 f5 22 f0 f8 ae 08 69 ac 97 87 c6 01 bf 8f 94 10 ae cd b1 c6 47 ..%6........"....i.............G 2320 79 a0 77 11 fc 78 3a 66 77 87 51 0d e6 bb 1d e0 93 ec 18 af 48 70 80 c7 a7 ef a4 03 00 9f d5 f0 y.w..x:fw.Q.........Hp.......... 2340 6a 87 4a bc 72 b2 00 50 97 70 5e d1 c1 7f d8 1d f0 41 2f 8f 32 38 10 6f 1b e0 a7 58 8c 0a 3e af j.J.r..P.p^......A/.28.o...X..>. 2360 a2 b0 3c be 94 0e 06 9f 94 07 cc 0f 7e 7c c1 29 01 e0 03 4b 12 07 0e 3f 02 9f b7 04 f8 d0 51 5b ..<.........~|.)...K...?......Q[ 2380 5f da 87 69 03 c3 5d e2 83 42 86 45 98 dd c0 2e 6d 3c c3 5e 8a 04 20 b0 08 20 1a e8 04 34 07 aa _..i..]..B.E....m<.^.........4.. 23a0 65 29 c8 7c 00 1e c9 76 00 1a 01 81 d6 e2 4a 0d e0 af 2a 08 47 55 36 36 e3 b3 dc 3c 22 ae 51 42 e).|...v......J...*.GU66...<".QB 23c0 19 c2 01 5e b3 61 79 02 2d b9 74 cb c8 f0 00 af 85 34 d2 0d e0 66 c2 df 06 50 56 6c 23 bf 81 ab ...^.ay.-.t......4...f...PVl#... 23e0 a4 b8 86 5f 1d 90 00 3a 85 97 82 d4 81 2a d7 b9 2a 56 cb c8 5c e7 a4 6a 54 f8 bc 91 80 a1 20 e7 ..._...:.....*..*V..\..jT....... 2400 4d 53 1a 15 a9 0a 09 18 0a 52 39 a9 f2 66 ec 64 80 27 5f 06 9d 87 12 f8 7f 04 ed ce b3 51 26 c9 MS.......R9..f.d.'_..........Q&. 2420 1e 00 00 00 00 49 45 4e 44 ae 42 60 82 .....IEND.B`.