Verizon Wireless Data Usage Checker

Post your working scripts, libraries and tools for AHK v1.1 and older
User avatar
DataLife
Posts: 464
Joined: 29 Sep 2013, 19:52

Verizon Wireless Data Usage Checker

08 Nov 2013, 02:13

Verizon Wireless Data Usage Checker (Version 1.5)
Written and tested with AutoHotkey V1.1.13.01 Ansi 32 bit on Windows 7 Home Premium

I have a Verizon Wireless Mifi device to access the internet. Verizon will email data usage alerts when I reach a certain amount of data usage. I think it is 25%, 50%, 75% and 90%.

I wanted to be able to easily check my usage more often then Verizon sends out the email alerts so I wrote this script.

This script will open a hidden internet explorer window, log into your account and retrieve your usage details, hourly, daily or weekly and displays it in a notification window. It defaults to check every 24 hours.

You will need to have a verizon account at https://login.verizonwireless.com/amserver/UI/Login and populate the username and password fields at the beginning of the script and have internet explorer installed on your computer for this script to work.

More notes on how the program works is at the beginning of the script.

Download link: http://dl.dropbox.com/u/97612891/Verizon/Verizon.ahk (Right Click Save Target As)

Code: Select all


;Verizon Wireless Data Usage Checker Version 1.5, written and tested with AutoHotkey V1.1.11.02, Ansi 32 bit on Windows 7 Home Premium

;You will need to have a verizon account at https://login.verizonwireless.com/amserver/UI/Login and populate the username and password fields below and have internet explorer installed on your computer for this script to work.

;This script will open internet explorer, log into your account and retrieve your usage details every hour, every day or every week. Defaults to once a day.

;Fill in your Verzion username and password and READ THE HELPTEXT BELOW
;------------------------------------------------------User Configuration Section Begins---------------------------------------------------------------------
UserName =   ;UserName for https://login.verizonwireless.com/amserver/UI/Login
Password =    ;Password for https://login.verizonwireless.com/amserver/UI/Login
MainWindowColor = b3cde1
Show_IE_Window_While_CheckingUsage = no ;choose yes or no to show the internet explorer webpage while retrieving stats
;Show_IE_Window_While_CheckingUsage = yes
;------------------------------------------------------User Configuration Section Ends-----------------------------------------------------------------------

;------------------------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------Do not alter script below this line-------------------------------------------------------------------
ProgramName = Verizon Wireless Data Usage Checker
Version = 1.5
ProgramInfo = Written and tested with AutoHotkey V1.1.13.01, Ansi 32 bit on Windows 7 Home Premium
Author = DataLife
AutoHotkeyPost = http://www.ahkscript.org/boards/viewtopic.php?f=6&t=553

HelpText =
(
(1)  USE AT YOUR OWN RISK. Do not rely on my Usage Calculations and reporting to avoid costly "Data Usage overages".
      A. I am simply retrieving the Data Usage that Verizon is reporting on their webpage.
      B. I do not guarantee the information I present in the Usage Info Groupbox is without flaws.
      C. If in doubt that this information is correct then manually log into the Verizon website, retrieve the Data Usage details and do your own calculations.
      D. If you find any errors in my calculations please let me know.
   
(2)  Notication Window
      Provide visual indicators of the status of your data usage.
      A. Green Notification Window:
          All is good. The last usage check was successful and you have not exceeded your Usage Limit.
   
      B. Yellow Notification Window:
          The last usage check failed to get the stats.
          If there is an asterisk in front of the time of the Last Unsuccessful Update then no internet connection was detected while attempting to get the usage stats.
          If there is not an asterisk in front of the time of the Last Unsuccessful Update then the reason for the failed update check is not known.
          It is possible the computer lost temporary or permanent connection to the internet or the script could not log in while attempting an update.
  
     C. Red Notification Window:
          You have exceeded your usage limit.
      
     D. Blue Notification Window:
         Notificatin Window is only blue the very first time the script is run, due to no Check Usage Update has been attempted.

(3)  If the script fails to get the correct stats it will attempt 3 times then give up, unless it detects no internet connection, then it gives up immediately.
(4)  When the "Check Usage" radio buttons (Check How Often) are clicked the new time period immediately starts, disregarding any time remaining on the
       previous choice.
(5)  Update Now button does not affect the next scheduled update check.
(6)  Defaults to check once every 24 hours. Options allow for Never, Hourly, Daily & Weekly.
(7)  Double-click any Notification Window text to Update Usage Stats immediately (Same thing as "Update Now" button from the Main Menu).
(8)  Click and drag Notification Window to place anywhere on screen and the script will remember the position.
(9)  Click and drag Main Window to place anywhere on screen and the script will remember the position.
(10) When you see "days left in usage cycle" in the Usage Info GroupBox on the main gui, days always includes today.
(11) When the update fails due to no internet connection an asterisk is placed before the time on "Last Unsuccessful Update".

Credits:
(1)  Thanks to Veovis for "Include a bitmap in your uncompiled script!!!" found here http://www.autohotkey.com/forum/topic10957.html
      and aCkRiTe modified version of Veovis' writefile function to include a bitmap in an uncompiled script found here
      http://www.autohotkey.com/forum/topic12220.html
(2)  Thanks to Khalid for "Simple GUI title animation" found here http://www.autohotkey.com/board/topic/86026-simple-gui-title-animation/
(3)  Thanks to joedf for his Check Internet Connection function found here http://www.ahkscript.org/boards/viewtopic.php?f=5&t=349#p3292
(4)  If I missed crediting anyone please let me know.
)

#SingleInstance,force
DetectHiddenWindows,On
ComObjError(false)
OnExit,OnExit
SetFormat, FloatFast, 0.25

if (Username = "" or Password = "")
 {
  MsgBox,4112,Need Credentials,Please provide your Verizon Username and Password in the configuration section of the script.`n`nScript will now exit
  ExitApp
 }

IniRead, LastUpdated,config.ini,Details,LastUpdated, %a_space%                 ;For display purposes
IniRead, FailedUsageCheck,config.ini,Details,FailedUsageCheck, %a_space%       ;For display purposes
IniRead, CheckHowOften,config.ini,Details,CheckHowOften,Daily
IniRead, NextScheduledUpdateCheck,config.ini,Details,NextScheduledUpdateCheck,%a_space%
if NextScheduledUpdateCheck =
 {
  NextScheduledUpdateCheck += 1, days
  StringTrimRight,NextScheduledUpdateCheck,NextScheduledUpdateCheck,2
  NextScheduledUpdateCheck := ( NextScheduledUpdateCheck 00 )
  IniWrite,%NextScheduledUpdateCheck%,config.ini,Details,NextScheduledUpdateCheck
 }
FormatTime, NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy ;For display purposes

gosub, JoinImage
gosub, CrunchNumbers
gosub, CreateNotificationWindow

Menu, TRAY, Icon, Verizon.ico
Menu, tray, add,
Menu, tray, add, About, About
Menu, tray, add, Help, UserHelp
Menu, tray, add, Show Menu, ShowMenu

Gui 1: color, %MainWindowColor%
Gui 1: font, bold
Gui 1: Add, GroupBox, x12 y10 w350 h170 , Most Recent Usage Details
Gui 1: font,
Gui 1: add, text,   x30  y35  h20 w320 vAccumulatedUsage                , Usage:  %CurrentUsage% %Units% of %MaxUsageAllowed% %Units%
Gui 1: add, text,   x30  y55  h20 w320 vUsageCycle                      , Usage Cycle Ends:  %UsageCycle%
Gui 1: add, text,   x30  y75  h20 w160                                  , Last Successful Update:
Gui 1: add, text,   x155 y75  h20 w170 vLastChecked                     , %LastUpdated%
Gui 1: add, text,   x30  y95  h20 w160                                  , Last Unsuccessful Update:
Gui 1: add, text,   x167 y95  h20 w170 vFailedUsageCheck                , %FailedUsageCheck%

Gui 1: add, text,   x30  y115 h20 w160                                  , Next Scheduled Update:
Gui 1: add, text,   x155 y115 h20 w170 vNextScheduledUpdateCheckDisplay , %NextScheduledUpdateCheckDisplay%

Gui 1: add, button, x35  y145     w80  gCheckUsage                      , Update Now
Gui 1: add, button, x147 y145     w80  gOnExit                          , Exit Program
Gui 1: add, button, x258 y145     w80  gHideGuiOne                      , Close Window

Gui 1: font, bold
Gui 1: Add, GroupBox, x12 y185 w350 h120 , Usage Info
Gui 1: font,
Gui 1: Add, Text, x22 y210 w330 h90 vUsageInfoGroupBox, %UsageInfoGroupBox%

Gui 1: font, bold
Gui 1: Add, GroupBox, x12 y310 w350 h130 , Notification Window
Gui 1: font,
;CheckBox----------------------------------------------------------------------------------------------------------------------------------
IniRead,AlwaysShowNotificationWindow,config.ini,Details,AlwaysShowNotificationWindow,1
if AlwaysShowNotificationWindow = 1
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, CheckBox, x22 y330 w190 h20 gAlwaysShowNotificationWindow vAlwaysShowNotificationWindow %ShowCheckMark% , Always Show Notification Window
;CheckBox----------------------------------------------------------------------------------------------------------------------------------
IniRead,ShowUsageCycleinNotificationWindow,config.ini,Details,ShowUsageCycleinNotificationWindow,0
if ShowUsageCycleinNotificationWindow = 1
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, CheckBox, x22 y350 w250 h15 gShowUsageCycleinNotificationWindow vShowUsageCycleinNotificationWindow %ShowCheckMark%, Show Usage Cycle Ends in Notification Window
;CheckBox----------------------------------------------------------------------------------------------------------------------------------
IniRead,ShowLastSuccessfulUpdateDateInNotificationWindow,config.ini,Details,ShowLastSuccessfulUpdateDateInNotificationWindow,0
if ShowLastSuccessfulUpdateDateInNotificationWindow = 1
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, CheckBox, x22 y370 w300 h15 gShowLastSuccessfulUpdateDateInNotificationWindow vShowLastSuccessfulUpdateDateInNotificationWindow %ShowCheckMark%, Show Last Successful Update date in Notification Window
;CheckBox----------------------------------------------------------------------------------------------------------------------------------
IniRead,ShowLastUnsuccessfulUpdateDateInNotificationWindow,config.ini,Details,ShowLastUnsuccessfulUpdateDateInNotificationWindow,0
if ShowLastUnsuccessfulUpdateDateInNotificationWindow = 1
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, CheckBox, x22 y390 w330 h15 gShowLastUnsuccessfulUpdateDateInNotificationWindow vShowLastUnsuccessfulUpdateDateInNotificationWindow %ShowCheckMark%, Show Last Unsuccessful Update date in Notification Window
;CheckBox----------------------------------------------------------------------------------------------------------------------------------
IniRead,ShowNextScheduledUpdateInNotificationWindow,config.ini,Details,ShowNextScheduledUpdateInNotificationWindow,0
if ShowNextScheduledUpdateInNotificationWindow = 1
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, CheckBox, x22 y410 w330 h15 gShowNextScheduledUpdateInNotificationWindow vShowNextScheduledUpdateInNotificationWindow %ShowCheckMark%, Show Next Scheduled Update date in Notification Window
;GroupBox----------------------------------------------------------------------------------------------------------------------------------
Gui 1: font, bold
Gui 1: Add, GroupBox, x12 y445 w350 h110 , Check Usage
Gui 1: font,
;Radio----------------------------------------------------------------------------------------------------------------------------------
if CheckHowOften = Never
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, Radio, x22 y465 w330 h20 gCheckUsageNever %ShowCheckMark%, Never
;Radio----------------------------------------------------------------------------------------------------------------------------------
if CheckHowOften = Hourly
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, Radio, x22 y485 w330 h20 gCheckUsageHourly %ShowCheckMark%, Hourly
;Radio----------------------------------------------------------------------------------------------------------------------------------
if CheckHowOften = Daily
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, Radio, x22 y505 w330 h20 gCheckUsageDaily %ShowCheckMark%, Daily
;Radio----------------------------------------------------------------------------------------------------------------------------------
if CheckHowOften = Weekly
 ShowCheckMark = Checked
