I have never considered it finished and it probably has a bug or two.
I use text files to store the clipboard content. I suspect it may have been better to use an array and write the array to a text file when the script exits. I think that would take a complete rewrite and I am not inclined to do that.
It works pretty good like it is.
Download it here....
https://sourceforge.net/projects/my-clipboard-manager/files/ClipBoardManager.ahk/download
;Text Based Clipboard Manager
;How to Use:
;1. Ctrl Alt Space to open Clipboard Gui
;2. Choose a clipboard and click paste. The clipboard will be pasted at the cursor position if it is visible.
;Features:
;Saves last user defined number of clipboard contents (default 100 - click settings to change)
;You can have 10 presets. You can edit and save any of the clipboards as a preset or manually add new ones.
;A Compact option will show a smaller gui that shows the 1st line of each clipboard with a paste button
;Option to show Gui on each clipboard change (default: NO)
;Option to start with windows (default: NO)
;Option to not show Tray Icon
;Notes:
;1. Click on picture arrows or use the keyboard arrow keys to browse saved clipboards
;2. You can click and drag the Gui and the script will remember its position
;3. You can edit the current clipboard from the main Gui before pasting
;4. Left clipboard picture shows Viewing Current Clip Number / Total clipboards saved - Example 4/7
;5. Right clipboard picture shows total number of clipboards allowed to be saved )
;6. Exit the script by right clicking on the tray icon or use the hotkey "Ctrl e"
;7. Escape key closes MyClipboardManager Gui or click Close on the Gui
;8. MyClipboardManager creates subfolders so create a folder for MyClipboardManager
;9. Displaying the contents of very large clipboards takes awhile.
;10. Click on "View all Entries" to see all clipboards that have been saved. On this Gui you will be able to Paste,Clear,Edit & Save each clipboard. Also while making changes to a clipboard you can click "Restore" to restore to original clipboard.
;Credits go to the following people.
;Laszlo - "Bin2Hex functions" found here https://autohotkey.com/board/topic/4352-binary-file-io-with-binary-buffers/
;Veovis - "include-a-bitmap-in-your-uncompiled-script" found here https://autohotkey.com/board/topic/9974-include-a-bitmap-in-your-uncompiled-script/
;Lexikos - Scrollable Gui code from https://autohotkey.com/board/topic/26033-scrollable-gui-proof-of-concept/
Full Script...
Code: Select all
;Text Based Clipboard Manager
;How to Use:
;1. Ctrl Alt Space to open Clipboard Gui
;2. Choose a clipboard and click paste. The clipboard will be pasted at the cursor position if it is visible.
;Features:
;Saves last user defined number of clipboard contents (default 100 - click settings to change)
;You can have 10 presets. You can edit and save any of the clipboards as a preset or manually add new ones.
;A Compact option will show a smaller gui that shows the 1st line of each clipboard with a paste button
;Option to show Gui on each clipboard change (default: NO)
;Option to start with windows (default: NO)
;Option to not show Tray Icon
;Notes:
;1. Click on picture arrows or use the keyboard arrow keys to browse saved clipboards
;2. You can click and drag the Gui and the script will remember its position
;3. You can edit the current clipboard before pasting
;4. Left clipboard picture shows Viewing Current Clip Number / Total clipboards saved - Example 4/7
;5. Right clipboard picture shows total number of clipboards allowed to be saved )
;6. Exit the script by right clicking on the tray icon or use the hotkey "Ctrl e"
;7. Escape key closes MyClipboardManager Gui or click Close on the Gui
;8. MyClipboardManager creates subfolders so create a folder for MyClipboardManager
;9. Displaying the contents of very large clipboards takes awhile.
;10. Click on "View all Entries" to see all clipboards that have been saved. On this Gui you will be able to Paste,Clear,Edit & Save each clipboard. Also while making changes to a clipboard you can click "Restore" to restore to original clipboard.
Version = 1.1
ScriptName = MyClipboardManager
#SingleInstance,force
SetControlDelay, -1
DetectHiddenWindows,On
SetBatchLines, -1
IfNotExist,%a_scriptdir%\Images
FileCreateDir, %a_scriptdir%\Images
IfNotExist,%a_scriptdir%\Presets
FileCreateDir, %a_scriptdir%\Presets
IfNotExist, %a_scriptdir%\ClipboardHistory
FileCreateDir, %a_scriptdir%\ClipboardHistory
gosub, CreatePictures&Icon
Menu, TRAY, Icon, %a_scriptdir%\images\Clipboard.ico
IniRead,TrayIcon,config.ini,settings,TrayIcon,1
if TrayIcon = 0
Menu, tray, noicon ;put here as soon as possible to avoid the trayicon from flashing at startup
OnMessage(0x115, "OnScroll") ; WM_VSCROLL ;used for extra large clipboards to be displayed on a scrollable gui and "View All Entries"
OnMessage(0x114, "OnScroll") ; WM_HSCROLL
OnMessage(0x203, "OnLButtonDblClk") ;prevents a static controls text being copied to the clipboard on doubleclick. Required funtion is OnLButtonDblClk
IniRead,NumberOfClipBoards,config.ini,Settings,Count,100
IniRead,GuiSize,config.ini,Gui,Size,Expanded
IniRead,LastClipBoardContentsPos,config.ini,LastClipBoardContentsPos,Pos,1
PresetSelected = 0
LeftArrow = 0
RightArrow = 0
ClearthisEntry = 0
gosub ReNumberClipboardTextFilesIfAnyAreMissing
Loop %a_scriptdir%\ClipboardHistory\Clip*.txt
NumberOfSavedClipboards = %a_index%
FileRead,Value,%A_ScriptDir%\ClipboardHistory\Clip%LastClipBoardContentsPos%.txt
IniRead, SGX,config.ini,GuiPosition,CompactGuiXpos,100
IniRead, SGY,config.ini,GuiPosition,CompactGuiYpos,100
IniRead, EGX,config.ini,GuiPosition,ExpandedGuiXpos,100
IniRead, EGY,config.ini,GuiPosition,ExpandedGuiYpos,100
Gui 1: Add, Edit, x31 y15 w100 h20 vMyCompactEdit,
Gui 1: Add, Picture, x6 y15 w20 h20 , images\MyClipboardManager-Left.png
Gui 1: Add, Picture, x136 y15 w20 h20 gArrow, images\MyClipboardManager-Right.png
Gui 1: Add, Button, x6 y37 w50 h20 gPaste Default,Paste
Gui 1: Add, Button, x56 y37 w50 h20 gExpand,Expand
Gui 1: Add, Button, x106 y37 w50 h20 gClose,Close
Gui 1: Add, text, x12 y70 w150,Blank lines were found at the`ntop.`nClick Expand to see contents
Gui 2: Add, Edit, x61 y45 w500 r20 vMyExpandedEdit,
Gui 2: Add, Picture, x20 y45 w20 h20 gArrow vleft , images\MyClipboardManager-Left.png
Gui 2: Add, Picture, x581 y45 w20 h20 gArrow , images\MyClipboardManager-right.png
Gui 2: Add, Button, x6 y75 w50 h20 gPaste default,Paste
Gui 2: Add, Button, x566 y75 w50 h20 gPaste,Paste
Gui 2: Add, Button, x6 y322 w50 h20 gCompact,Compact
Gui 2: Add, Button, x+4 y322 w80 h20 gClearThisEntry,Clear This Entry
Gui 2: Add, Button, x+4 y322 w80 h20 gClearAllEntries,Clear All Entries
Gui 2: Add, Button, x+4 y322 w80 h20 gViewAllEntries ,View All Entries
Gui 2: Add, Button, x+4 y322 w80 h20 gSaveAsPreset,Save As Preset
Gui 2: Add, Button, x+4 y322 w80 h20 gEditPresets,Edit Presets
Gui 2: Add, Button, x+4 y322 w80 h20 gSettings ,Settings
Gui 2: Add, Button, x+4 y322 w50 h20 gClose,Close
Gui 2: Add, Picture,x0 y150 w60 h-1, images\Clipboard.png
Gui 2: Add, Picture,x561 y150 w60 h-1, images\Clipboard.png
Gui 2: Add, Text, x13 y177 w34 vClipTextNumber1 center,%LastClipBoardContentsPos%/%NumberOfSavedClipboards%
GuiControl 2: +BackgroundTrans, ClipTextNumber1
Gui 2: Add, Text, x572 y177 w34 vClipTextNumber2 center,%NumberOfClipboards%
GuiControl 2: +BackgroundTrans, ClipTextNumber2
xPos = 6
loop 10
{
Gui 2: Add, Button, x%xPos% y15 w50 h20 gPreset, Preset%a_index%
xPos := (xPos + 62)
}
if GuiSize = Compact
Gui 1: Show, x%SGX% y%SGY% h40 w155, Compact Gui
else
Gui 1: Show, Hide x%SGX% y%SGY% h40 w155, Compact Gui
ControlFocus,Static1,A ;Need this to take focus away from edit box
WinGet,SGID,ID,Compact Gui
Gui 1: color, c7c4f4 , e9e9e9
WinSet, AlwaysOnTop, On , Compact Gui
Gui 1: -caption
if GuiSize = Expanded
Gui 2: Show, x%EGX% y%EGY% h324 w616, Expanded Gui
else
Gui 2: Show, Hide x%EGX% y%EGY% h324 w616, Expanded Gui
GuiControl 1: ,MyCompactEdit, %Value%
GuiControl 2: ,MyExpandedEdit, %Value%
ControlFocus,Static1,A ;Need this to take focus away from edit box
WinGet,EGID,ID,Expanded Gui
Gui 2: color, c7c4f4 , e9e9e9
WinSet, AlwaysOnTop, On , Expanded Gui
Gui 2: -caption
GroupAdd, MyClipboardManagerGuis , Expanded Gui
GroupAdd, MyClipboardManagerGuis , Compact Gui
return
OnClipBoardChange:
runonce++ ;prevents OnClipBoardChange from doing anything on initial script start up
if RunOnce < 2
return
gosub ReNumberClipboardTextFilesIfAnyAreMissing
IniRead,LastClipBoard,config.ini,LastClipBoard,Pos,1
if LastClipBoard =
LastClipBoard = 1
FoundMatch = 0
if ( A_EventInfo = 1 and PresetSelected = 0 ) ;selecting a preset uses the clipboard, in that case we do not need OnClipBoardChange to do anything
{
IniRead,NumberOfClipBoards,config.ini,Settings,Count,100
if NumberOfClipboards > 0
{
loop %NumberOfClipBoards%
{
FileRead,Contents,ClipboardHistory\Clip%a_index%.txt
if Contents = %clipboard%
{
FoundMatch = 1
CurrentClipNumber = %A_Index%
break
}
} ;loop %NumberOfClipBoards%
if ( FoundMatch = 0 )
{
Loop %a_scriptdir%\ClipboardHistory\Clip*.txt
NumberOfSavedClipboards = %a_index%
if LastClipboard > %NumberOfSavedClipboards%
{
if NumberOfClipboards > %NumberOfSavedClipboards%
LastClipboard = %NumberOfSavedClipboards%
}
LastClipboard++
if LastClipboard > %NumberOfClipBoards%
LastClipboard = 1
iniwrite,%LastClipBoard%,config.ini,LastClipboard,Pos
iniwrite,%LastClipBoard%,config.ini,LastClipboardContentsPos,Pos
FileDelete,%a_scriptdir%\ClipboardHistory\Clip%LastClipboard%.txt
FileAppend,%ClipBoard%,%a_scriptdir%\ClipboardHistory\Clip%LastClipboard%.txt
NumberOfSavedClipboards++
If NumberOfSavedClipboards > %NumberOfClipboards%
NumberOfSavedClipboards = %NumberOfClipboards%
} ;ending brace for "if ( FoundMatch = 0 ) "
} ;ending brace for "if NumberOfClipboards > 0"
Value1 = %Clipboard%
Value2 = %Clipboard%
GuiControl,1:,Edit1,%Value1% ;even if it already exists in Clipboard history I still want it to change the edit box
GuiControl,2:,Edit1,%Value2%
GuiControl,2:, ClipTextNumber1 , %LastClipBoard%/%NumberOfSavedClipboards%
iniwrite,%LastClipBoard%,config.ini,LastClipboardContentsPos,Pos
LastClipBoardContentsPos = %LastClipBoard%
IniRead,ShowOnClipboardChange,config.ini,Settings,ShowOnClipboardChange,0
if ShowOnClipboardChange = 1
gosub ShowGui
}
PresetSelected = 0 ;set to 0 in case it equals 1
Return
^e::
exitapp
^!space::
IniRead,GuiSize,config.ini,Gui,Size,Expanded
gosub, ShowGui
Return
#IfWinActive, ahk_group MyClipboardManagerGuis
escape::
WinHide, ahk_group MyClipboardManagerGuis
return
#IfWinActive, ahk_group GroupForUpDownControl
up::
ControlGetText, EditBoxValue, edit1, ahk_id %SettingsID%
EditBoxValue++
GuiControl,5:,Edit1,%EditBoxValue%
return
#IfWinActive, ahk_group GroupForUpDownControl
down::
ControlGetText, EditBoxValue, edit1, ahk_id %SettingsID%
EditBoxValue--
if EditBoxValue < 1
EditBoxValue = 0
GuiControl,5:,Edit1,%EditBoxValue%
return
#IfWinActive, ahk_group MyClipboardManagerGuis
Left::
if EditingEditbox = 1
{
send {Left}
return
}
LeftArrow = 1
goto Arrow
#IfWinActive, ahk_group MyClipboardManagerGuis
Right::
if EditingEditbox = 1
{
send {Right}
return
}
RightArrow = 1 ;no return needed this arrow label is used below
Arrow:
ControlFocus,Button6, Expanded Gui ;Need this to take focus away from edit box
value =
IniRead,Number,config.ini,LastClipboardContentsPos,Pos,0
if Number = 0
return
WinMove,ahk_id %SGID%, , , , ,68
if ( LeftArrow = 0 and RightArrow = 0 ) ;if the arrow keys = 1 then they are being used. so don't get Control
MouseGetPos,,,, Control
WinGetActiveTitle,Title
if ( Control = "Static1" or LeftArrow = 1 )
{
LeftArrow = 0
GetNextLine1:
if ClearthisEntry = 0 ;account for missing clip
Number--
if Number < 1
Number = %NumberOfClipBoards%
FileRead,Value,%a_scriptdir%\ClipboardHistory\Clip%Number%.txt
if Value =
goto GetNextLine1
ClearthisEntry = 0
}
if ( Control = "Static2" or RightArrow = 1 )
{
RightArrow = 0
GetNextLine2:
Number++
if Number > %NumberOfClipboards%
Number = 1
FileRead,Value,%a_scriptdir%\ClipboardHistory\Clip%Number%.txt
if Value =
goto GetNextLine2
}
if GuiSize = Compact
{
FileReadLine,IsLineOneBlank,%a_scriptdir%\ClipboardHistory\Clip%Number%.txt,1
if ErrorLevel = 0
{
if IsLineOneBlank =
WinMove,ahk_id %SGID%, , , , ,120 ;make gui bigger to display message about line 1 being blank
}
}
GuiControl,1:,Edit1,%Value%
GuiControl,2:,Edit1,%Value%
Iniwrite,%Number%,config.ini,LastClipboardContentsPos,Pos
LastClipboardContentsPos = %Number%
GuiControl, 2:, ClipTextNumber1 , %Number%/%NumberOfSavedClipboards%
Control =
LeftArrow = 0
RightArrow = 0
ClearthisEntry = 0
return
Paste:
WinHide, Compact Gui
WinHide, Expanded Gui
Sleep 250
IniRead,GuiSize,config.ini,Gui,Size
if GuiSize = Expanded
GuiControlGet, PasteValue ,, MyExpandedEdit
else
GuiControlGet, PasteValue ,, MyCompactEdit
;if FileSize > 35 ;I may be able to get the Clipboard text file size and then do something to prevent lag
;FileRead,PasteValue,%A_ScriptDir%\ClipboardHistory\Clip%LastClipboardContentsPos%.txt
sleep 100
SaveWindowsClipboard = %ClipboardAll%
Clipboard = %PasteValue%
send, {shift down}{insert}{shift up}
Clipboard = %SaveWindowsClipboard%
return
Close:
WinHide, Compact Gui
WinHide, Expanded Gui
return
Expand:
GuiControlGet, PasteValue ,, MyCompactEdit
GuiControl,2:,Edit1,%PasteValue%
IniWrite,Expanded,config.ini,Gui,Size
GuiSize = Expanded
WinHide, Compact Gui
WinShow, Expanded Gui
ControlFocus,Static1,A ;Need this to take focus away from edit box
return
Compact:
GuiControlGet, PasteValue ,, MyExpandedEdit
GuiControl,1:,Edit1,%PasteValue%
IniWrite,Compact,config.ini,Gui,Size
GuiSize = Compact
WinHide, Expanded Gui
iniread, LastClipboardContentsPos,config.ini,LastClipboardContentsPos,Pos,1
FileReadLine,IsLineOneBlank,%a_scriptdir%\ClipboardHistory\Clip%LastClipboardContentsPos%.txt,1
if ErrorLevel = 0
{
if IsLineOneBlank =
WinMove,ahk_id %SGID%, , , , ,120 ;make gui bigger to display message about line 1 being blank
}
WinShow, Compact Gui
ControlFocus,Static1,A ;Need this to take focus away from edit box
return
ClearThisEntry:
GuiControlGet,Value,,ClipTextNumber1
IfInString,Value,P
{
MsgBox,4160,Info, A preset is being shown. To clear a present choose "Edit Presets"
return
}
MsgBox,4164,Confirm,Do you want to clear this entry?
IfMsgBox,Yes
{
iniread, LastClipboardContentsPos,config.ini,LastClipboardContentsPos,Pos,1
FileDelete,%a_scriptdir%\ClipboardHistory\Clip%LastClipboardContentsPos%.txt
GuiControl,1:,Edit1,
GuiControl,2:,Edit1,
GuiControl, 2:, ClipTextNumber1 ,
ClearthisEntry = 1 ;don't need a return here because I want it to fall thru to ReNumberClipboardTextFilesIfAnyAreMissing:
}
ReNumberClipboardTextFilesIfAnyAreMissing:
iniread, LastClipboardContentsPos,config.ini,LastClipboardContentsPos,Pos,1
FileRead,OriginalClipboardContentsForDisplay,%A_ScriptDir%\ClipboardHistory\Clip%LastClipboardContentsPos%.txt
IniRead,NumberOfClipBoards,config.ini,Settings,Count,100
ValidClips = 0
Loop %NumberOfClipBoards% ;see if the last clipboard to be displayed is missing and if so, then use the most recent clipboard that is not missing
{
FileRead,IsClipMissing,%a_scriptdir%\ClipboardHistory\clip%A_index%.txt
if IsClipMissing =
{
if a_index = %LastClipboardContentsPos%
{
LastClipBoardContentsPos := ValidClips
IniWrite, %LastClipboardContentsPos%,config.ini,LastClipboardContentsPos,Pos
IsClipMissing = 1
break
}
}
else
ValidClips++
}
Loop %NumberOfClipBoards%
FileRead,var%a_index%,%a_scriptdir%\ClipboardHistory\clip%a_index%.txt
FileDelete,%a_scriptdir%\ClipboardHistory\Clip*.txt
ClipCounter = 0
Loop %NumberOfClipboards%
{
AppendVar := var%A_index%
if AppendVar <>
{
ClipCounter++
FileAppend,%AppendVar%,%A_ScriptDir%\ClipboardHistory\Clip%ClipCounter%.txt
}
}
if IsClipMissing <> 1
{
Loop %NumberOfClipBoards%
{
FileRead,FindOriginalClipboardContentsForDisplay,%a_scriptdir%\ClipboardHistory\clip%A_index%.txt
if FindOriginalClipboardContentsForDisplay = %OriginalClipboardContentsForDisplay%
{
LastClipboardContentsPos = %a_index%
IniWrite, %LastClipboardContentsPos%,config.ini,LastClipboardContentsPos,Pos
break
}
else
LastClipboardContentsPos = 1
}
}
NumberOfSavedClipboards = %ClipCounter%
return
ClearAllEntries:
MsgBox,4164,Confirm,Do you want to clear all clipboard entries?
IfMsgBox,Yes
{
FileDelete,%a_scriptdir%\ClipboardHistory\Clip*.txt
GuiControl,1:,Edit1,
GuiControl,2:,Edit1,
GuiControl, 2:, ClipTextNumber1 , 0
IniWrite, 0,config.ini,LastClipboardContentsPos,Pos
NumberOfSavedClipboards = 0
}
return
ViewAllEntries:
var =
Loop,%a_scriptdir%\Clipboardhistory\*.txt
var++
if var =
{
WinSet,AlwaysOnTop,off,ahk_id %EGID%
WinSet,AlwaysOnTop,off,ahk_id %SGID%
MsgBox,4160,Clipboard Manager, There are no saved Clipboards
WinSet,AlwaysOnTop,on,ahk_id %EGID%
WinSet,AlwaysOnTop,on,ahk_id %SGID%
return
}
Gui 6: destroy
WinHide, Expanded Gui
gosub ReNumberClipboardTextFilesIfAnyAreMissing
Gui 6: +Resize +0x20000 ; WS_VSCROLL | WS_HSCROLL
sysget,MWA,MonitorWorkArea
Gui 6: Add, Picture, x2 y0 w80 h80 , %A_ScriptDir%\images\Clipboard.png
Gui 6: font,s12
Gui 6: Add, Text, x82 y10 w750 h80 , You can edit and save your clipboard entries here.`nTo delete a clipboard entry just clear and save and it will be deleted when you close the window.
Gui 6: font,s10
yPos=100
loop %NumberOfSavedClipboards%
{
FileRead,Contents,%a_scriptdir%\ClipboardHistory\Clip%a_index%.txt
ThisClip = %A_Index%
Loop
{
FileReadLine,TempVar,%a_scriptdir%\ClipboardHistory\Clip%ThisClip%.txt,%a_index%
if ErrorLevel
break
TotalLines = %a_index%
}
if TotalLines > 9
TotalLines = 10
Gui 6: Add, Button, x20 y+25 w60 h25, Clip # %a_index%
Gui 6: Add, Button, x80 yp w60 h25 GgetCorrectClipNumber , Paste
Gui 6: Add, Button, x140 yp w60 h25 GgetCorrectClipNumber , Clear
Gui 6: Add, Button, x200 yp w60 h25 GgetCorrectClipNumber , Save
Gui 6: Add, Button, x260 yp w60 h25 GgetCorrectClipNumber , Restore
Gui 6: Add, Button, x320 yp w60 h25 GgetCorrectClipNumber , Expand
Gui 6: Add, Edit, x20 y+0 w900 r%TotalLines% Multi, %Contents%
}
Guih := ( MWABottom-40)
Guiw := 950 ;need to keep this, it is being used for the label vaeCollapse
Gui 6: Show, Hide w950 h%Guih%, View All Entries
Gui 6: color, c7c4f4 , e9e9e9
GuiControlGet, var, 6:Pos,edit%NumberOfSavedClipboards% ;returns varW varH varX varY
guih := ( vary + varh + 20 )
if ( guih > MWABottom )
guih := ( MWABottom-40 )
if guih =
guih = 500
Gui 6: Show, w950 h%Guih%, View All Entries
Return
GetCorrectClipNumber:
MouseGetPos,,,,OutControl
ControlGetText,GotoLabel, %OutControl%
StringTrimLeft,EditBoxNumber,OutControl,6
GetButtonText:
EditBoxNumber--
ControlGetText,ButtonText, Button%EditBoxNumber%
IfNotInString,ButtonText,Clip
goto GetButtonText
StringTrimLeft,EditBoxNumber,ButtonText,7
goto vae%GotoLabel%
vaePaste: ;(vae is View All Entries)
WinHide, View All Entries
GuiControlGet, PasteValue ,6:, Edit%EditBoxNumber%
Gui 6: destroy
SaveWindowsClipboard = %ClipboardAll%
Clipboard = %PasteValue%
send, {shift down}{insert}{shift up}
Clipboard = %SaveWindowsClipboard%
return
vaeClear:
GuiControl,6:,Edit%EditBoxNumber%
return
vaeSave:
GuiControlGet, PasteValue ,6:, Edit%EditBoxNumber%
FileCopy,%A_ScriptDir%\ClipboardHistory\Clip%EditBoxNumber%.txt,%A_ScriptDir%\ClipboardHistory\Restore-Clip%EditBoxNumber%.txt,1
FileDelete,%A_ScriptDir%\ClipboardHistory\Clip%EditBoxNumber%.txt
if PasteValue <>
FileAppend,%PasteValue%,%A_ScriptDir%\ClipboardHistory\Clip%EditBoxNumber%.txt
MsgBox,4160,Saved,Clipboard # %EditBoxNumber% has been saved.
return
vaeRestore:
IfNotExist,%A_ScriptDir%\ClipboardHistory\Restore-Clip%EditBoxNumber%.txt
FileRead,Contents,%a_scriptdir%\ClipboardHistory\Clip%EditBoxNumber%.txt
else
FileRead,Contents,%A_ScriptDir%\ClipboardHistory\Restore-Clip%EditBoxNumber%.txt
GuiControl,6:,Edit%EditBoxNumber%,%Contents%
return
vaeCollapse:
GuiControl, 6:text, %OutControl% , Expand ;Change button label to Expand
ControlGetPos,,,,CurrentEditBoxh,Edit%EditBoxNumber%, View All Entries ;get current size
OldEditBoxh := % OldEditBoxh%EditBoxNumber%
GuiControl, 6:Move, Edit%EditBoxNumber%, h%OldEditBoxh% ;change to collapsed size
;------Begin - Determine which control to start with when moving controls
WinGet, ControlList, ControlList, View All Entries
Loop, Parse, ControlList , `n, `r
{
if a_loopfield = %outcontrol%
{
StartHere = %A_Index%
break
}
}
StartHere++
;------End - Determine which control to start with when moving controls
GuiControl, 6:Move, Edit%EditBoxNumber%, h%OldEditBoxh% ;change to collapsed size
Loop, Parse, ControlList , `n, `r
{
if (a_index > StartHere )
{
ControlGetPos,,y,,h,%A_LoopField%,View All Entries
y := ( y - CurrentEditBoxh + OldEditBoxh )
Control,hide,,%A_LoopField%,View All Entries
ControlMove,%a_loopfield%,,%y%,,%h%,View All Entries
Control,show,,%A_LoopField%,View All Entries
}
}
UpdateScrollBars(6, Guiw, Guih)
return
vaeExpand:
ControlGetPos,,,,OldEditBoxh%EditBoxNumber%,Edit%EditBoxNumber%, View All Entries
OldEditBoxh := % OldEditBoxh%EditBoxNumber%
GuiControlGet, TempText ,6:, Edit%EditBoxNumber%
Loop, Parse, TempText , `n, `r
TotalLines = %a_index%
Gui 99: font,s10
Gui 99: Add, edit, r%TotalLines%,
Gui 99: Show, Hide
GuiControlGet, NewEditBox, 99:Pos,edit1 ;returns varW varH varX varY
Gui 99: Destroy
WinGet, ControlList, ControlList, View All Entries
Loop, Parse, ControlList , `n, `r
{
if a_loopfield = %outcontrol%
{
StartHere = %A_Index%
break
}
}
StartHere++
Loop, Parse, ControlList , `n, `r
{
if (a_index > StartHere )
{
ControlGetPos,,y,,h,%A_LoopField%,View All Entries
y := ( y + NewEditBoxh - OldEditBoxh)
Control,hide,,%A_LoopField%,View All Entries
ControlMove,%a_loopfield%,,%y%,,%h%,View All Entries
Control,show,,%A_LoopField%,View All Entries
}
}
GuiControl, 6:Move, Edit%EditBoxNumber%, h%NewEditBoxh%
UpdateScrollBars(6, 960, Guih)
If NewEditBoxh <> %OldEditBoxh%
GuiControl, 6:text, %OutControl% , Collapse
return
7GuiClose:
Gui 7: destroy
WinShow, View All Entries
return
6GuiClose:
Gui 6: destroy
WinShow, Expanded Gui
FileDelete,%A_ScriptDir%\ClipboardHistory\Restore-Clip*.txt
return
loop %NumberOfSavedClipBoards%
{
FileRead,Contents,%a_scriptdir%\ClipboardHistory\Clip%a_index%.txt
if Contents =
FileDelete,%a_scriptdir%\ClipboardHistory\Clip%a_index%.txt
}
gosub ReNumberClipboardTextFilesIfAnyAreMissing
return
Settings:
WinHide, Compact Gui
WinHide, Expanded Gui
IfWinExist, ahk_id %SettingsID% 1
{
WinRestore, ahk_id %SettingsID%
return
}
WinHide, Compact Gui
WinHide, Expanded Gui
IniRead,Value1,config.ini,Settings,ShowOnClipboardChange,0
IniRead,Value2,config.ini,Settings,StartWithWindows,0
IniRead,Value3,config.ini,settings,TrayIcon,1
IniRead,NumberOfClipBoards,config.ini,Settings,Count,100
Gui 5: Add, CheckBox, x22 y20 w270 h30 vShowOnClipboardChange checked%Value1%, Show MyClipboardManager on clipboard change
Gui 5: Add, CheckBox, x22 y50 w270 h30 vStartWithWindows checked%Value2%, Start MyClipboardManager when windows starts
Gui 5: Add, CheckBox, x22 y80 w270 h30 vTrayIcon checked%Value3%, Show Tray Icon in System Tray Area
Gui 5: Add, Text, x22 y120 w120 h20 , Keep history of the last
Gui 5: Add, Edit, x142 y118 w30 h20 vKeepHowMany , %NumberOfClipboards%
Gui 5: Add, Text, x187 y120 w130 h20 , clipboard changes
Gui 5: Add, Button, x47 y160 w100 gSaveSettings, Save
Gui 5: Add, Button, x157 y160 w100,Cancel
Gui 5: Show, h206 w321, Settings
WinGet,SettingsID,ID,Settings
GroupAdd, GroupForUpDownControl, Settings
Gui 5: color, c7c4f4 , e9e9e9
ControlFocus,edit1,Settings
Return
SaveSettings:
Gui 5: submit, nohide
if ShowOnClipboardChange = 1
IniWrite,1,config.ini,Settings,ShowOnClipboardChange
else
IniWrite,0,config.ini,Settings,ShowOnClipboardChange
if StartWithWindows = 1
{
IniWrite,1,config.ini,Settings,StartWithWindows
FileCreateShortcut, %A_ScriptDir%\%A_ScriptName%, %A_Startup%\%A_ScriptName%.lnk , %A_ScriptDir% , , MyClipboardManager, %A_ScriptDir%\images\Clipboard.ico
}
else
{
IniWrite,0,config.ini,Settings,StartWithWindows
FileDelete,%A_Startup%\%A_ScriptName%.lnk
}
GuiControlGet, KeepHowMany,,KeepHowMany
GuiControlGet, TrayIcon,,TrayIcon
if TrayIcon = 1
Menu, TRAY, Icon, ;%a_scriptdir%\images\Clipboard.ico
else
Menu, Tray, NoIcon
IniWrite,%TrayIcon%,config.ini,Settings,TrayIcon
Gui 5: destroy
;Determine if any clips need to be deleted due to KeepHowMany option. Also, determine if the chipboard being shown has been deleted and show correct clipboard
gosub ReNumberClipboardTextFilesIfAnyAreMissing
IniRead,NumberOfClipBoards,config.ini,Settings,Count,100
IniRead,CurrentClipboardContentsPos,Config.ini,LastClipboardContentsPos,Pos, 1
IniRead,LastClipboardPos,Config.ini,LastClipboard,Pos, 1
If KeepHowMany = %NumberOfClipboards%
{
gosub, Showgui
return
}
IniWrite,%KeepHowMany%,Config.ini,Settings,Count
GuiControl, 2:, ClipTextNumber2 ,%KeepHowMany%
Loop %a_scriptdir%\ClipboardHistory\Clip*.txt
NumberOfSavedClipboards = %A_index%
FileRead,ClipContentsA,%A_ScriptDir%\ClipboardHistory\Clip%CurrentClipboardContentsPos%.txt
if NumberOfClipboards > %KeepHowMany%
{
Loop %KeepHowMany%
{
LastClipboardPos--
if LastClipboardPos < 1
LastClipboardPos := NumberOfSavedClipboards
}
loop %KeepHowMany% ;this reads the most KeepHowMany recent clip.txt
{
LastClipboardPos++
if LastClipboardPos > %NumberOfSavedClipboards%
LastClipboardPos = 1
FileRead,var%a_index%,%A_ScriptDir%\ClipboardHistory\Clip%LastClipboardPos%.txt
}
FileDelete,%A_ScriptDir%\ClipboardHistory\Clip*.txt
Loop %KeepHowMany%
{
AppendVar := var%A_index%
if AppendVar <>
{
FileAppend,%AppendVar%,%A_ScriptDir%\ClipboardHistory\Clip%A_Index%.txt
}
}
IniRead,LastClipboardPos,Config.ini,LastClipboard,Pos, 1
if LastClipboardPos > %KeepHowMany%
LastClipboardPos := KeepHowMany
IniWrite,%LastClipboardPos%,Config.ini,LastClipboard,Pos
Loop %KeepHowMany%
{
FileRead,ClipContentsB,%A_ScriptDir%\ClipboardHistory\Clip%a_index%.txt
If ClipContentsB = %ClipContentsA%
{
LastClipboardContentsPos := A_Index
break
}
else
LastClipboardContentsPos := KeepHowMany
}
IniWrite,%LastClipboardContentsPos%,Config.ini,LastClipboardContentsPos,Pos
;read all these again to make sure the display matches the config.ini
IniRead,NumberOfSavedClipBoards,config.ini,Settings,Count,10
IniRead,LastClipboardContentsPos,Config.ini,LastClipboardContentsPos,Pos, 1
IniRead,LastClipboardPos,Config.ini,LastClipboard,Pos, 1
FileRead,Contents, %A_ScriptDir%\ClipboardHistory\Clip%LastClipboardContentsPos%.txt
GuiControl,1:,Edit1, %Contents%
GuiControl,2:,Edit1, %Contents%
GuiControl,2:,ClipTextNumber1 , %LastClipboardContentsPos%/%NumberOfSavedClipBoards%
GuiControl,2:,ClipTextNumber2 , %NumberOfSavedClipBoards% ;since KeepHowMany was more then we already saved then NumberOfClipboards and NumberOfSavedClipboards will be the same15
}
If NumberOfClipboards < KeepHowMany
GuiControl, 2:, ClipTextNumber2 , %KeepHowMany%
gosub, ShowGui
return
5GuiClose:
5ButtonCancel:
Gui 5: destroy
gosub ShowGui
return
SaveAsPreset:
IfWinExist,ahk_id %SaveAsPresetID%
{
WinRestore,ahk_id %SaveAsPresetID%
return
}
GuiControlGet, Contents ,, MyExpandedEdit
if Contents =
{
MsgBox,4144,Nothing to do!, There is no clipboard data available to "Save As Present"
return
}
WinHide, Compact Gui
WinHide, Expanded Gui
Loop 10
FileRead,Contents%A_Index%,%a_scriptdir%\Presets\Preset%A_Index%.txt
Gui 3: Add, GroupBox, x12 y102 w1050 h425 ,
Gui 3: Add, Radio, x22 y123 w80 h30 gUpdateEditBox vSelectedRadioButton , Preset 1
yPos = 163
Loop 10
{
if A_index <> 1
{
Gui 3: Add, Radio, x22 y%yPos% w80 h30 gUpdateEditBox , Preset %A_index%
yPos := yPos+40
}
}
yPos = 120
Loop 10
{
Content := ( Contents%A_Index%)
Gui 3: Add, Edit, x122 y%yPos% w930 h33 vPresetEdit%A_Index% ReadOnly , %Content%
yPos := yPos+40
}
Gui 3: Add, Button, x22 y540 w80 h30 gSaveClipBoardToPreset , Save
Gui 3: Add, Button, x122 y540 w80 h30 gCancelSavePreset, Cancel
Gui 3: font,s12
Gui 3: Add, Text, x122 y20 w1000 h30 , If needed you can edit and then select one of the following presets to save this Clipboard data to.
Gui 3: font ;,s8
Gui 3: Add, Edit, x122 y50 w930 h33 , %Contents% ; I put these down here to keep the preset edit boxes properly labeled edit 1 thru 10
Gui 3: Add, Picture,x15 y5 w100 h-1, images\Clipboard.png
Gui 3: Show, x127 y87 h581 w1078, Save Clipboard as Preset
WinGet,SaveAsPresetID,ID,Save Clipboard as Preset
Gui 3: color, c7c4f4 , e9e9e9
Return
UpdateEditBox:
Gui 3: submit, nohide
GuiControlGet, Contents ,, edit11
loop 10
FileRead,Contents%a_index%,%a_scriptdir%\Presets\Preset%A_Index%.txt
GuiControl,3:,Edit%SelectedRadioButton%,%Contents%
Counter = 0
Loop 10 ;each time a different radio button is selected the original contents are updated
{
if SelectedRadioButton <> %A_index%
{
UpdatedContent := Contents%A_Index%
GuiControl,3:,Edit%A_index%,%UpdatedContent%
}
}
return
SaveClipBoardToPreset:
Gui 3: submit, nohide
GuiControl,3:,Edit11,%Contents%
FileDelete,%a_scriptdir%\Presets\Preset%SelectedRadioButton%.txt
FileAppend,%Contents%,%a_scriptdir%\Presets\Preset%SelectedRadioButton%.txt
Gui 3: destroy
ControlFocus,Button6, Expanded Gui ;Need this to take focus away from edit box
WinShow, Expanded Gui
return
CancelSavePreset:
3GuiClose:
Gui 3: destroy
ControlFocus,Button6, Expanded Gui ;Need this to take focus away from edit box
WinShow, Expanded Gui
return
EditPresets:
WinHide, Compact Gui
WinHide, Expanded Gui
IfWinExist, ahk_id %EditPresetsID%
{
WinRestore, ahk_id %EditPresetsID%
return
}
loop 10
FileRead,Contents%a_index%,%a_scriptdir%\Presets\Preset%a_index%.txt
yPos = 133
Loop 10
{
Gui 4: Add, Text, x22 y%yPos% w80 h30 , Preset %a_index%
yPos := yPos+40
}
yPos = 120
loop 10
{
contents := (contents%a_index%)
Gui 4: Add, Edit, x122 y%yPos% w830 h33 vEditPreset%a_index% ,%Contents%
yPos := yPos+40
}
yPos = 120
loop 10
{
Gui 4: Add, Button, x972 y%yPos% w80 h30 gClearPreset, Clear
YPos := YPos+40
}
Gui 4: Add, Button, x22 y530 w80 h30 gSaveEditPreset , Save
Gui 4: Add, Button, x122 y530 w80 h30 gCancelEditPreset, Cancel
Gui 4: Add, Button, x222 y530 w80 h30 gClearAllPresets, Clear All
Gui 4: font,s12
Gui 4: Add, Text, x122 y50 w430 h30 , Edit the presets below then click Save
Gui 4: Add, Picture,x15 y5 w100 h-1, images\Clipboard.png
Gui 4: Show, x127 y87 h575 w1078, Edit Presets
WinGet,EditPresetsID,ID,Edit Presets
Gui 4: color, c7c4f4 , e9e9e9
ControlFocus,Button2, Edit Presets
Return
ClearAllPresets:
Loop 10
GuiControl,4:,Edit%A_index%,
return
ClearPreset:
MouseGetPos,,,,OutControl
StringTrimLeft,OutControl,OutControl,6
GuiControl,4:,Edit%OutControl%,
return
SaveEditPreset:
loop 10
GuiControlGet, EditPreset%a_index%
FileDelete,%a_scriptdir%\Presets\Preset*.txt
loop 10
{
if EditPreset%a_index% <>
{
AppendPreset := EditPreset%a_index%
FileAppend,%AppendPreset%,%a_scriptdir%\Presets\Preset%A_index%.txt
}
}
4GuiClose:
CancelEditPreset:
Gui 4: destroy
gosub, ShowGui
return
Preset:
MouseGetPos,,,,OutControl
ControlGetText,ButtonText, %OutControl%
StringTrimLeft,ControlNumber,ButtonText,6
FileRead,Contents,%a_scriptdir%\Presets\Preset%ControlNumber%.txt
if Contents =
{
MsgBox,4160,%A_ScriptName%,Preset %ControlNumber% is blank.
return
}
GuiControl,1:,Edit1,%Contents%
GuiControl,2:,Edit1,%Contents%
GuiControl, 2:, ClipTextNumber1 , P%ControlNumber%
return
~LButton:: ;move the borderless window by dragging
CoordMode, Mouse
MouseGetPos, MouseStartX, MouseStartY, MouseWin,MouseControl
IfInString,MouseControl,button
{
EditingEditbox = 0
return
}
IfInString,MouseControl,static
{
EditingEditbox = 0
return
}
IfInString,MouseControl,Edit1
{
EditingEditbox = 1
return
}
EditingEditbox = 0
if MouseWin = %SGID%
{
SetTimer, WatchMouse, 10
Return
WatchMouse:
CoordMode, Mouse
MouseGetPos, MouseX, MouseY
DeltaX = %MouseX%
DeltaX -= %MouseStartX%
DeltaY = %MouseY%
DeltaY -= %MouseStartY%
MouseStartX = %MouseX%
MouseStartY = %MouseY%
WinGetPos, CMX, CMY,,, ahk_id %SGID%
CMX += %DeltaX%
CMY += %DeltaY%
SetWinDelay, -1
WinMove, ahk_id %SGID%,, %CMX%, %CMY%
GetKeyState, LButtonState, LButton, P
if LButtonState = U
{
IniWrite, %CMX%,config.ini,GuiPosition,CompactGuiXpos
IniWrite, %CMY%,config.ini,GuiPosition,CompactGuiYpos
SetTimer, WatchMouse, off
Return
}
Return
}
if MouseWin = %EGID%
{
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 %EGID%
CMX += %DeltaX%
CMY += %DeltaY%
SetWinDelay, -1
WinMove, ahk_id %EGID%,, %CMX%, %CMY%
GetKeyState, LButtonState, LButton, P
if LButtonState = U
{
IniWrite, %CMX%,config.ini,GuiPosition,ExpandedGuiXpos
IniWrite, %CMY%,config.ini,GuiPosition,ExpandedGuiYpos
SetTimer, WatchMouse1, off
Return
}
Return
}
CoordMode,Mouse,Window
MouseGetPos,x,y
return
ShowGui:
IniRead,GuiSize,config.ini,Gui,Size,Expanded
if GuiSize = Expanded
{
ControlFocus,Button6, Expanded Gui ;Need this to take focus away from edit box
WinShow, Expanded Gui
WinActivate,Expanded Gui
}
else
{
ControlFocus,Static1,A ;Need this to take focus away from edit box
WinShow, Compact Gui
WinActivate, Compact Gui
}
Return
CreatePictures&Icon:
ifnotexist, images\MyClipboardManager-Left.png
{
left =
(join
89504E470D0A1A0A0000000D4948445200000040000000400806000000AA6971DE0000000467414D410000AFC837058AE9000000097048597300000EC300000EC301C76FA8640000001974455874536F6674776172650041646F626520496D616765526561647971C9653C00000A1249444154785EED5B0D909555197EEFCFBA0BCBCFEAC242C9CF2065598D8D65EA002A45A08BBA930D4861D41603868316186A8618343519C558302A938A613AFEA0D612586312895AD3A415D55853AEB85B2CAC01EEBA0B7B77F7DEDBFBBEE7BCE7E7BBF7AE772F7BEFFD66966FE7CC77EEB9E73BDF799EF7FF5C88A4D36918CE5774388327ECA70838A501C39C81616F0211370AFCEA9536471F6C74C88C137AC4FBC29F25EBCEDFF0F325B8E8C5D8F6ED5ED7F05031156EFE86A6412FEF6B40049F370D3B11D522D4CC1FBD434FE2EFE59DA6C303F40C825F8ADDEDD896D11D37486484EA0A9880C780CB86478C90A19008510E31D8AD5FFF33027F1F8DDE70E58705F4F250A1C7CD7804B0A4339A08D921C72880A2C2234281DF2AE0BFDA701ECC39778AE09EE5A84C28B8C86D02667B8E193039AEA4950928135157FDFAA709FCF2288EAD6AF808B4B6F7C01BED5D01B0BEB99493095F031C4B7735C1F805ADF2EA3B5733C8122250FFCDA714F86804567FEAA370A03D01AF1FEE86E38964168CE12021A001D6F169510B64458DA0162D7034E2F23B9E247B67F06BAE3E1F5E6B4B40CB9BDD90F6D9536BB8DA554EF1077D40C65E74149068A0945FDBBD5181085C7EC70E02BF341E8BC22D9FBE00FE793001AD47087CD492E62EEE91505E060676828E8B53AAE084464DC665EB9EB0E0175C08AF22F883474F68F0340949B0B1526B94C7465919183813646FEF44868014E7DDFEF83691FCD7175E047F6B4D40DBB11E064F4E90C14BF008BAC1909842C00992B4A4B9A98FB65B27299AB7F63102DF58591183DB3F3B03F6B724E07047C2517B4D42C00778613004A6905F2618C803E7AE7DD480BF6DD14C78F9F504B4BFDDA78CC2485E9205ED07DE310E94272AE40E830C475FDA14489FE77EC3825FB7F86278E540028E74F5ABD9ACF29A047680A20541C76FC1FA51A1F4EEC02B86F6FCFD58EE1DE0D1D99CDB1EA1BC7E09A9FDFA6B2F85975E3B0147BB7A219D4A019DACA5D3744F5107C7B0E9CF0B674C829BB73D577A74B9DFD8895FEDC3B662C028E0DA2B827F98C08F382D0EDFFAFC6CF87D732F741CC70407A52CCE8E244E4D6983CE1051239A0F7587093CED650CB62BB0DDE369C0DE573BBC8DAAF3D2347CE2D69F12F8C5D55515B0FE7397C20BFF4A4047771FA448D2D8522C6991383EC41AA1C7B01F8FA6E1DCA935306DC2489EC71A827FAC367CA975F8CE1F8B77505B81B9CA9409A3E0331B7F496FEAF40878FE1FA419B225B5B1D9373FF428761611F80D4B66C38BFFEED3E005B44B028E19D52733D0E6904E729F8862F04C02CDD52683EF21320D11BA5F0CB5211FBDF8E3EF855BB7BFC804E434018AE3027ECCC84AF8CE173F092F35A7E0ED1E0481E9AE52777B5640F36DFDE03843276DE6DCC0BD8CC3A425D577A58E051E01B409CAE52F59F39328B62748F204FEDB8D73E07708FE442FA6385165E7C6DB3B29B1CD143514933E486490CA32085560971A7EF03C00C1CFBAE94122E5316C0B6A4655C17797CE853FB400F4F42378B41F224091E0873DFACC49AFAE12D5DD012E0727DE6952B634D19499C5B0808C353D0D98B97A5B05CED821E0372EBB0CFED81A85DEBE08C4103C3726008131092E4891AAAE175CC0620638051F359719764DC3995B0A060C0191862D02FEEADA312360D3F27A78B935067D29041FC7168929F031EA6B1238048A5A3B55A20E83120EC5B85551240459C26CC2E59A4069CC810940F0D55AF20DE3C756C3A62FCF873FB5C5A11FC1C711742C86E00D70943C8AD13A3DEDB8B4EEBB66A03C9A7594AE87CB560688344A035DE95714C153524036DF505743E0EB617FDB69904C6BB5270258E24AEAEC281D8F2F12F537AD24ED9E18AAD70D04AD94B0AD7111E98F60BB62E2E9A3E087D75F09FB0F57A2E49119963C82A546C0A511780E83DAE1B9369D4D83B3843EDF090489292D11440083BFF7C6ABE02F872A302121D0247592B42A666C7C17B9DABB926AB005DD57D0B367F3FEA5707999EF88C0559BD3674DAC81876F6980D60EB47B4CEF31998324666949ECF427F18EAD0F5B3FAA067DEE4BF6631FBF4B25792CA5E7D23D85CF2431F393BEBAFB8DD6A35499E79A3E3E4369358EF17C9D4AD367498F695F2AF52620EAAE52707DA751778C536C3DA6FBA490D75C321DD63CF8022DC299E0AEE6436FC1B57736C1BB46F7A3AAABC5F8AD19BF80E971213257CA9E772AEFBCA43C0AC03F8C2C1212BEB0B109DE3DBA0F07556E2E5250758B92842E63744F49425D0226077A6F386F868A4E4B34DDB4926A554342E3F777C2993549D4045245AA591419AA7E51F0B9A611D80E16AF88CB36C1E5CBEBBB8494961C0EBD1924A0264C198B24444413C42EC93FA86A4E9A95BE2B2CAB2BA5853378853199A04342D381F60E68FCC14E98568B3F6B1009ECC408BC5F025BB3D0DE076F38C3BA0FF121A6FEB71BCC56F2BBC6347828853DE1D5029A84C5B854D31BED9DF0A54D3B61FA382A7208187966EDA5D93F887B557739D03087194134DA73B3F118B50838C1AC365418B07C9FCAF85D2048C2B2BB7E01674FA0FC9F0E7A14010C56C29339CD718C5A80C8C18663072A843986C31C641BCC17C2C9CDCBFAC3489084E53FDA0D1F981803AC89741CB6475A260EB39658600A93A319E6084C4B5D34C8AA837DBA848E23E72F43AE4F684173B86ECB33F0A14971AC0809979C0207BCB7CD3A18BC1B2AAC67D0898D07BC1CD6AFF8F6CE04B32913164B5538CEC5D294F16360F38A79F0E7961390E84D62C6674D42658EEA4C903343F20B3A33C4BC12269F3112CEACA5A57424D1678772406A42AD0EB9C29E385AD627E6D4126BB4CCB1A2CCEFF54AFA313A149D5C570DD77CEF195AD23F14CD654D2E099391842D2BE6E20F22C7A18748D07982497D3570268308C254776ADD0858BB7DCFC9196B719EDE35F08FA362954D2B7BB0BB005B53EB9B9DB0F2EE67E1BCA92380D854A6AE2382EECBD1B7726E69987486927C882E3AFEDE856DC53B9A80BB69E7D4A861D2B851B0F93A3C2F6CEE4273E84795A728618B9C140E50DE4063B3CEA985C6BB76F352E85B8A56EFE2FE06CD715E1A20ABE2E6E91750D284A7FFF3BF2EB861EBB370FEB46AA888C76C2EC0CAE0FCF0A16B8841EFAC440F0C8A002D4122816A0726E1C6ADBF868F9D4524708C34E5A98440CA0CC37C0D9A802009FF3DD2055FD9FA1C5C307D345456447446A81CA00A85920B8493868208C820E16817ACFAF11E24612C93A04B47A72A08AF16144C804302FB04D284D5F7FF062E7C4F0D54C6313AE8145714219CF21F82FF30818E9132604BC2037BE1A2F79DAECD81ACC01EA184918493D200273A18120EA226ACBA6F2FCC787F2D54913978D55FF828181202B43908093B0E1DEB4673F82DCC38671C54A13950940CEB3564043824508864126EBAFF7998F9C1F150573332ACF887FE3F4D699FA04878AB1BBEF6C03EE8ECA64C9AAFBF868D8921D580804F30245C7FEF5EF98A0FE3C3740DAA162864E3989FD33FB4A028B103B56361216BE4FB4C21B5804740210BE4B9B93A9CD79EE7DC924E2BBA0694144D012F2B8A0F28601F657BE4140165A33E242F1EF61AF07F5C1808DC69075F820000000049454E44AE426082
)
WriteFile("images\MyClipboardManager-Left.png",left)
left =
}
ifnotexist, images\MyClipboardManager-Right.png
{
right =
(join
89504E470D0A1A0A0000000D4948445200000040000000400806000000AA6971DE0000000467414D410000AFC837058AE90000001974455874536F6674776172650041646F626520496D616765526561647971C9653C000008F14944415478DAEC5B7B7055C51DFE76CFB9B9218FA24643C02660EC38D3998AF5318E757C60AB7FA042B5C5C2806D8DD209756C7550ABD38EE0ABD88A828AC5364C6C5A463A51A674A89587E0501546ADD5A9D387768A8CE09397014C0826F7ACFBDBB3BB67CFB9F7264148EE992687ECD93D7B1E39BF6FBFDFF3042684C070DE3886F93602C00800C37C6398B224ADEF562BDBCEC178B0587D831DFB47FA80415995A98F3E25BB69B2AD94BFEBAA61A50252F8A5247C4DF5283A9C4660C8C687930D388F764BE74C42DD3195D04C681F2C10D208C0A9B4FB4265391EB8F6FC410721B55E6067471736FF6B171EBCEE02D41D3B7820A41680DE1CD0DD1B60CB7F7663D17517BA20AC3C9A20A4370E60E1AEBB4760CB9B7BB078F6248CABA9A2C92B8F26083CBDF24B0418A31F1C9220BCF4D6C75874ED249C78944148350348780B82548797FFD721D5E1A2240899FFD35098691E10125C01414C7865EB3E2CFEC1D771E2711684F6230121BD2AC02C05C2B17C5566413880879BBFE132E1738390EA64885BE1433530A0F4F40AFCEDED4E3CD27C31BE78FC9181C0D3AC005AEA5011D4D805218757B7756249F3252E08876D13281BAC97FD63B29D4F01585A0068BBE9526C7E732F380FA94FBD6D1203352FDBA88C87B31A2BF0A3C73660C7EEFD74EB6A8A176412D533500690F097A54978DADEDDDB1DB902C61C9BE03203E8C90578FD9D8378F4FA4B507F821261AA6642F94019B08F847FF22793B16367A77A20336E08D1EFB3AE49CF327B9EE59DB7EF698C99731DD36E8D33E6F87A5A4DA6E6687B6F4F3776ECED92234FAE34532BED6916D0751E1D5B6630752E5BE6E1AB0DA32413D663FB2ECB84E99209DD030260E135E7E1C9E7B7828AC4CC11243E6656703BA697D08871F758AF901240DD432FCDB4009EBE36A235533D832F7B2881C339CF9E73EF273508AFE7563D806CC6C7E9E3B3B8FE57EBB07DE7C040E025326F4E6FE3BE84EF67B19058A36E5DA3EB2EC3290E495EFCF3DD5EFCE686C968A8B5EA40DEA1B2F400B0A4D088E9B811DE1DC75CA0F3C211169197E0DA4E480F897F7F9843CB8F2FC5F8088415C540E043BAF2B1456779539C1500CC357C0E732C38FA46630FA8E52408FFFD4860D94D97F70B021F5ADABB8244948F3384E56B49CC1A3B1E41376E9AB109F29FD4066CDD2DF0F8DC297D82C04BA9F9C530B1818FABFE3A32343730B8C6386AA1710CE3042118B6ED6168BB790A26D48E2E6813521D0A47246785ED470200AE3D50182C85C7810461FB3E0F6DB74E4563DD31D0318F058197C6032041FD22F460AC4F0D8AC51B5C33873B7186B209401030BCD72141B8654A1E083C5DEBDD879EC46C06CB739F8E038DE50D4A25880972E2FD0319FC2EC1049E06921F3679FA24158B4F5BEF2A419096F183033E9EB82D02C17E19CA0542E6DA390CCE9F0B18CBCD75B81B86BFCA98A9909687E7F498E5F5E1F59CE9D09845D1A1EF51F3E1FB1C19D96732F2D897BDE721E3D3394F4590DC0B7FB7CC9D50569F43D7A1DE341941A19B7308D1C77551337BDBCB01FDD107B540B540C605B29761226702A7D5F560CE237FC6871F7F420FFC0B1F7A4113E3D8544268917F8D488CADC0811638709A8C8872391A0732C700268E39841B973E6D85976DA65FBA1567FD8224F49E1598672A6B1389D536C2CB55275509C2EBCBA4F413C77E8AB9BF5E8B5DFB3A4D92345326499DFE508B1C14D03B93819A0B0513AA67BA172C9C0FE4B147072434DDA0579F04E74670B22B39B21339F5B8ACCF70FAD85E25FC9EFD07F30A267CC8A92F446C75235570B459246C81ED85D673CB7DF913A855CF514F942710440E39991565B8C099D2E0CD6D5963845F95AC16F121A57D52DF135381485E2B2C30B637D05930E438D02090F0B9B0956504CEAA0F70EBB275E8F84495035692F09B1735C54A65FED0AA7D52F71DC19873CC341BCC3DE636AD065C44ACA1104750F2130436AA28CF7A38BB01B8BDF559ECEF3A64849FFEE283D70422881B5ABF7406D00543A8C48521326CCAF8693D0F41601133CCB110912A295500AACA3D7CAD91E3676D1B8DF0EDCF2FFCFE0CC5B020DFB5FAA5105D192D299C502B286201BE3AA78108E5352CD1E69358406BCE5CFD91AB1F7054CBC8FE5C29FC4F7FBB019DDD8AE9ED9BEEFFEE8C4088A23EC70230614C35AEBEE81455141DC4CF3D4E21D5AD05B8055299C27ED48537DEE9402FD19AA244110A2F58641BE47AABBCDF44BBD51552F8937DCC5BBEC908BFE2B95F5C3D8B5841DE44F401C00B1413CF58B83655A9F09CC9E7E0B56D1D319A33113953A5F7E416E5D1E88A0CCEFD5219EEF8FD261CFC5485B82B36DE376BD640FE0C9820FCA18E8AF6A70980C6BA4A1BE498552797173684AC906D748587731A63C22FDFB860E62C57F1CC73ECF3120CD821DBE587F372CFCC9B7A54525F965F0AC2E43B5709E3E692B101B3D17FA81A35953ECE6ECC62FE137F55891C7D50DAB060669370E20DD64F3AE997729595118C8780B1F3A1410C948D14C2E87BA032C79A2A1F674CC8E2EE152F58E19FFDF98CA6285908011505F390920310B9C0625941C8805058E1F87B02A3B63A83334ECA6241FBE648F87BA5F096211A02D17F41C12FB9B227138144EA6B58407B2EB39B31A32B30B1218B7BFEB005BDA1C76A5B7FEFF426574DC2E7252DBF28F18791BEB2BE42D6DA9A80008166C0D863CBF195FA2CEE7BEA25237CEBFA7BBED3E4E6C802708CA700FA71042566407155103ABA332B3FEEB82A7C795C16BF5CF9B2157EDDDD57CD16FA4EE682C8583CE112A905A0982AC0A6BA247C7D4D354E21E1FFF88A09675BD7DE356DB69B2B0BE69449938C622CCD00382C10711B406172C3095538796C160B57BD6A846F597BD7B79BE3F903AC0711D6104435E3BE0A9D296140BE2FA89019DD49632AD1509BC5A23FFD5DD901127ECD9DDF6A8ED822C27A910E9498A90A0B478DFAA92AA7470512208CAFAD427D6D3916AF7ECD4CB5AC997F65735427113A7F708D29B39ACF1265F2627620659FC6D45BBE48BB8D6F6CC743AB5F372766AF997F45B35B3982AD020BA74E92A8163B15E262A1701ABF0DB6D06EC9D3FF70856F8D95C5450120E0B83D51B8849E577E4F230032CF582EBBEFC9B68CFA67E67DB3353F4E10AED32FF08D205E378C0193741023FF7374986F23008C003002C0F0DE3E13600021CF3C647FD8B0F80000000049454E44AE42608200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
)
WriteFile("images\MyClipboardManager-Right.png",Right)
right =
}
IfNotExist, images\clipboard.png
{
ClipboardData =
(join
89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61CB000000097048597300000048000000480046C96B3E000000097670416700000080000000800030E1319A00000006624B474400FF00FF00FFA0BDA79300000FEB4944415478DAED5D6B6C1C57153E7776D7BB761CDBB19DE6E1D449D3E034C549D447444B91DA02094890B49440241091905AA9AA9AFC68057FF8D17F3CEA20A04188922A3F2A2101AD10144585D092A4A1A53F2038AD429587E3386FBF1367ED7DCDECE19ED9BDF69DD9597B67BD77B5E3DC13DDCCEEECC33BE77CE79CEF9C7B6706408B162D5AB4DCA6C26EB7033E7DFA348BC7E3755CD631C61A272727470F1C3870B1BBBB3BBB6EDDBA2C7F8EBB76ED420D800526A74E9DAA8F46A3DF40C45DDCF05F304D33CA1FDBAF19863178F2E4C9B70E1D3A74309148F4EED8B1C34C2693D6D34F3F8D1A000B40CE9D3BD7C58DFC376EF035D96C166890F1698442210280BDA5FDC78E1DFB654F4FCF4FB66FDF3EB46AD52A73EFDEBD590D8000CBD9B3675772E37EC88D7CA7655940438080840C1F894480A7047B643219B872E5CAF16DDBB67D73F7EEDDE36D6D6DE9975E7A69C14682D042367E7F7F3FE35EFE0B1EFA1F155E4F5B1908E4FDE170781A04B1588C1EAFE6696262DFBE7D27D7AC5993E9EDED5DB051C058C80048A7D36DDC98DF25237383DA00E0FB6074749438019C3871022E5EBC089C0F4CA7011AF5F5F5F0C4134F7C9B7F45F3912347EA9E7DF6594303208072E6CC995DDCFB6DE3D320AF1F1C1C84BEBE3EE095C0073C42FC6E7878F89FD7AE5DB3C1412010DBE6E6E6F58F3DF658D7C0C0408C7F76C1EA29BC500FECE8BB875973EBD24728B40B0F4FA55270F3E64D387EFCF80F0F1E3CF8367FDB241FE69E3D7BBEFCFCF3CFBFBC68D1A21C3162396AD4D1D1712FDF7CD47BE2DF942A4D1D0182846C030C1ECA378AD04E5B921B376E7CC08DFF57FE70848FAB7C5CDEBF7FFFEB972E5D3A2C2A03410E392768E70FEB1AEA63C6F7F73EC37404F0212FECDCCCEA4286110A3188D585A131168690413A9C07A1C6DCA7D1DEF29CCE4280461D402406E1FA16A86F5A0A2DCB3AA1A57D257BE557AF36FEE8C72FAF256F16448F481E0FFF97F95724F998E023BEF58B8F9B7F7FE7489A570BA7B76CD9B24D5407C403BABBBBEFE10F63EF1E3D1E5DDBB9C2FCC19EEF6459260E8BC21988600A18A6C1C89AF44B201F347265D53CA142C7483F239ECCC054D2C4B499C59FBE791203038017776E0EBDF15E5FF4E2503C9AFF1BAABD8749BA83AEAEAED6D75E7B6D3FCFE30D72B9D7D8D8081B376EEC24A3F241F11EB9F12D7A79C3860D5D2202D020B03CF5D4535FE3E963B2A7A767DF81D7FF30CADF97991F82CBC282F9B9EE65A917BEBE31CDC160FDFAD027A842711593E7B6771B7FF9F0427D53CCD8F4E2CE4D2FB4B52C5ECA7F3113A1B5A2DAC97F6516915959BBC4C36CA419BABEB4A7BBF3EE0DAD8E03E52E4A60B875EB16FCEB8F3FEB35873F998A860D8B7F0E632BBAEB1EDEF9BD87C8E8729388463299846B0367C72E1C7DF57F612B8EE19081068F64F63FC5B0A6C285FF08EBE889FEC33F7FEBCC6F763CD419AF8F46CCDF1FEBC39A05C0938FDC15FED3FBFD4BDEE979F2DDD5777D6AA335353263A90A1A9D6B861B1E38B3CF42C6CC42C234C05C7A1F2CBBF7F3C0C99FCDF805E8E4AD280587CEF78239390A519E3696AF7BC04E13225AC8449084BE6B7CF82AC4FBDF87E8D84750CF535A84488691AB2E58CE584A249161303066C26FFFFC8F67DE78FFCA9B8F6E5A113FF6D1B58A11D28AA7802B2393C4B6A24B5A5ABAADF1F360A56E552410A2ED0C79C3733B991642861B3F950D83D9B6195A367D055A97AFB6DF3E35350532A1139D3FAA066850B7AFB96303B4B7B7DB65E1D8D898A30F20788300016D9B5A9741ACF1AB307E690D8CF51DE640B800D108E71606B381401C73262AB08A70015B4C84A94433E75091CFF0678707C713C9CF7E7AB9F5C1A9EB589300E0448FD9D5056679D8B7CACE98B2A7D3631EDDC1A44146B70CC82CBE1BC22BEE83C59DF74363538B6D242AF3E4102E0C2FBA7F0200F49C3A7EF4787272D27E8D0C4F4451AE1A642088D1B67A13A496AF87F8601FDCBCFA5F3026CE432431041C0B10E684372400C172609877AAB00F9E680A4488BB8CDC4C865B9B62E94A71110500308A969739A362290E9FF376FE1FE5F60CF776CE842119EB0063E5FDB0A8F341686F699F0EDB14D2DDB9DB6D7CB9FD4B86A606117D9EB6C40BC4EB320064E3CB8FE9F525ABEE01EC586FFFEDD4D42D981AE9036BF4348426FA219A1A853A9E2208103418DA4828312014050CE93434329164F75430DF28A80270DA73F3FE9B0FC3F99C6D6F7176CFA7F7F10794DB9356C80EF18BD76F85A56D2B6D764E86A2302E1B5C18DD6D7C1904B425031200C888B65B4522F63E1119C8D002086E10780DFA9E454D4BA0B1790BE0DA076DD238357A192606DE83C8D8C7501FC945061111666DCA10D018E4A2482E7C481A4426924AB6827C5A692710A78D9AF3E444DAE2236B87712C6AFCDC7B53DCF8E9BA36B8E3E1676079C7DA69C326128902C3BB8D5F0C04C2E022D4CBCF0900F20491ECF5C52281CC11C4A0EF6B59B116D26DAB60E4F21918EB7D1DA238654704360B08985DAA328845429C6486F8FBA7994441D4AC6445A50C00C293C56F27D23699B2A0FB5BAF7823D8361ACFF16686939E245CB936088DED7742434343418817C4CE0B046E00C8AF0B8F26838BC92111F2C5778AADDBE07345022F30B4AE5CC711F61C2C6FAD87D6962576F46206735418AEB2CFF6FEABEFF400260673E6C79906988ACA4DF95C80C8E7E4D5E94C169A567479D83E672041CAC6C6FB61F1D24EDB9B28A47A797C2911407E5D0ED9C2E062BF48098207C88614114106850C0E3B74E7B76E2090507A184F9AB0ACA503163536DAC724DE5F3C1744721C88A9EF3A55250508992D77918289C55359263C939EFB31BE97E1A5655F05E59D0080880C3218DD20F04A01822BD0B65824A0D709C423232336E124B089BF3BABD3047D2EC0CF11C8DE4F8A6A6E6E7618DF1D9EE7F27AB1757BB9FCF784A7BBDFEB1505DC5E3FDB73F7E7E83BC9EBAF5FBF6EF71D280DCC19018AEB934185C111561DFA0B077A7A3FE5795212F5EBDDF5BC0C0461602F1EE0D5C513619F8C2086208122FF8BFDA212105E5F0CACB2B8BDDF2B0DD067E2F1B883CBCCC59F1C23A829A054EF179E373131611B4274F2BC885F3102E8051611FAC54CA04C048581A89CA4104DD5050D7A4CFBE45672B168E0DE2F7FAFFC1A7D17195F7CE75C29A08843B1400140EE03C8FF8AF29EBC618686860AC2B2573FBFD86BF2563680680193810968A212A0BF45FBC940B495BB855E5165AEADD73EFA1E01C2520C3FA33BF0D6592DF70150EEDFBB4AC1623F5CD4CF5D5D5DF68A1D8A00648C6261B8D24273FF6A66F3D8F41AC3A6A626BBFD2C93D059E73E24DDC9380C5C0A40890F1453920000E57FD1E92B25570641DC3C4394A02535D002590560F14885B3780A298A8C4F4A72E7F1208BF076AF6AC117083028007075021D4C168BB73165C52C14E37B01A194E3937537BD0C2EF08D202C4F59B7AB382200AA0B0186FA03C0191E00085AFCE94E323C53D108520A00446919AF36BEAFFC2974878A5380510D34CB5D412D65A6D0A000C0D107D036AC0C079879109C3E0082B30A9839A943C3A2940A8A7935D214840643E95154399C2DE408E09C0BC0DA07807B2600E6980BD022EB0E1DF5934ABD19EAB02B33405D08F8552116CE03384AC1DAE500E82481054373005FE11F8BF855205240C15168DBFBAC9DC16B51686D57018E0E20CE3D1BA865EE08800ABD47E99AC01C08C4CC1EEAF0EF930488F3240246029D7D802255A116FF6560C02200681258D11480D26450101A41980F6158BCA4D1525477E0BDA42E402980CDD21DD0524329C050F9C335092C5787284D09AB9D5553DA08F222811A04A556502E35CE7080609C1CEA5E07A03BC1FE2B28C400A60057292B23588BCF288A8E68804AF894E23383667EAE5E13E83F8B3A575406AC0F204E049DDE42F19343B5142A2FA73BE62EA159A54380BA2561DE5C504B0D95806A3900789CDFA691E08B3FB9F456F10A401100D05905807B564B4BC915541574A79003CC347F444363219DF3A71600D26CA0C78280DA5E10A2E887DE7629605625066551A8C72562B4F8D49DB384AEFD4E207A34331CABC2340A4A5662355652298F00209D1FA86D5F86EE00949D15A41E00052BDCB5944A02A7752635D182D507705F20425BBF3CDD79394E302E165DD8F9D7AD607F7D00D793E05D1F00403782E603806A9C52A1F83271AE8B376AEFF7C50251D221048603A05AC4DE6695A05B02749D40D7AA60D4D707F0A13A2CB8AA0A06F122513AF757863FA914551180B91705EA89207F08C09955B4624A58C97470B85A11409F19E4AF809E6D3AB8A6D704E2F4E94B5878BD7B6D7B7F51A00A2A33AA7630FAAA617EF8F3EC4E53DB9D40694590C8FD30B3C8418B1F1038AA81809C18E2310D3C7DD54BCD014A2E0373E667CAF5A5F6A65108BA31348F08E05465C0FA000E0CE819C1B28C5F8DCB2CABBB4690C75DAF740AF04F04BD2E155BC968A0FCA6517A5140F91C60261CA0B2BB86A93D3914744B78BEF449B5DEAA76B1687D6650992940B1CEAA7AEF60CD01FC5700B3EDAB650030E76210D108D2C62D3905A074B14D749C13C06AFBEC6057DDEF5E1DACA5540A5DFC5AE181B84004A0EBCA20DAF6FE59A04397D35120401C00E570A6394059550006B90AF0008196121D0767BDEF220B0400B0E016981A027E73806AF6A4FC9E41BA1154191A10981480AE52A6E0C6073A0A94E63BE84C07109C3383D05105E808304F12A8A2F653CA01B03809D4E2BF820AEEDDC3E51CA049A04FD5B948207AF3AB1AAF0210509781653B4F61E4C4609D1750C008419340BF6A9B6B5F6D9781A049604589E08CF258AD9F18E2285FF455C2CA2480F25C4AA06E18E10082F6FFF96B10E519C1207100D4E7065620FCAB16A5978BAFFAD12C34044080AF13A84960E5228074CFA0E0440037923502E6110150DDE9E1EAAE1184128141D0978A2C8B3F15E82B78770C71D7045AFC545085F75E0A5419E855CFEA2AA034E5B927838247020B1635EA0850A6EA94560355AB02B4CC8F3F07AF0F50E57A76A1868100DE34AA30ECA306813FD5E102E804BA5B40BA0C2C2F01A85E151CAE3EBA35086A49AA5306EAE960FF29003D56562B208546B50E8A71FA123298B66E89BAAA9628E804A207996560F0A38A460C6DDD528C62383BBED25A80FCE9E1B5BC28D47D42433E9491F7472321387EF0C57C89A8F341A1E733DBF8A91BD773B6C6C2D3ED034902593EAE71FB4372B45F5B7A2E5DF1FFAB9506C20A60EC4A08E8383ACD02CA49A49E41B6363940368B5EA6D7320F28B8E7524D335BBB00302D1B01596DFDCA712A77EF2463550E00154F014B1647E9D7A5D3269A88E170C6D41DC0F9F403921980144FABD92C646CC7E2BBF34E56A300688C5A7C93387FE1E291A5ABD66E4DB33AC0AC0640B90848116FB292707E70F20439969D65B3355C06662CC4752B9B1307DEFE646F77E795DDBCF6EFE2BBA3A0F95F799C0A2173FE7AFC3F03C3898FF9D3F1585D28655510014A8CF2F8E60EE3C4B9E1869B93E976FE944603B5023408CAEAAAD04891F1F918BEA3A57E62E8462253D3002079A0EB8ED0E5E178DDE0F854341F69B4F1CB172B1A09A51637D4A50DC6CCA11B5358F30020E9686F60B9FE56EE3F8D011F16E7AC8FB89E65214F0388346EC4D39A4C69A9ACFC1F35F7F6C830F305B80000002574455874646174653A63726561746500323031302D30322D31315430313A32333A35342D30363A303006534E1D0000002574455874646174653A6D6F6469667900323030362D30362D32315430323A35313A33362D30353A3030F73F0EA30000000049454E44AE426082
)
WriteFile("images\Clipboard.png",ClipboardData)
ClipboardData =
}
IfNotExist,images\Clipboard.ico
{
ClipboardData1 =
( join
000001000100404000000100200028420000160000002800000040000000800000000100200000000000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104080B010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020A0000011100000110000000100000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000001110000011100000111000000110000011100000110000000110000000E05080B05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142330521F3243AB1C2F40AF1C3040B01D3041AF1D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D3041B01D2F40AF1C2F40AF1E3243B213212C930001022D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101503395D7CD83F76A4FF386D99FF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF3A6F9BFF396E9AFF396E9AFF396F9CFF3A6080FF040A0E580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070B0E08396081D93370A3FC2F6999FA2F6A9BFC2F6A9BFC2F6A9CFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9BFC2F6A9CFC2E699AFC2F699AFB2E6C9DFC366082F8060C115D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080C1007395F80D83771A4FF316999FC346B9AFF356C99FF356B99FF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356C9AFF356B99FF356B9AFF336B9AFD316C9EFF376083F9050B105C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070C10073A6081D93773A6FF2B6391FDABBAC7FFC9D0D5FFC2CAD2FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC4CCD3FFC1CAD1FFCDD3D6FF7193B1FE28669BFF396285FA060C115C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D1108396182D93674A7FF285F8DFDC8CDD2FFEDE9E5FFE4E2E1FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE6E4E2FFE3E2E0FFF1ECE6FF7E9CB6FE26669BFF3A6386FA060C105B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080C10083A6082D93774A8FF29608EFDC1C9D0FFE6E4E3FFDDDDDFFFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDFDFE0FFDCDDDEFFEAE7E4FF7C9BB5FE27679CFF3A6386FA060C115C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083B6183D93875A8FF2A608EFDC4CBD1FFE8E6E4FFDFDFE0FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFDEDFDEFFECE9E5FF7D9CB5FE28679CFF3B6487FA060B125B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083A6284D93776A9FF29618FFDC3CAD0FFE7E5E3FFDEDEDFFFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFE0E0E0FFDDDEDFFFEBE8E4FF7C9BB6FE27689DFF3A6587FA060C115A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083B6284D93877AAFF296190FDC3CBD1FFE8E6E4FFDFDFE0FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFDEDFE0FFEDE9E5FF7D9CB7FE28689EFF3B6488F9060D125B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083B6385D93977ABFF2A6291FDC4CCD2FFE9E7E5FFE0E0E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFDFE0E1FFEDE9E6FF7E9DB8FE29699FFF3B6589FA060C125B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083A6486D93978ADFF2B6391FDC5CBD1FFE8E6E4FFDFDFE0FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFDEDFE0FFECE8E5FF7D9EB8FE286AA0FF3A668AF9060C125A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D10083B6386D93A79AEFF2A6492FDC4CCD2FFE9E7E5FFE0E0E1FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFE2E2E2FFDFE0E1FFEEE9E6FF7E9FB9FE296BA1FF3B678BF8060D125A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083C6487D93B79B0FF2B6494FDC4CDD3FFEAE8E6FFE1E1E2FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE0E1E2FFEFEAE7FF7F9FBAFE2A6BA3FF3C678CF9050C11590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080C12083B6588D93A7AB1FF2A6595FDC5CDD4FFEAE8E6FFE1E1E2FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE0E1E2FFEFEAE7FF7EA0BBFE296CA4FF3B688CF9060D12580000000000010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083C6589D93B7BB2FF2B6696FDC5CDD4FFEAE8E6FFE1E1E2FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE0E1E2FFEFEAE7FF7FA0BBFE2A6DA5FF3C688DF9070D13590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083D668AD93B7CB3FF2B6797FDC6CED5FFEBE9E7FFE2E2E3FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E4FFE1E2E3FFF0EBE8FF7FA1BDFE2A6EA7FF3C698EF9060C12580000000000010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D12083C678BD93C7DB4FF2C6898FDC7CFD6FFECEAE8FFE3E3E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE2E3E4FFF1ECE9FF80A2BEFE2B6FA8FF3D698FF9070D13570000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080C11083C688CD93D7EB6FF2D689AFDC7CFD6FFECEAE8FFE3E3E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE2E3E4FFF1ECE9FF81A2BFFE2C6FAAFF3E6A90F9070D13580000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D12083D688CD93C7FB7FF2D699BFDC8D0D7FFEDEBE9FFE4E4E5FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE3E4E5FFF2EDEAFF81A3C0FE2C70ABFF3D6B91F9070E12570000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E12083D698DD93D80B8FF2E699CFDC8D0D7FFEDEBE9FFE4E4E5FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE3E4E5FFF2EDEAFF82A4C0FE2D71ACFF3E6B92F9070D13560000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D11083E698ED93E81BAFF2E6A9EFDC9D1D8FFEEECEAFFE5E5E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE4E5E6FFF3EEEBFF82A5C1FE2D72AEFF3F6C93F9070E14560000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E12083E6A8FD93E82BBFF2E6B9FFDC9D1D8FFEEECEAFFE5E5E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE4E5E6FFF3EEEBFF82A5C2FE2D73AFFF3E6C94F9070E13550000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070E13073F6B90D93E83BCFF2F6CA0FDCAD2D9FFEFEDEBFFE6E6E7FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE5E6E7FFF4EFECFF83A6C3FE2E75B0FF3F6D94F9070E14550000000001000201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E12083E6C91D93F84BEFF2F6DA1FDCAD2D9FFEFEDEBFFE6E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE5E6E7FFF4EFECFF83A6C4FE2E76B2FF406E96F8070E13540000000001010201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E13073F6C92D94085BFFF2F6EA2FDCBD3DAFFF0EEECFFE7E8E8FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE6E7E8FFF5F0ECFF84A7C5FE2E77B3FF406F97F9070D14530000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080D1306406D94D94086C0FF306FA4FDCBD4DBFFF0EEECFFE7E8E8FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE9E9E9FFE6E7E8FFF5F0ECFF84A8C6FE2F78B4FF3F6F98F8070E1453000000000101020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
)
ClipboardData2 =
( join
0000000000000000000000000000000000000000000000000000090E13073F6E94D94187C2FF316FA5FDCCD5DCFFF1EFEDFFE8E9E9FFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE7E8E9FFF6F1EDFF85A9C7FE3079B6FF407099F7070F15520000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E1307406E95D94188C4FF3170A6FDCCD5DCFFF1EFEDFFE8E9E9FFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE7E8E9FFF6F1EDFF86A9C8FE3079B7FF41719AF8070E14530000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F1307416F96D94289C5FF3172A7FDCDD6DDFFF2F0EEFFE9EAEAFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFE8E9EAFFF7F2EEFF85AAC9FE307AB8FF40729BF8070F15520000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E1207417097D94289C6FF3272A9FDCED6DEFFF3F1EFFFEAEBEBFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFE9EAEBFFF8F3EFFF86ABCAFE317BBAFF41739CF8060F14510000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E1307417097D9428BC8FF3373AAFDCED7DEFFF3F1EFFFEAEBEBFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFECECECFFE9EAEBFFF8F3EFFF87ABCAFE327CBCFF42739DF8070F15510000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E1407427198D9438CCAFF3374ABFDCFD8DFFFF4F2F0FFEBECECFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEAEBECFFF9F4F0FF87ADCBFE327EBDFF42749DF8070F15510000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F130741719AD9438DCBFF3376ACFDCFD8DFFFF4F2F0FFEBECECFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEDEDEDFFEAEBECFFF9F4F0FF87ADCDFE327FBEFF42749EF8080E16500000000001020101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090E140742729BD9448ECCFF3377AEFDD0D9E0FFF5F3F1FFECEDEDFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEBECEDFFFAF5F1FF88AECEFE3380C0FF4275A0F8070F15500000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F140642739CD8448ECEFF3476AFFDD0D9E0FFF5F3F1FFECEDEDFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEBECEDFFFAF5F1FF89AFCEFE3380C1FF4376A1F8080F16500000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F140743749CD9448FCFFF3477B0FDD1DAE1FFF6F4F2FFEDEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFECEDEEFFFBF6F2FF89B0CFFE3381C2FF4476A2F70810154F0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F140642759DD84590D0FF3578B1FDD1DAE1FFF6F4F2FFEDEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFECEDEEFFFBF6F2FF89B0D0FE3482C4FF4377A3F8080F164F0000000001020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F140643749ED84691D1FF3679B2FDD2DBE2FFF7F5F3FFEEEFEFFFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFEDEEEFFFFCF7F3FF8AB1D1FE3583C5FF4378A3F70810164E0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F130543759FD74692D3FF347AB4FDD3DCE4FFF8F6F4FFEFF0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFEEEFF0FFFDF8F4FF8BB1D2FE3584C7FF4479A4F70810174E0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E14064476A0D84793D4FF367BB5FDD2DBE3FFF7F5F3FFEEEFEFFFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFEDEEEFFFFCF7F3FF8AB2D3FE3685C8FF4579A5F60810164E0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F15064577A1D84694D5FF367CB6FDD3DCE4FFF8F6F4FFEFF0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFEEEFF0FFFDF8F4FF8BB3D4FE3586C9FF447AA6F70810174D0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091014064577A2D84794D6FF367DB7FDD4DDE5FFF9F7F5FFF0F1F1FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFEFF0F1FFFEF9F5FF8CB3D4FE3686CAFF457AA7F7080F174D0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080F15064678A3D84895D7FF377CB8FDD4DDE5FFF9F7F5FFF0F1F1FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFEFF0F1FFFEF9F5FF8CB4D5FE3787CBFF467BA7F70810164C0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091015064679A3D84896D8FF377DB9FDD5DEE6FFFAF8F6FFF1F2F2FFF3F3F3FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF3F3F3FFF3F3F3FFF3F3F3FFF0F1F2FFFFFAF6FF8DB5D6FE3788CCFF457CA8F70811174C0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091015064678A4D84997D9FF387EBAFDD4DDE5FFF9F7F5FFF0F2F1FFF3F3F3FFF2F2F2FFF2F2F2FFF3F3F3FFF3F3F3FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF3F3F3FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFF2F2F2FFEFF0F1FFFEF9F5FF8CB4D6FE3888CDFF467BAAF70811184B0000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091014064679A5D84998DAFF387EBBFDD5DEE6FFFAF8F6FFF1F1F2FFF2F2F2FFF2F2F2FFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF1F1F1FFF0F0F0FFF0F0F0FFF2F2F2FFF2F2F2FFF2F2F2FFF3F3F3FFF0F1F2FFFFFAF5FF8DB5D7FE3889CFFF477CAAF70811184A000000000102030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101506457AA5D84899DBFF377FBBFDD6DFE7FFFAF8F6FFF1F2F2FFE6E6E6FFCCCCCCFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC4C4C4FFC5C5C5FFC5C5C5FFC5C5C5FFC4C4C4FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC9C9C9FFE2E2E2FFF2F2F2FFF3F3F3FFF1F2F3FFFFFBF6FF8EB6D8FE378ACFFF477DABF70811184B000000000102030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101606467BA6D84999DDFF3880BCFDD5DEE6FFF9F7F5FFF2F3F3FFD3D3D3FFACACACFFAAAAAAFFA8A8A8FFA7A7A7FFA5A5A5FFA3A3A3FFA1A1A1FF9F9F9FFF9D9D9DFF9D9D9DFFA0A0A0FFABABABFFBDBDBDFFC9C9C9FFC1C1C1FFAFAFAFFFA3A3A3FF9D9D9DFF9D9D9DFF9E9E9EFFA0A0A0FFA2A2A2FFA3A3A3FFA5A5A5FFA6A6A6FFA8A8A8FFA1A1A1FFC4C5C5FFF3F4F4FFF2F2F2FFF0F1F2FFFEFAF5FF8DB6D8FE388AD0FF477EABF70811184A000000000102030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101606477AA7D84A9ADDFF3980BDFDD6DFE7FFFBF8F6FFF2F3F4FFE2E3E3FFC2C3C3FFC2C2C3FFBEBFBFFFBEBEBEFFBCBCBCFFBABABAFFB7B7B7FFB4B4B4FFB1B1B1FFAFAFAFFFAFAFAFFFB8B8B8FFCDCDCDFFDFDFDFFFD4D4D4FFBCBCBCFFB1B1B1FFAFAFAFFFB0B0B0FFB2B2B2FFB5B5B5FFB7B7B7FFB9B9B9FFBBBBBBFFBDBDBDFFBFC0C0FFB4B4B5FFCECFCFFFF3F4F4FFF3F3F3FFF1F2F3FFFEFBF6FF8EB7D9FE398BD1FF467DACF7081118490000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F1506477BA7D84A9BDEFF3981BEFDD9E1E8FFFEFAF6FFF5F4F3FFF5F3F2FFD8D6D5FFCAC7C5FFCDCBC9FFC2C3C4FFBFC0C1FFBFBFBFFFBEBEBEFFBBBBBBFFB7B7B7FFB5B5B5FFB3B3B3FFB5B5B5FFC7C7C7FFDEDEDEFFCFCFCFFFB7B7B7FFB2B2B2FFB4B4B4FFB6B6B6FFB9B9B9FFBBBBBBFFBDBDBDFFBDBEBFFFBEBFC0FFC1C2C3FFC7C5C3FFC2C0BEFFEAE8E7FFF7F5F4FFF6F5F3FFF4F3F3FFFFFDF6FF90B8DAFE388CD2FF477DADF608111849000000000001020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101505467BA8D7499BDEFF3F8AC9FC649BC8FF6C9FC8FF6B9EC8FF6B9EC8FF679AC5FF628FB4FFACB8C2FFD5D1CDFFD5D1CEFFCCCBCAFFC5C6C7FFC3C3C4FFC1C1C1FFBEBEBEFFBABABAFFB6B6B6FFC2C2C2FFDFDFDFFFCCCCCCFFB6B6B6FFB9B9B9FFBCBCBCFFBFBFBFFFC0C0C1FFC2C3C3FFC8C7C7FFCECBC9FFD2CDCAFFD1CCC8FFA0AEB9FF6190B8FF6A9DC8FF6B9EC8FF6B9EC8FF6A9DC7FF6EA1CBFF5597CFFD4292D6FF457EADF6071017490000000001020301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090F1506467AA7D64697DBFC428ECFFA3988CCFB3687CBFC3788CBFC3687CBFC3887CBFC3787CAFC3E85C2FC6998C1FC9BB1C3FCC4C8CAFBD8D3CFFCD4D1CFFBCACACAFCC9C9C9FEC5C5C5FEBEBEBEFFBBBBBBFDDADAD9FBC2C2C2FCBABABAFEC3C3C3FFC6C6C6FFC7C7C7FDCCCBCAFBD4CFCBFCC5C6C7FCACB9C3FC8BA8C0FC6495BFFC3E86C3FC3687CBFC3787CBFC3687CBFC3788CBFC3787CBFC3686CBFB3D8CCEFB4392D4FC437CABF4091119490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080E13034D82AFDD56A7EBFF4E9CDEFF52A0E1FF52A0E2FF52A0E2FF52A0E2FF529FE1FF52A0E1FF509EE1FF4798DDFF4695D8FF599BD2FF81ADD1FFC4D0DBFFE6E5E4FFD9D9D9FFD5D5D5FFD1D1D1FFD0D0D0FFD4D8DBFFD2D4D5FFCFCECEFFD1D1D1FFD3D3D3FDDEDEDDFFD5D8DBFF93B4D0FF5F9CD1FF4B96D5FF4696DAFF4899DFFF509EE1FF51A0E1FF529FE2FF52A0E1FF52A0E2FF52A0E2FF529FE1FF509EE0FF50A1E4FF4C82B1FF0A141D3E0000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002947606745759DB53F6D94B1406E95B2406E95B3406E95B3406E95B3406E95B3406E95B3416E95B3426F95B3427096B33D6D95B2366892B33A6487B185929EBEE5E4E2FBE6E6E7FDEDECEBFFA8B0B6DD4A6B88B16E8598B9E1E0E0F6E5E5E5FFEAE9E9FFB6B8BADF4D6C86B134658FB33B6C95B3416F96B3416F96B3426F95B3406E95B3406E95B3406E95B3406E95B3406E95B3406E95B3406E95B23F6D94B143739CB631567487172C3E0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4B5B78EF3F3F3FEE9E9E9FF404040720000000000000000BFBFBFC5FCFCFCFEB4B4B4D518191A27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020304010000000002030401000000000000000000000000000000000000000000000000000000000000
)
ClipboardData3 =
( join
0000020304010000000003040504000000009D9FA04DEDEDEDFFDFDFDFFE7F7F7FBF1C1C1C3F46464663E0E0E0F0FDFDFDFC858484AB191B1B021B1D1E01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002030401000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303010000000061616116F9F9F9F1D7D7D7FDCACACAFFACACACF0CCCCCCFCEEEEEEFDFFFFFFFF5E5E5E7B0000000007060602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010100000000C5C5C573EFEFEFFFD6D6D6FFD4D4D4FFDCDCDCFFECECECFFB5B5B5C859595918000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000A8A8A852E1E1E1B0E4E4E4CFD2D2D2C4AAAAAA767070700F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B3B3B01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000404040500000005000000000000000200000005000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFE7FFFFFFFFFFFFFFF00000000003FFFFE00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000003FFFFC00000000002FFFFC00000000003FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000002FFFFC00000000003FFFFC00000000002FFFFE00000000003FFFFFFFFE187FFFFFFFFE5FEA003FFB7FFFFFFFFA00BFFFFFFFFFFFFD00FFFFFFFFFFFFFE81FFFFFFFFFFFFFFEFFFFFFFFFFFFFFF91FFFFFFF
)
ClipboardData .= ClipboardData1 . ClipboardData2 . ClipboardData3
WriteFile("images\Clipboard.ico",ClipboardData)
loop 3
ClipboardData%a_index% =
ClipboardData =
}
Return
6GuiSize:
7GuiSize:
UpdateScrollBars(A_Gui, A_GuiWidth, A_GuiHeight)
return
UpdateScrollBars(GuiNum, GuiWidth, GuiHeight)
{
static SIF_RANGE=0x1, SIF_PAGE=0x2, SIF_DISABLENOSCROLL=0x8, SB_HORZ=0, SB_VERT=1
Gui, %GuiNum%:Default
Gui, +LastFound
Left := Top := 9999
Right := Bottom := 0
WinGet, ControlList, ControlList
Loop, Parse, ControlList, `n
{
GuiControlGet, c, Pos, %A_LoopField%
if (cX < Left)
Left := cX
if (cY < Top)
Top := cY
if (cX + cW > Right)
Right := cX + cW
if (cY + cH > Bottom)
Bottom := cY + cH
}
Left -= 8
Top -= 8
Right += 8
Bottom += 8
ScrollWidth := Right-Left
ScrollHeight := Bottom-Top
VarSetCapacity(si, 28, 0)
NumPut(28, si) ; cbSize
NumPut(SIF_RANGE | SIF_PAGE, si, 4) ; fMask
NumPut(ScrollWidth, si, 12) ; nMax
NumPut(GuiWidth, si, 16) ; nPage
DllCall("SetScrollInfo", "uint", WinExist(), "uint", SB_HORZ, "uint", &si, "int", 1)
NumPut(ScrollHeight, si, 12) ; nMax
NumPut(GuiHeight, si, 16) ; nPage
DllCall("SetScrollInfo", "uint", WinExist(), "uint", SB_VERT, "uint", &si, "int", 1)
if (Left < 0 && Right < GuiWidth)
x := Abs(Left) > GuiWidth-Right ? GuiWidth-Right : Abs(Left)
if (Top < 0 && Bottom < GuiHeight)
y := Abs(Top) > GuiHeight-Bottom ? GuiHeight-Bottom : Abs(Top)
if (x || y)
DllCall("ScrollWindow", "uint", WinExist(), "int", x, "int", y, "uint", 0, "uint", 0)
}
OnScroll(wParam, lParam, msg, hwnd)
{
static SIF_ALL=0x17, SCROLL_STEP=10
bar := msg=0x115 ; SB_HORZ=0, SB_VERT=1
VarSetCapacity(si, 28, 0)
NumPut(28, si) ; cbSize
NumPut(SIF_ALL, si, 4) ; fMask
if !DllCall("GetScrollInfo", "uint", hwnd, "int", bar, "uint", &si)
return
VarSetCapacity(rect, 16)
DllCall("GetClientRect", "uint", hwnd, "uint", &rect)
new_pos := NumGet(si, 20) ; nPos
action := wParam & 0xFFFF
if action = 0 ; SB_LINEUP
new_pos -= SCROLL_STEP
else if action = 1 ; SB_LINEDOWN
new_pos += SCROLL_STEP
else if action = 2 ; SB_PAGEUP
new_pos -= NumGet(rect, 12, "int") - SCROLL_STEP
else if action = 3 ; SB_PAGEDOWN
new_pos += NumGet(rect, 12, "int") - SCROLL_STEP
else if action = 5 ; SB_THUMBTRACK
new_pos := NumGet(si, 24, "int") ; nTrackPos
else if action = 6 ; SB_TOP
new_pos := NumGet(si, 8, "int") ; nMin
else if action = 7 ; SB_BOTTOM
new_pos := NumGet(si, 12, "int") ; nMax
else
return
min := NumGet(si, 8, "int") ; nMin
max := NumGet(si, 12, "int") - NumGet(si, 16) ; nMax-nPage
new_pos := new_pos > max ? max : new_pos
new_pos := new_pos < min ? min : new_pos
old_pos := NumGet(si, 20, "int") ; nPos
x := y := 0
if bar = 0 ; SB_HORZ
x := old_pos-new_pos
else
y := old_pos-new_pos
DllCall("ScrollWindow", "uint", hwnd, "int", x, "int", y, "uint", 0, "uint", 0)
NumPut(new_pos, si, 20, "int") ; nPos
DllCall("SetScrollInfo", "uint", hwnd, "int", bar, "uint", &si, "int", 1)
}
WriteFile(file,data)
{
Handle := DllCall("CreateFile","str",file,"Uint",0x40000000
,"Uint",0,"UInt",0,"UInt",4,"Uint",0,"UInt",0)
Loop
{
if strlen(data) = 0
break
StringLeft, Hex, data, 2
StringTrimLeft, data, data, 2
Hex = 0x%Hex%
DllCall("WriteFile","UInt", Handle,"UChar *", Hex
,"UInt",1,"UInt *",UnusedVariable,"UInt",0)
}
DllCall("CloseHandle", "Uint", Handle)
return
}
OnLButtonDblClk(wParam, lParam, msg, hwnd) {
WinGetClass class, ahk_id %hwnd%
if (class = "Static") {
if !A_Gui
return 0 ; Just prevent Clipboard change.
; Send a WM_COMMAND message to the Gui to trigger the control's g-label.
Gui +LastFound
id := DllCall("GetDlgCtrlID", "ptr", hwnd) ; Requires AutoHotkey v1.1.
static STN_DBLCLK := 1
PostMessage 0x111, id | (STN_DBLCLK << 16), hwnd
; Return a value to prevent the default handling of this message.
return 0
}
}