/* Service Startup */
        protected override void OnStart(string[] args)
        {
            /* Start Timer */
            RequestTimer = new Timer();
            UpdateTimer = new Timer();
            MailTimer = new Timer();

            /* Setup Credentials */
            MailCredentials = new System.Net.NetworkCredential("*****@*****.**", "84yvSHZpJrw7aGH");
            sClient = new Web(MailCredentials);

            /* Run once every hour */
            UpdateTimer.Interval = 1000 * 60 * 60;
            UpdateTimer.Elapsed += UpdateTimer_Elapsed;

            /* Run once every minute */
            RequestTimer.Interval = 1000 * 60;
            RequestTimer.Elapsed += RequestTimer_Elapsed;

            /* Run mailing once every minute */
            MailTimer.Interval = 1000 * 60;
            MailTimer.Elapsed += MailTimer_Elapsed;

            /* Start */
            UpdateTimer.Start();
            RequestTimer.Start();
            //MailTimer.Start();

            /* Don't start it here */
            mManager = null;

            /* Create Path */
            if (!Directory.Exists(Environment.GetFolderPath(
                Environment.SpecialFolder.CommonDocuments) + "\\EIA\\Logs\\"))
                Directory.CreateDirectory(Environment.GetFolderPath(
                Environment.SpecialFolder.CommonDocuments) + "\\EIA\\Logs\\");

            /* Log it */
            Log("Model Parser Started..");
        }
        /* Handle Requests */
        async void RequestTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            /* Read transaction requests */
            EIA.Repository.CModelRequest NextRequest = null;

            try
            {
                /* Make sure it is started */
                if (mManager == null) {
                    mManager = new Manager();
                    await mManager.Update();
                }

                /* Iterate */
                using (EIA.Repository.RequestRepository rRepo = new Repository.RequestRepository())
                {
                    /* Get next request */
                    NextRequest = await rRepo.GetNext();

                    /* Keep looping */
                    while (NextRequest != null)
                    {
                        /* Used to catch errors */
                        Boolean ParseError = false;

                        /* Set in progress */
                        await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Processing);

                        try
                        {
                            /* Handle request */
                            await mManager.HandleRequest(NextRequest);
                        }
                        catch (Exception Ex)
                        {
                            Log("Failed to parse: " + Ex.ToString());
                            ParseError = true;
                        }

                        /* Done? */
                        if (ParseError)
                            await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Cancelled);
                        else
                            await rRepo.SetRequestStatus(NextRequest.Guid, Repository.RequestStatus.Finished);

                        /* Get next request */
                        NextRequest = await rRepo.GetNext();
                    }
                }

                /* Set null */
                NextRequest = null;
            }
            catch (Exception Ex)
            {
                Log(Ex.ToString());
            }
        }