else
 ShowCheckMark =
Gui 1: Add, Radio, x22 y525 w330 h20 gCheckUsageWeekly %ShowCheckMark%, Weekly
;Show----------------------------------------------------------------------------------------------------------------------------------
IniRead, XPOS,config.ini,Details,VerizonWirelessDataUsageCheckerXpos,%a_space%
IniRead, YPOS,config.ini,Details,VerizonWirelessDataUsageCheckerYpos,%a_space%
Gui 1: show, %XPOS% %YPOS% w375 h565,%ProgramName%
Gui 1: +HWndGUI_ID
if CheckHowOften <> Never
 SetTimer,CheckTime,10000                                                      ;every 10 seconds
Return
OnDoubleClickOnGui2CheckUsage:                                                 ;double-click detected on Notification Window initates Check Usage Update
if A_GuiEvent = DoubleClick
 gosub CheckUsage
return
;-----------------------------------------------------------------------------------------------------------------------------------------------------------|
AlwaysShowNotificationWindow:
Gui 1: submit, nohide
IniWrite,%AlwaysShowNotificationWindow%,config.ini,Details,AlwaysShowNotificationWindow
gosub, CreateNotificationWindow
return
ShowUsageCycleinNotificationWindow:
control,Disable,,button8,ahk_id %GUI_ID%
Gui 1: submit, nohide
IniWrite,%ShowUsageCycleinNotificationWindow%,config.ini,Details,ShowUsageCycleinNotificationWindow
Gui 2: destroy
gosub, CreateNotificationWindow
control,Enable,,button8,ahk_id %GUI_ID%
return
ShowLastSuccessfulUpdateDateInNotificationWindow:
control,Disable,,button9,ahk_id %GUI_ID%
Gui 1: submit, nohide
IniWrite,%ShowLastSuccessfulUpdateDateInNotificationWindow%,config.ini,Details,ShowLastSuccessfulUpdateDateInNotificationWindow
Gui 2: destroy
gosub, CreateNotificationWindow
control,Enable,,button9,ahk_id %GUI_ID%
return
ShowLastUnsuccessfulUpdateDateInNotificationWindow:
control,Disable,,button10,ahk_id %GUI_ID%
Gui 1: submit, nohide
IniWrite,%ShowLastUnsuccessfulUpdateDateInNotificationWindow%,config.ini,Details,ShowLastUnsuccessfulUpdateDateInNotificationWindow
Gui 2: destroy
gosub, CreateNotificationWindow
control,Enable,,button10,ahk_id %GUI_ID%
return
ShowNextScheduledUpdateInNotificationWindow:
control,Disable,,button11,ahk_id %GUI_ID%
Gui 1: submit, nohide
IniWrite,%ShowNextScheduledUpdateInNotificationWindow%,config.ini,Details,ShowNextScheduledUpdateInNotificationWindow
Gui 2: destroy
gosub, CreateNotificationWindow
control,Enable,,button11,ahk_id %GUI_ID%
return
CheckUsageNever:
Gui 1: submit, nohide
IniWrite,Never,config.ini,Details,CheckHowOften
CheckHowOften = Never
NextScheduledUpdateCheckDisplay = Never
SetTimer,CheckTime,off
GuiControl,1:,NextScheduledUpdateCheckDisplay,Never
GuiControl,2:,NotificationWindowNextScheduledUpdate,Next Scheduled Update:`nNever
return
CheckUsageHourly:
Gui 1: submit, nohide
IniWrite,Hourly,config.ini,Details,CheckHowOften
CheckHowOften = Hourly
SetTimer,CheckTime,5000                                                        ;timer may be off due to the above CheckUsageNever
NextScheduledUpdateCheck =
NextScheduledUpdateCheck += 60, minutes
StringTrimRight,NextScheduledUpdateCheck,NextScheduledUpdateCheck,2
NextScheduledUpdateCheck := ( NextScheduledUpdateCheck 00 )
IniWrite,%NextScheduledUpdateCheck%,config.ini,Details,NextScheduledUpdateCheck
FormatTime,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy
GuiControl,1:,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheckDisplay%
GuiControl,2:,NotificationWindowNextScheduledUpdate,Next Scheduled Update:`n%NextScheduledUpdateCheckDisplay%
return
CheckUsageDaily:
Gui 1: submit, nohide
IniWrite,Daily,config.ini,Details,CheckHowOften
CheckHowOften = Daily
SetTimer,CheckTime,5000                                                        ;timer may be off due to the above CheckUsageNever
NextScheduledUpdateCheck =
NextScheduledUpdateCheck += 1, days
StringTrimRight,NextScheduledUpdateCheck,NextScheduledUpdateCheck,2
NextScheduledUpdateCheck := ( NextScheduledUpdateCheck 00 )
IniWrite,%NextScheduledUpdateCheck%,config.ini,Details,NextScheduledUpdateCheck
FormatTime,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy
GuiControl,1:,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheckDisplay%
GuiControl,2:,NotificationWindowNextScheduledUpdate,Next Scheduled Update:`n%NextScheduledUpdateCheckDisplay%
return
CheckUsageWeekly:
Gui 1: submit, nohide
IniWrite,Weekly,config.ini,Details,CheckHowOften
CheckHowOften = Weekly
SetTimer,CheckTime,5000                                                        ;timer may be off due to the above CheckUsageNever
NextScheduledUpdateCheck =
NextScheduledUpdateCheck += 7, days
StringTrimRight,NextScheduledUpdateCheck,NextScheduledUpdateCheck,2
NextScheduledUpdateCheck := ( NextScheduledUpdateCheck 00 )
IniWrite,%NextScheduledUpdateCheck%,config.ini,Details,NextScheduledUpdateCheck
FormatTime,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy
GuiControl,1:,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheckDisplay%
GuiControl,2:,NotificationWindowNextScheduledUpdate,Next Scheduled Update:`n%NextScheduledUpdateCheckDisplay%
return
CheckTime:
if A_Now > %NextScheduledUpdateCheck%
 {
  IniRead,CheckHowOften,config.ini,Details,CheckHowOften,Never
  NextScheduledUpdateCheck =
  if CheckHowOften = Hourly
   NextScheduledUpdateCheck += 60, minutes
  if CheckHowOften = Daily
   NextScheduledUpdateCheck += 1, days
  if CheckHowOften = Weekly
   NextScheduledUpdateCheck += 7, days
  StringTrimRight,NextScheduledUpdateCheck,NextScheduledUpdateCheck,2             ;remove seconds
  NextScheduledUpdateCheck := ( NextScheduledUpdateCheck 00 )                     ;add 00 seconds, this causes the update to begin between 1 and 5 seconds
  IniWrite,%NextScheduledUpdateCheck%,config.ini,Details,NextScheduledUpdateCheck ;after scheduled time, due to Settimer set at 5 seconds
  FormatTime,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy
  GuiControl,1:,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheckDisplay%
  GuiControl,2:,NotificationWindowNextScheduledUpdate,Next Scheduled Update:`n%NextScheduledUpdateCheckDisplay%
  gosub CheckUsage
 }
return
;--------------------------------------------------------Check for Valid Internet Connection Begin-----------------------------------------------------------|
CheckUsage:
SetTimer,FlashUsageInfoGroupBoxText,off   ;if the text was flashing due to being close to or exceeding your usage limit then the timer needs to be turned off.
NoInternetConnectionDetected = 0

Connected := Ping()

if Connected = 0                                                               ;No internet connection
 {
  IniWrite,FFFF00,config.ini,Details,NotificationWindowColor
  Gui 2: color, FFFF00
  FormatTime,FailedUsageCheck,,h:mm tt, M/d/yy
  GuiControl,1:,FailedUsageCheck,*%FailedUsageCheck%
  GuiControl,2:,NotificationWindowLastUnsuccessfulUpdate,Last Unsuccessful Update:`n*%FailedUsageCheck%
  IniWrite,*%FailedUsageCheck%,config.ini,Details,FailedUsageCheck
  NoInternetConnectionDetected = 1
  Goto SkipUpdate
 }

FoundUsageCycle = 0
FoundAccumulatedUsage = 0
FoundDaysLeftInUsageCycle = 0
control,disable,,button2,ahk_id %GUI_ID%
GuiControl,2:,NotificationWindowCurrentUsage,Checking. . . . . . .
WinSetTitle, ahk_id %GUI_ID%, , Navigating to Verizon Website...
;--------------------------------------------------------Check for Valid Internet Connection End-------------------------------------------------------------|
;============================================================================================================================================================|
;------------------------------------------------------------Open Webpage and Sign In Begin------------------------------------------------------------------|
AccumulatedUsage =                                                             ;example (1.196GB of 5.000GB)                                                      
UsageCycle =                                                                   ;changed to Usage Cycle Ends example 10/15/13
WB := ComObjCreate("InternetExplorer.Application")
wb.FullScreen
if Show_IE_Window_While_CheckingUsage = yes
 WB.Visible := true
else
 WB.Visible := false
WB.Navigate("https://login.verizonwireless.com/amserver/UI/Login")
While WB.Busy
 {
  Sleep, 100                                                                   ;script got hung up here for over 30 minutes.
  if A_index > 600
   break 
 }

WinSetTitle, ahk_id %GUI_ID%, , Logging into Verizon Website...
sleep 1000
;------------------------------------------------------------Open Webpage and Sign In End--------------------------------------------------------------------|
;============================================================================================================================================================|
;----------------------------------------------------------------Get Usage Stats Begin-----------------------------------------------------------------------|
AllElements := wb.document.all
Len := % AllElements.Length
loop %len%                                                                    
 {
  text := AllElements[A_Index-1].InnerText
  if a_index > 560                                                            ;User ID or Cell Phone Number is found in more than 1 index field
   {
    If ( text = "User ID or Mobile Number" )
      WB.document.all[A_index+2].value := Username ;the username field is 3 higher then "User ID or Mobile Number" (a_index-1 + 3)
    if ( text = "Sign In" )
     {
      WB.document.all[A_index-1].Click()
   While WB.Busy                                                 
       {
        Sleep, 100
        if A_index > 600                                                       ;timeout of 1 minutes waiting for the page to load
         break
       }
     }
   }
 }

WB.document.all.IDToken2.focus()
breakloop = 0
AllElements := wb.document.all
Len := % AllElements.Length
loop %len%                                                                    
 {
  if a_index > 550
   {
    text := AllElements[A_Index-1].InnerText
    if ( text = "Please enter your Password to continue:" )
    {
     WB.document.all[A_index+1].value := Password
     WB.document.all.signIn.Click()
     While WB.Busy                                                 
      {
       Sleep, 100
       if A_index > 6000                                                       ;timeout of 1 minute waiting for the page to load
        break
      }
      breakloop = 1
    }
   }
   if breakloop = 1
    break
 }
WinSetTitle, ahk_id %GUI_ID%, , Retrieving Usage Details
sleep 500
FoundUsageCycle = 0
AllElements := wb.document.all
Len := % AllElements.Length
loop %len%                                                                     ;attempt to get usage stats example 1gb of 10gb used
 {
  text := AllElements[A_Index-1].InnerText
  IfInString,text,Your information could not be retrieved at this time. Please try again later
   {
    MsgBox,4160,Message from Verizon.com, Your information could not be retrieved at this time. Please try again later
    goto skipupdate
   }
  if A_index > 70
   {
    If Text = About Us
     SignOutIndex := (A_index+3)
   }
  IfInString,Text,Billing Cycle ending
   {
    if FoundUsageCycle = 0
     {
      StringLen,Len,Text
      TrimAmount := (Len-20)
      StringTrimRight,CheckText,Text,%TrimAmount%
      if CheckText = Billing Cycle ending
       {
        UsageCycle := AllElements[ a_index-1].InnerText
        StringTrimLeft,UsageCycle,UsageCycle,21
        FoundUsageCycle = 1
       }
     }
   }
  if ( text = " Days left" )
   {
    DaysLeftInUsageCycle := AllElements[ a_index-3].InnerText
    FoundDaysLeftInUsageCycle = 1
   }
  if text = Data:
   {
    AccumulatedUsage := AllElements[ a_index+2].InnerText
    StringSplit,AccumulatedUsageArray,AccumulatedUsage,%a_space%
    if (AccumulatedUsageArray1 <> "" and AccumulatedUsageArray3 = "of" and AccumulatedUsageArray5 <> "" ) ;if the 2nd array varible is "of" then there is a good chance the correct value was found. example (1gb of 10gb)
     {
      StringTrimRight,CurrentUsage,AccumulatedUsageArray1,2
      StringLen,Len,AccumulatedUsageArray1
      TrimLen := (Len-2)
      StringTrimLeft,Units,AccumulatedUsageArray1,%TrimLen%
      StringTrimRight,MaxUsageAllowed,AccumulatedUsageArray5,2
      FoundAccumulatedUsage = 1
      break                                                                    ;value was found. example (1gb of 10gb)
     }
   }
 }                                                                             ;When it is done with this loop, it is possible the values were not retrieved.

 if ( FoundUsageCycle = 0 or FoundAccumulatedUsage = 0 or FoundDaysLeftInUsageCycle = 0 )                       ;at least one failed to retrieve the correct values
  {                                                                            ;this check is here to force 3 attempts to get correct values
   WinSetTitle, ahk_id %GUI_ID%, ,Failed to get stats! Trying Again
   OnlyTryToGetStats3Times++
   if OnlyTryToGetStats3Times > 3
    {
     FormatTime,FailedUsageCheck,,h:mm tt, M/d/yy
     GuiControl,1:,FailedUsageCheck,%FailedUsageCheck%
     GuiControl,2:,NotificationWindowLastUnsuccessfulUpdate,Last Unsuccessful Update:`n%FailedUsageCheck%
     IniWrite,%FailedUsageCheck%,config.ini,Details,FailedUsageCheck
     IniWrite,FFFF00,config.ini,Details,NotificationWindowColor
     Gui 2: color, FFFF00
     goto SkipUpdate
    }
   CountDown = 5
   loop 5
    {
     sleep 1000
     countdown--
     WinSetTitle, ahk_id %GUI_ID%,,Will try again in (%CountDown%) seconds. Max 3 attempts  
    }
   WB.document.all[SignOutIndex].Click()
   While WB.Busy                                                 
    {
     Sleep, 100
     if A_index > 600                                                       ;timeout of 1 minutes waiting for the page to load
      break
    }
   wb.quit
   goto CheckUsage
  }
 
 FormatTime,LastChecked,,h:mm tt, M/d/yy
 IniWrite,%AccumulatedUsage%,config.ini,Details,AccumulatedUsage
 IniWrite,%UsageCycle%,config.ini,Details,UsageCycle
 IniWrite,%LastChecked%,config.ini,Details,LastUpdated
 DaysLeftInUsageCycle++
 IniWrite,%DaysLeftInUsageCycle%,config.ini,Details,DaysLeftInUsageCycle
 
 StringSplit,CurrentUsageArray,AccumulatedUsage,%a_space%                                  ;Splits example 0.007GB of 5.000GB in to 4 arrays, 0 thru 3
 if Units =                                                                                ;Array0 would = 3, Array1 would = 0.007GB, Array2 would = of
  {                                                                                        ;Array3 would = 5.000GB
   StringLen,Len,CurrentUsageArray1
   TrimLen := (Len-2)
   StringTrimLeft,Units,CurrentUsageArray1,%TrimLen%                                        ;retrieve Units example GB
  }
 
StringTrimRight,CurrentUsageArray1,CurrentUsageArray1,2                                     ;removed Units example 0.007GB results to 0.007
StringTrimRight,CurrentUsageArray5,CurrentUsageArray5,2

GuiControl,1:,AccumulatedUsage,Usage:  %CurrentUsageArray1% %Units% of %CurrentUsageArray5% %Units% ;example (0.007 GB of 5.000 GB)
GuiControl,1:,UsageCycle,Usage Cycle Ends:  %UsageCycle%                                     ;10/15/13
GuiControl,1:,LastChecked,%LastChecked%                                                     ;example 9:43 AM, 12/17/12

GuiControl,2:,NotificationWindowUsageCycle,Usage Cycle Ends: %UsageCycle%                   ;example 10/15/13
GuiControl,2:,NotificationWindowLastSuccessfulUpdate,Last Successful Update:`n%LastChecked% ;example 9:43 AM, 12/17/12

IniWrite,00FF00,config.ini,Details,NotificationWindowColor
Gui 2: Color, 00FF00                                                                        ;green
gosub,CrunchNumbers
;-----------------------------------------------------------------Get Usage Stats End------------------------------------------------------------------------|
;============================================================================================================================================================|
;--------------------------------------------------------------------Tidy Up Begin---------------------------------------------------------------------------|
if CurrentUsageArray1 =
 Units =
GuiControl,2:,NotificationWindowCurrentUsage,Usage: %CurrentUsageArray1%%a_space%%Units%    ;example 0.007 GB
SkipUpdate:
OnlyTryToGetStats3Times = 0
control,enable,,button2,ahk_id %GUI_ID%
WinSetTitle, ahk_id %GUI_ID%, , %ProgramName%
WB.document.all[SignOutIndex].Click()
While WB.Busy                                                 
 {
  Sleep, 100
  if A_index > 300                                                       ;timeout of 30 seconds waiting for the page to load
   break
 }
wb.quit 
if NoInternetConnectionDetected = 1
 {
  Title1 = No Internet Connection Detected
  Title2 =
  SetTimer, AnimateTitle, 100
 }
return
;--------------------------------------------------------------------Tidy Up End-----------------------------------------------------------------------------|
;============================================================================================================================================================|

CrunchNumbers:
IniRead,DaysLeftInUsageCycle,config.ini,Details,DaysLeftInUsageCycle
IniRead,AccumulatedUsage,config.ini,Details,AccumulatedUsage,%A_Space%
StringSplit,Array,AccumulatedUsage,%a_space%
CurrentUsage = %Array1%
MaxUsageAllowed = %Array5%
StringLen,Len,CurrentUsage
TrimLen := (Len-2)
StringTrimLeft,Units,CurrentUsage,%TrimLen%
StringTrimRight,CurrentUsage,CurrentUsage,2 ;remove GB
StringTrimRight,MaxUsageAllowed,MaxUsageAllowed,2 ;remove GB
IniRead,UsageCycle,config.ini,Details,UsageCycle, %A_Space%

;==================================================================================================================================================|
;---------------------------------------------------Create UsageInfoGroupBox Text Begin------------------------------------------------------------|

if CurrentUsage < %MaxUsageAllowed%
 {
  Tempvar := ((MaxUsageAllowed - CurrentUsage) / DaysLeftInUsageCycle )
  StringGetPos,Pos,Tempvar,.
  StringLen,Len,Tempvar
  TrimRight := (Len - Pos - 7)
  StringTrimRight,Tempvar,Tempvar,%TrimRight%
  Tempvar := Trim(Tempvar, "0")
  UsageInfoGroupBox = You have not reached your data plan limit.`n`nYou can use approximately %Tempvar% %Units% of data each day until the end of your usage cycle.`n`nYou have %DaysLeftInUsageCycle% days left in your usage cycle.
  SetTimer,FlashUsageInfoGroupBoxText,off 
 }

if CurrentUsage > %MaxUsageAllowed%
 {
   OverLimit := ( CurrentUsage - MaxUsageAllowed )
   StringTrimLeft,OverLimit,OverLimit,1 ;remove the negative sign
   UsageInfoGroupBox = `n`nYou have EXCEEDED your limit by (%OverLimit% %Units%).`n`nYou have %DaysLeftInUsageCycle% days left in your usage cycle.
   SetTimer,FlashUsageInfoGroupBoxText,2000
   IniWrite,FF0000,config.ini,Details,NotificationWindowColor
   Gui 2: color, FF0000
  }
if CurrentUsage = %MaxUsageAllowed%
 {
  if MaxUsageAllowed =
   {
    SetTimer,FlashUsageInfoGroupBoxText,2000
    UsageInfoGroupBox = Click Update now for latest usage details`n`n`n`n`nClick and Drag the Blue Notification Window to re-position it.
    GuiControl,2:,NotificationWindowCurrentUsage,Usage: Unknown
    SetTimer,FlashUsageInfoGroupBoxText,off
   }
  else
   {
    if DaysLeftInUsageCycle > 1
     UsageInfoGroupBox = `nYou have reached but not exceeded your limit of (%MaxUsageAllowed% %Units%)`n`n`n`nYou have %DaysLeftInUsageCycle% days left in your usage cycle.
    if DaysLeftInUsageCycle = 1
     UsageInfoGroupBox = `nYou have reached but not exceeded your limit of (%MaxUsageAllowed% %Units%)`n`nToday is the last day in your usage cycle.
    SetTimer,FlashUsageInfoGroupBoxText,2000
   }
 }
GuiControl,1:,UsageInfoGroupBox, %UsageInfoGroupBox%
return
;----------------------------------------------------Create UsageInfoGroupBox Text End-------------------------------------------------------------|
;==================================================================================================================================================|

FlashUsageInfoGroupBoxText:
GuiControl, hide, %UsageInfoGroupBox%
sleep 200
GuiControl, show, %UsageInfoGroupBox%
sleep 200
return

CreateNotificationWindow:
IniRead, NotificationWindowColor,config.ini,Details,NotificationWindowColor,00FF00
IniRead, LastUpdated,config.ini,Details,LastUpdated, %a_space%
IniRead, FailedUsageCheck,config.ini,Details,FailedUsageCheck, %a_space%
IniRead, AlwaysShowNotificationWindow,config.ini,Details,AlwaysShowNotificationWindow,1
IniRead, NextScheduledUpdateCheck,config.ini,Details,NextScheduledUpdateCheck,
FormatTime,NextScheduledUpdateCheckDisplay,%NextScheduledUpdateCheck%,h:mm tt, M/d/yy
IniRead, NotificationWindowXpos,config.ini,Details,NotificationWindowXpos,%a_space%

if CheckHowOften = Never
 NextScheduledUpdateCheckDisplay = Never

NumberOfElementsToShow = 1                                                     ;always show Usage  example.. Usage: 0.007 GB

IniRead, ShowUsageCycleinNotificationWindow,config.ini,Details,ShowUsageCycleinNotificationWindow,0
if ShowUsageCycleinNotificationWindow = 1
 NumberOfElementsToShow++

IniRead, ShowLastUnsuccessfulUpdateDateInNotificationWindow,config.ini,Details,ShowLastUnsuccessfulUpdateDateInNotificationWindow,0
if ShowLastUnsuccessfulUpdateDateInNotificationWindow = 1
 NumberOfElementsToShow++

IniRead, ShowLastSuccessfulUpdateDateInNotificationWindow,config.ini,Details,ShowLastSuccessfulUpdateDateInNotificationWindow,0
if ShowLastSuccessfulUpdateDateInNotificationWindow = 1
 NumberOfElementsToShow++

IniRead, ShowNextScheduledUpdateInNotificationWindow,config.ini,Details,ShowNextScheduledUpdateInNotificationWindow,0
if ShowNextScheduledUpdateInNotificationWindow = 1
 NumberOfElementsToShow++

if AlwaysShowNotificationWindow = 1                                            ;create Notification Window (Gui 2)
 {
  Gui 2: add, text,x0 y15 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
  if ShowUsageCycleinNotificationWindow = 1
   {
    Gui 2: add, text,x0 y35 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
    Gui 2: add, text,x0 y67 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
    Gui 2: add, text,x0 y96 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
    Gui 2: add, text,x0 y127 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
   }
  else
   {
    Gui 2: add, text,x0 y47 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
    Gui 2: add, text,x0 y77 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
    Gui 2: add, text,x0 y107 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
   }
  gui 2: +owner
  gui 2: font, s8 w700 , Arial
  Gui 2: Color, %NotificationWindowColor%
  ypos = 10
  MoreHeight = 20
  loop 5
   {
 If A_index = 1
  {
      Value = 1                                                                ;Value 1 - Always show current usage, example.. Usage: 0.007 GB
   AddElement = Usage: %CurrentUsage%%A_Space%%Units%
   AddElementAssociatedVar = NotificationWindowCurrentUsage
   Width = 200
   RegionWidth := (Width - 45)
      if NumberOfElementsToShow = 1
       TextXPos = 85
      else
       TextXPos = 90
  }
 if A_index = 2     
  {
   Value = %ShowUsageCycleinNotificationWindow%
   if Value = 1
    {
        AddElement = %a_space%Usage Cycle Ends: %UsageCycle%
  AddElementAssociatedVar = NotificationWindowUsageCycle
  Width = 215
     RegionWidth := (Width - 45)
     TextXPos = 60
    }
  }
 if A_index = 3
  {
   Value = %ShowLastSuccessfulUpdateDateInNotificationWindow%
      if Value = 1
    {
        AddElement = Last Successful Update:`n%LastUpdated%
  AddElementAssociatedVar = NotificationWindowLastSuccessfulUpdate
  MoreHeight = 30
  Width = 215
  RegionWidth := (Width - 45)
  TextXPos = 60
    }
  }
 if A_index = 4
  {
   Value = %ShowLastUnsuccessfulUpdateDateInNotificationWindow%
   if Value = 1
    {
  if FailedUsageCheck = Never
         AddElement = Last Unsuccessful Update:`nNever
        else
         AddElement = Last Unsuccessful Update:`n%FailedUsageCheck%
     AddElementAssociatedVar = NotificationWindowLastUnsuccessfulUpdate
        MoreHeight = 30
  Width = 215
  RegionWidth := (Width - 45)
        TextXPos = 60
    }
  }
 if A_index = 5
  {
   Value = %ShowNextScheduledUpdateInNotificationWindow%
   if Value = 1
    {
  if NextScheduledUpdateCheck = Never
         AddElement = Next Scheduled Update:`nNever
        else
         AddElement = Next Scheduled Update:`n%NextScheduledUpdateCheckDisplay%
        AddElementAssociatedVar = NotificationWindowNextScheduledUpdate
  Width = 215
  RegionWidth := (Width - 45)
        TextXPos = 60
    }
  }
    if Value = 1                                                             
  {
      Gui 2: add, text, x%TextXPos% y%Ypos% w165 v%AddElementAssociatedVar% gOnDoubleClickOnGui2CheckUsage ,%AddElement%
   ypos := (ypos+MoreHeight)
      AddElementAssociatedVar =
     }
   }
  if NumberOfElementsToShow = 1
   Height = 50
  if NumberOfElementsToShow = 2                                                ;if one of these is not ShowUsageCycle then the height needs to be a little larger
   {
    if ShowUsageCycleinNotificationWindow = 1
  Height = 70
 else
     Height = 82
   }
  if NumberOfElementsToShow = 3
   {
    if ShowUsageCycleinNotificationWindow = 1
  Height = 102
 else
     Height = 110
   }
  if NumberOfElementsToShow = 4
   {
    if ShowUsageCycleinNotificationWindow = 1
     Height = 132
    else
     Height = 143
   }
  if NumberOfElementsToShow = 5
   Height = 162 
 
  Gui 2: add, text,x0 y-6 h1 gOnDoubleClickOnGui2CheckUsage,______________________________________
  RegionHeight := (Height-15)
  Gui 2: Show, %NotificationWindowXpos% %NotificationWindowYpos% w%Width% h%Height%, NotificationWindow
  WinGet,NWID,ID, NotificationWindow
  WinSet, Region, 50-0 W%RegionWidth% H%RegionHeight% R40-40, ahk_id %NWID%
  WinSet,AlwaysOntop,On,ahk_id %NWID%
  Gui 2: -caption
  if MaxUsageAllowed =                                                         ;If MaxUsageAllowed is blank then no values have been retrieved from Verizon
   {                                                                           ;the notification window will be blue until Check Usage has been ran at least 1 time
    Gui 2: Color, 0x8080ff
    GuiControl,2:,NotificationWindowCurrentUsage,Usage: Unknown
   }
 }
else
 Gui 2: Destroy
return

GuiClose:
HideGuiOne:
Gui 1: hide
return
ShowMenu:
Gui 1: show
return
about:
MsgBox,64,About, %ProgramName% V%Version% by %Author%`nDownload most recent version here`n%AutoHotkeyPost%
return
UserHelp:
MsgBox,64,Help, % Helptext
return
AnimateTitle:
TextX := ""
Loop, Parse, Title1,
 {
  TextX = % TextX . A_LoopField
  WinSetTitle, ahk_id %GUI_ID%, , %TextX%
  sleep, 100
 }
sleep, 700
 
TextX := ""
Loop, Parse, Title2,
 {
  TextX = % TextX . A_LoopField
  WinSetTitle, ahk_id %GUI_ID%, , %TextX%
  sleep, 100
 }
sleep, 700
Connected := DllCall("Wininet.dll\InternetGetConnectedState", "Str", 0x40,"Int",0)
if Connected = 1
 {
  SetTimer,AnimateTitle, off
  WinSetTitle, ahk_id %GUI_ID%, , %ProgramName%
 }
return
~LButton::
CoordMode, Mouse
MouseGetPos, MouseStartX, MouseStartY, MouseWin,control
if ( MouseWin <> NWID and MouseWin <> GUI_ID )
 Return
if MouseWin = %NWID%
 {
  SetTimer, WatchMouse1, 10
  Return
  WatchMouse1:
  CoordMode, Mouse
  MouseGetPos, MouseX, MouseY
  DeltaX = %MouseX%
  DeltaX -= %MouseStartX%
  DeltaY = %MouseY%
  DeltaY -= %MouseStartY%
  MouseStartX = %MouseX% 
  MouseStartY = %MouseY%
  WinGetPos, CMX, CMY,,, ahk_id %NWID%
  CMX += %DeltaX%
  CMY += %DeltaY%
  SetWinDelay, -1  
  WinMove, ahk_id %NWID%,, %CMX%, %CMY%
  GetKeyState, LButtonState, LButton, P
  if LButtonState = U 
   {
    IniWrite, x%CMX%,config.ini,Details,NotificationWindowXpos
    IniWrite, y%CMY%,config.ini,Details,NotificationWindowYpos
    SetTimer, WatchMouse1, off
    Return
   }
  return
 }

if MouseWin = %GUI_ID%
 {
  SetTimer, WatchMouse2, 10
  Return
  WatchMouse2:
  CoordMode, Mouse
  MouseGetPos, MouseX, MouseY
  DeltaX = %MouseX%
  DeltaX -= %MouseStartX%
  DeltaY = %MouseY%
  DeltaY -= %MouseStartY%
  MouseStartX = %MouseX% 
  MouseStartY = %MouseY%
  WinGetPos, CMX, CMY,,, ahk_id %GUI_ID%
  CMX += %DeltaX%
  CMY += %DeltaY%
  SetWinDelay, -1  
  WinMove, ahk_id %GUI_ID%,, %CMX%, %CMY%
  GetKeyState, LButtonState, LButton, P
  if LButtonState = U 
   {
    WinGet,State,MinMax,ahk_id %GUI_ID%
    if State = 0
     {
      IniWrite, x%CMX%,config.ini,Details,VerizonWirelessDataUsageCheckerXpos
      IniWrite, y%CMY%,config.ini,Details,VerizonWirelessDataUsageCheckerYpos
     }
      SetTimer, WatchMouse2, off
      Return
   }
  return
 }
Return
JoinImage:
ifnotexist, Verizon.ico
{
 icondata1 =
(join
0000010001003030000001002000A825000016000000280000003000000060000000010020000000000000240000C30E0000
C30E00000000000000000000FFFFF2FFFFFCF5FFFFFFFCFFFEFFFEFFFFFFFCFFFFFFF8FFFFFFF8FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFBFFFFFFFDFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFDFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF
FFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFDFFFFFFFEFFFFFFFEFFFFFFFDFFFFFF
FBFFFFFFFBFFFFFFFBFFFFFFFBFFFFFFFDFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFCFFFDFFFEFFFAFFFAFF
FAFFF0FFF7FEF6FFF3F4F9FFD9D7FFFFD0CCFDFFCCCCFDFFCACDFCFFCCD0FBFFCDCFFDFFCCCFFEFFCACEFEFFC7CFFDFFCACF
FDFFCBCFFDFFCBCFFDFFCBCFFEFFCBCFFEFFCCCEFEFFCCCEFEFFCCCFFDFFCCCFFDFFCCCFFDFFCCCEFEFFCCCFFDFFCBCFFDFF
CBCFFDFFCBCFFDFFCBCFFDFFCCCEFEFFCCCFFDFFCCCEFDFFCCCEFEFFCCCEFDFFCCCFFDFFCBCFFDFFCBCFFDFFCBCFFDFFCBCF
FCFFCBCFFDFFCCCFFDFFCCCFFDFFCCCFFDFFCCCEFDFFCBCEFDFFCDCFFDFFCBCFFDFFD7CDFFFFF1EEFDFFF5FFF9FFF6FFF9FF
E4E8FFFF4340A7FF251CC3FF2521CAFF2121C8FF2125C0FF2125C2FF1F24C4FF1D23C5FF1824C4FF1C24C5FF1E24C5FF1D24
C6FF1D24C4FF1E24C4FF1F23C5FF2023C5FF1F23C6FF1F23C6FF1F23C6FF1F23C5FF1E23C5FF1D24C5FF1E24C5FF1E24C5FF
1D24C5FF1F23C4FF1F23C5FF1F23C5FF1F24C5FF1F23C6FF2023C6FF2123C5FF1E25C4FF1D24C5FF1D24C6FF1D24C5FF1F23
C5FF1F23C5FF2124C6FF2123C5FF2023C5FF2125C6FF1E22C5FF3F2FB4FFC7C1FCFFFAFFFFFFFFFFF2FFDEE1F9FF2328C1FF
0000FFFF0000FCFF0000FBFF0000FDFF0000FDFF0000FEFF0000FBFF0001F3FF0000F9FF0000FEFF0000FFFF0000F8FF0000
F8FF0000F8FF0001F5FF0000FCFF0000FFFF0000FFFF0000F9FF0000FBFF0000FFFF0500FBFF0000FBFF0000FAFF0000F8FF
0000FBFF0000FAFF0003F6FF0000FCFF0500FAFF0C00F8FF0002F2FF0000FCFF0000FFFF0001FAFF0000FFFF0000FFFF0000
FEFF0400F8FF0000FCFF0100FEFF0100F9FF1417CFFFB8BCFEFFFFFFFDFFFFFFFEFFE2E3FDFF2E30BEFF0000F8FF0903FCFF
0601FDFF0303FDFF0901FEFF0804FCFF0404F9FF0103FCFF0303F9FF0403FAFF0301FFFF0304F9FF0403FBFF0402FEFF0502
FEFF0401FFFF0301FEFF0302FCFF0402FDFF0302FEFF0203FEFF0301FEFF0202FEFF0103FEFF0103FEFF0302FEFF0202FEFF
0004FCFF0104FDFF0203FEFF0502FEFF0902FCFF0301FEFF0102FDFF0105F8FF0105F6FF0205F9FF0102FBFF0205F9FF0103
FCFF0303FCFF0101FCFF1719D0FFB7BBFDFFFFFFFDFFFFFFFEFFE3E3FDFF2E2FBEFF0000F8FF0703FAFF0501FDFF0001FDFF
0902F8FF0702F5FF0401F5FF0000FCFF0102F4FF0202F3FF0300F9FF0300F9FF0200F9FF0200F9FF0002F5FF0000F8FF0000
F9FF0101F5FF0200FBFF0100FAFF0002F7FF0000F7FF0002F6FF0003F6FF0001F9FF0400F9FF0500F8FF0400F8FF0200FCFF
0000FAFF0001F8FF0400F9FF0000FAFF0000F9FF0101F6FF0503F1FF0302F5FF0202FBFF0001FAFF0003FDFF0004FDFF0000
FEFF1518CFFFB8BBFDFFFFFFFEFFFFFFF9FFE2E3FCFF2D2DC0FF0000FCFF0005F7FF0004F9FF0002FEFF150EF1FF130CF4FF
0D09F9FF0609FBFF0B0EF4FF0C0EF2FF0E0CF6FF0E08FCFF0D09FBFF0B0DF6FF0714E8FF080EF4FF090CF9FF0C0EF3FF0C09
FBFF0A0AF9FF080DF5FF0C0FF2FF0911EFFF0711EFFF090DF6FF140BF5FF190AF5FF1A0AF5FF1107FDFF0E0BF8FF0B0EF3FF
060EF5FF070CF9FF0B0AFBFF1109FCFF180BF6FF150AF9FF0905FAFF0002FEFF0002FCFF0203FAFF0200FEFF1618CFFFB8BC
FEFFFFFFFEFFFAFFFFFFDFE6FEFF2B32BAFF0000FAFF0202FDFF0602FBFF0A05EFFFD3D9FEFFEFF2FBFFEDEDF7FFECEDF6FF
EDEDFDFFEDEDFFFFEDEDFFFFEDEDFDFFEDEDFDFFECEDFCFFE5EEF6FFE9EEFBFFEBEEFBFFEDEEF2FFEDEBFEFFEDE9FFFFEDE9
FFFFEDEEF7FFEDEDFCFFEBEDFFFFE8EEFEFFEDEBFFFFEFEBFEFFEEEDFBFFEEECFFFFEEEDFBFFEDEEF8FFECEEF9FFEDECFEFF
EDECFFFFECEDFEFFE9EDF4FFE7EDFDFF666CCFFF0000F1FF0503FCFF0302FDFF0500FFFF1718D0FFB7BCFDFFFFFFFEFFFFFF
FAFFE3E6FCFF2F31BBFF0000FDFF0201FEFF0200FBFF0905F3FFE8EFF9FFFFFFF9FFFFFFFBFFFFFFF8FFFFFFFAFFFFFFFBFF
FFFFFDFFFFFFF5FFFFFFF8FFFFFFFCFFFCFFF7FFFFFFFBFFFFFFFBFFFFFFF8FFFEFFF9FFFEFFFAFFFFFDFCFFFFFEF8FFFFFF
F9FFFFFFFBFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFF7FFFFFFFCFFFFFFFAFFFFFFF9FFFFFFFAFFFFFFFBFFFFFFFDFFFFFFFDFF
FFFFF6FFFEFFFEFF6C72C6FF0000F2FF0304FCFF0301FDFF0400FFFF1718CFFFB7BBFDFFFFFFFEFFFFFFF7FFE6E4FBFF322F
BDFF0000FFFF0201FEFF0101FBFF0503F4FFE6EAF7FFFEFFFBFFFAF8FFFFFEFAFEFFFCFBF9FFFBFCF9FFFAFBFCFFFEFEF3FF
FEFBF7FFFEF9FEFFF7FEF9FFFBF9FCFFFFF9FFFFFEF8FFFFF7FEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBFFFEF7
FCFFFDFAFDFFFAFCFAFFF7FEF6FFF9FBFCFFFAFBFDFFFCFBFDFFFBFCFCFFFDFAFCFFFEF9FDFFFDF6FFFFFFFAFBFFFCFCFFFF
6E73CAFF0000F2FF0104FBFF0102FBFF0200FEFF1618D0FFB7BBFEFFFFFFFEFFFDFFFFFFE0E2FEFF2C2DC2FF0000FFFF0501
FEFF0601F9FF0907EEFFECE6FEFFFFFFFDFFF8FFFAFFFEFFFEFFFEFEFDFFFDFEFDFFF9FFFDFFFEFBFFFFFFFBFFFFFFFDFEFF
F8FFFAFFFCFBFCFFFFF9FEFFFFFEFFFFCACCF2FF858BC4FF8890CCFF8788CCFFADAFD2FFF5F6FAFFFFFCFFFFFFFEFAFFFEFE
FBFFFCFEFEFFFFFCFFFFFFFCFFFFFFFEFEFFFCFFF6FFFEFEF9FFFEFEFCFFFAFCFEFFFEFEF7FFFDFEFFFF6F71CBFF0000F9FF
0102FFFF0102FDFF0000FDFF1617D0FFB7BAFEFFFFFFFFFFFBFFFEFFDBE5FDFF2731BEFF0000FFFF0502FBFF0703F6FF0A08
EEFFECE6FFFFFFFFFAFFF9FFF4FFFFFFFAFFFFFFFDFFFEFFFFFFFBFFFFFFFFFEFFFFFFFEFCFFFFFFF9FFFCFCFFFFFEFEF9FF
FCFDFAFFFFFFFFFF554EEEFF0000C4FF0000D4FF0000D6FF1115AEFFCED3EEFFFFFFFFFFFDFEFCFFFEFFFDFFFBFFFFFFFFFF
FDFFFFFFFBFFFFFFF9FFFFFFFAFFFFFFFCFFFEFFFEFFF9FDFFFFFEFAFDFFFEFBFFFF7271CBFF0000F7FF0202FEFF0301FDFF
0400FFFF1717D0FFB7BAFEFFFFFFFFFFFEFFFCFFDDE6FDFF2731BDFF0000FFFF0403F9FF0503F5FF0706EFFFECE8FCFFFEFF
F8FFF5FEF5FFFFFEFAFFFFFFFCFFFEFFFEFFFAFEFFFFFEFEFFFFFFFEFCFFFFFFF8FFFCFDFFFFFCFBFAFFFFFFFFFFD1DCE4FF
1F17E7FF0600FFFF0605FFFF0206FFFF0405DCFF7677F3FFFFFFFFFFFBFCFCFFFEFFFEFFFAFFFFFFFEFFFCFFFFFEFAFFFFFE
FAFFFFFFFCFFFFFEFEFFFDFEFFFFF4FDFEFFFDFAFCFFFFFBFFFF7272C9FF0000F6FF0202FEFF0301FCFF0400FBFF1717D0FF
B7BAFEFFFFFFFFFFFFFFF9FFE4E3FCFF2E2EC0FF0000FFFF0304F9FF0103F7FF0104F6FFECECF5FFFAFFFAFFEFFCFFFFFFFA
FFFFFFFEFCFFFDFEFCFFF7FBFFFFFEFEFFFFFFFEFFFFFEFEFFFFF5FFFBFFF4F5FCFFFFFFFFFF8985C4FF0000E3FF0504FEFF
1005F0FF0104FDFF0500FAFF3225EEFFEFFFEEFFFBFCFEFFFCFDFDFFF9FFFFFFFDFFFCFFFEFCFEFFFFF9FFFFFEFEFFFFFFFB
FFFFFBFCFFFFECFFFCFFFDFFF3FFFEFFFDFF7075C7FF0000F9FF0101FFFF0102FBFF0003F1FF1618CEFFB7BAFEFFFFFFFFFF
FEFFFDFFE2E4FDFF2F2EBEFF0000FEFF0201FEFF0002F9FF0206EFFFECEAFCFFFFFFF9FFF7FEFAFFFFFDFFFFFFFFFCFFFFFF
FCFFFEFEFFFFFFFDFFFFFEFEFFFFFDFFFFFFF7F9F9FFFFFFFBFFE3E5FFFF1C2BDEFF0201F0FF0502FCFF0204F6FF0102FFFF
0202FAFF040ADEFF93A5D1FFFFFFFEFFFEFBF4FFFEFFF7FFFCFEFEFFFDFFFFFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFD
FEFFF9FEFAFFFAFEFFFF7172C9FF0000F9FF0202FFFF0102FCFF0000FDFF1618CFFFB8BBFEFFFFFFFEFFFDFFFDFFE3E4FDFF
302EBEFF0000FEFF0201FFFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFFFEFEFFFFFEFEFFFFFEFFFFFEFE
FDFFFEFEFDFFFDFFFEFFFCFDFAFFFFFFFCFFAAA8F4FF0000E1FF0608F8FF0807F2FF0B0AE2FF0000F7FF0306FFFF0000E4FF
484CD4FFF3F3FFFFFFFFF6FFFCFBF7FFFCFEFFFFFCFEFEFFFDFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFFF8FFFBFFF9FE
FFFF7171C9FF0000F9FF0202FFFF0102FDFF0000FFFF1618D0FFB8BBFDFFFFFFFEFFFEFFFDFFE3E4FDFF2F2EBEFF0000FEFF
0201FEFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFDFFFBFFFDFFFBFFFCFE
FCFFFFFEF7FFF5F1F9FF4945C0FF0000F5FF0307FBFF0202DBFF6962E2FF2120F9FF0000F4FF0706FDFF0500E6FFCAC7FEFF
FFFFFFFFF9FBFEFFF9FDFFFFFCFDFDFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEFFF8FFFBFFFAFEFFFF7171C9FF0000
F9FF0202FFFF0102FCFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFDFFFDFFE3E4FDFF302EBEFF0000FEFF0201FEFF0001FAFF
0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFFFEFFFFFEFEFFFFFBFEFFFFF8FFF8FFF8FEFBFFF8FAFEFFFFFFF3FFB0B1
F6FF0F0ED0FF0200FDFF0002FFFF0E0BCEFFC9BFE7FF888CE9FF0000D1FF0606FFFF0000F3FF706CD0FFFAFAFBFFF6FCFFFF
F7FEFFFFFCFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFFF8FFFBFFFAFEFFFF7171C9FF0000F9FF0202FFFF0102
FCFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFDFFFDFFE3E4FDFF302EBEFF0000FEFF0201FEFF0001FAFF0206EEFFECEAFCFF
FFFFF9FFF8FEF9FFFFFEFFFFFFFEFDFFFEFFFDFFFAFFFFFFFDFFFAFFFCFDFCFFF5F6FFFFFFFFFDFF6061F5FF0000ECFF0809
FEFF0000F4FF5250E9FFFFFFFAFFC9CFDFFF191BCDFF0000FFFF0102FDFF2323BAFFD5D6F8FFFFFFFCFFF3FEFDFFFBFEFFFF
FFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFFF8FFFBFFFAFEFFFF7171C9FF0000F9FF0202FFFF0102FCFF0000FFFF1618
CFFFB8BBFDFFFFFFFEFFFDFFFDFFE3E4FDFF302EBEFF0000FEFF0201FEFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FF
FFFEFFFFFFFFFCFFFEFFFCFFFAFFFFFFFFFEFBFFFCFCFCFFFFFFFFFFDBD7DFFF2122D8FF0000FFFF0507FBFF0A02E2FF9793
F9FFFFFFF5FFFFFFFBFF5E61ECFF0000ECFF0508FFFF0405D8FF8284F3FFFFFFFFFFF1F9FDFFFBFDFEFFFFFCFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFDFDFEFFF8FFFBFFFAFEFFFF7171C9FF0000F9FF0202FFFF0102FCFF0000FFFF1618CFFFB8BBFDFFFFFF
FEFFFDFFFDFFE3E4FDFF302EBEFF0000FEFF0201FEFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFFFFFEFF
FFFEFDFFFCFDFFFFFEFCFDFFFDFCF6FFFFFFFFFF8686D6FF0000D4FF0203FFFF0000FDFF322ABFFFE3DCFEFFFCF9FFFFFFFF
F4FFA9ADF3FF0C12D1FF0304FFFF0000FCFF3D3BE2FFF3F4EEFFF9F8FFFFFCFCFAFFFFFFF8FFFFFFFFFFFEFEFEFFFFFFFFFF
FDFDFDFFF8FEFBFFFAFEFFFF7171C9FF0000F9FF0202FFFF0102FCFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFDFFFDFFE3E4
FDFF302EBEFF0000FEFF0201FEFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFDFDFFFFFDFDFFFFFEFAFEFF
FDFCFCFFFEFFF5FFF3F3F9FF1F23EDFF0201ECFF0604FFFF0000FBFF8583CEFFFFFFFFFFFBFBFBFFFFFBFDFFEFEEFFFF3939
BFFF0000FFFF0406FFFF0302C9FFA9A5D2FFFFFFFFFFFCFAF8FFFFFDFBFFFFFFFFFFFEFEFEFFFFFFFFFFFDFDFDFFF8FEFBFF
FAFEFFFF7171C9FF0000F9FF0202FFFF0102FCFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFDFFFDFFE3E4FDFF302EBEFF0000
FEFF0201FEFF0001FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFDFDFFFFFEFDFFFFFEFAFEFFFCFCF9FFFFFFFDFF
B0B1DDFF0000F0FF0503FCFF0805F4FF0709ECFFD8D7FBFFFFFFF5FFFAFCFAFFFDFCF9FFFDFEFAFF9A9CEBFF0000F4FF0505
FEFF0402E2FF534AE6FFF4F9FDFFFDFFF8FFFEFBFEFFFEFFFEFFFEFEFEFFFFFFFFFFFDFDFDFFF8FEFBFFFAFEFFFF7171C9FF
0000F9FF0202FFFF0102FCFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFEFFFDFFE3E4FDFF2F2EBEFF0000FEFF0201FEFF0001
FAFF0206EEFFECEAFCFFFFFFF9FFF8FEF9FFFFFEFFFFFFFEFFFFFEFDFFFFFCFCFFFFFFFFFAFFF9F9FFFF5253BBFF0000F8FF
0503FFFF0000E3FF595CDCFFF9F9F7FFFEFFEEFFF9FDFAFFFCFDEFFFFFFFF0FFDCE3F4FF1A0DEEFF0401F9FF0601FCFF0D00
EFFFD1DEE7FFFAFFF8FFFBF7FFFFFEFEFEFFFEFEFEFFFFFFFFFFFCFCFDFFF8FEFAFFFAFEFFFF7171C9FF0000F9FF0202FFFF
0102FDFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFDFFFEFFE2E4FDFF302EBEFF0000FFFF0201FFFF0001FAFF0106EEFFEDEA
FCFFFFFFF9FFF7FFF9FFFFFEFFFFFFFFFAFFFDFFFAFFF2FBFFFFFFFFFDFFB9B9FBFF0F0DD9FF0405EBFF0204FFFF0505E7FF
9EA0D7FFFFFFFFFFFDFBFAFFFBFAFFFFFEFFFEFFFDFBFBFFFFFFFFFF7176CEFF0000D9FF050AFCFF0000EAFF7872C4FFFFFF
FFFFF9FBF6FFFEFDFEFFFFFFFFFFFFFFFFFFFDFCFDFFF7FEFBFFF9FEFFFF7171C9FF0000F9FF0202FEFF0002FCFF0000FFFF
1618D0FFB8BBFDFFFFFFFEFFFFFFF8FFE4E3FCFF2F2EBFFF0000F9FF0102FDFF0202FAFF0606EEFFE8EBFCFFFFFFFAFFFDFC
FCFFFFFFFFFFFCFFF8FFFCFFF9FFF6FAFAFFFFFFFFFF7673F3FF0000EAFF0E0BF7FF0000F0FF2B2EECFFF2F7FCFFF7FCFCFF
FBFEFEFFFEFCFFFFFFFEFBFFFBFCFCFFFFFFFFFFC7C7D9FF1114DEFF0001FCFF0400F1FF2821CCFFDBD8FEFFFFFFF5FFFAFC
FDFFFFFFFEFFFDFFFEFFF5FDFDFFF8FEF8FFFBFFFFFF7072C8FF0000F9FF0201FFFF0201FDFF0100FCFF1718CFFFB8BBFEFF
FFFFFEFFFFFFF6FFE4E3FBFF2F2EC0FF0000F7FF0102FDFF0302FAFF0B06EFFFE5EBFCFFFFFFFCFFFEFAFDFFFFFFFEFFFCFF
FAFFFBFDF9FFFFFFFFFFDED7EAFF2925C8FF0000FFFF0705FAFF0202DCFF787AF2FFFFFFF9FFF4FBFEFFF9FDFEFFFEFEFEFF
FFFFFCFFFCFEFEFFF6F8FFFFFFFFFCFF3F41F4FF0000F0FF0E0BF8FF0000EFFF8C89F6FFFFFFFDFFF7F9FDFFFEFDFBFFFCFE
FBFFF1FEFEFFFAFEF8FFFCFEFFFF6F74C7FF0000F8FF0202FEFF0302FBFF0200FCFF1718CFFFB8BBFEFFFFFFFEFFFDFFFEFF
E1E2FEFF2D2CC3FF0000FFFF0101FFFF0301FBFF0A04F1FFE6E8FFFFF9FFFEFFF5FDFAFFFAFFF2FFFCFCFAFFFDF8FEFFFFFF
FFFF908CE9FF0504CEFF0103FFFF0004F7FF2426BAFFD6D2F2FFFFFCFFFFFFF9FEFFFEFEFFFFFAFFFFFFFFFDFFFFFCF9FFFF
F7F5FEFFFFFFFFFF989DF6FF0209CEFF030AF9FF0000FFFF4545D9FFEAEDF0FFFFFDFFFFFEFBFFFFFFFDFFFFFBFBFBFFFDFA
FDFFFDFDFFFF6F74C8FF0000F6FF0107F6FF0007F4FF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFEFFFFFFE0E5FDFF2C31BBFF
0000FFFF0103FCFF0303F7FF0C05EDFFEBEBF6FFFAFFF9FFF1FDFDFFFFFAFDFFFEFBFDFFFAFAFDFFF8FFFDFF2A2DF5FF0000
F3FF0404FEFF0000FEFF6F6FD8FFFFFDF5FFFEF9FBFFFEFEFEFFFCFFFEFFF9FEFDFFFFFFF8FFFCFBFCFFFDFCFFFFFFFFFBFF
E5E4EFFF3534C0FF0000FFFF0300FFFF0B0CC6FFB1B6E4FFFDFFFFFFFCFCFDFFFFFCFDFFFBFCFDFFFBF9FCFFFEFFFFFF7174
C6FF0100F8FF0803FBFF0503F9FF0000FFFF1718CFFFB8BBFDFFFFFFFEFFFFFFFFFFE2E5FDFF2E31BAFF0000FFFF0104FBFF
0304F6FF0A05EEFFECEAF7FFFFFFF9FFF5FDFDFFFAFAFCFFF8F8F7FFFFFFFFFFB1B4D2FF0405EAFF0001FFFF0A08F7FF0000
E9FFB2B0FDFFFFFFFCFFFBF7FAFFFCFFFEFFFAFEFCFFFCFFFDFFFEFFF8FFFEFFFBFFFFFEFDFFF9F9F7FFFFFFF8FF8A88EAFF
0000EBFF0A06FEFF0504E3FF4C4FEBFFFFFFFFFFF7FAF7FFFCFCFAFFF6FBFEFFFDFDFCFFFAFDFFFF7074C8FF0000F8FF0801
FDFF0501FBFF0000FFFF1618CFFFB8BBFDFFFFFFFEFFFFFFFFFFE6E4FDFF312FBDFF0000FEFF0105FBFF0204F8FF0603F1FF
EBE8FDFFFFFEFBFFFFFFFEFFFAFFFEFFFFFFFDFFFFFEFFFF6354C6FF0000E9FF0707FEFF0200E8FF5149D0FFF8F6FFFFFFFF
FFFFFFFCFFFFF7FEFFFFFAFFFDFFFEFDF9FFFCFFFCFFFEFFFBFFFFFFFAFFFFFFFFFFFFFFFFFFD7D5FFFF1F19DEFF0A01F1FF
0300FFFF0D0DF2FFE0DFE9FFFFFFFFFFFFFFFDFFF8FFFFFFFAFEF7FFF9FDFEFF6E71CBFF0000F8FF0301FEFF0201FDFF0000
FFFF1618CFFFB8BBFDFFFFFFFEFFFFFFFDFFE6E4FDFF322EBEFF0000FEFF0103FDFF0003FAFF0305F1FFEBE5FEFFFFFFFFFF
E9E2EFFF9FB3DEFFB7C6DDFF8F94E6FF190CEEFF0203F4FF0505FAFF0300F0FF6264DDFFB5BDE5FFACB5DBFFDEE1EEFFFCFF
FFFFFBFEFDFFFEFCFEFFF7FCFFFFFDFDFDFFFFFCFFFFD5D4EEFFB2B2DAFFB6B8E9FF3E42D6FF0000EEFF0407FEFF0000EFFF
645BCEFFBFBCE8FFB0B1DDFFB8BBECFFEEF8F7FFF8FCFEFF716ECDFF0000FAFF0103FFFF0203FDFF0200FFFF1718CFFFB8BB
FDFFFFFFFEFFFFFFFBFFE4E4FCFF312FBCFF0000FFFF0202FEFF0002FAFF0206EFFFEAE7FBFFFFFFFFFFB1ABD3FF0004CDFF
050DCBFF0306D5FF0804FCFF0305FFFF0503FFFF0D07FDFF0708E0FF0206D8FF050BB4FF99A2C6FFFFFFFFFFFCFAFCFFFEFD
FEFFF7FEFFFFFCFCFBFFFFFFFFFF7474C2FF0001B3FF0303D9FF0808EBFF0605FDFF0304FFFF0607FFFF0C08E0FF0805D5FF
0807C2FF3C3CD4FFE7F1FBFFFFFFFFFF7570CAFF0000FAFF0102FEFF0202FCFF0600FFFF1818CFFFB8BBFDFFFFFFFEFFFCFF
FAFFE1E5FCFF2F30BCFF0000FFFF0401FFFF0102FAFF0107EEFFE9EBF8FFFFFFFEFFACAADCFF0000F4FF0000F5FF0000F2FF
0000E9FF0000EBFF0000EDFF0000EDFF0000EEFF0000F7FF0000D7FF929DCDFFFFFFFFFFFDF9FBFFFDFDFFFFFAFFFFFFFAFC
FCFFFFFFFFFF6D6FC9FF0000D5FF0000FCFF0000EFFF0000EBFF0000EAFF0000EDFF0000ECFF0000F5FF0000E1FF3333E0FF
EAF0FBFFFFFFFDFF7972C8FF0000F9FF0101FEFF0202FCFF0700FEFF1818CFFFB8BBFDFFFFFFFEFFFDFFFDFFDEE4FDFF2B2E
C1FF0000FFFF0501FFFF0100FAFF0205F2FFE8EAFFFFFFFFFFFFC0C2DCFF4F5AC6FF5A65C8FF595EC8FF665ECDFF6362C4FF
6861C8FF6B5FCBFF5C68BFFF5A64CAFF565CBEFFBDBBD9FFFFFFFAFFFDFCF6FFFDFBFFFFFFFEFEFFFEFFFDFFFCFFFFFF99A3
D8FF555FB8FF5D66CAFF5D62C8FF6064C4FF6262C9FF605FCBFF5E66C5FF625FC9FF6360BFFF8089CFFFF2F5F1FFFFFFFAFF
7774C8FF0000F5FF0104FBFF0004FBFF0000FFFF1618D0FFB8BBFDFFFFFFFEFFFFFFFEFFDFE7FEFF2932BAFF0200FDFF0401
FEFF0202FAFF0307EEFFEAEBF0FFFFFFF7FFFEF7FFFFFAFBFFFFFCFFFFFFFCFCFFFFFFFCFFFFFFFFFFFFFCFEFFFFFAFDFFFF
FFFFFFFFF9FFFFFFF7FDFFFFFFFCFFFFF7FDFAFFFAFEFBFFFFFEFAFFFFFEFBFFFFFFFEFFF9FCFDFFF6FDFFFFFDFDFFFFFCFB
FFFFFEFFFEFFFFFEFFFFFBFDFFFFF7FDFFFFFDFFFFFFFFFCFFFFFEFCFFFFF3FEFFFFFAFBF6FFFFFCFFFF7671CCFF0000F8FF
0202FFFF0403FCFF0401F7FF1818CEFFB8BBFEFFFFFFFEFFFFFFFCFFE2E7FDFF2E32B9FF0200FDFF0401FEFF0102FAFF0306
EFFFEAECF0FFFFFFF7FFFCFAFEFFFDFFF5FFFDFEF8FFFCFDF9FFFBFBFCFFFDFEF9FFF8FEFAFFF6FEFCFFFDFDF4FFF9FDF6FF
F9FDF9FFFEFDFDFFF7FFFFFFF9FFFDFFFEFFFAFFFEFEFBFFFDFEFCFFFCFFFFFFF6FDFDFFFBFAFCFFFEFAF8FFFCFEF3FFFDFC
FAFFF9FCFBFFF7FEFBFFF9FEF4FFFDFBFAFFFAFBFBFFF2FEFAFFFEFCFBFFFEFBFFFF7471CCFF0000F9FF0201FFFF0402FDFF
0402F6FF1618CEFFB7BBFDFFFFFFFDFFFBFFF7FFE8E4FBFF3A2FBCFF0100FFFF0302FEFF0001FCFF0403F5FFE6EAFDFFF9FF
FBFFF2FEFCFFF3FEF9FFF7FDFEFFF7FDFFFFF7FDFEFFF7FDFFFFF8FDFFFFF8FDFEFFF6FCFFFFF6FBFDFFF7FBFEFFF9FEFFFF
FCFFFFFFFAFFFFFFF9FEFFFFF9FEFFFFF9FFFFFFF9FEFFFFF7FCFDFFF7FDFEFFF7FDFFFFF7FDFFFFF7FDFEFFF8FDFEFFF7FD
FEFFEFFDFFFFF9FDFEFFFAFDFDFFF0FCFDFFFDFCFBFFFDFFFFFF6F74C5FF0000F8FF0103FFFF0001FDFF0000FCFF1318CFFF
B7BBFCFFFFFFFAFFFFFFFEFFE7E3FDFF332FBDFF0000F9FF0103FCFF0303FBFF0703EFFFEAE9F9FFFCFFF8FFF5FCFBFFF7FF
F6FFF9FEF9FFF9FDF9FFF9FEF9FFFBFDF9FFFBFDF9FFFBFDF9FFFCFDFAFFFBFDF9FFFBFDF9FFFBFDF9FFFCFDFAFFFBFDF9FF
FCFDFAFFFBFDF9FFFCFEFAFFFDFEFBFFFCFDFAFFFBFDF9FFFBFDF9FFFBFDF9FFFBFDF9FFFBFDF9FFFBFDF9FFF7FEF9FFFDFF
F6FFFCFDF8FFF4F7FFFFFDF6FDFFFEF9FFFF7271C8FF0000FAFF0403FEFF0502FDFF0200FDFF1419CEFFB8BBFEFFFFFFFFFF
FFFFFFFFE3E4FEFF2E2FBDFF0000FBFF0103FEFF0602F9FF1205ECFFF0EEFCFFFFFFFDFFFEFFFEFFFFFFFBFFFFFFFCFFFFFF
FDFFFFFFFCFFFFFFFDFFFFFFFCFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFCFF
FFFFFDFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFCFFFFFFFDFFFFFFFDFFFFFFFDFFFFFFFCFFFDFFFDFFFFFFFBFFFFFFFCFFF7FF
FFFFFDFFFDFFFEFFFFFF7178C7FF0000F5FF0503FCFF0402FCFF0100FEFF1418D0FFB8BBFDFFFFFFFEFFFDFFFFFFE0E5FDFF
2C30BEFF0000FFFF0101FFFF0901F8FF1705EAFFD1D0FAFFDDDEF4FFD4D5F2FFDDD6FCFFD9D9F7FFD7D9F4FFD8D9F5FFD8D9
F5FFD9D9F5FFD8D9F5FFD8D9F4FFD8D9F5FFD8D9F5FFD8D9F5FFD8D9F5FFD8D9F5FFD9DAF5FFD9DAF5FFD8D9F5FFD8D9F5FF
D9DAF5FFD9DAF5FFD8D9F5FFD8D9F5FFD8D9F5FFD8D9F5FFD8DAF5FFD6DAF6FFDAD9F6FFD8DBF5FFCCDCF0FFCDDBEAFFD4E3
F8FF616ECAFF0000F1FF0404FDFF0202FDFF0000FEFF1317D0FFB7BAFDFFFFFFFCFFFFFFF3FFE7DFFAFF3227C9FF0000FFFF
0202FEFF0002FDFF0006FCFF0401F8FF0100F7FF0001F6FF0202F0FF0101F5FF0100F6FF0101F5FF0101F5FF0101F5FF0101
)
 icondata2 =
(join
F5FF0101F5FF0101F6FF0101F6FF0100F5FF0101F5FF0101F5FF0101F5FF0101F6FF0101F5FF0101F5FF0101F5FF0101F5FF
0101F5FF0101F5FF0101F5FF0101F5FF0101F6FF0001F7FF0000F9FF0100F8FF0002EEFF0A00F7FF0801F4FF0602F2FF0001
FCFF0401FEFF0501FEFF0600FEFF1218D2FFB4BAFEFFFFFFFFFFFCFFF7FFE2E3FBFF302DBFFF0000FEFF0204F8FF0004F9FF
0002FBFF0300FFFF0002FCFF0003FAFF0301FCFF0101FDFF0001FDFF0001FDFF0001FDFF0001FDFF0001FDFF0101FDFF0101
FEFF0100FEFF0000FDFF0100FDFF0001FDFF0001FEFF0102FEFF0102FEFF0001FEFF0102FEFF0001FEFF0001FDFF0001FDFF
0001FDFF0001FEFF0001FDFF0103F8FF0200FDFF0201FCFF0006F3FF0800FEFF0700FEFF0201FBFF0002FEFF0001FEFF0201
FDFF0100FEFF111CCCFFB3BEFCFFFFFFFCFFFBFFFAFFE1E3FCFF3130BCFF0000F8FF0307F6FF0105F9FF0003FCFF0002FEFF
0103FDFF0203FBFF0400FFFF0201FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0101FEFF0101FEFF0101
FEFF0101FEFF0101FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF0102FEFF
0102FEFF0304F7FF0401FDFF0301FCFF0105F5FF0401FDFF0300FFFF0001FFFF0002FEFF0002FEFF0102FDFF0000FDFF121A
CCFFB4BDFBFFFFFFF9FFFFFFFBFFE7DEFCFF392EC1FF0004F4FF060AFCFF0405FDFF0303FEFF0503FFFF0803FEFF0B04FEFF
0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804
FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0804FDFF0603FEFF
0603FEFF0603FEFF0503FFFF0603FFFF0703FFFF0604FEFF0504FAFF0604FBFF0805FCFF0503FEFF1E18D9FFBBBAF9FFFFFF
F2FFF8FFFCFFDFE0FEFF2521B0FF0000E8FF0000E9FF0000EEFF0000EFFF0000E6FF0000EBFF0000EFFF0000ECFF0000ECFF
0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000
ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000ECFF0000EAFF0000ECFF0000ECFF
0000EAFF0000E5FF0000E5FF0000E9FF0000F0FF0000ECFF0000E7FF0000DFFF190CC0FFC1B8FEFFFFFFFCFFF9FFFEFFEEF0
FDFF8A8AD3FF7276F7FF7778F7FF7978F9FF7D76F9FF7979F5FF7C78F6FF7C76F7FF7478F9FF7778F9FF7878F9FF7878F9FF
7978F9FF7978F9FF7978F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78
F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7A78F9FF7978F9FF7679F7FF7578F9FF7578F9FF7679F9FF777AF4FF
7879F5FF7A78F7FF7C75F7FF7A76F8FF7979F7FF757BF0FF7F7FDDFFDBD9FEFFFFFFFBFFFDFCFDFFFFFFFBFFFFFFFFFFFFFF
FBFFFFFFFCFFFFFFFAFFFFFFF8FFFFFFFFFFFFFFF9FFFFFFF3FFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF
FFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFF
FEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFF2FFFFFFFBFFFFFFFFFFFFFFFFFFFDFFFFFFF5FFFAFFFFFDF9FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000
)
WriteFile_1("Verizon.ico","icondata1|icondata2")
}
return
WriteFile_1(File_1,Blocks)
{
   Global
         Local Handle, Data_1, Hex
         Handle :=  DllCall("CreateFile","Str",File_1,"Uint",0x40000000,"Uint",0,"UInt",0,"UInt",4,"Uint",0,"UInt",0)
         Loop, Parse, Blocks, |
            {
                  Data_1 := %A_LoopField%
                  Loop,
                     {
                        If StrLen(Data_1) = 0
                             Break
                        StringLeft, Hex, Data_1, 2
                        StringTrimLeft, Data_1, Data_1, 2
                        Hex = 0x%Hex%
                        DllCall("WriteFile","UInt", Handle,"UChar *", Hex,"UInt",1,"UInt *",UnusedVariable,"UInt",0)
                     }
            }
      DllCall("CloseHandle", "Uint", Handle)
      Return
}

;function by joedf found here http://www.ahkscript.org/boards/viewtopic.php?f=5&t=349#p3292
Ping(Address="8.8.8.8",Timeout = 1000,ByRef Data = "",Length = 0,ByRef Result = "",ByRef ResultLength = 0)
 {
  NumericAddress := DllCall("ws2_32\inet_addr","AStr",Address,"UInt")
  If NumericAddress = 0xFFFFFFFF ;INADDR_NONE
   Return 0 ;throw Exception("Could not convert IP address string to numeric format.")

  If DllCall("LoadLibrary","Str","icmp","UPtr") = 0 ;NULL
   Return 0 ;throw Exception("Could not load ICMP library.")

  hPort := DllCall("icmp\IcmpCreateFile","UPtr") ;open port
  If hPort = -1 ;INVALID_HANDLE_VALUE
   Return 0 ;throw Exception("Could not open port.")

  StructLength := 278 ;ICMP_ECHO_REPLY structure
  VarSetCapacity(Reply,StructLength)
  Count := DllCall("icmp\IcmpSendEcho","UPtr",hPort,"UInt",NumericAddress,"UPtr",&Data,"UShort",Length,"UPtr",0,"UPtr",&Reply,"UInt",StructLength,"UInt",Timeout)
 
  If NumGet(Reply,4,"UInt") = 11001 ;IP_BUF_TOO_SMALL
   {
    VarSetCapacity(Reply,StructLength * Count)
    DllCall("icmp\IcmpSendEcho","UPtr",hPort,"UInt",NumericAddress,"UPtr",&Data,"UShort",Length,"UPtr",0,"UPtr",&Reply,"UInt",StructLength * Count,"UInt",Timeout)
   }
 
  If NumGet(Reply,4,"UInt") != 0 ;IP_SUCCESS
   Return 0 ;throw Exception("Could not send echo.")
 
  If !DllCall("icmp\IcmpCloseHandle","UInt",hPort) ;close port
   Return 0 ;throw Exception("Could not close port.")

  ResultLength := NumGet(Reply,12,"UShort")
  VarSetCapacity(Result,ResultLength)
  DllCall("RtlMoveMemory","UPtr",&Result,"UPtr",NumGet(Reply,16),"UPtr",ResultLength)
  Return, NumGet(Reply,8,"UInt")
 }
OnExit:
wb.quit
ExitApp

Image

Image

Credits:
(1) Thanks to Veovis for "Include a bitmap in your uncompiled script!!!" found here http://www.autohotkey.com/board/topic/9 ... ed-script/
and aCkRiTe modified version of Veovis' writefile function to include a bitmap in an uncompiled script found here
http://www.autohotkey.com/forum/topic12220.html
(2) Thanks to Khalid for "Simple GUI title animation" found here http://www.autohotkey.com/board/topic/8 ... animation/
(3) Thanks to joedf for his Check Internet Connection function found here http://www.ahkscript.org/boards/viewtop ... =349#p3292
(4) If I missed crediting anyone please let me know.
Last edited by DataLife on 15 Nov 2013, 23:32, edited 1 time in total.
Check out my scripts. (MyIpChanger) (ClipBoard Manager) (SavePictureAs)
All my scripts are tested on Windows 10, AutoHotkey 32 bit Ansi unless otherwise stated.
timeFlies
Posts: 146
Joined: 22 Oct 2013, 20:54
Location: Somewhere in the northern hemisphere.

Re: Verizon Wireless Data Usage Checker

15 Nov 2013, 02:10

Neat. I'm lucky enough to live on campus so I don't have to worry about internet usage. Unlimited.

Return to “Scripts and Functions (v1)”

Who is online

Users browsing this forum: submeg and 130 guests