|
|
|
;; ################################################################################################## |
|
;; Kirac Mission Icon Overlay |
|
;; Version 2.0 |
|
;; -- Adds Support for Windowed mode and DPI Scaling |
|
;; -- Adds "Possessed" mission icon |
|
;; ################################################################################################## |
|
|
|
|
|
#Requires AutoHotkey v2.0 |
|
#HotIf WinActive("Path of Exile") |
|
imageMap := Map() |
|
Base64DictWriter() |
|
|
|
|
|
;; ################################################################################################## |
|
;; CONFIGURATION |
|
;; ################################################################################################## |
|
|
|
; Comment out lines below to disable icons for specific Kirac missions. |
|
|
|
imageMap["Harvest"] := A_Temp "\Kirac\harvest.png" |
|
imageMap["Beast"] := A_Temp "\Kirac\beast.png" |
|
imageMap["Abyss"] := A_Temp "\Kirac\abyss.png" |
|
imageMap["Excursions"] := A_Temp "\Kirac\alva.png" |
|
imageMap["Expedition"] := A_Temp "\Kirac\expedition.png" |
|
imageMap["Unique item"] := A_Temp "\Kirac\unique.png" |
|
imageMap["Essences"] := A_Temp "\Kirac\essence.png" |
|
imageMap["Rituals"] := A_Temp "\Kirac\ritual.png" |
|
imageMap["Smuggler"] := A_Temp "\Kirac\smuggler.png" |
|
imageMap["Vaal Side"] := A_Temp "\Kirac\corruptedarea.png" |
|
imageMap["Map"] := A_Temp "\Kirac\map.png" |
|
imageMap["Ultimatum"] := A_Temp "\Kirac\ultimatum.png" |
|
imageMap["Legion"] := A_Temp "\Kirac\legion.png" |
|
imageMap["Harbinger"] := A_Temp "\Kirac\harbinger.png" |
|
imageMap["Delirium"] := A_Temp "\Kirac\delirium.png" |
|
imageMap["Rogue"] := A_Temp "\Kirac\rogueexile.png" |
|
imageMap["corrupted monsters"] := A_Temp "\Kirac\corruptedmonster.png" |
|
imageMap["Blight"] := A_Temp "\Kirac\blight.png" |
|
imageMap["Elder"] := A_Temp "\Kirac\elderguardian.png" |
|
imageMap["Shaper"] := A_Temp "\Kirac\shaperguardian.png" |
|
imageMap["Labyrinth"] := A_Temp "\Kirac\lab.png" |
|
imageMap["Breaches"] := A_Temp "\Kirac\breach.png" |
|
imageMap["Strongbox"] := A_Temp "\Kirac\strongbox.png" |
|
imageMap["Einhar"] := A_Temp "\Kirac\beast.png" |
|
imageMap["Shrine"] := A_Temp "\Kirac\shrine.png" |
|
imageMap["Exiles"] := A_Temp "\Kirac\rogueexile.png" |
|
imageMap["Possessed"] := A_Temp "\Kirac\torment.png" |
|
|
|
; ############################################## |
|
; SLEEP DELAY |
|
; ############################################## |
|
|
|
; Set Delay (milliseconds) between each mouse move to allow UI to update |
|
; Depending on your system speed, the OCR delay may be large enough to not require this. |
|
; Default = 30 |
|
|
|
sleepDelay := 30 |
|
|
|
|
|
; ############################################## |
|
; HOTKEY CONFIG |
|
; ############################################## |
|
|
|
; Set Launch Hotkey. Different defaults can be commented/uncommented, or changed to your preference. |
|
; Examples: |
|
; Home::Kirac() ; Home key |
|
; ^K::Kirac() ; Ctrl+K |
|
; ^!K::Kirac() ; Ctrl+Alt+K |
|
|
|
Home::Kirac() |
|
|
|
|
|
;; ################################################################################################## |
|
;; END CONFIGURATION |
|
;; ################################################################################################## |
|
|
|
|
|
Kirac() { |
|
|
|
local guiX |
|
|
|
WinGetClientPos(&xw, &yw, &ww, &hw, "A") |
|
|
|
; item grid size is roughly 1/20.5714 of the height of the window. Tested at 1440p, 1200p, 1080p. All other variables should scale with this. |
|
gridSize := hw / 20.5714 |
|
gridIndex := 0 |
|
|
|
kiracStartX := ww / 2 - (gridSize * 2) + (gridSize * 0.2) + xw |
|
kiracStartY := hw / 2 + (gridSize * 0.2) - (gridSize * 3) + (gridSize * 0.2) + yw |
|
|
|
; is inventory open? I really hope no one has a weird resolution... |
|
invBitmap := CaptureRegionToBitmap((ww - gridSize * 12 + xw), gridSize + yw, gridSize * 3, gridSize) |
|
if OCR.FromBitmap(invBitmap).Text { |
|
kiracStartX -= 2 * gridSize |
|
} |
|
|
|
kiracToolbarX := kiracStartX - gridSize |
|
|
|
img_size := gridSize * 0.8 |
|
|
|
arx := [] |
|
|
|
guiX := Gui("+LastFound -Caption +AlwaysOnTop +ToolWindow -Border -DPIScale") |
|
guiX.BackColor := "Black" |
|
hwnd := guiX.Hwnd |
|
|
|
|
|
BlockInput("On") |
|
|
|
CoordMode("Mouse", "Screen") |
|
MouseGetPos(&mouseStartX, &mouseStartY) |
|
|
|
y_index := 0 |
|
Loop 4 { |
|
y := kiracStartY + gridSize * y_index |
|
x_index := 0 |
|
Loop 4 { |
|
x := kiracStartX + gridSize * x_index |
|
x_index++ |
|
|
|
|
|
MouseMove(x, y, 0) |
|
Sleep(sleepDelay) ; Allow GUI to update |
|
hBitmap := CaptureRegionToBitmap(kiracToolbarX, kiracStartY + gridSize * 6, gridSize * 6, gridSize * 2) |
|
|
|
result := OCR.FromRect(kiracToolbarX, kiracStartY + gridSize * 6, gridSize * 6, gridSize * 2) |
|
txt := result.Text |
|
|
|
if !txt { |
|
break 2 |
|
} |
|
|
|
foundImage := MapOCRTextToImage(txt) |
|
|
|
x_imgPos := x + (gridSize * 0.3) |
|
y_imgPos := y + (gridSize * 0.3) |
|
|
|
if foundImage { |
|
guiX.Add("Picture", "x" x_imgPos " y" y_imgPos " w" img_size " h" img_size, foundImage) |
|
} |
|
} |
|
y_index++ |
|
} |
|
MouseMove(mouseStartX, mouseStartY, 0) |
|
BlockInput("Off") |
|
|
|
guiX.Show("x0 y0 NoActivate") |
|
WinSetTransColor("Black", hwnd) |
|
KeyWaitAnyMouseOrKeyboard() |
|
guiX.Destroy() |
|
|
|
} |
|
|
|
MapOCRTextToImage(txt) { |
|
global imageMap |
|
for keyword, path in imageMap { |
|
if InStr(txt, keyword) |
|
return path |
|
} |
|
return "" ; fallback if nothing matched |
|
} |
|
|
|
KeyWaitAnyMouseOrKeyboard() { |
|
Loop { |
|
Sleep(50) |
|
if GetKeyState("LButton", "P") || GetKeyState("RButton", "P") || GetKeyState("MButton", "P") |
|
break |
|
if GetKeyState("XButton1", "P") || GetKeyState("XButton2", "P") |
|
break |
|
Loop 255 { |
|
vk := A_Index |
|
key := "vk" Format("{:02X}", vk) |
|
if GetKeyState(key, "P") { |
|
break 2 |
|
} |
|
} |
|
} |
|
} |
|
|
|
FastHBitmapFromScreen(x, y, w, h) { |
|
static hdcScreen := DllCall("GetDC", "Ptr", 0, "Ptr") |
|
hdcMem := DllCall("gdi32.dll\CreateCompatibleDC", "Ptr", hdcScreen, "Ptr") |
|
hbm := DllCall("gdi32.dll\CreateCompatibleBitmap", "Ptr", hdcScreen, "Int", w, "Int", h, "Ptr") |
|
|
|
old := DllCall("gdi32.dll\SelectObject", "Ptr", hdcMem, "Ptr", hbm, "Ptr") |
|
DllCall("gdi32.dll\BitBlt" |
|
, "Ptr", hdcMem |
|
, "Int", 0, "Int", 0 |
|
, "Int", w, "Int", h |
|
, "Ptr", hdcScreen |
|
, "Int", x, "Int", y |
|
, "UInt", 0x00CC0020) ; SRCCOPY |
|
|
|
DllCall("gdi32.dll\SelectObject", "Ptr", hdcMem, "Ptr", old) |
|
DllCall("gdi32.dll\DeleteDC", "Ptr", hdcMem) |
|
|
|
return hbm |
|
} |
|
|
|
CaptureRegionToBitmap(x, y, w, h) { |
|
return FastHBitmapFromScreen(x, y, w, h) |
|
} |
|
|
|
|
|
|
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
|
|
;; Base64 Images for Kirac icons |
|
;; I should have just left it as a folder of icons, this was annoying... |
|
|
|
|
|
Base64DictWriter() { |
|
|
|
b64Map := Map() |
|
|
|
b64Map["abyss"] := "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" |
|
b64Map["alva"] := "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" |
|
b64Map["armour"] := "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" |
|
b64Map["beast"] := "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" |
|
b64Map["blight"] := "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" |
|
b64Map["breach"] := "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" |
|
b64Map["corruptedarea"] := "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" |
|
b64Map["corruptedmonster"] := "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" |
|
b64Map["currency"] := "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" |
|
b64Map["delirium"] := "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" |
|
b64Map["delve"] := "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" |
|
b64Map["divination"] := "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" |
|
b64Map["elderguardian"] := "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" |
|
b64Map["essence"] := "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" |
|
b64Map["expedition"] := "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" |
|
b64Map["fragment"] := "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" |
|
b64Map["gem"] := "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" |
|
b64Map["harbinger"] := "iVBORw0KGgoAAAANSUhEUgAAAHcAAAB2CAYAAADyZQwvAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7CAAAOwgEVKEqAAAAAB3RJTUUH5wIIEzEvCw3d1wAAJJtJREFUeNrtnXmUZVV56H97n3PufG/NXVU9zyN000BDN90igwpCC07RCBiN4BRfBn0mEZOsmMQn0eSRPA2+LIcohgRFBUUQaG1QZNKGbrrpeaqeq6prunXrDmfc+/1xzr1V1bSRrGV1Vderb61aZ6h7z91n/863h+/79ncEoJmSSSlyvAswJWMnU3AnsUzBncQyBXcSyxTcSSxTcCexTMGdxDIFdxLLFNxJLFNwJ7FMwZ3EMgV3EssU3EksU3AnsUzBncQyBXcSyxTcSSxTcCexTMGdxGKOdwF++yJ+zfn//0LFxPl511WAmlEwBbwarj7r7vB3z8Pbf41ynt2dOMvh6HNCiP/yClpXb1eP2pzl4LyX8wCuGLUZeSwQI47P2FZF67Mc6/CmJznoCdznijOUUoAQIxhHY0EhQshChOeEPOMqGq3V8AkdHosIcnQy2hsBW49s+s9PmYCaO1JTh7WxBrB6LCKtlUb0PwlCIKtw65rh4g3ogT7Y9xK6PBSeVwrQ6Oq2Cl7rYa0eqdG12plg1fQaa3IClVoMQ42AipGaaMYQRDAiLZXSDPelRAiJJZKYLXNwb/kw+rKr8PqOk/z7O3GOvwKA1gFoBSoIIaoq3AAApQEV1H5S64BhyBOoql6DTKBmudq0DmupkAbI0UUURgxECBIpEYYV7htWeEP1s6n84adJlnzMTY+Rv+QCAGQiE15ABejAQ6sAoVUEDwjCrVQahVv7rBAyarTPP8ATAO6rtTXUQgMhJRqQ2UYAtFNGSqv2f6SBkCbCjIEwAAiufwdywYWkP/93lN68EY6eQJUGMFL1ACingjADtPJBBSjlh8WQHlr5CENiWDG050aQVfgQVIt7HjXT4wz3bGANRBWakBiN7XDT+8KPP3wv0nNrYKUZDzXbMIfhNjYT37Et3G9th6FeZLphxE+aofYqH5SP1h74HmQaMOeuJFi8FAD9+H3Q14lWQdRMByO4nh9z5HGEK0ZtBWIYqmEhTBNhJUm97WOoS9fitDaSOdFL+cVHkfGwiRXxbG1Ua8RzANhtC0kC84emc3DvSSpXrCBYdjny4N7whoUHBuEfIAMbLPDe+V7UW27DOLAH3T4dYknEff+M8odQgIj64vMJ8DjBHT3NEUJGYI1hsGYMI9tEed2lzHr4VxRWL6Jy7Rsw9m8d/l4ii65rhFkLcaZNI7Y3BEh9Bj2/lQWHOiktn4F74UXIg3tRC5dCth4jPwCnjmIUBvGzjfivuxbxlttY9u+PcDDWi3/j24Z/w4whhUT5LggV4tR6BNeJC3gc4IpR05zqwKg2OIrACisF0iTWkwcgt+0APX/+HuLiTqz//DYQVmn5jz8NgGqZBg99G+oz0NHNANAA1B/q5NQla5CvvIz73g8SZDLIvj7Mvn4Sm36EP3864i23ceWf3g3A3r++PSzmCz8FQFoJFDZSK5TWQACCcAoVkh4Pbq9JDOAz5+7nzuhj5QiNlSbSMBFWHGHEEfEUwjCRa69BtTTTsmkLZrHM0HVX4l//JnRjI8L3cTe8nrqvfRV3wXy8Sy7HHCqQ3PwylfosA4k4jX0DdK9bhl6yCoDM408gHRtv5kzcCy/CuPgKlv37I6S7+9j9exspL12C8eW74Mh+ZDoHnlszfIB+laHsVfbtCSTnUHOHwVYNEEIYCGNEP2slMBJh3ymNBMLI4B48iv32m2jZeZK5m3eTO9wLV65i//pLCeYtIq6LzBsQnOjpptCcYumv9pPz4MTq2VhFB/3zQzTv7oS2Blq/tplBkafr1rche/LQUs+0h39Be1c3PYtn0pc2cXdsI7V7F8h4WOpYKpwXo9BChM0zAlEbZI0AO8G0+NzBPROsNBCGOdzPGlY4hwVkLI2wMshYFo4cAht6L14IQKMl4cGnaeweoP/tV5LbsQeAmQ88idNST0rmKCyYRrK7gFV08NvraX3pMK2deVq78vzi2rlheVrqafvuZlp3H4G508NTwIlqcWNptFtCWMma01sR2bOVh/ZB1KyaesT4auIAPkdwI1NhZP8dNXiSBsJKIIwYRjyFMJM1sEEumsLs20P/0mU0bz3I/qY6WH8hi/cdg7vuo7PcTOn666B9GbNWJekvunTc8yzOrhIA2UsbWHnHNQDs6MrT/vRWVn/5+wB09eR5Ze50WhoyXNDRSXe1uM3T0XYRUQRhhFU0bCdzUX5Uc4EARThdqhk5Js4A6xz0uaMtTzWNrWqrFUfGkhixJDKeQZhpZCyL86abcG+7HRqaowpvYeD4bsqH+kmumEvT0W76m+uQf3ED8g0LaFESMyZocwPmyEEWLs6ycHGWhro0ZJOQSXC4aNNw+TKKK+ZT3LIH0gn00rn0PP8KpbZmeq5YCR1HCJaswNn4OyAl1vFjkWkyMoVG2lm1olVt1BOx1x17za35ASLLU1RJIplBLrgAq+wjisXwQwpUto0ACK6/jsy2XTgrQ/Mh2qfNgJk9J6kMreXFYD50w2pHcMGeHlRHaD5MWRC/ZBlmJmzijd4yhQODqN0DrLAk5foEJ44P8sTxJACZ9CCrBhIQDxhoTGJvWEfq1GkaTvcxcNM78I8cQuzdBVYCrHpU/14worECCVTgITDRgYdAoqu27wmgvWMMtzrdiTRXRNOddB3mm29DvuOD+F2HiH3/fvTBPRiJLOqMK7Rt+jFdb7qBtk0/JtUJvTe+jyPPH2bFpdNYuWYa07Hp6oDOfEDngIFru8T2FynmwwemMROjWPbJpCwWzMzR/FI/M0ouH3jXGp7asoWezkF484UArPjbH2GnSniZFPmFs/EzKawqqqUrUJeuJUiGZ+TWZxB7tiKOOGinhFAGmoBas6zHv3ke4xIMQ0VKZGTkF+k6rA/9NbquifjpPipvfSvWIw+GlZhtC7czp+O2t7Lyc18i0Q35VTdQbl/IkYzJJcYJ3vPRUKOffLCPzv4Au1ymUuqn2Bs+r64dGv/dRJpM0iKdMskkLfqHbBrrYrznplkA/Oi+n7Br4ypWrJ4Nf3Af03/2ODt//2ZOrl+NVbKxO3YDELzuyvABeORJALpmTaN3xjTMv/0j/MMvo30PHXigVWjkGOUvHh8ZQ80dERlRBSwMsGJo10bt/CXyrbcT/8GPAKi89e3Ivl6MeD0AjvTwW1sAsFsXcur6hSS64ZbsVi5+xzXsevE0O7ac5mSpiYaYQ6XUj13KY+gC8bhBLiUoFDyEIZF+hkoBVCkD8WYOHStyz78f4vrXt/LuD17Jrm3H2Nk1CF++jX2f0aS6+3FzGdxcBmaGUFsOHOGCR56CRILTs1rpnTFt+FaN0F4dam8EVjDu2juGvy4ixZU17400LWQsDYA1fxX2x/6GNJoFn/08TlsrhdWriPsGIl8kWLkYeewUpZb5zPvkNVQ6+lj8Yh9r18Z54rksz//HC6SaoH52HM8u4dplXHsIz3NwHRcVKKQhScVMYqZJXxmMWIZMKrRLF/tilJMzue6WZVzbVGHrk1t5/sbl1M+rh3uegJ4CnYvSZA/1AzDjwAHo6+OZ99+Kv3gZYu92rKceQz7/MIFTRHs2KvDQQRAaPCaA9o7daLlmqIj62qp50bCQsRS4LkZxkNK7b6O8eBG5rS+Te3kHvpFCJxKY+w5jPf0SwTXrsRpS3KzLtEy3+NHmHM/+6/O0XQSLVzRw7NA+uo/swrNLBJ6N6yqEFPieTyYmiMfi2I6DxKNY6GKoPIAFpOoT6EKJ3b8aZGjxPC5Z2oL5/B7yMzMwrY70vz1E5mgPttTMqFRoP3GCn23ciH3RaqzHHiT+yAOIQ3vALw87/rVCK42YAIOpMYQ70hoVgRWRebHm9YkhPZdswaY8fx4Db7yWeGcn2V3HOfTu12M35xDZNCee6mFm0WX9de289LMST9y9nYb5MG9xgoHubk50hM6CRCrJYFmhg4BZjWnqUjGGbBc3CDBNE8/38RQkDR/XK6HdComMgaz0c2TbIO7SBVy3tJ4933ueQ5sOoy6sY3DJDHqap3PJgQN0zpzJqY0bUQf2EP/Jo4i+0+EIWblo5aMDP9JWNayxZw21nRRwR4yQxRlGiwiu0JKmo12kDxykuGI5Q+vWIrb/gvSu3Rgd3fSWp5PLpbn+1jX0dCse/VY/yYYS6dwxTuzfT6GvD095JNJZpBRIITAlGFJSclyKtgOAKSWBUqAVGcvFUQamsHFKgxgkidFPx7YizRfNYeMayfbdA/SdNpizdydzXnmZYirFix/5CPT1Ydx7D3QfB4gGUC4EfuQjjkJ4Jojmjs1ykhExbmGzTKS9EiOeQsZSSDOJkCm6m6ZxetEiKAyBiNPzN/9A885+pudd3Hwv7/roAurqsvzwX48x1P8S6bpTFAa6KBdP4Th9pFJxRFBB+w71aZ+kpeguDzDgDhEzPWLSIfAKJHWZ5phGiDhpqXBLDqbXSzx2krYZcQy7k2d/uI38vHauvnkpDfkKPcZCTAZ44c478RMJ/F/9DJFIjf6TVtgaSSOK94q6o/Emy5ho7lmaZBlO+qUZC5tjKxF6fqwUwWXr8O+4AylT4bcNk2nP/wrrz+/gsivnc9HFS3ny+3BgRw9Nraexy31USgNIw8Q04whDgg4wghK+Y+M4FUwBpg6wdYBUAQYCQ2sMFVB0PdJGQMxQFMtFAt+muW0JzS0mxw8XOLYryZpljcgNbXi/ezHJ3R0cm7MAUmlYtpLK0gswuztrzTKBgw58tPbRKkCjQsf+qMHU+KAeo6mQqBkuak4CaYaj5mpssTRqn5YvvsTs73yZ/PrrEfs7MG/ZiLxiNUvMAfChr2sXsBMAr9SJJXykGUerEkG5SCwex3c97ME8yvBJpBshckJYGmIywAVc5RM3JbYTmkoMaeA6JY4f/iWNLfNIZeeMuouTM5pouPKNvOfv7wTgmSUXcOADf4g/fxGxfWE05bDWhjFfQkm0UCOrYtxa6d8+3DNXfIzqeyOowkAY8TAOatdu9MZ3kl9/PXP+9yfoM2chP/Ih9PEu+swSAz1N9EcW/b7uXVDpIZZpIHDKBL6D72gCy6r9XsKMkQASgRsCDgI8zyEGlAAvEEgpsR2bmBVDGGlKhdPEYimaWtLAXPbut5mR7WPGyT6OLgmNJUffdivHm8O5rapvQOXqoLcURWgaYcBBFDsd3XhYGeMYMfnbhzvCdx0CDUfI2ooRoJDCgFgCnc4CkI0P4T/8TXre+ycwlGfW9zchZiVoyMNcfB78RSelwiAJ3U+++ySWVcYJhuOK67MJio6N7WkSliCdipG2FDHAxaaIC45LIh7DdlwqQz6WaYAfML25jdfPWkjJKfFMRzfeyWPEm6Zxqncxc+ZmqetUWOkmjsfTdFx4ObTOIP6zH2C8/BJysAxWPX5QBq0QVgqpVGipEjIMydHjO7QaE80VtaUdZyzSWnABIl8ePq5vo7xhA+6SlQA4M+cj5oS+1QyKNAGubYcf9rrB6UGJ4eY8m85gSjClIGFBJi6hUgQyYMXwPJcEEM9mGHRDc2RT3CeZjJNM1pOMxegudOMGLkFwqnZdd2gIkKSUT5kwXKdh+xYG3jSDYO1aAIKLLwWgpbuDns2PI3qPhl+WBkL5hAtZxtdC9VuG++sHDmLBBfCBP8O2MqSLfQCUMk2Y2TS5FzaTe+7PiJ/ogPkbsD/1ZYLVV1C6biGebYdgVRG8AkqYSDNBJh4PB1WuQ70AM25iWRZlIfB8F893cT2XeDID8aipBpJmkmQyjed5dHcf55Bj18rY1lbBLhQAsLiIefu388ud32NB63QW3PslDj3+IIWb3l4DbLzwAidWbYBVG4jf/ZdwchdCCHRtvDGiWsaB8TnxCoVwl6OWrWbeI9+glGuhlGtm3t5n0L/YTO6FzRTWXkth7bWceuUI+R1baGifTX/nWooDO8Drql1HBw5GOY8ym8CpoOJGuKQkEsuM4fkuFmABvuPiUCQO4LiU3YC+vrATTybTxONx+vv7a98vdXbiDQ1h5q7DyrXC9vsYAFi5BnZsYf13v0jp6R+S7j5Kuuc4/bMXc3TNGzjxic+S+PR7wXdHLVIbhnruCY8B3GE3nxACYYRTIX30MOrgAfoqPo3f/T/Ud4UBLabdhZPO4VmS8vTZ5HbsIJ+fR8v8OuqmO8TLAfkeh6a6CmWh8T0P1x/CMF2MWBIz0UDCkihlI3wXQ/n4jksqlyFVl8Au5unNgw8EuoQfBAwO2tTVJUjX+yRlDlv75AslCqfzFE6fJhfL0jz7NJ2VPjQV+gBWX0Rz9yFmHHwcjm/h+PobGJrdwr6hOP6pU3D9LMTq9YjnfszIgYcQIoq8Ofeqe85iqMSBbRhf/xwDH/okpdVraXzkAZwZswnqm0ju305228+Z8cU/heU3kVu7klRdHam6OqxkZvSFfAdkQKVskDZ9LAJiRgxb2bi+S8rUOI5NocfGbMnh+QFaV1AIlC4jAkilYsRiJuWyi6NKtUuXSgPAXFJN7WSbp/HiQzvo7T7JhpVr4N4vAnB8/Q0cfd3NHF9/AwDq4DFU8zRk7+lzDu83ybmNWz68m8av383QTe+h645PACArPoUNG+nvvJU5n/sQSWDmJ94P5aP0HDsGgJXMEI+nicXT+MWoifYdfMujHE9gmialQgErlQUrBfGAysAgJ4/24FqSVMIim7AoVCw838FzypSA6dNzOIMe3kAHaSBmtRMkM5ipNO12F6WZV9D8vjZ4/Puwcg173/xOelsXheV+8jnMh/+DrCzjzl2CyvdgbH8OX6v/drWMlYwZXK1f7R0xDAO6jtHwzVALjHgStXAplcWrKGzYyMEvbWLRn7yXzMxWylt2cPrIEWLJbPgXSxGLpyhLI1y7o30cR+I4DqVSCcdx8H0fyzRpa2umT/v09RSwkhZl28PzFSAplz0AclZAuexiDw0CkK5rxoolqUQP075TYSRH85veCvd+kb3v/yN6V67B/PLdyAO7hu+z6xhW1zF8J5oF6IkTZjMmtuXa0uUomFtrFS6RDAIcR1FyNOUgxZCXZnD6BZTfcQvxeJnYqQ6Gjuyg3NvFCbOJZWaJ5vY02i5zun8OMTNJzDRobl1A+4zltDe1kWyaTdasI5tNUSgM4FUGicViBNrDMG0aE5KEctHFIQy3QiamaMzFiFkW5f5+ynY/sUyG3KylePlGvIrFTb8zAKrC9rxLtmLTEB9g3nfuwuzYi9i4EXPOPGL5fmL5fnyZwvMVQaDw7OIIP25YE3ocfbpjmIeqmmei6gZToAO0chEqQOtwlR2Ake9i8T99mnV33ky7bROc6KB/3RV0ehYXLh4g19JIoaePZMrEiqWwYimyDbNYNa2FK9Jh8HilUgGgt6uTPS+/yFB+ADyX3t5TeO4ggRcaPmKJBL7vU8rnCWwXywpt2n7ZpNKXZPrS2axcuzy85toN8Ng3oH0ebdueou2RrxC0tqJawggR7dlhDHP1fqoLu0cBPvORP3cyBs3yiPjdSGuFVqFxXakQrPLDib5WyF178FeuZP/HP4fu6KZu5zPkvnU3auY8flQx+NjsIrmWJuAAiYRBrmEWZiyFic2FcZiVitNdKHB4cBDf9zEMSWDbGEb43Np22FwmEuDaAoVH4IcPVdw0cLwQcOnYIG52JjOWz6X7RA/bX9iNNaeOtke+wra/up+utrm0PfYNjO7u0XergvAhVQFaqZqmasbZPMVvXXPPkkNC6+jJVpH/Mwifdh3UNNe8/zuIH/4EtXoVPe+8ldwLz2D8wc2U7/40g0WLFVevA6DjcIFswyzWNaa5JQezTZgVM5hn+vi+j+d5pGMWDbkMuXSqVqpEItx33L4a2KQpsHCwrBRtbSvC/xstLF5/Idtf2M29dz9A6yc+BEBX29xwu/pqvJWhNU17kfFDRd4gFUSaG7w6QG6cII+Ry29EQpLaKoMo+hEdeYkstBlHuwGUi6h1V6AbG2m9833I47vIFLo5KT0yxS6uuekSegpz6Xi2H5nuouT6tFo2pnDY1zvA4aEejpdLIDQpw8CMS3zPA6VI1bVjWikCx8fQBinLJJWUoAp4fgaVvRA/b3P6eJxrbv8wt17zCj/+wlcpvLKDuf0v4hZ7OVXXhly8Fjk0SPIH9xN/+QWMUh7hl1EE6MAJUzH4bqTJI6IxJo/58Uyp5pII+10VeEjj1T+pli9HrbmUaff8FfrZTZz81N3MAGY89E2efPBJMk0t/N4dH6PYdy3bd3UA8J/dFtNiGrtykoozQGMcMLIoNI7t4VQ8DENgANI0sRJJIEnSKlEpgufVk2uYR8W26epIcPGt7+H2222evPdJdj63k+nr57F7+c3kB2yafvAv9LUvgEveiN+2c3SlVZtjFYT3qX5dn3vuZQyd9dFq+Wrikqr2mjGEEUMY8dAGG8ug3vAm9IzptH3q1tBM2NKGs+dlmrc9R+nK2zhizWKm6uSiSywO7Wzi1PFmSqW9nO45RIUKrrZJGCaWmcRxPFSgiCWs8NkKhiCw0X4JZ6gT1/VRKkGuYR6eC6cOp5l79QpueksdvT/9Jg91LCe5fD0tLz2A0JqBbBOztv6Epr2/gpMHyF/7FoJFyzB3vQzlIkFghxobeFEcVTBiADm+gMc4EiM6htrirypcNWMRwYar0RuurmltfE+4at7RmqG5i+jVmlhmBskbbmf7gR6MrQ+xcN1l5Ps9BvteBr+PXDaBIoYdlLHwcb0hJC7JmMDApVwawi0P4pQG8d0ynpcm19COW0lw6gjMvfpi3n3LYox9j/KfLy0iv+w91J/cRMI7hpPM0vLz74a3VRxg1v4XKb1yguKNNxO0tWPsewVdGkQFbhSVEfW/o7LUjR/csbFmjwhrraYVEoaJNOMIK4Fsakd9+FPIBSuIPftTUs89QfKFzRTe+UGKLQvxNlyJntaGsesVWv/hD8iuuZ6Ta28k98KjXJZ1mD57CU/8bJAThw5hBD1INYhUnQg9RDwex3VdpJRYlkXJMQj8MoaZwkw1obwwoUk8l6ZlxUKuel2c/LFDfP9gG6x+C7m9/0r2J9/h1F3fxZs+h6bH/23UrTV+517ctlkcuudhst/4B7zHH0T7LsqzUX415GbEoGoc57ljG/0Io+OWq2uFUllYtAKjWCTzk+8BUHjXR8nf/il0awuy8xSy5zTBmsspHDlG/Af/QvOeX9K79kaOHqqQyO9g+dIGzMYL6To+iBZxtMwhgJLbhONalCsa28siQm8sUk7DSi1AJEyy01qYe9UaVi8psv+x77JpRwAX30Sy+yEaH7gHZ8EF9P2Pu7BOHsZeeAH2vBXY81YweNW7sOctpvHH92MO5bFnL0K/9EwY2joqvHVi9Llj5Ica0TTL4UxvwrCQ8XDFgWxqR//uhwlmLw6/0dBC/KcPon+5HTVzFvanP4Pc9QptX/1seMlTB2H6QkrmDHj+62TnNLN01evwK00MlX0KxYDOHgetwnlt4BUxrAyWMezct5JNzJoT0NJioOOCXc9tpfd4J8y9hJx/BDVzPrKpHevEQbo/9X+xTh1F3/ctROQSVAsW4XzoI8RKYapB85UtBF/5HNr3UJ6DCrzhqVFVY8exbR7j5SRR01zLe2HU0iIYiTDMJl4Xbg0rtDTZRnsI90/+DOuxR4hPm8nQmuvh5EGyX/pDjC2PQ7IeKnmoh7krf5d4S47KiTAAIGEkUPE4Kh0+RFoPQqECTmhTzrTVc/q0ovPA0xT68iQSCerJ4699I+VP/BOVTAOpLZsx8r2UL7sW8wt/V4Mr8nmSq2ZTeOcdeNNmkP3eV3Ef+XbYHPteuJwkMs5MhMVg52AqJIanCAiUUwwzxLglpJXALVaQVgLfV2Gguiohjh3BeHwT7uveQHC6G+PgLxHZOL6pCZasJlhzNbH77oY8HM3UoUUWqU+hU1nqZYVMsQNKIAOfgvIgsxDiYRDd7lgWMr2Y/d2kBXjXvZ3BvdsI6lpwrQTmrp2UVl8NQGzzYxilEhgKAgdyBva+g1h/+3FM38XzbZTyav1smFhhfO3J5whuuEZVoxFE6fW0iHIv+iAkWnggJKG/ptqCSSQQ2/QDrOeeQZQGcD72SYwtmzG2bCbYcCN6ehiCqtM5jKfDFAhq+VpI5egb6OfEoWN4fWEwQLK+HWv+RWh7gKD/APLobkS+b7iUmTpU22yMF59C7t0KZh2Z//UX6MYmxOlTaL8CgYPwbHTgorxKOPXx7Wj6E4QDqGi+W+trx3uoPLZwhyGHKxqHBxo6CJtIBRgitM+GWdoUMnIUSkAVe2tp/6pibHkKY8tTBEtWY//Lo1QqA1hf+FPkc5sAsOOJ0b9uD+Duvn/4+47A/Ysvoi67htidv4f1g68DIEoFjBefwntfmNdK7tuJDlzArYElcNC+C8qLnCA+OnIcjF5GMv5aC2P+dhI9al9HWVJ15DzQvhtNH1y0Z6O90LMjAgd8O0zdd4aIUgE1cwHOZ7+FztShZ81HHD+MnjUf90vfx1p3JblKAXn7x+F/fhbbtnEvXo/+zrOof7wPna1DXXYNatZ83Lu+hVp6MaIUBsXJE4cB8BcuicASgvXL4JXRXgXt29G0xw1boGgNUrWPfVWa/XGUsdfckTm4tEJrAQSgwhG19oeDyISUKCfsi4UqowIXd1EbwZpVcHQrwszAoitw7roHPa0N0d2F8dMfoxsvxv3gB1FLlhK8q4HgZCdi67bQ9Dh/Pd5H78ZpXgp+A4nkfMpDDta37yNonY79yX8CIP7FT2E9+yjON/4G75p3EXv6obDIOrQXq8BF+x5ExophT1Dw6oHTBJgGwTnLZhPt1cI9Rw7S9XB2GHTNqiUMEzVzLs77P4Y8uAfra1+AXD3uF74Fxw5hPvEj9OLlqBnt+G99G7q5GeuhBwlWXQ7dxzB+9hCi+zj6oqtQ7/h9xE9/CCvX4Fz+OgBij3wXY/8ujGKBYO48gsvfgDhxmKD/FPLia4g9uznMAOA7UT/robyon63Oa6twGam1EwMsnKM+Fy1AVPtegKoGD9eF8qNBVRQWqoDg2o2ITB2xD1yPnjkX9+770aUSsfu/hujtQfR2EyxfiQCMvXuRB/bDFVehF6wc/vV5i+HwXuSWp1HZOrBdrJ3bkJ3hgMvo2IW59QVKH/80/ro3wbMPh99zbZRfCftU3wu7jsCrJeKupih6FdgJorVwzgLkzgaY0HkvRTUDPTqQYMXRvjPq28E7fx//XR9CFweJ/fM/Ql9P2Nrv+BXmvnDxtYhil8Whneh116PWvRn5/GPoKE2C6O3CeOCrxAYrYdM6QmRPJ/GfP4nz+muQyXB+rPxwWahSfjhKrmls1Sk/7NYbbbCYODJOiT1HrJMa+aQLCUGA0KDQiBMdGHOXIabPx3hyE9aD3yHWdwzTEOGf1BiEf1IoJAGq+xBqxRpEtgnr54+SyDXgvf5q0o8+gOWUkUIgRIDER+ChXbsWTaGXXoBI54h/5fOogdMoz6lprPLdyDHwX4GdWHTPcUres2hwNb2tFhB4UdrbqIk+eRjj7nBqot0KIpZEI8OoftxoxWAQrhqsvg+h6xh0n0B0hWGxzrU3YJzurEVOiCjWSUcvsZBmFK144EVSn9tF0NCCOn4QXR3F6yAcSP1GjZ1YYGFc8i1XAVfDX4nGV6oWFVoNDg3nupHpL5ZEuxXUiGWgQPR2kuoySgPa26F1JuzdhnfHXxJcdR2pz/9leF3PQTJipIuqvXpGuw6B6xDkw+DyUGPdyBF/fmlsVcYvDX6kuhqipY4qarENtPJrgIX2R38vegsJUQCAFl7Y30bQ1bSZkMoSvPkWKA+R/Mwfw75XhpP2+ZVoKhOl2VUa7Q338VqF/XF1nlsFO2ykmLh97JkyjmsMR78cSoxKRiajCA5z+E0l1f9HcENvkwBkbWU7UqKnzcK/+s0AmE89Bj0nw9+JQmGkJHwrSRAZ+KN5alUrQ49O6NWpWp60Or80dmQNj3MJz0iyHYFl5D7D56ouxNoaYESUukAghBk29Wa8dvWaJkKY5U1X+84IqvKHpzJaj3C0q1HnzzewUc1OhFKekR6/FjkJgkhDR+2LM+BGgQDSPMvthC2ErmopuhZPjdIj+tEoMGYk1BHz1vBz1WtOgCp7bbU6kUp6xvv6ou1whvVqkRkFOPQZm7VloyOlNtWqDpyqA6ORxocRlqWzHp9H2npGbU60Ep/59pIzX5068vyIcB4pgTM/G32+mrpvpAUp0kRdu/1hgFMvahzzYo3cPQP0WSCObMrPmr5hhAbW3s0HozTy7C9OnoDV89+oxQlcejFqMyoNw6tAj/7/WWWU3fdMoNG5UbUxgavmNcgEh3tmUTmD31k0+DdcRZ8F8Ojd86Q6XoOcR3BHFvnXHf5GtGfd/TUnzns5D+H+utv478gkuOXXIJME7pScTcY4hmpKxlOm4E5imYI7iWUK7iSWKbiTWKbgTmKZgjuJZQruJJYpuJNYpuBOYpmCO4llCu4klim4k1im4E5imYI7iWUK7iSWKbiTWKbgTmKZgjuJZQruJJYpuJNYpuBOYpmCO4llCu4klim4k1j+HwElwElAdxlfAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTAyLTA4VDE5OjQ5OjM5KzAwOjAwfwKj6gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wMi0wOFQxOTo0OTozOSswMDowMA5fG1YAAAAodEVYdGRhdGU6dGltZXN0YW1wADIwMjMtMDItMDhUMTk6NDk6NDcrMDA6MDADsEjNAAAAAElFTkSuQmCC" |
|
b64Map["harvest"] := "iVBORw0KGgoAAAANSUhEUgAAAHcAAAB2CAYAAADyZQwvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AACr5SURBVHhe7Z1nnBzVma+fyp3TdPdokjRBOUujgCQkRBaIaMDYBnxZm+sMu2uvjXfX67XXgcvisFx7DSabjMEmGJsghAAhEMoB5VGYnHumc6yq+6GnhmZW7O6H6xl2PP/fr9Sl6p6urvPUe8573vOeUwJgMqFxKXHkgQmNH03AHceagDuONQF3HGsC7jjWBNxxrAm441gTcMexJuCOY03AHceagDuONQF3HGsC7jjWBNxxrAm441gTcMexJuCOY03AHceagDuONQF3HEuYSJD7aAmCMPLQf5BpfnyLbwLuaVQK1dovPWaa5oegflwB/4+Ae7oCHqn/bgGf7nMjv1cQBARBQBRFRFEc3rf+1jAMDMMYhjwSNh9xntHWxx6uVdCn27cK8HSFW6r/7L1SWd9tAZVlGUmSEEURSZKGz6PrOrqu/5eQ/7vn/XPpYwu3FKRlQVZBW+9ZhXm6Qrb0X+2XWm0pVFmW0TQNVVVRFAVFUYbPkc/nyeVy5PN5CoXCh2CfDvRYQf5Ywh1pQZIkDRe4LMvD1aQF9aMsiRFWPfLVknU+6+ZRVRVVVXE6nTgcDjRNQ9O04e/PZDJkMhmy2SyZTIZCofCfQj7dOUdDHzu4pRYrSRKSJKGqKpqmUVZWNvw5SZIAKBQKZLNZcrk8hmmiGwamYWCYJiYGmEUghq6jGyaGrhc34wPLVVUVSZQwMRFFEYfDgcvloqysDKfTid/vxzRNHA4H6XR6eIvH4yQSCbLZLNlsdtiiLas+HeTRlAR8b+TBsZIFtWiZErIsoSgKNpsNr9eLzWbD5XLhdruprKxCEARsNhuazYasqohDFg1FiJhg6EYRpAlm8Z/hgi49n2azgWmiaRoejwev10soFCIUCnHi1CnOuOASfnX/A9RWlFNVVVWsqlUFWSq2yyO/T9d1+Ijqf7T0sbHcD4MVEUUJm01DURTcbjcejwe/308gEOBEawd79x7l+mvXk8/nSSaTpFJpMtkcmWyWdCpFMpmkUNAp6AUK+QKGoWNaVmwYAJimAaY5XO3b7XYcDgdlZWUEg0EqKysJBALcfvvPONndR2c2x8qZ0/jmV7+AIEAikWBwcJBIJEIsFiOVShGNRkmn06RSKfL5/IcsuHjO0Svuj4XlWlXxB22sjKLIRascsiS/3084HKa7u4cVn/oKGVcZU5wCFRWTcDgcyLKEIIAkKyiqDd0wECUZEJFkFVGUQCjeNMWt6KBJkoSiyKiqOlwrhEIhKisrcTgcbNr0BomMwO9feJFX33qD7oF+zl6yiHA4XPxbVcU25HhZbW7p9hdfLZeCFQQBRVFQVRWbzYaqqvh8PsrKytj43Aaa2lKs/8ZtPPnUczRWaTy3eSub3t6Gns4wa8489HwaUVIwBQFBEBEECVlWEQQRSZKRZLlYncoKNs1WrOrdbtweD36/j0AgQHl5OQ6Hg1/e9Uu6ens54+Jr2LNjL91HdrN+zQoqKytpa2/nJ3f+kq07d6PVzeDtbbuYUzeZdDqFrutks1kY8gnGAiwfh9iyVR2bpjlktUVrEkVxGLLD4eDFzXvQw+WIFWG++/VvEQ4FuXfrYernLeC+ex/mwKEO7rvnCex2N3ZNwuMJ4HT7sdudaDY7ms2Oze7EPrQ5XW5cbjc+fxlerxe/z0swGCQcDlNeXs7TzzwNssCrB48yc/4SkDV8wTCYJs8++yx3/fpBvnbHz/jVyxuYXFuPICkEAn6cTic2mw1FUT7UdRsLjXmba1mrBVYURWw2O4oiU1ZWhsPhIBgMUlFRweTJk2muqKGq9kxu++T1XHJuLSdOniRR8DDQN0C8t4P169dQHvYzmCiQSKaIJxLohWK7q+t5EIoesSyJ2O0OVFXCJoPb7cbn9+P1eHC73fzjP36POeddxIuvPs+1l3+ZU0cOY8RO0NfdDWYeNBtPvv0uLrubS+YtYN2Fq5kypYaWlhb6+vro6uoa8qpT5HL5D1XRo6UxtdzSO7oUsOUla5qG0+XC4S56yjabjRtv+ixLpgYJTC8nk9c596zV1JfbWLZwCj/9yXdYtWoZnrIqXC4nbo8ft8eP0+nC4XLicntwu334fAECZSFCFZUEfS4mT56CLKvcdc+j/OGPLxEMBvnsZz/DoQOHqVPL2fX2Rq686Fx0xQk+Pw9t2AB+H586ay2XLFkCgsnixQuHAx7WTSpJ0lDT8OHrHC2NKVxL1gVbwQPLc3U6ndgdTmyKhN1uR1EUzvFXcNWCWlxGD0b1dF5uSVNeHuKCc9dQXV2Bqmr4vC4CPieBMj9lwTLKggGCwSCh8kpC5eWUV1RSXh4i7FGpb5jOr371FI888gKvnGijr2wKJ0+e5Oyz1/LJtY2gD2DEWzm483UCfgdXXX8DjinT2drZzsvHj4NkYLcXu0KmaSLwgddfaqXWzTuaGlOH6kNVsixh02wIgjDsIXs8Xuw2jXBlLV6Pl9beJIvXrMFM9dBy/DhNzb0YpoK/Zga/fvApek4eQhDB5/UMedAColnA7rBj1zQcdgWnTcHvc+NzqpSXT+Kpp56iKlSHPTQZV8NsXvnjS6ycXsX8+fOora2luroSvZAjk4oTmFTJK889x9O/eZTzP3UDV1x6CfR2UchnWHnGGeTzeQYHB4cDHLquk89/UCWPtj4WcIv92uKoS7Ff68Fms+Hz+QgGQ9x/7wts3nuKXXu20VDpZ+GsOby16Q08KDjSWaR4nFVLl/HSxs2oYp54IorX48LjKTpNDruGy2nD63bi9TjxeV3IisITTzxOWVmAU60Z/JNm8Ptf3EfjZJXrrr8Gv99PoVCgv7+fLVu2gKJxtKWNXDQBosmG117jppu/RgKBvqMHWbp4MZlMhoGBARKJxFA/uzAB12pri+2sDafTgdPpJBQKks3lOHToENNnT+Oyz93IhY2zmTZtGuvWXcSzv/0jhUSE7q4Iuiiy6MylvLnxFWw2ie7ObjRNwWm34XI40AsFurs7GYhE2Lt7N+9seJFp9RXEo0kiA1kkSeOM885CDFbR0rQfn9NGLpenp6eH9o52IokUDXMX097cCppGtqeHXz74EE67xuvP/JYzli0jkUgQjUZJJpMkk8kPDSz8RcG12h/LakVRRJZlVE3DYS8GJewOB36fjz0nT/HEtu30nWyi3C6DzYvX66G6JsTmt7eTF11ceuN1TJ3i4ejJ9zne0UHLiVMM9kc5fPQYjz36MG9t3URqIIKRjCOmUsyfP4/BdIyDRw4RdNsJhxSamnfQnRggUbGEP2xv5cibL1AeDtLX38dgIoW3oh5D8zC1pp5MPs+99/6SDQ/ex6evuRqbphGNRolGo8PxZstq/yLhCkLR/RAlCWEogK+qGi63G0WR8Xo8yLLM0cEEsi4w3y+T0wVMFNx2hcrKSh5/4nk+/dffwBANWo7sxcilmTZ1Jk6PD81mo7o8xNqVjSyZMxOnQyMcCuHQ7GzfuYc9R44TGUwTrqxj8cIFdLbvJZVNcXJ/Oxde/gmqwn7uuev/0ti4mG3vvkd7Rx+ZPHS0t3LRynk0TqvnrDNXURYIMDAwMAw3mUySzWaHR4tKw4+jqbGHWxJLlmUZVdWw2e3Y7U4cDjvhcDmJji7WLpxOfyTKvn0HkMw89fVTOHayhTMuvZwHfn03O197lbbOXoSCQCEdw+cQcDl0culBKpxlHNj5Pn2xASKxGE1HmunoToAWxrRP4XO33MHTv3+JuVOczJ0cwNB13nziPpRCN0sWzeH5FzeALkIuw7pLL+GsC85DSQ+ybNlSME1isRixWIxkMkkikaBQKJDL5YahWsOAo62xhysKSGIxKiVJUnGAXCuGHV1OB36/n2QiwSNPbqRi9mq2H2nj6J7NlAV8fPtX96KbJq3HjjB/wUJaW7uIReP0dbXT1t9J90An/f29NB1pJp03GMymiGayNLf1sOKsFRw+dAKHv5r3D7XQ1XyMZP8Rbrz2ck4eOEgukyRcWcHGLVsJBsppPGcdLUeP0h7p471tW7nmovMwDJ3BwUEGBwdJJortbCqV+pDFllruaFvvmPRzrfb2dDIBURIxDB1RkikUdOwOO5l4G1IhxxWXXMHe4/3c+rN78JeFOHzwfWqqytm1+TV+ePfdbG7u4LM/vhPkAHJ5A866GSTKAnRKJh2dESZX1vLoE49w2WWXgSoSHzhC95FXIHuS9v44PdEcXpuDinAF3VkHZmgWvVmVtesu453mdlJtnfzdDVcRDoeHf7OiKKiaisNZHAe2RpesgQ9Zlof9Cv6L6///qTGBWyrLgrHaXihGdUSx6GkaOqFQENB56Bd3cNtt3+Oel15BrKzh7LPP5+tf/RrH9u0CReL66y/EViZwtH0A6ucQrKglmRVIprPMn1zHz37+c/7mb7+OTdPw+gOEg04CThOMAb75zS/x2muv8cbb73HtNVdRVTGJo4eOc95ln0YMhLnz7nvYtn0PBIKASSaTxjSLoUzL07fZbLjdbtxu93AGhxWUKR0YGS2NKVxBFBD4oN2VxCJUSRRRlGJaS0E3CAVDXPmJK4A0kpJm6owGfvv0czx11wP8wzduRRYM3H43v39hKz//t6fZ+u52ZMWBU3UgJbLQFeWii9ZTUVlNLGPQmwJTkLjhM59m9qxZqHYnixYtxu/3E6qsZTDSi9uuQD6LaBRYtXo1sX37+Jurr4VoHHkon8rhcOD1egkEAoRCIYLBIMFgGT6fD6+3GKO22+3FTI+hkORoanTPVqLSrtCHrNca0xVFbHY3CDK6obNo0UL+7u++xPUXnMk50+fwxisbQBQoJOJMn1pPMhnjlz/5P1x76Tpu/+G/oOpQGa4jmxaYOXMmXm+AwUSegaRBIpUnlc4iAFt2bGf2jCmIokQ0GqWysgqTPP297fhCATpPneDQ3l0gm8xe1IDmd/HiG+/i8XiQJBnDMBAEAbvDDoBhmpSXl1NRUVkMnw7BHQvrHTO4lMRfhZIghqoqyPLQQL2qFJ0t1Y4oy1TU1LGocTkP/vRWPO37IBvnsovPYuq0aRg5g0fv/jn+QpSNj91Pvr+f/v4clQ1LuPjiC3A67aRzBkYhh6BnEdCJxaKYmQz7jrdjYpJMpnB7PCTjA9TWhFAlE79NIx/pBtIUsn2UB+188uILyGSy/OSnv+A737+dH97xb/z4Jz/n1y/8EXlyHff97lm6RIWjvZFhR3E0oVoaU7iYHwQxhKGUUkVWUBWlOFCgqqiaQi6VwNALFLJJDCNHJp2mvr6Op+6/k2uuvgqXywX5FP/0rW/w43+8lT1vv41bseF0BmhcfhYPPPBbBBGKqVQiRiGDoets3bYdBDASKRhKulNVlVw+xaKFs+nv7qCvs4Pa2gZwuGjp6cMfCvP4y9v47q9+h+6rYEfTSd4+dBSyWVauWs03v/ltvJOqiMeT5KRim2vBHW2NOlzrDrbaWSsyZQ3Ma5qGx+sdSnlxYrdpKKrMpo0bsdlsiIJJTi9auyxLCAg8/thjoEjs3bGNl198mWB5JbOmzyXRepJtW7YgVdeQ100csoFNk5EEk6OHDrDv0FEwFTAlFLnoEGFCuDxIV3czRjbFgf0H2Lt1F/aqGdgrFiEkkixt8BE78R5dh3cRkmCSKgIG7zzzBPNCfqLHDjHDbWN5TXg4mDEWgYxRh1sqy2JFK+tC03C5XMXN7cJpt5PLZvjJL37NG7u28ac3NvAPv7yLv77lxxh6MfHs2LFjoDghb9AXGUB1OVC8ZcRMgdpyuO78qcxctIRNe5uxyQXskk46neYX/34P5HRs3jIQBAzTRBBEYvEYu/fuobW1lXDYDbFu/NOnkS2IhCum0q9UcPFFF/L0E49y5hmNNNTVMnVKDQgCN99yC7d89St84XN/RTweJx6P/4e+LqOYJDeqcEurJst6i4Pzxex+p9OJ1+vF7XbhdbuRZYk77/wNKH6e+v2rtEdi5LICt93+bVwuF01NTXz/xz+l9oIrsS1aC/kM6y85n+PROKdyGd4/fIwFC+ZTEHy80aojShpeh0R7Vw8EqsAbxEAGUQdMotEB7r33/2J3+FEdPgp6jEC9BztJjLZmjmzbyvTJDfzwtp8yMDDA9ddfx99/+2/5+l/fzK3f+hYCEIvF6O7uJpVKkU6nh+PMpcnqo6VRhWvpA8hFq7X6gx63ZzgD0Wa3cexYEyiA5uTWH/ycaLzAdeetZP7sWhTNQUdHJ+RTdBw7iluA+llT2brjHcprwnj8dpY3zkZWFP7p2uVccekVvLz9GC6Xi3+/60kaV57FzBlzyeVyIBpIosCjjz5CdU0Q2ebBFF2oTieR3m469u2GVB/k4ihCgZytnPb2DlKpFLKiIggCkUiEnp4eenp66O/vp6enh8HBQVKpFLlcbvzCPZ0zIYoiomQlwWnY7Q7sDgd2hx1NU2lpPsVvn3kSd4WH2jOWE6ifw9zl51MZDuPz+Qj4PdQ31KMoIvP0Pi6e7ETPxemJ9jE5oNK++00WL15IJBrF6bATNjoQF69C1w2+8dVr2fnyBmK9vYSDPsorAuzYuYP9x94lGCyjqm4aew+30tkSh6yKy6kiKDqTK1WymX4CwUlEo3Fi8QSpVIp4IslgNMbA4CCRoQGEZDJJOp0ml8uNWbU8KrFlC+5IR0pRFOx2Bw6HA4/Hi9/vw+/z03yqmSee+R2oEmZZmM//9bf4wi2fw+ao5J///l9YvqCed999l+/98/eYP38eZ52xhNb2NhatXsukKfW8+tgjfPmaywmFgqQyGbq7+5hT5SXlm8TPH36GqU442tqPKUI8OUB52M6hIzsQBKiuqaWqoo7N7+wj4wzTMGc+Yi6GJpuoGpxsbeV4Sx/L501FFCEaizEwMEAkUoQai8ZIJlMkEonhqSUj4Y6WRsVy+aj2VpaRJBFJlpGHEssEUeT3f3idX/3uTzyxr528EOCOG6/jggUr+M2LryEsXM0X736cl5uOcd3Xvoi/rpZXuhNMu/omOhMiLz79Ap+87BJUTaO1o5PjR5t4d9tumptbce55jW/d9HnufPB5Bvq7qF4wkzkrl+DxeYlHY6g2B/6yMM/9aQORlE6yJ4orVEGoLEBjYyPJVBRVFXC5NFxuBwC6bpAvGOTzxZSa3NBmzRsqrY5He/BAGI3UVnEohabUiZIkCaez6Bn7/QECZWVUVlQQDJWxadNm9pzoAl85P3roARpnTWHdwuUQns/lN3+VzKn3GDi5m8xghP2HjrLgvMvJpfMcfO45Lj17CU6Xg6xhEs3l6erqw6MoqHYP685ayuYtO1hx8TV8929vAfLMWH0Gs8qdxPraae5oY+bshTS938qR453I9bMRRJP8kXdZf+G5RONxHKEwrb0pbli3hmw2Q1tHJ/0Dcbo62ojFosRiUbLpDJlMcTqJXihgDE0zZRSrZMayWpYkCXUo479YNTuLIyoOJ9OnNfDO25sh0U9P5ymajh7kRCKFe8ZMqir8tO/fTjYRx1FeTV6xc3zDq/Tu2Q26QSoeQ5Rt9GdhbyFDzK3Rm83T19OPTxSYPq2OO+/7DV//wT/z9kuv0d/SyrIF8zhz5Vq27txNXcNMurv76Y9GWbb+Esr6TtLV18uUqgq6uvupmlyPw8zw8KMP8/r+oyyYWk9/bzfpdIZsNkMmnSGfy6HrBrpeKM46HEWgpRoTuJIkISsKNpsdTSvCtdmKw2R2uwOn08Ga1StRZYGtGzdwZNt7GPEoy889C69TpWnPLkKTqjgWiXLDF7/Av/77z+hLxjm6bQexlIBN04iFa5EmVxHVszgFmNXQwK59p3j5xU1k+zs4fvI4P/zXO9ixay8hr410JsOkGbPpiQ+y4603qZ4zh55oFFtygMsuvgCnw0EyV2De4oW4ZJGtB5ogmWfezKkMRPrJZPNk0mky2eJ83Xwhj65/eCrJaEP+s8O1gFr7ltVKsoJms6GpGja7A20Irs2mFad/aBp1tXUsW9JI5aQwfrvKO5teYcbkGnKGQnssDV4Px9qb+avLLqZi4RxebzpBPjiJ3kOnsDcuY/a6S4klc8jdnWh2Oytu+hL7tu/AZaZxGBn2vL+fH99xB3fc9TiO6nrWXLWOex++jy9/6+tse3cLYirJYDxFbUUIr9fLYKqT3ngMl+bjmvUXMH/OdPr6+sgXRGKxGJlscUJ2IZ9HL+SKc4TH0HJHzaHiNE5VaVzZcjZ0XccwQRiakVcWDNHY2Mik8klMcbs4degw/QVYfuWn+MQXb6Hl+ZfpAly+MiLvbOWqmz5Pw+c/z4r1l7H4rNX4q+rwlpXTG0+S94f4woMPk0iLdA/mOXrkIDf81Q1cef11mJrGrV/6Cv9w6ze57W/+nkfuv4vI4fepKXPz3tb3OH78OJHoAKak0dyVoqDrJOJRCoZIJpMmnysGKvSCXoQ6AujI/4+GRhWupQ8seWgITJQQpQ/2BUHARECQRDLZLLl8nlQ6TVmwCsVbjj65gbJVa2mX3Hzlpbe5+rKbuGTR2cj10zm0fSfzF60ghYqkwKVXXIocCDCQLvDU//kpimln0VU3kc/IIEqQGeCt7ZtwO2R8BaiIZlD0Af701KOoHhm314Gsqry9dSdOTz2FvI++jEYqlSani6QzRecpl88VLVYvFGfum4yp1TJW1XKxj6uh2TRsQ22u3TY0fcReXH9CkSVy2RyiKNDb081jv32GqvoGwjPnMOmM1TR19fPmSxuYNWkydHQz2NWHJziJFCLBmgZe+dGPSE9roCwYYEZNJQsXLKU9YTCnYS5LG5exacd2Jk+t5MLL1yMrKno8xoK6KezeupWbPv8Vdu3di+L0o9g89Hb1kc0ZrD3nQvoiKapsGRwOmf7+fgYHi0noqWSKbDZDPp/FMAz0Qn5MwTIalnu6CxQEAQQrSlWcNK0oKooio6gqsiQBJoVCgaZjx3jg/geYNmcWK89bgyHmOLVzG7bWdtY4Azx89WcwuqJc/5kv0NubYf6adWT1DOLa5RQMeOjJZ2hN6UxfuoL6igbeevUt/vWeezFDQRpmL2X/ribeeeR3vPXEI5x35eXc/6eXCE6diTs0g4ppqxls6yebSHPzjZ/l/ffeYcsfX6Chrpx4IkEqnSSTSZPNpMnnc8Vuz9ACLKVXfboyGA392S2Xj/SWVex2JzZNw+F04nIWu0JOlxObTSWbydDb082Dv/kteUNCrqjmeHMbiseP5A3T2dbF0Xfeo5Az6Oru5oJPfpL5V15JRC8g20VEh0pHPIYkqwS9IZIDef7w/Kt0NzWRTQ9wy9/czHO/e56uN98BxQG6wbTG+Tzz7LPs2bGTKy/7BAvnNbLpT69y7spVHH5/P7v27eHmm2/ENE16+/qIxhNEBwZIp1PFdjefo1DIFxdcMcYmEb1UYwJXlmUkScbucKDZtKEBAwdujxun00E2k+HxJ59k06bNICnccM9DfOmfbuehf7yNnOiletkZ9OayDLS1I/m8TJo5jZ2njpH3O1h+4Qq27NlPXlVYfuZyLl23glyfhCk4iCkquiawatYUDm/fRiStUOhJQjrH9GXLuPaaK3j0/rsR81FykQ7UwR6Cqp09Ow/QE0lyw+evxuVyExmM0tfXSywWJ5GIF7tAmXSxvbXW3BjlOPLpNCZwi5YrF7s+mg2P14PT6cTj9aApKjt27mD3vt0oNgeGbGdf7wDnXHUt7Sd6OdXRz7qbbqJi9izKqiooyBIXfuIqyurq2LDxJVZesJZM3sTjslPhcTKrwkOy38a+gyeZs3IZVZWVXHPOCn7/2CMsPfNcWuIxBDHFpy4/l0fu+Tc0I4WQj2NmMyQHEvT0J7GXTeaq6y8kFAowGI3S09vD4GCURDxOIh4b8pZz6EZxGaSxdqQsjQpcS5ZDVbRcCYfTicNux+MpTrl0u1wYhsEjDz+KYndgD00ma0rQ18GRwRjnrF7HrqYW/HPn0HjOFPwVdaQlmckNsygICrLXRT6bZ+mC6ZjxOMuqJlPtEon0i7z02lZcZdXkczrLF7o5cayTPVu3sH7FHDoPvsz7W56lMiDTOG8aqiTSG89xKqXhqJ/PZ64+k0DAy8Bggp6eHqKDUWLRKMl4jFQqWewGGUWohmkOW+1Y68/uUH2UhKG5QZqmIQggy8UZ9blcBlGGfDJFrKefJza9wYPvbeXEM0/RHemnfHItW9/eS2czuOxw2frF9PW1Uh6wc37jQq5YM5U6PyyaWkuDX6IM0LMmDQ117HvvHVYsCRPVYe6KpQjZCG3vb+GKc5byueuuYN15Z9HW3kJLRzcnOnrISCKXr5mN3+dmMJZgYHCQWCxBPB5nYCBCOp2ikM9TOM3qNR8HjTpc68LNkoEEq0AEASRJxjR0UCRw2Zk5tRJFADJJnv3dU6xbczaZ1jh7XtjJMh+sVGFpjZ0r5jk5t86Duz9P98k2kpEWUpE4IlA3QyCV7ufCpbMIq5A0YelZjTTOraY2oFFbXoEmONiz5xgb3z7EiYE0nopKLl8+h4oyD6l0jtTQVJFYbJBUKklmyFO2LNYcGhgoHbkea8ijAnfkRVr/L3U+BEBAQFMVTANqJ1dz5qqVLApUcf3lV6PMW4yRjtF07AAuh41UbJB8Grr6+1lYE6AOqHfC8qDCksmTmOKx4yBHOVDjgoaQi7XzqmEwy0BfilQqiZFK0NHczu3/9gAvvXOInce6cU+qQbB7CYgy4XCIeDJBJpMinUoSjw0SHegjHo9S0I3i/FtrEbGhazPMYh7zx0GjArdUlpUahkE6Vez4m9aajaaBoijU1lTR39XFqaZjPPra61x56afJN/fi92oEghL1SyrwNbhIm6Dns8jpGCJgAzRgqiRzdkUVUycFMAEtA1M1AaGzm3OmayysdfDmHzfgUT30DhpkA3PZ1ZKntSVF/2COVFs7DXX1xOJxwqEQomACJqZR7L+apjk8KKAPLQPIcHX88QDLaMMtrZINwyCXy5LNFge0db0AQDKV4rKLzufGz15PpLeHtuPHefX5P+KvqObLX/ka0+bMQCjEmVYRIOSAhkkVBD0BJEClmHJlL+TxA2IuhhOot8FnLmrk4pXlFAC7AGtWn0NnEuy1C3DNXsFFt/6E//3YRhDCoHpQNY3zzzuflzZupKWrj0w6WVxeUNfRC4UPecR6yfRM4TQ11Vhp1OCWgrXgWoBz+Vyx0HSDfC5Ha/NJujvb8XpcfPuvPsu5yxaRjkaImyp/fOkttn37+9QkUngiCUIImEC3CWYBxDw4ZIVIZoBq1YNSiJOPJ5jkhi7g9cNJOqMwaaqH4JJz0Baupu6si/AsXMtOvYa5370PtElMmTyFnp4e9hxvQR0asdKGVrRTlA9m7QmCULKgaIlKwq5jpVHtClmyHClraSK7zYbTVVygJBAI8Ic/vUqgzEdbTz+usjIevf9e7vz5z9i28V0efPLf2fzOTpLd7Vx17QXkgdY8DPYVCEkiDqAggyGoyKKJLgjYNQenBnRu/s7t/OFPL/LeG1t46bnXyOcMnC4X3V0tDAxG0E2VGQ11HNq3ncih3Tz92lZCVXWsX7WQVDJJfGiCtZU+Y20M3bSiKDJcMX8MrHdU4VpQrf7uMFy7HdfQusayLKPZbHT09ODxeDi2fxev/OEpaiprCEyexbxpC3nr1afYe+QAEf9s9gwo1Na78KgidXaQDDh0IorLbyeSFREUme3HM/z9P/yATG8r9sQAkcMn6N29h573t9GyZxPRHa/Su2sT4Vw/QdlgyRWfYl/OR6agMLhjF1PrAvj9fvL5/PDi2SAgCJDP56EklajoWRV7AmOtMYFrVWfWFBK32z28WHYul2P3nj1ks1kkDDo7O6muKGfDaxu59et/x8uvvEDjvGoUj4stxyPsOnQKOeNg5dxyHCLs3NeCPxDC5hKQVNh9LMWnbvgyZT4fNT6JvqZDZPtiiJKNXG8vpJM4KgI4pAL9h3dzYMe77DlwiEl1Dcyfv5jZK5bzxF13U13uIRQKDqerJpMJzJJJbB80O0OWK4y98Y46XOvVglvMoSoO9wWDQVKpFAcOHKCqqoK2thYSqRRZQ6O9rw9b2E5VjYv+zuMc3LeP1eev50ff+RrfOf8KNm89RMOSZcydMwlVEfApRSO6+es/weV04bUJxLuP0dN6koFYhnDDfMrPvZaB8HSmLljO4GCcZEczTuLYMi10b32V5rY25s5bxPxVa3ny7oeZN2cKHo97aGX2YspqLpcbSiwoXptpftAtsuCPlUbNoTqdhKEVxQ3DQFVVGFrCNtLXQ29XJ23NHTQuXMCqFSvYsvktqitcHNy/lebjTaxavpTNz/yGx372Ky658X9xeNturll9EW80xbHZIJKDR57eztbNb+GQweN20tTeS1J0ojr9tBw4zNGjTaxbfxnpvEji2ClQJNKJQfSeHubUBxAHW3jutu/S3BmBQBVdXd3YbDbKysrweIqzI2w2G9JQosHIGX1jCZaxslyrWtaGHgxRTEr34PF46OnupvlEE5omsnTpAhbNnUuytwuPTWXbru2IqKQH83hUL2WKytuvvc705au45Iu38O6pGM//6E46nWG27z7A7T/4PpVlbg4f2E9NfQOdWZHB412UT5tHrLsb4j20Nx+gxi3QeWA7pAcwTYO8KdLbHWXGjHr6IhHSipt0bw9HDu5l6cLZ2Oz2D/q3Q9eDCbJcnIzNiN7BWEEeVbiMaHetAQSn04nb7cblcrFj2zYWzJ5OeTAAhs6OHdvYun0fbrfC8mXL6OnsQxIdNB06zplrLmDWgkU8/9jDHGpp4Yuf+xJTV6zi8d88xM4nn8J0qOTSUcJeO0eajrP+f32ZmDNAX1s706fVIkgJkj0nmZTtZu3qJZy99izOOXst06dPZ/fu/UQHOjHQKauooXHlSk7t3EYk0smyZUs/5CUztOgJUPSgDR1DH/085ZEaM7iWIyJZyxOpKh6Ph+xAH3PmzGD7tq00nzxBc1eUPNDR109/Txezp81Estno6I/z6W98n5pps9j4+C9x6AO8u+F3SLk4s2fPw1ZTS3DSJDKpGHU+lZ7udva1D3DpVdey87mnGexpId5+mPlTylhz5kqWLl3KnLnzCIeCVFZVMn/eHN58fRMel0RvaxtloXJmrDqfXQda8CkZqqurhrs/4tBjcCzgw9kYYzyIMCZwrVd56BlBDodjKK9K4fChgyTTSfoiEVp6kiANeZ0qyIKdgwcOoMsKgsvLa+/uYsOD90G+l4BDYdrkco4e2MuhnfvxeT1ISh5FyFAY7EHAJN7WQU6RmNe4nONbt1MZdjK1rooptbWEQyF0XWcgEiEejyMIAqvXrMHnCxDpaqO7rR2HM0BwUjmRaJSde/dz4EgT82ZOLc7sH/IXrD5wYWj5e6uaHgsJjMJ0klKVWm4x2qPg9xeXjw8Gg1RXVxcTzlIpNM2Gosi43G5EQSCTyRCPJ9i7/306+qIgiJT7veQzeRRFL+ZhiSqS5KN7MEI81weyAIksst2NKEFOt7Pu23djC9Sw+Z47WF6Vwe/TsDtsBMuC2Ow29EKBWCw2/Js1TePwwYNsenETdo8bwWVgqjJzF6xkMJFk78F9yJE+zj77bE6ePDk88fp0TycZTY06XEocKmvitcPhwB8IYB9ax8lyropP5HKiaRqSJIIgUMjnyeXypNMpYrEYiUQC0yxGhkQMJFlG1/VisEHPs2X/dkQ8FJJJ5FySguyCqRfSsOoC1NwgQQcc272FrgM7IZ/lK//7U4iiQKS/f7i7Y4072+12bDYb77+/n7e2vkEhZeIOT2Lh4gX09XbTcvwEUyqrh5cLtCaD/UXBtSxXUYor11iRKmthLoejOK3T8qbVoUevWftWl0MURQQEDNMoPkOokKcYORKLC5noBbK5LIl4gkQiyY733iGVzZMoOMAQEFWw+cJMW30F0axIf1sLmb4Wrlszmd7enuEFOuWhx8xZK8KpQ4+pyWYz5LI5+vv7KRTyqKrGqeZmEokEiURi2HLHqu0dM7jwwePcRFFCEgXkoQciWpEra7/0mKpqw88Bsja73YHdbh+apiIhCsWJ3eJQIoDl4BiGQTabRRAEPB4PvT09PPT4c+CfSXjuSgoDUXzpkzTOC9HcfGp46QPLu7fAWjed5Tek02my2SyJRDFLw3polLUG5F8kXMuCrY6/BdvarK6StT9yGwnfinZZli3JMuJQDSGWPMXT2hjquiSTVlpqgWQyQW9vL729vWQyGdLp9PBvtWoZ69xW81IYWhHd+nwulxteB2Nkl2k0NSZwKQEMIJSsrCaUQLcKrxSIBag4WVtGlotVuyQWgwgfhq8Ope588MDH0io9l8+DWUx+t9pp6+GLpQ9gtCzPOr91s1m/zRq+tKphy1u22tqxAMtYwmUk4BEhOwusdawUuPWeBanUSkuPjbwhSrfS7y6tsnO5HOl0mkwm86E20/rsyO8QSqr+0ur/49DPHVO4p1Mp8JHHTge7FPrpXk+3P/K7LAiWBVvV7EhII89f+j3WZyyYYw2WjyPcUlkFd7pjH1XQH7WNfH+kTmd9H1Wtlv69MOL5QaVwx1ofa7j/lUZCGlno/933GAFlpAX+T9X/aLilOh0w/pvHRwIcD2AZT3An9B81poP1E/rzagLuONYE3HGsCbjjWBNwx7Em4I5jTcAdx5qAO441AXccawLuONYE3HGsCbjjWBNwx7Em4I5jTcAdx5qAO441AXccawLuONYE3HGsCbjjWBNwx7Em4I5jTcAdx/p/x8Tku6Hudq4AAAAASUVORK5CYII=" |
|
b64Map["lab"] := "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" |
|
b64Map["legion"] := "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" |
|
b64Map["map"] := "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" |
|
b64Map["ritual"] := "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" |
|
b64Map["rogueexile"] := "iVBORw0KGgoAAAANSUhEUgAAAHcAAAB2CAYAAADyZQwvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AACdjSURBVHhe7b15kF3Xfd/5Octd3trv9Ybe0NgaOxcQXEVxUSRSpkRrsSPLk4yd0diexBm7VJkaj52Mk7LLmYwrTk0yZddMnER2jR07Y0kj2bItOYxsWlwlLiJIkARBkCCIrRtA7/36LXc558wf5zUAsiJLMonuZru/VSg8dDXuffd+z285v+0IwLGJDQn59h9sYuNgk9wNjE1yNzA2yd3A2CR3A2OT3A2MTXI3MDbJ3cDYJHcDY5PcDYxNcjcwNsndwNgkdwNjk9wNjE1yNzA2yd3A2CR3A0O800oMLQUIgXNgncM5925cdhPvAt6x5Louhw535R+bxK4LvHNycbgur5uUri+8C+TSVcWbWG94x+QKIfyHVSVYXPVnE98J79jzkVJA15m69vCE+vW0Qqy/r9ce78Z3+G4L5t24x+rgXSHX29x3dJnvAtHVEAKQV31e8c79nytO3V/nu7x94QgEwl8TrtzjLc/517nP6uFdIdfad3SJvxpCIqXEOYmzEhAopRBi5cU7cBbrDDgL2O9Tir2kCuGvjVBIIbvEXl5CXWINzr39+t/rfb43vGNCrsI7vpYU4hqqZIEQCikVURhQKRdROmTyUgslFYFWlEtFiuWI+blpGkuLCGFxzn6Pj7UirRKExFlFGIakqQChiSPVJdJibY61Oc7lOGf8InpHmuLa4x2TK4S4RirZv3SHolqK2D7WT7HUw+jYOPMLSzz8yMuUKhWiUNHTU2B+fobFxUUgw1n/8v/qR1tRuxJQhEHI3u11+uoVojDg7GSLY29mVEqCQCtyk5F0lrE2w7kM6wwO29UWV5uH9QMF/PLbf7j28DZWCIVzAeOjffTXyzSX2/T39XDH+25m+7YtPP3McdIc5maXMDZDKdEl1nVt538NK/ba2+9SIWR8tM7+XUP018tESjBQL3HoulGSRPDmrKISh12VHSClBuntvpTq7RdfV1i35EqpEELjCNk2WqdUCLBZwvL8BaQu8sH77mVi1xCPP3GcYjEgCCRKSozNu3b4rddbIfPyZ6HorZXYNtZPX72CsNBpNjGZJU0cB3YPsGNrL488n1CJFUIolAoJdIAQGoFCdO31lZX0HVfUmmAdkntFaq1VIGP27tzCUG+ZpN2hUi4yNzVJEEUcPnwj56fOc+r0oudLgLVXVCVds+GlTKKUwlpQSjPUX2FooIcoCLAGlJCUChGlQoFSVCQxMSPDveTthKl5RxRpwkATBjEChXUCh0AKjZA+XCAvk7w+1PM7DmJcCzgnUDrk4A37uemWA9QqdQLhKIQSLQX1WszpF5/EJi327d4BNqB/YABEgFYhSoaAQkiNEOqKw4QiCEK2j/aypa9KmqQsLzWRxlCMQ6IwohCXKJVqDG0ZwRhFkkniKKJcLhLFRYIwQusizSym1SnSbsdIVUSpAkJGXqqF9+bXWpLXGbld8RMS0SWiXCpRqZb9z6RXq1EckxtHs7lMoVRCxDGjY6PEcUwYFlBBRKFQJtARUoYIGWCNohAF7N0xSF+9wtJSh1AKquWIcjGkWi1TiENCXaBaq7NzWw8Xpg0vnNZEoUIKjZR+kUihuXVfnftu6+W+O+oUogAhQoQIkCpEymBdvNp1ppa9hyyFxqG4cH6BvnqBg/t3MnPxHEoI4igkzy15ljK2fQ/zLcvTTx5j8twU1mUYY/0CCEMQgjy3mFwysqXMwT3DaK1YWmzQUwopxiFxIClECi0FykEYVTmwf5jlluF///8W2FLWaJnjgHYnJ4olP/lD23j/4SFKRRgfKjA+VOClN5qkuUXi99pXm4a1wtovr7dgxd5KlApwSMZHBxkeqLI8P0ccR4SBxtmMPE8Iw4BauQAIytUCYVBAqxjQtDqGNAOTB4wOVrn90A7KccTyYptyIaRUiIgCffma1gYMjW3jIw/cSO7gt798jrFygJbQSXNm5w0fu7ufn/07+6lVFMdeucC588u8dnqZ/r4ePnXfdiqF+C2qea1f79re/S1YCTFKhJAIoYgKMQf2biXPU1yaYbIcgFBrinFErVqmvdwCusUCgJQBWkcoFZKlMTtHq/zwDxyiXiowNzVLT0lTLoRoKYlDTaglwkG9t5fbbt7Nq2cW+Gf/4SSXlgxKWM7OGfbtKvOr/8vt3HLDMGfeeJ1vf/sVFpdmUK4JeYvXT82zfbSPXWNlMqeRUnefYW3t7joidwWe3Cx37BgrU68WOXHiNKVqGYQiLhQQSuFURLlcYm5uFoQmCiMqxQrWOaRUZDYAAj71sVuo9RSZPD9DuRRRKcZUSwVKUUAkNdYEDI2McOdtO3nz/DS/9rmjhM6wsNTEtOb4lZ/eyU9++hDYDs899yKXLk2jlEIriRCgpGBpMWFuKaWnp0rc9aaFUN5PWEOC1xm5XnqDIMTmsH1rP+12m0vnpnBKYkzK0uIizVabat8olWo/aZqDMxhraacJQimWlh3lUPFL/9M97Nk5xiuvniEMIC4GSCkoxhFxEEBqGN86xG237OfEqRl+8de+jcphuZnx/hti/uFn9rJ/dy8vHT3K449/izRxhFGMQCCF8rEtYanXiggVk+UGJTVKh95Tv7yvXhusI3K9pyyEwliAhAMH9vifuxSHwHZjEzbvsHNiB60k4czkLDrQ/mULSSuVYOGffPbD3LhvB88+8wLOZCjpgxxRoOgkKZnRbN+3nVtvnuDJZ07ya//+JarVgChI+Nt/q86nf/B6KiXNn3ztWc6dmyIKJUIapIDc5mR5RifNAM0ttx4CGfDs0VmUFAh84sFvwf7GS65/EQJva5OOZWR0jNGxMRpL8+Bafu8rBUpKXNpiaGSIVrLEiZMXIZRY6zBWYlqG/+0XP8HBfRMcef4YjaUllPCvNwo1SkniQDOxd5T7PnSI514+z3/4wklAUKloPnn/Nj70/gnePPUGz37redLWNDhvf50zpLmlf2wvufCZqgc+/kNs3bGLhx89Tm4EWdohNzluZbEi3pZ/Xj2sA3K7K1sIhPR2qlws8sB9h+gpFzh38hRBEKGkRCuBMQYpLVpp0tSwsJhRK2mCQLE0f45//s9+kPvuvYknHvkGx4+9SJoa8jxH6W4azykq5TJ3376f549N8hu/cwzI+cyP7OaXP/t+Dh8c5ZnnXuD48VdJ0jZxISKISxgnyXKDdZZOZoGQBz/1aQa3jvNHX32Ul19bpFxUSOWzWF56NyXXc4tASU2WCYaHauzfNcb05DmW5xvEUaHrwEiMMQSBAgedTk7SaTBzKWFmOuef/s//DYdvnOChh/6ckyeOUyiWkAqiKEBKiXWOQhzzwP130GgKPveFN7nnjlH++c99kAc/eJBWY4bHHn2M1vICPZUCSlmWlxeo1oYJoippmpC0mrSbC/z4//D30cU6/+PP/zr/75deoKcegVQo7bdBPjbeJXiNyF0HQYyuSpYaITXWSPZObOHA/l28+PwxbN5GKwUCClEAWAKZsXPfIZrNFvVayMcevJUPf3APe3b289QTT/DS04/Q0z9KrX+Y5tK8v4vUCAd33HELuXH86998lEPXD/AzP3YnUgme/NZLvHz0CCoIEVKilfS2OcvJkybt5jxLi012HTjEB+7/AS5cnOG3fvvLPHfkItV6BA6KhZgwCEjShDzPusl9n+D33sLqBjXWAbleIqXQCBViTcQnPnKIckHx6otHKFdKCCxaGJQwFCOHsk0Gh0e57X3v4/4P3cX4SC9D/QWSJOGxr/9nomKVxCpkucbQdbdBXGFheoF7P3AvfYN7+Hf/6VVuOljlv/vULbz62in+4usPY7IWQRQjpUQ4SydJiYKAIFA4ZymUamy/4f08+MmPcey1s/zsP/rXTF2UVCsa5xwWR7FYQErJ4vIS/fUqYMiyFCF8wn+1scbkenskpUJIRW4D9k708+EP3Mrxl4+TdFqEWqMVlOKQLM/RyqHpcOf9P8LQ1m08+tAf85d//Ju88dqbHLzpMG+ePEWr1UaoECkE9/7If8/A1gkGdYf9e3cwPZ9QKpV48P7reenlYzz+xEuEgSOOAox1ZLkhN4Yg0DgHYRgyOLqXA4fez403X8cjjzzJ//1/fYV2WqCnR2OMRUnF0oJjaamJ0hnNJUO1GmFMRpolvhJrDcKRa06uELIbVSpQjGJuuWGcSOSceeN1oijAWotyKQpHrQJFvcj+A7dz38d/nMlXvsmlo79JrdTD6Pgudu/eR9ZZYn56itxo8naTwd4Ko/UQIQv8+WOvcdf7D3PPXQf55pOP8PILR3DCIJQiSXOEEFhrsdaipcSahE7Hsf/QbYwM1fjdzz/Eb37uCTInqVZChJA02zk9PSX+7g8f4gO3b2Hv1hL7JiocffUi7SRBCq6U5axytcbakyslUgUoVaBejTmwe5TZSxcwWUa53OOrKmxGXy0kDgV9PYp9N7yPLWO7WL74IuWeOllq2L73FnIrca5NT63OaycvYPKccq2XIFR8/stPkSSSO2/dy8lXj3L02cfIjENK0Q2EQCEOabcStFakaUK1p8I9H7qfC3NNfv/zf8HXH5miZ7BAIVAIAdPTbaJY8yv/+BMcun43SwuLzM/Ps2vHINZmvD7ZJtIOY7K/aZLrtz9SSBCKLJNsGSgzNtJP2mljbdZNsUG1qCgXFL0VxUhvzvium9iy62a0tMSBo6dvkJ03/xCnjn2LI0//Bdu3jrNr5zjbxvroqxX5wz/+BrJ9iX/0D36Q1uIkT//ll5DC0uo0qfUOgtIEMqex3EZKcHmH/uEd3P+RjzIz1+R3vvgYR1+epd6vwRnaqWFxboG//+OH+MyPvo/B3hKPP/YEz3zzKVrLCyw1OowOlZm6uIRxmjRt4zCrXky35uT6xLbGWcXwlio7xwdJ2m067SWU8s7K9m1j7N6zn7w5yVBvyNju2xncdy/VLXsp9AzTu/Uwy/NTvPbU7zEzv8zk1HmEkezas5uZuXk6zRYPPnA3hUhy/JXnyTsNhFIYmzM3P0+z1URJH7mSGHoHhnjwBx/g0vQin/3FLzE3l9I3UERrzezcMnkr55/8/Cf56H238eYbZ/j6f3mYS+dPUilFhIGg3c6plGICbXjp1QWk8nVdq62a13if6/d/UghEFNFTjXE4Wq22r1cKfPnq0uICp0+9QrUUMrz3fkq9W2jPn0UIQVTZgnOWztIk/QPj1IoVIlKSxVMUymXu/cBd/IOf+iFuu+MwqnOBXQOK3pLBpvM4kyEx4HKazQZZa4nd+w/xw5/6FC+9OsU//IX/RLGsqda9M3dpapmtQzX+5S//MLfcuIsnn3yabz/xJDbrUIgLOAFS+VRfqKBeiQGJkiFK6u7OYPWCGmsrudD1lDVxXGJ8uEpfvczSwiLSVyiRZjm1SsDObYPcdOeH6Bvayvz5lyBZwNqcpcmjzJ58EqkDBnffQRgVaS0u0ju0lX0330ksmpjFNyjVdjA4fpDm2W/RaU5jgU5mcU5gnKC1OM+BG27j4x//CE9++xX+6a/+KYVSgSjw6ffGwjK7d9X5iZ/4CNtH+/nql77IiZeOUCqFCEy38hIQkjgO6K/FnD7f5PWpnChYqXs2IFy33P3aS++akiu6Vf5SKDq5YktfzMhAjdbyMlL4uqabb76Omw8fZHiwj3qtwpmXv0Vz9nW0bZIvX6A19zrzUyc48+JDzM02qA1uY3jrNvYdvpu0cYHWxReJK0OU+ifoGd6LSZp05l4iM4JmJyfNHEmnyY13fJiPfuxB/uzhp/nlf/UnyEJMKdZYB42FjM/86C389N+7nygQ/OEXPk9raYYwiBDCd13kxpLloKRkx/ggF2Y7fPXJWaLAk2lsdrkj4rvXVL87WFNy/V8SIRXWaEYHS4wM1mgsLVAtFbn+hj3Uq2VmLl1gZuoMC5fOM33uJaxJEXaZtLXE8vwMC3OzzC3nTJ57lclTx9g6cSOhzJk/8wKV3mGG9n+E+rabEVISlXtpnD9CuzlLo2WZn51hfM9tfOQTn+Ab3zzKL/3qn1CqlrBO0FqyRAXNz/zEXXzywbs5/fpx/ssf/QFaSnQQEUW6S5ylk1qsEUzsHGamYfjdh2eIlEBLyI2PVnmb+/10RLwzrDG53bJTobFGsHWkythwPwtzC8RxiLWWV155nemp86Rpm/m5GXJryK0lSRPm5+dZXFhgdjFhci5nOZHcfPfHAcvp576AFiml3lHi+jhRqc/3HOUJneYSlyaPMzM7z+DOO7ntng/y1JFX+ce/9Dl6ewdYWpAUi5LPfHqCH/vbt1ErxTz/3Is8881HUUGMkBqEo9ZTpZPktDqOem+Fw4d2MN+0fOXh03RSQ6yFDz9ifKeC9a0obpWiVWtILp5cJFIqrNVsG6uzdbifxflF2u0mjUYTYyxOaLLckmWWxAhyJ2l3HEkuSIxkci5ncbnDjj0HqPUP8PxTj5MsL1AuOOJSlayzAM4Rxj1cOPE4hdoQcc84nQz23XALL7xyjp//pd8CashKmR99cA8//ffuZN+eYc6enuS5xx5hcWYSGUa4bvuMwLHUaGMMjI7WueX6ES7Odvg3XzhHnufEKseYDKRP+TmXd1tRVlpdrj3WntyuWnZWM7qlzLaRfhYWFsBZgkB3f4du2YrCOUmaC9oZtBJYbjuW29BOcvoGRxkZHuX0qbPMz82hwxiXzCNVRN/odcycfZmTT/0WM+deZ6EdsG1iDxfmmvyvv/AVWlbw0Q9s4xd/5iMcmBhgYW6Oo0eOc/bkOZCG3IJx1kecAKUDLAG33byViW39PH98hv/z988SRw6tfEegEBLnDCZPvcTa1U0irPFW6KpODBzGGEIt0NpXTQhAS2ClYUtoklySGk1mAy4uGCbnDBZF6oo8/tiTLCwl3HT73ViXcmmuw9KyozqwD5O0OHfsISanJnnxxWc5fvRZ2p2EI88fY8YoPvuTd/KzP/UgrcY8f/zlr/DkI48yO32R1LTJrKNSLRNFmjTLsdYRRwXuuX0b+3b28W+/cIJ/+6VpohIo8sstLc5ZrMlxK1N+ug977Wn1WHNyvWr29jcKVdfpWFnbAqUDtFIY63xg30KzY2g0DMZokBELTUhShwp7+OqffpUsz7j1rh/g0twyA7tuZbHR5i+/9nuo0ghje+8jcTWuP3yYU2+c5fTx1/j1X/lb3HP7Hl54/jiPPPIsSeoltdXukGUZAmh3Eqw1KC1ABYyM9GCc4ne+cpznjrXp7wupV8o+pyvk5dFNiO4rdr61ZeV5/edrizVUy1dU8kpf0PBAle1jdRYXGxjTVWvd1+EjOwIlFUoociOg25WQ5ZZKtYKQAY1GyszsArt3b6Vc7Sculvjzr3+d1197hYvTS2gV0N83wPDIKCjNjTfuo7GwxCOPfItjLx8n0IIoismN9Q4QEGhNO0lJ8w6Vcsx9d05QjDX/x++9xjMvNCj3KITzu9fFxZy0Y8lSSxD4+h7fvG3e0vbp1fO1xRqT68OPUgZYWWJ0oMiO0RqNZosst4SBLyG11uKsw66sfgFBEOBwGOfIc0O73QZnEULSaDQ4f+4MzU7GsWMnmJ1fQOmYmZkZqpUaIyODPPrEsxz59lHCKKax1CBL24RhRDtJcc7vXZPES63FkOWGWrXCh+/ex3LL8Bt/8DJvXswoVwoYNMuppbWQcu/NMfccKjPcJzl+NiHUIITzMWtnuh7z34CtkE/3aaSMMC5mrL/ADfsGWFhqkWYQKIG1BmOcJ9g5EL5LLwxDDIIwKrHcaCAFWOtnYkklQQacn1qik+UgQ6RQzDUM28ZHKRRjzk/N8f577qRSjimXCxzcPU69XuTs+RmSNEN1x0FY5zAuZWy4h3vft5fz0w1+7t8cZ74DxSigGIfsGIoZ6w/49Ieq7B0vEmjH9RNlBiuO5463CAKLsTlC0PWYV6T22hK8xuQqpAoIgiJZotgxWuTArn4aTUOlPkIQRCwtzPrf8y6zXxB40kvFMgjoJB10tz3TmzhBmhlfFCcsee5ztFJJsnaLSiliz56dzM03eO7Iy7zy6hucnZxhZEudHdv6efPMNMY4ssxQLAXs2jHAnTdNcHpqkX/x2y+R5YYwsHSWobcquOumGh+6tZ92knH8jUUmL3UoR4LtIyVOX2xycTEjUPiOfGu6yftr7zGvIbl+f6tUiBQRWa45uKvMnvE+Tp+7yPzMRWySEoclAh36YAcS4XwOVmlJmiUkSYJSkkIUopUiMxatfRWFFxAJKK/CjaWnFnHjwTHOnD7Dc88+R5a0sXlGa2mR6UvzTGzrIc0zLsw0Gd5S58aDo2wZ6OGrj57iN37/FEEYkxmFcYqf/mSND95SoRI7Xn9zlovTDcAQKsOl2UWGh/tY7hhOnm4SxRIwV+V2r73NXSNvecXe+vqpFQICLVFaEAYhxahIEEToIKJYqBLo6Mr/Vt7TzI3FGEOeZ7Q7KWmW+wEsXRUeBH5oSbOdIoWjGCn2TwwzO7PA1OQkw4NF+ns1PRXBwECNINBMXZilpxJy6MAwhw+O8srrF/l3f/A8X3zoLCBoNXI+emuJz/3cBPu297CwZHjxtUXOXWqS5n4f2+7kDPbGlGLlc9Ih2K4qXs3NkFi1O70FAiE0UgYoFaN1kVYr4tMPDHLLdcM89/w0TsYEQYwOCgRKIUyHpD1DYlMQoruHNBQqdar1AZqzkzSbS1jrkFISBIo0zSgWfErR2YzxwYjD14+zNHcJKTKKhSKN5SZzCy2Wlh1zi4YDB7bT11/l2Zcv8WdPTvPCiSUgBwL+2we2sG24RK3kmF/s8OqpBmlmCUKNcVAtKLI0p14vcWh/Dy+83uG3HpoiIqHTaeFsgnX5qjlVayC5KxLrba5vd9SAYktvES0FaWZxCHRQICr0IIMCMiiggpgoiHDGUiqVqPXW6e8fplLuweEQQlCtlLvFbQ6tFVlmCLSiFCtqBShX6wxsGWTnnoMcuPEO9u+dYHy4QjFWTOwao6+vSqOZ8sqpGV44scTe7UU++2MH+X/+xV08eNc4cRTy4olF3jy3jLGWONZY61DdYWtjQzHX7S5z7GSD3/3aGQrSIrvdCs45nF29xMEaSO6V7Y9SBZSKETImNTG/8OMTVMsRjz11iWKpRKVUZ3BsgiCImL7wKp3mLHnWIMvaBGHgJdha0qSFlIpyqYTDkaQZ1vhIEmYZKR3VsmJrn+Pee+5jZOd1RKU+yv3bWTh3lNnJ47RaS+RO4JIGb5yZ49vHLjIyUqcYBURxSJImnDg5zcxihs1ytBS+2xBJp50ShZK7buyjVNQ8dnSB3/naLMWyxJoUYzo4m2Jt8rY65muLVXeovNQqlAz8SAMRgogY31Lm7psGuDjXZmYuIwpDtAwpVeqoIKTTWiRNGuRZuxuIN+RpSpp6TxkkuTGkuSHNMowxpFlOT1kigWIEW2qCgUrA0K7bGL7hY8T1capD+yn3j2PzRRpzF0hygckSto3WWG5mvHl+kbNTF3n5tfPkRhBqMLmPPDkEjWZGb4/muokKAsl//M+zfPWpBpWKwtkcY1NwBmez7oCya+8lr2CVyV1RyQopQ5SKUCqi1ZR84t46Nx8Y4LmXZ1hueckwNqe1vMTi3DnyZBmTZ9g8RUiBI8fhsMbHbP2YIutVkXXIbhK9GIPAoRWUY0m9FlMMHXFpAIGiNX2S6ZOP055/k2bS5onHnsJYqFRKTJ67yIH9O5ibvoAWASDIrcXkkOVQKkp2jUVct6uHc5dyfv3LFzk51aEQOW9bXY41GdZ5YlcrSb+CVSa3K7VKo2SEVBFKhiSp4tP391GKI7766AUCP8fLByacJU1b4MDkKVJYwlCQmRRjLFpJtPYVE8Y6Qq2o9VRotdtIKclzXzscBIJSrCmHbcrVMunSedLFc8yeeZyFqaNcnDxPpT7M9MUp5ucWmNizl5HhIabOnCBLmhRjv71KE4MQiuHBmFsOlNk+XODhby/w7/+0QcfkFMMV+5qBy7E2vUpqV5fcVbO5Kw4UTqF1jFQxQoYYUWCiT/JTnxzg2LmIo68uUikGaCWJwqA728kQKOHzoy5HKdeVBodAIKUgLkTkWYbAobSmkyTdhERCqCWFwDDWJxjtV8SRYGx4kEoxYqHRZn6xweJyQm3LBH31XpwMqPVUUEFEs5Vy6pUjzM2c5c0LOaPjI9RKEa12yomzizz8zDwvnnIUKwrpcrIs9QFLm3bJXekZWp297dVYNcld6XqDblQqLBDFJZotywO3hZRjx6NHWugwIO4WfVvrh2dK4TCmm0rrdtFL0Z3zbC1BECIkRFGBUqFMliVeRQtQypJbh8QRamgnXkWTt5mebTA1vcRCI6OTQNJuMrZtgnpPEZM30TpgePtBKsUQmxu27RhioL/C0RMzfPHrF/jDx5aYSxzFokAIR5YlXTLzq6R19Ryot2PVyF2xtV4tB0ihSVzMAzcq9o9rXjzluLis2blzFzjL/FID8AF3ISxC+lQgSJQSSOnzgkpp4iggDALyPCcMA5xzPvQoJXluUFJRijW5FSy3LZ1M0MocF+Yzmh1HkjhaaU5c6mPH+DhJ8xKFcj+9226lb+IewriGSy5x9uxZ/uzR1/nKN6aYXoRKSREoS54brMkQ0mFt5u0tKxNeVxyo1Sd31fa5znF5TrK1lsw4IjIGao7Xzhmee9MTcvb8FNNzCzgEeZ7Tbqe0k4w09QkEhE+tJWmCkL5joVAs4ZwlzzrMLS7STlOElBRLFcIw8iN944DMOHLrWGg6Lsw55hrQaEOSQ2pgcblJO3PUt2ynVBujtu02ZGGA1AVMnz/BiVdeZG6+RbUiKcSG3KRkJr1MZJ62vbm4XC+1oopXn1hWT3JFV0Wqy9IXBYqbdknSHF46KynEISazCAdaaXA+E4SfwYnF+vVvfSAg0AHVnipZnmCsr1cy1mGNj1wZa4jCyKcCgeXllCRzhJEmyx3tBNJc0k4trQyEE5A3GR4ZoKfaA8qHPttzZ5h86WuceuM4J842mW5Y5huGVsfSyQxpmqG08OTmKc7mgA9YrBWpK1g1h2plGySlxhFQK8fUqyHNJEKriEApCjqkUCgiRe474W2G1vgxCdqhhCRQolt0Y9HKIaWfTRUoSW6dL83RsvtyQSmJNZbMWCqVmDRNsCYnzf3/09IRhYL+SsDh60cZGBzmuRdeJxQJO0Z7UXGF82ff4PS5BU7PdDg3Y7m4YFhctiSpJc1zjFvxkD2pQvjU46q92u+AVSX3yj5XEwQRYRijdUikAsIwplwoUiqUsCYhKMRIm+BM6qVeOpQCLS1KQhT44jMluwF54e8h8DnflYS7FJBmllDLbiYpo1jQJGmOViEmz0mTNg/cvR0ZhDzy1HGE7VCOoBQ5rNPMNnIabcPFRcv0omGx5SU3Tb1z55MCV/cBrdIr/S54F8j9fi5xhWClQk9sGFOr1rBGoISiGBcRwoAQhNoSKOfnMkpBEEDYreCPAn9fY3LiUKO1JE0zcj/nCACtvH0WXc86NxbrHPVqTJo7Ooml1epw054qI0MVvvjwaRaXWvRXBIXY4qwlyQytxNBMHM2OZallaCeWNDPdZP76I3UF3w8z3wHf7yU8wVJ2t0Q6ohAV0TIkigtIJOVSjFKKPOmgpKMQBxTjgEBbsDlIEBhCLQm1l1alJUqHtJqNy0H8ldPKotDbej+NxpNejAqkec7h3UWMlDz2/CWOnlyiGAoilQO5L4A3xi+E1NBOLVluvW23PuG+Hmzrd8L3y8y7BJ/PBYVWAYGOicIixWIJJTWlKEAHmjw1CCkpFTXVckzSaXtbqwWym22JQ4G1OYEShFFMlnoHasXmBloihSDNDaKbAxZS4HLDLQdL1MpFvviNGR49skRP1RJKgyLFWINxGZnxZBpru+U+3bNK1jGpK1gjcrnK/ioCFREGMXFcJNAxoRaEQeS3OaUCukukFqCVRQiHlg6tQYjcDxFzfrqb1so/kHMo5WNUALn1J4kkmUUIwa37Y6JQ8vmHZzhyIqdc8qFC4XJfPE7uRyg4X6JjvSroVjK+N7DG5Ior5TYypBCVCHVMEEZEUUwxCiHPydotyvUKQeAoFbpOk3PEofDhyG6gQ6uuJyWuHknvpSxPc/Lc0FuVbBuWLLcFf/Z0m+NnUkol203Npd3Ag9+jWmfBufcUoVdjDcldgUR2t0iBjomCAnGhSLFQQRjD7XffzfaJPTz05c+DbRPH/sxeJYWfbCMtUjiE8Gq3WvZ1zMb4x7LWl7+63NBfF2wflrx2ps03Xsg4N58TqQzb3Zta6z+7VezEu5ZYtQjVd8aK6svJTUZmM5I0JUkzlpuOJE8IAlBBgTQXpJkiCIvdklNJJ4PcSoQMUToizRy5cUSRL4pzTjBSk2wb1pQKgm8cafEfv97h7HxCIDoYk2BtQp53MCbFvqWf572NdSC5HgLffRAEMaGO0bpApdxDFJXIW23KlQCtvLQWYw0yR2Fx1hAFgnKsya1vtoojQaXoO+JrYUaSGV6fynjhjYQLCxmRNlibXpbYqwMQ6+R1vCtYN+Su2GBffhMQ6AKFuECxUEIJX0LT31sjaS4ThI6h4T5mL10Aa6hVYoTo0O5kbBuUFAuCS9MJS21Hs53z0pmUyekMHeRI0Q3s27eTurrpuNXAOiLXw1dp6O4BTSFhEBIFBSqVCgO9dfJOG5O30Toj0NqfC+QciA637y3SU3L80WMNnn0jJ1R+rJBSOcplV+VWrwT1N5q0Xo11R+4VCdYoFRAGsa9jLsSEKqAQhJQqBaTNUMpXauwdlWwfgrPT8PSxNi++0aZQ9FumPE99Z7tJfC3TVflV//fGxTokl8sEr+R+wyAkDkLiqEC5WCIKFBJLHEl2jwh2DQteO5/w+cc75MZQDAy5yS5X+MNKA9YKsazPx36XsU7JxROMH7CtpCYMAqIwIgoLBFJRr0j2jmmiUHP8TMYzxztEBYPEl7ZcfRzqWz3gdfq41wDrmFy6X6+baOgSXIgLxFHASJ9EC823T/usTySSrufbta1X7Vc3qsP03bDOyV2Bn1eldUgQhGilKYQBc02JkA6F85Jq06ucpqu3Nu+BR7wGeI+Qy+UwpVTaH28u9OXzawW+dslPjPH1wRvZC/5e8R4i94qK9gdE+MMufOUDIPxwEds9HPk981jXEO8hcvFfV/jZVb5MtnumTNemXrGv76FHuoZ4j5FL9yv7UtkrX98/wtoR6xcd+GzVesF7kFwuE/zWr78Wj3HlYCjwzWnrCe9RclewQvJqPkL3npf7i32hni9pXV94j5O7BrjcOeGzpdYkb/+NdYNNcr8nCMAftuGnALhuP5BXw57o9VGrfDU2yf0r4Un1Kth76NYml9+YVP7kT+dcdwt2pTBvPWCT3P8qVrzf7meArrMkBD7erfz5gM5ajMlB0J13sVLu+teH6I79fafYJHcDYx3UUG3iWmGT3A2MTXI3MDbJ3cDYJHcDY5PcDYxNcjcwNsndwNgkdwNjk9wNjE1yNzA2yd3A2CR3A2OT3A2MTXI3MP5/+jwB1+aCMF4AAAAASUVORK5CYII=" |
|
b64Map["shaperguardian"] := "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" |
|
b64Map["shrine"] := "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" |
|
b64Map["smuggler"] := "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" |
|
b64Map["strongbox"] := "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" |
|
b64Map["torment"] := "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" |
|
b64Map["ultimatum"] := "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" |
|
b64Map["unique"] := "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" |
|
|
|
for keyword, b64Text in b64Map { |
|
WriteBase64ToTempFile(b64Text, keyword) |
|
} |
|
|
|
} |
|
|
|
|
|
WriteBase64ToTempFile(base64, fileName) { |
|
tempDir := A_Temp "\Kirac" |
|
tempPath := tempDir "\" fileName ".png" |
|
if !DirExist(tempDir) |
|
DirCreate(tempDir) |
|
|
|
; Decode Base64 to binary image |
|
DllCall("Crypt32\CryptStringToBinaryW" |
|
, "Str", base64 |
|
, "UInt", StrLen(base64) |
|
, "UInt", 1 ; Base64 |
|
, "Ptr", 0 |
|
, "UIntP", &binSize := 0 |
|
, "Ptr", 0 |
|
, "Ptr", 0) |
|
bin := Buffer(binSize) |
|
DllCall("Crypt32\CryptStringToBinaryW" |
|
, "Str", base64 |
|
, "UInt", StrLen(base64) |
|
, "UInt", 1 |
|
, "Ptr", bin |
|
, "UIntP", &binSize |
|
, "Ptr", 0 |
|
, "Ptr", 0) |
|
|
|
; Write binary image to temp file |
|
FileOpen(tempPath, "rw").RawWrite(bin) |
|
return tempPath |
|
} |
|
|
|
|
|
|
|
|
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
|
|
;; OCR Library Copied from https://github.com/Descolada/OCR |
|
;; If you're not comfortable with the giant class below, you can download the original from the link |
|
;; and simply add a `#Include OCR.ahk` line to the top of this file. |
|
|
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
;; ################################################################################################## |
|
|
|
|
|
class OCR { |
|
static IID_IRandomAccessStream := "{905A0FE1-BC53-11DF-8C49-001E4FC686DA}" |
|
, IID_IPicture := "{7BF80980-BF32-101A-8BBB-00AA00300CAB}" |
|
, IID_IAsyncInfo := "{00000036-0000-0000-C000-000000000046}" |
|
, IID_IAsyncOperation_OcrResult := "{c7d7118e-ae36-59c0-ac76-7badee711c8b}" |
|
, IID_IAsyncOperation_SoftwareBitmap := "{c4a10980-714b-5501-8da2-dbdacce70f73}" |
|
, IID_IAsyncOperation_BitmapDecoder := "{aa94d8e9-caef-53f6-823d-91b6e8340510}" |
|
, IID_IAsyncOperationCompletedHandler_OcrResult := "{989c1371-444a-5e7e-b197-9eaaf9d2829a}" |
|
, IID_IAsyncOperationCompletedHandler_SoftwareBitmap := "{b699b653-33ed-5e2d-a75f-02bf90e32619}" |
|
, IID_IAsyncOperationCompletedHandler_BitmapDecoder := "{bb6514f2-3cfb-566f-82bc-60aabd302d53}" |
|
, IID_IPdfDocumentStatics := "{433A0B5F-C007-4788-90F2-08143D922599}" |
|
, Vtbl_GetDecoder := {bmp:6, jpg:7, jpeg:7, png:8, tiff:9, gif:10, jpegxr:11, ico:12} |
|
, PerformanceMode := 0 |
|
, DisplayImage := 0 |
|
|
|
class IBase { |
|
__OCR := OCR |
|
__New(ptr?) { |
|
if IsSet(ptr) { |
|
if !ptr |
|
throw ValueError('Invalid IUnknown interface pointer', -2, this.__Class) |
|
else if IsObject(ptr) { |
|
if ptr.HasProp("Relative") |
|
this.DefineProp("Relative", {value: ptr.Relative}) |
|
ptr := 0 |
|
} |
|
} |
|
this.DefineProp("ptr", {Value:ptr ?? 0}) |
|
} |
|
__Delete() => this.ptr ? ObjRelease(this.ptr) : 0 |
|
} |
|
|
|
static __New() { |
|
this.LanguageFactory := this.CreateClass("Windows.Globalization.Language", ILanguageFactory := "{9B0252AC-0C27-44F8-B792-9793FB66C63E}") |
|
this.SoftwareBitmapFactory := this.CreateClass("Windows.Graphics.Imaging.SoftwareBitmap", "{c99feb69-2d62-4d47-a6b3-4fdb6a07fdf8}") |
|
this.BitmapTransform := this.CreateClass("Windows.Graphics.Imaging.BitmapTransform") |
|
this.BitmapDecoderStatics := this.CreateClass("Windows.Graphics.Imaging.BitmapDecoder", IBitmapDecoderStatics := "{438CCB26-BCEF-4E95-BAD6-23A822E58D01}") |
|
this.BitmapEncoderStatics := this.CreateClass("Windows.Graphics.Imaging.BitmapEncoder", IBitmapDecoderStatics := "{a74356a7-a4e4-4eb9-8e40-564de7e1ccb2}") |
|
this.SoftwareBitmapStatics := this.CreateClass("Windows.Graphics.Imaging.SoftwareBitmap", ISoftwareBitmapStatics := "{df0385db-672f-4a9d-806e-c2442f343e86}") |
|
this.OcrEngineStatics := this.CreateClass("Windows.Media.Ocr.OcrEngine", IOcrEngineStatics := "{5BFFA85A-3384-3540-9940-699120D428A8}") |
|
ComCall(6, this.OcrEngineStatics, "uint*", &MaxImageDimension:=0) ; MaxImageDimension |
|
this.MaxImageDimension := MaxImageDimension |
|
DllCall("Dwmapi\DwmIsCompositionEnabled", "Int*", &compositionEnabled:=0) |
|
this.CAPTUREBLT := compositionEnabled ? 0 : 0x40000000 |
|
/* // Based on code by AHK forums user Xtra |
|
unsigned int Convert_GrayScale(unsigned int bitmap[], unsigned int w, unsigned int h, unsigned int Stride) |
|
{ |
|
unsigned int a, r, g, b, gray, ARGB; |
|
unsigned int x, y, offset = Stride/4; |
|
for (y = 0; y < h * offset; y += offset) { |
|
for (x = 0; x < w; ++x) { |
|
ARGB = bitmap[x+y]; |
|
a = ARGB & 0xFF000000; |
|
r = (ARGB & 0x00FF0000) >> 16; |
|
g = (ARGB & 0x0000FF00) >> 8; |
|
b = (ARGB & 0x000000FF); |
|
gray = ((300 * r) + (590 * g) + (110 * b)) >> 10; |
|
bitmap[x+y] = (gray << 16) | (gray << 8) | gray | a; |
|
} |
|
} |
|
return 0; |
|
} |
|
*/ |
|
this.GrayScaleMCode := this.MCode((A_PtrSize = 4) |
|
? "2,x86:VVdWU4PsCIt8JCiLdCQki0QkIMHvAg+v94k0JIX2dH+FwHR7jTS9AAAAAIl0JASLdCQcjRyGMfaNtCYAAAAAkItEJByNDLCNtCYAAAAAZpCLEYPBBInQD7buwegQae1OAgAAD7bAacAsAQAAAegPtuqB4gAAAP9r7W4B6MHoConFCcLB4AjB5RAJ6gnQiUH8Odl1vAH+A1wkBDs0JHKhg8QIMcBbXl9dww==" |
|
: "2,x64:V1ZTQcHpAkSJxkiJy0GJ00EPr/GF9nRnRTHAhdJ0YJBEicEPH0QAAInIg8EBTI0Ug0GLEonQD7b+wegQaf9OAgAAD7bAacAsAQAAAfgPtvqB4gAAAP9r/24B+MHoConHCcLB4AjB5xAJ+gnCQYkSRDnZdbRFAchFActBOfByoTHAW15fww==") |
|
/* |
|
unsigned int Invert_Colors(unsigned int bitmap[], unsigned int w, unsigned int h, unsigned int Stride) |
|
{ |
|
unsigned int a, r, g, b, gray, ARGB; |
|
unsigned int x, y, offset = Stride/4; |
|
for (y = 0; y < h * offset; y += offset) { |
|
for (x = 0; x < w; ++x) { |
|
ARGB = bitmap[x+y]; |
|
a = ARGB & 0xFF000000; |
|
r = (ARGB & 0x00FF0000) >> 16; |
|
g = (ARGB & 0x0000FF00) >> 8; |
|
b = (ARGB & 0x000000FF); |
|
bitmap[x+y] = ((255-r) << 16) | ((255-g) << 8) | (255-b) | a; |
|
} |
|
} |
|
return 0; |
|
} |
|
*/ |
|
this.InvertColorsMCode := this.MCode((A_PtrSize = 4) |
|
? "2,x86:VVdWU4PsCItsJCiLfCQki0QkIMHtAg+v/Yk8JIX/dGeFwHRjjTytAAAAAIl8JASLfCQcjTSHMf+NtCYAAAAAkItEJByNDLiNtCYAAAAAZpCLEYPBBInQidOB4v8AAP/30PfTgPL/JQAA/wCB4wD/AAAJ2AnQiUH8OfF11AHvA3QkBDs8JHK5g8QIMcBbXl9dww==" |
|
: "2,x64:V1ZTQcHpAkSJx0iJzonTQQ+v+YX/dFNFMcCF0nRMZpBEicEPH0QAAInIg8EBTI0chkGLE4nQQYnSgeL/AAD/99BB99KA8v8lAAD/AEGB4gD/AABECdAJ0EGJAznLdclFAchEActBOfhytjHAW15fww==") |
|
/* |
|
unsigned int Convert_Monochrome(unsigned int bitmap[], unsigned int w, unsigned int h, unsigned int Stride, unsigned int threshold) |
|
{ |
|
unsigned int a, r, g, b, ARGB; |
|
unsigned int x, y, offset = Stride / 4; |
|
for (y = 0; y < h * offset; y += offset) { |
|
for (x = 0; x < w; ++x) { |
|
ARGB = bitmap[x + y]; |
|
a = ARGB & 0xFF000000; |
|
r = (ARGB & 0x00FF0000) >> 16; |
|
g = (ARGB & 0x0000FF00) >> 8; |
|
b = (ARGB & 0x000000FF); |
|
unsigned int luminance = (77 * r + 150 * g + 29 * b) >> 8; |
|
bitmap[x + y] = (luminance > threshold) ? 0xFFFFFFFF : 0xFF000000; |
|
} |
|
} |
|
return 0; |
|
} |
|
*/ |
|
this.MonochromeMCode := this.MCode((A_PtrSize = 4) |
|
? "2,x86:VVdWU4PsDIt0JCyLTCQoi0QkJIt8JDDB7gIPr86JNCSJTCQEhcl0aYXAdGXB5gIx7Yl0JAiLdCQgjTSGjXQmAItEJCCNDKiNtCYAAAAAZpCLEYnTD7bGD7bSwesQacCWAAAAD7bba9Ida9tNAdgB0MHoCDn4dinHAf////+DwQQ58XXMAywkA3QkCDlsJAR3r4PEDDHAW15fXcONdCYAkMcBAAAA/4PBBDnxdaMDLCQDdCQIOWwkBHeG69U=" |
|
: "2,x64:VVdWU4t0JEhBwekCRInHSInLQYnTQQ+v+YX/dFyF0nRYRTHADx9AAESJwQ8fRAAAichMjRSDQYsSidUPtsYPttLB7RBpwJYAAABAD7bta9Ida+1NAegB0MHoCDnwdiGDwQFBxwL/////QTnLdcJFAchFActEOcd3rzHAW15fXcODwQFBxwIAAAD/RDnZdaFFAchFActEOcd3juvd") |
|
} |
|
|
|
/** |
|
* Returns an OCR results object for an IRandomAccessStream. |
|
* Images of other types should be first converted to this format (eg from file, from bitmap). |
|
* @param RandomAccessStreamOrSoftwareBitmap Pointer or an object containing a ptr to a RandomAccessStream or SoftwareBitmap |
|
* @param {String} lang OCR language. Default is first from available languages. |
|
* @param {Integer|Object} transform Either a scale factor number, or an object {scale:Float, grayscale:Boolean, invertcolors:Boolean, monochrome:0-255, rotate: 0 | 90 | 180 | 270, flip: 0 | "x" | "y"} |
|
* @param {String} decoder Optional bitmap codec name to decode RandomAccessStream. Default is automatic detection. |
|
* Possible values are gif, ico, jpeg, jpegxr, png, tiff, bmp. |
|
* @returns {OCR.Result} |
|
*/ |
|
static Call(RandomAccessStreamOrSoftwareBitmap, Options:=0) { |
|
local SoftwareBitmap := 0, RandomAccessStream := 0, lang:="FirstFromAvailableLanguages", width, height, x := 0, y := 0, w := 0, h := 0, scale, grayscale, invertcolors, monochrome, OcrResult := this.Result(), Result, transform := 0, decoder := 0 |
|
this.__ExtractTransformParameters(Options, &transform) |
|
scale := transform.scale, grayscale := transform.grayscale, invertcolors := transform.invertcolors, monochrome := transform.monochrome, rotate := transform.rotate, flip := transform.flip |
|
this.__ExtractNamedParameters(Options, "x", &x, "y", &y, "w", &w, "h", &h, "language", &lang, "lang", &lang, "decoder", &decoder) |
|
this.LoadLanguage(lang) |
|
local customRegion := x || y || w || h |
|
|
|
try SoftwareBitmap := ComObjQuery(RandomAccessStreamOrSoftwareBitmap, "{689e0708-7eef-483f-963f-da938818e073}") ; ISoftwareBitmap |
|
if SoftwareBitmap { |
|
ComCall(8, SoftwareBitmap, "uint*", &width:=0) ; get_PixelWidth |
|
ComCall(9, SoftwareBitmap, "uint*", &height:=0) ; get_PixelHeight |
|
this.ImageWidth := width, this.ImageHeight := height |
|
if (Floor(width*scale) > this.MaxImageDimension) or (Floor(height*scale) > this.MaxImageDimension) |
|
throw ValueError("Image is too big - " width "x" height ".`nIt should be maximum - " this.MaxImageDimension " pixels (with scale applied)") |
|
if scale != 1 || customRegion || rotate || flip |
|
SoftwareBitmap := this.TransformSoftwareBitmap(SoftwareBitmap, &width, &height, scale, rotate, flip, x?, y?, w?, h?) |
|
goto SoftwareBitmapCommon |
|
} |
|
RandomAccessStream := RandomAccessStreamOrSoftwareBitmap |
|
|
|
if decoder { |
|
ComCall(this.Vtbl_GetDecoder.%decoder%, this.BitmapDecoderStatics, "ptr", DecoderGUID:=Buffer(16)) |
|
ComCall(15, this.BitmapDecoderStatics, "ptr", DecoderGUID, "ptr", RandomAccessStream, "ptr*", BitmapDecoder:=ComValue(13,0)) ; CreateAsync |
|
} else |
|
ComCall(14, this.BitmapDecoderStatics, "ptr", RandomAccessStream, "ptr*", BitmapDecoder:=ComValue(13,0)) ; CreateAsync |
|
this.WaitForAsync(&BitmapDecoder) |
|
|
|
BitmapFrame := ComObjQuery(BitmapDecoder, IBitmapFrame := "{72A49A1C-8081-438D-91BC-94ECFC8185C6}") |
|
ComCall(12, BitmapFrame, "uint*", &width:=0) ; get_PixelWidth |
|
ComCall(13, BitmapFrame, "uint*", &height:=0) ; get_PixelHeight |
|
if (width > this.MaxImageDimension) or (height > this.MaxImageDimension) |
|
throw ValueError("Image is too big - " width "x" height ".`nIt should be maximum - " this.MaxImageDimension " pixels") |
|
|
|
BitmapFrameWithSoftwareBitmap := ComObjQuery(BitmapDecoder, IBitmapFrameWithSoftwareBitmap := "{FE287C9A-420C-4963-87AD-691436E08383}") |
|
OcrResult.ImageWidth := width, OcrResult.ImageHeight := height |
|
if !(customRegion || rotate || flip) && (width < 40 || height < 40 || scale != 1) { |
|
scale := scale = 1 ? 40.0 / Min(width, height) : scale |
|
ComCall(7, this.BitmapTransform, "int", width := Floor(width*scale)) ; put_ScaledWidth |
|
ComCall(9, this.BitmapTransform, "int", height := Floor(height*scale)) ; put_ScaledHeight |
|
ComCall(8, BitmapFrame, "uint*", &BitmapPixelFormat:=0) ; get_BitmapPixelFormat |
|
ComCall(9, BitmapFrame, "uint*", &BitmapAlphaMode:=0) ; get_BitmapAlphaMode |
|
ComCall(8, BitmapFrameWithSoftwareBitmap, "uint", BitmapPixelFormat, "uint", BitmapAlphaMode, "ptr", this.BitmapTransform, "uint", IgnoreExifOrientation := 0, "uint", DoNotColorManage := 0, "ptr*", SoftwareBitmap:=this.IBase()) ; GetSoftwareBitmapAsync |
|
} else { |
|
ComCall(6, BitmapFrameWithSoftwareBitmap, "ptr*", SoftwareBitmap:=this.IBase()) ; GetSoftwareBitmapAsync |
|
} |
|
this.WaitForAsync(&SoftwareBitmap) |
|
if customRegion || rotate || flip || scale != 1 |
|
SoftwareBitmap := this.TransformSoftwareBitmap(SoftwareBitmap, &width, &height, scale, rotate, flip, x?, y?, w?, h?) |
|
|
|
SoftwareBitmapCommon: |
|
|
|
if (grayscale || invertcolors || monochrome || this.DisplayImage) { |
|
ComCall(15, SoftwareBitmap, "int", 2, "ptr*", BitmapBuffer := ComValue(13,0)) ; LockBuffer |
|
MemoryBuffer := ComObjQuery(BitmapBuffer, "{fbc4dd2a-245b-11e4-af98-689423260cf8}") |
|
ComCall(6, MemoryBuffer, "ptr*", MemoryBufferReference := ComValue(13,0)) ; CreateReference |
|
BufferByteAccess := ComObjQuery(MemoryBufferReference, "{5b0d3235-4dba-4d44-865e-8f1d0e4fd04d}") |
|
ComCall(3, BufferByteAccess, "ptr*", &SoftwareBitmapByteBuffer:=0, "uint*", &BufferSize:=0) ; GetBuffer |
|
|
|
if grayscale |
|
DllCall(this.GrayScaleMCode, "ptr", SoftwareBitmapByteBuffer, "uint", width, "uint", height, "uint", (width*4+3) // 4 * 4, "cdecl uint") |
|
|
|
if monochrome |
|
DllCall(this.MonochromeMCode, "ptr", SoftwareBitmapByteBuffer, "uint", width, "uint", height, "uint", (width*4+3) // 4 * 4, "uint", monochrome, "cdecl uint") |
|
|
|
if invertcolors |
|
DllCall(this.InvertColorsMCode, "ptr", SoftwareBitmapByteBuffer, "uint", width, "uint", height, "uint", (width*4+3) // 4 * 4, "cdecl uint") |
|
|
|
if this.DisplayImage { |
|
local hdc := DllCall("GetDC", "ptr", 0, "ptr"), bi := Buffer(40, 0), hbm |
|
NumPut("uint", 40, "int", width, "int", -height, "ushort", 1, "ushort", 32, bi) |
|
hbm := DllCall("CreateDIBSection", "ptr", hdc, "ptr", bi, "uint", 0, "ptr*", &ppvBits:=0, "ptr", 0, "uint", 0, "ptr") |
|
DllCall("ntdll\memcpy", "ptr", ppvBits, "ptr", SoftwareBitmapByteBuffer, "uint", BufferSize, "cdecl") |
|
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdc, "Int") |
|
this.DisplayHBitmap(hbm) |
|
} |
|
|
|
BufferByteAccess := "", MemoryBufferReference := "", MemoryBuffer := "", BitmapBuffer := "" ; Release in correct order |
|
} |
|
|
|
ComCall(6, this.OcrEngine, "ptr", SoftwareBitmap, "ptr*", Result:=ComValue(13,0)) ; RecognizeAsync |
|
this.WaitForAsync(&Result) |
|
OcrResult.Ptr := Result.Ptr, ObjAddRef(OcrResult.ptr) |
|
|
|
; Cleanup |
|
if RandomAccessStream is this.IBase |
|
this.CloseIClosable(RandomAccessStream) |
|
if SoftwareBitmap is this.IBase |
|
this.CloseIClosable(SoftwareBitmap) |
|
|
|
if scale != 1 || x != 0 || y != 0 |
|
this.NormalizeCoordinates(OcrResult, scale, x, y) |
|
|
|
return OcrResult |
|
} |
|
|
|
static ClearAllHighlights() => this.Result.Prototype.Highlight("clearall") |
|
|
|
class Result extends OCR.Common { |
|
; Gets the recognized text. |
|
Text { |
|
get { |
|
ComCall(8, this, "ptr*", &hAllText:=0) ; get_Text |
|
buf := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", hAllText, "uint*", &length:=0, "ptr") |
|
this.DefineProp("Text", {Value:StrGet(buf, "UTF-16")}) |
|
this.__OCR.DeleteHString(hAllText) |
|
return this.Text |
|
} |
|
} |
|
|
|
; Gets the clockwise rotation of the recognized text, in degrees, around the center of the image. |
|
TextAngle { |
|
get => (ComCall(7, this, "double*", &value:=0), value) |
|
} |
|
|
|
; Returns all Line objects for the result. |
|
Lines { |
|
get { |
|
ComCall(6, this, "ptr*", LinesList:=ComValue(13, 0)) ; get_Lines |
|
ComCall(7, LinesList, "int*", &count:=0) ; count |
|
lines := [] |
|
loop count { |
|
ComCall(6, LinesList, "int", A_Index-1, "ptr*", Line:=this.__OCR.Line(this)) |
|
lines.Push(Line) |
|
} |
|
this.DefineProp("Lines", {Value:lines}) |
|
return lines |
|
} |
|
} |
|
|
|
; Returns all Word objects for the result. Equivalent to looping over all the Lines and getting the Words. |
|
Words { |
|
get { |
|
local words := [], line, word |
|
for line in this.Lines |
|
for word in line.Words |
|
words.Push(word) |
|
this.DefineProp("Words", {Value:words}) |
|
return words |
|
} |
|
} |
|
|
|
BoundingRect { |
|
get => this.DefineProp("BoundingRect", {Value:this.__OCR.WordsBoundingRect(this.Words*)}).BoundingRect |
|
} |
|
|
|
/** |
|
* Finds a string in the search results, and returns a new Result object. |
|
* If the match is partial then the result will contain the whole word: in "hello world" searching "wo" will return "world". |
|
* To force a full word search instead of a partial search, use IgnoreLinebreaks:True |
|
* and add a space to the beginning and end: " hello " |
|
* To search multi-line matches, set IgnoreLinebreaks:True and use a linebreak in the needle: "hello`nworld" |
|
* @param Needle The string to find. |
|
* @param Options Extra search options object, which can contain the following properties: |
|
* CaseSense: False (this is ignored if a custom SearchFunc is used) |
|
* IgnoreLinebreaks: False (if this is True, then linebreaks are converted to whitespaces, otherwise remain `n) |
|
* AllowOverlap: False (if True then the needle can overlap itself) |
|
* i: 1 (which occurrence of the needle to find) |
|
* x, y, w, h: defines the search area inside the result object |
|
* SearchFunc: default is InStr, but if a custom function is provided then it needs to return |
|
* the needle location in the haystack, and accept arguments (Haystack, Needle, &FoundMatch) |
|
* This can used for example to perform a RegEx search by providing RegExMatch |
|
* @returns {Object} |
|
*/ |
|
FindString(Needle, Options := "") => this.__FindString(Needle, Options, 0) |
|
|
|
/** |
|
* Finds all strings matching the needle in the search results. Returns an array of Result objects. |
|
* @param Needle The string to find. |
|
* @param Options See Result.FindString. {CaseSense: False, IgnoreLinebreaks: False, AllowOverlap: false, i: 1, x, y, w, h, SearchFunc} |
|
* If i is specified then the result object will contains matches starting from i. |
|
* @returns {Array} |
|
*/ |
|
FindStrings(Needle, Options := "") => this.__FindString(Needle, Options, true) |
|
|
|
__FindString(Needle, Options, All) { |
|
local CaseSense := false, IgnoreLinebreaks := false, AllowOverlap := false, i := 1, SearchFunc, x, y, w, h |
|
local currentHaystack, fullHaystackLinebreaks := "`n", offset := 0, line, counter := 0, x1, y1, x2, y2, result, results := [], word |
|
|
|
if !(Needle is String) |
|
throw TypeError("Needle is required to be a string, not type " Type(Needle), -1) |
|
if Trim(Needle, " `t`n`r") == "" |
|
throw ValueError("Needle cannot be an empty string", -1) |
|
|
|
this.__OCR.__ExtractNamedParameters(Options, "CaseSense", &CaseSense, "IgnoreLinebreaks", &IgnoreLinebreaks, "AllowOverlap", &AllowOverlap, "i", &i, "SearchFunc", &SearchFunc, "x", &x, "y", &y, "w", &w, "h", &h) |
|
|
|
if !IsSet(SearchFunc) |
|
SearchFunc := (haystack, needle, &foundstr) => (pos := InStr(haystack, needle, casesense), foundstr := SubStr(haystack, pos, StrLen(needle)), pos) |
|
|
|
if (IsSet(x) || IsSet(y) || IsSet(w) || IsSet(h)) { |
|
x1 := x ?? -100000, y1 := y ?? -100000, x2 := IsSet(w) ? x + w : 100000, y2 := IsSet(h) ? y + h : 100000 |
|
} |
|
|
|
tokenizedHaystack := [IgnoreLinebreaks ? " " : "`n"] |
|
for Line in this.Lines { |
|
fullHaystackLinebreaks .= line.Text "`n" |
|
for Word in Line.Words |
|
tokenizedHaystack.Push(Word, " ") |
|
tokenizedHaystack.Pop() |
|
tokenizedHaystack.Push(IgnoreLinebreaks ? " " : "`n") |
|
} |
|
|
|
fullHaystackNoLinebreaks := StrReplace(fullHaystackLinebreaks, "`n", " ") ; Make sure the words are in the same order as the tokenized version |
|
fullHaystack := IgnoreLinebreaks ? fullHaystackNoLinebreaks : fullHaystackLinebreaks |
|
|
|
Needle := RegExReplace(StrReplace(Needle, "`t", " "), " +", " ") |
|
|
|
fullFirst := SubStr(Needle, 1, 1) ~= "[ \n]", fullLast := SubStr(Needle, -1, 1) ~= "[ \n]" |
|
|
|
currentHaystack := fullHaystack |
|
Loop { |
|
if !(loc := SearchFunc(currentHaystack, Needle, &foundNeedle)) |
|
break |
|
|
|
if IsObject(foundNeedle) |
|
foundNeedle := foundNeedle[] |
|
|
|
foundLen := AllowOverlap ? 1 : StrLen(foundNeedle) |
|
currentHaystack := SubStr(currentHaystack, loc + foundLen) ; Remove the match from the haystack, allowing overlap |
|
offset += loc + foundLen - 1 |
|
|
|
if ++counter < i |
|
continue |
|
|
|
tokenizedNeedle := [] |
|
; Tokenize the needle |
|
for wsNeedle in wsSplit := StrSplit(foundNeedle, " ") { |
|
for lbNeedle in lbSplit := StrSplit(wsNeedle, "`n") { |
|
tokenizedNeedle.Push(lbNeedle, "`n") |
|
} |
|
if lbSplit.Length |
|
tokenizedNeedle.Pop() |
|
tokenizedNeedle.Push(" ") |
|
} |
|
tokenizedNeedle.Pop() |
|
|
|
preceding := SubStr(fullHaystackNoLinebreaks, 1, offset - foundLen) |
|
; Find first Word location |
|
StrReplace(preceding, " ",,, &startingWord:=0) |
|
startingWord := startingWord*2 + fullFirst - 1 ; Substracted 1 to allow subsequent loop to just add A_Index |
|
|
|
foundNeedle := "", foundWords := [], foundLines := [], line := this.__OCR.Line(this), line.DefineProp("Words", {value:[]}), line.DefineProp("Text", {value:""}) |
|
Loop tokenizedNeedle.Length { |
|
word := tokenizedHaystack[startingWord + A_Index] |
|
if (word == "`n") { |
|
foundNeedle .= line.Text |
|
line.Text := RTrim(line.Text), foundLines.Push(line) |
|
line := this.__OCR.Line(this), line.DefineProp("Words", {value:[]}), line.DefineProp("Text", {value:""}) |
|
} |
|
if !IsObject(word) |
|
continue |
|
If IsSet(x1) && (word.x < x1 || word.y < y1 || word.x+word.w > x2 || word.y+word.h > y2) { |
|
counter-- |
|
continue 2 |
|
} |
|
line.Words.Push(word), line.Text .= word.Text " " |
|
foundWords.Push(word) |
|
} |
|
if line.Text { |
|
foundNeedle .= line.Text |
|
line.Text := RTrim(line.Text), foundLines.Push(line) |
|
} |
|
|
|
result := this.Clone(), ObjAddRef(this.ptr) |
|
result.DefineProp("BoundingRect", {value: this.__OCR.WordsBoundingRect(foundWords*)}) |
|
result.DefineProp("Lines", {value: foundLines}) |
|
result.DefineProp("Words", {value: foundWords}) |
|
result.DefineProp("Text", {value: foundNeedle}) |
|
if All { |
|
results.Push(result) |
|
} else |
|
return result |
|
} |
|
if All |
|
return results |
|
|
|
throw TargetError('The target string "' Needle '" was not found', -1) |
|
} |
|
|
|
/** |
|
* Filters out all the words that do not satisfy the callback function and returns a new OCR.Result object |
|
* @param {Object} callback The callback function that accepts a OCR.Word object. |
|
* If the callback returns 0 then the word is filtered out (rejected), otherwise is kept. |
|
* @returns {OCR.Result} |
|
*/ |
|
Filter(callback) { |
|
if !HasMethod(callback) |
|
throw ValueError("Filter callback must be a function", -1) |
|
local result := this.Clone(), line, croppedLines := [], croppedText := "", croppedWords := [], lineText := "", word |
|
ObjAddRef(result.ptr) |
|
for line in result.Lines { |
|
croppedWords := [], lineText := "" |
|
for word in line.Words { |
|
if callback(word) |
|
croppedWords.Push(word), lineText .= word.Text " " |
|
} |
|
if croppedWords.Length { |
|
line := this.__OCR.Line() |
|
line.DefineProp("Text", {value:Trim(lineText)}) |
|
line.DefineProp("Words", {value:croppedWords}) |
|
croppedLines.Push(line) |
|
croppedText .= lineText |
|
} |
|
} |
|
result.DefineProp("Lines", {Value:croppedLines}) |
|
result.DefineProp("Text", {Value:Trim(croppedText)}) |
|
result.DefineProp("Words", this.__OCR.Result.Prototype.GetOwnPropDesc("Words")) |
|
return result |
|
} |
|
|
|
/** |
|
* Crops the result object to contain only results from an area defined by points (x1,y1) and (x2,y2). |
|
* Note that these coordinates are relative to the result object, not to the screen. |
|
* @param {Integer} x1 x coordinate of the top left corner of the search area |
|
* @param {Integer} y1 y coordinate of the top left corner of the search area |
|
* @param {Integer} x2 x coordinate of the bottom right corner of the search area |
|
* @param {Integer} y2 y coordinate of the bottom right corner of the search area |
|
* @returns {OCR.Result} |
|
*/ |
|
Crop(x1:=-100000, y1:=-100000, x2:=100000, y2:=100000) => this.Filter((word) => word.x >= x1 && word.y >= y1 && (word.x+word.w) <= x2 && (word.y+word.h) <= y2) |
|
} |
|
class Line extends OCR.Common { |
|
; Gets the recognized text for the line. |
|
Text { |
|
get { |
|
ComCall(7, this, "ptr*", &hText:=0) ; get_Text |
|
buf := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", hText, "uint*", &length:=0, "ptr") |
|
text := StrGet(buf, "UTF-16") |
|
this.__OCR.DeleteHString(hText) |
|
this.DefineProp("Text", {Value:text}) |
|
return text |
|
} |
|
} |
|
|
|
; Gets the Word objects for the line |
|
Words { |
|
get { |
|
ComCall(6, this, "ptr*", WordsList:=ComValue(13, 0)) ; get_Words |
|
ComCall(7, WordsList, "int*", &WordsCount:=0) ; Words count |
|
words := [] |
|
loop WordsCount { |
|
ComCall(6, WordsList, "int", A_Index-1, "ptr*", Word:=this.__OCR.Word(this)) |
|
words.Push(Word) |
|
} |
|
this.DefineProp("Words", {Value:words}) |
|
return words |
|
} |
|
} |
|
|
|
BoundingRect { |
|
get => this.DefineProp("BoundingRect", {Value:this.__OCR.WordsBoundingRect(this.Words*)}).BoundingRect |
|
} |
|
} |
|
|
|
class Word extends OCR.Common { |
|
; Gets the recognized text for the word |
|
Text { |
|
get { |
|
ComCall(7, this, "ptr*", &hText:=0) ; get_Text |
|
buf := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", hText, "uint*", &length:=0, "ptr") |
|
text := StrGet(buf, "UTF-16") |
|
this.__OCR.DeleteHString(hText) |
|
this.DefineProp("Text", {Value:text}) |
|
return text |
|
} |
|
} |
|
|
|
/** |
|
* Gets the bounding rectangle of the text in {x,y,w,h} format. |
|
* The bounding rectangles coordinate system will be dependant on the image capture method. |
|
* For example, if the image was captured as a rectangle from the screen, then the coordinates |
|
* will be relative to the left top corner of the screen. |
|
*/ |
|
BoundingRect { |
|
get { |
|
ComCall(6, this, "ptr", RECT := Buffer(16, 0)) ; get_BoundingRect |
|
this.DefineProp("x", {Value:Integer(NumGet(RECT, 0, "float"))}) |
|
, this.DefineProp("y", {Value:Integer(NumGet(RECT, 4, "float"))}) |
|
, this.DefineProp("w", {Value:Integer(NumGet(RECT, 8, "float"))}) |
|
, this.DefineProp("h", {Value:Integer(NumGet(RECT, 12, "float"))}) |
|
return this.DefineProp("BoundingRect", {Value:{x:this.x, y:this.y, w:this.w, h:this.h}}).BoundingRect |
|
} |
|
} |
|
} |
|
|
|
class Common extends OCR.IBase { |
|
x { |
|
get => this.BoundingRect.x |
|
} |
|
y { |
|
get => this.BoundingRect.y |
|
} |
|
w { |
|
get => this.BoundingRect.w |
|
} |
|
h { |
|
get => this.BoundingRect.h |
|
} |
|
|
|
/** |
|
* Highlights the object on the screen with a red box |
|
* @param {number} showTime Default is 2 seconds. |
|
* * Unset - if highlighting exists then removes the highlighting, otherwise pauses for 2 seconds |
|
* * 0 - Indefinite highlighting |
|
* * Positive integer (eg 2000) - will highlight and pause for the specified amount of time in ms |
|
* * Negative integer - will highlight for the specified amount of time in ms, but script execution will continue |
|
* * "clear" - removes the highlighting unconditionally |
|
* * "clearall" - remove highlightings from all OCR objects |
|
* @param {string} color The color of the highlighting. Default is red. |
|
* @param {number} d The border thickness of the highlighting in pixels. Default is 2. |
|
* @returns {OCR.Result} |
|
*/ |
|
Highlight(showTime?, color:="Red", d:=2) { |
|
static Guis := Map() |
|
local x, y, w, h, key, oObj, GuiObj, iw, ih |
|
; showTime unset => either highlights for 2s, or removes highlight |
|
; showTime clear => removes highlight |
|
if IsSet(showTime) { |
|
if showTime = "clearall" { |
|
for key, oObj in Guis { ; enum all OCR result objects |
|
try oObj.GuiObj.Destroy() |
|
SetTimer(oObj.TimerObj, 0) |
|
} |
|
Guis := Map() |
|
return this |
|
} else if showTime = "clear" { |
|
if Guis.Has(this) { |
|
try Guis[this].GuiObj.Destroy() |
|
SetTimer(Guis[this].TimerObj, 0) |
|
Guis.Delete(this) |
|
} |
|
return this |
|
} |
|
} |
|
|
|
if !IsSet(showTime) { |
|
if Guis.Has(this) { |
|
try Guis[this].GuiObj.Destroy() |
|
SetTimer(Guis[this].TimerObj, 0) |
|
Guis.Delete(this) |
|
return this |
|
} else |
|
showTime := 2000 |
|
} |
|
|
|
x := this.x, y := this.y, w := this.w, h := this.h |
|
if this.HasProp("Relative") { |
|
if this.Relative.HasProp("CoordMode") { |
|
if this.Relative.CoordMode = "Client" |
|
WinGetClientPos(&rX, &rY,,, this.Relative.hWnd), x += rX, y += rY |
|
else if this.Relative.CoordMode = "Window" |
|
WinGetPos(&rX, &rY,,, this.Relative.hWnd), x += rX, y += rY |
|
} |
|
x += this.Relative.HasProp("x") ? this.Relative.x : 0 |
|
y += this.Relative.HasProp("y") ? this.Relative.y : 0 |
|
} |
|
|
|
if !Guis.Has(this) { |
|
Guis[this] := {} |
|
Guis[this].GuiObj := Gui("+AlwaysOnTop -Caption +ToolWindow -DPIScale +E0x08000000") |
|
Guis[this].TimerObj := ObjBindMethod(this, "Highlight", "clear") |
|
} |
|
GuiObj := Guis[this].GuiObj |
|
GuiObj.BackColor := color |
|
iw:= w+d, ih:= h+d, w:=w+d*2, h:=h+d*2, x:=x-d, y:=y-d |
|
WinSetRegion("0-0 " w "-0 " w "-" h " 0-" h " 0-0 " d "-" d " " iw "-" d " " iw "-" ih " " d "-" ih " " d "-" d, GuiObj.Hwnd) |
|
GuiObj.Show("NA x" . x . " y" . y . " w" . w . " h" . h) |
|
|
|
if showTime > 0 { |
|
Sleep(showTime) |
|
this.Highlight() |
|
} else if showTime < 0 |
|
SetTimer(Guis[this].TimerObj, -Abs(showTime)) |
|
return this |
|
} |
|
ClearHighlight() => this.Highlight("clear") |
|
|
|
/** |
|
* Clicks an object |
|
* If this object (the one Click is called from) contains a "Relative" property (this is |
|
* added by default with OCR.FromWindow) containing a hWnd property, then that window will be activated, |
|
* otherwise the Relative objects x/y properties values will be added to the x and y coordinates as offsets. |
|
*/ |
|
Click(WhichButton?, ClickCount?, DownOrUp?) { |
|
local x := this.x, y := this.y, w := this.w, h := this.h, mode := "Screen", hwnd |
|
if this.HasProp("Relative") { |
|
if this.Relative.HasProp("CoordMode") { |
|
if this.Relative.CoordMode = "Window" |
|
mode := "Window", hwnd := this.Relative.Hwnd |
|
else if this.Relative.CoordMode = "Client" |
|
mode := "Client", hwnd := this.Relative.Hwnd |
|
if IsSet(hwnd) && !WinActive(hwnd) { |
|
WinActivate(hwnd) |
|
WinWaitActive(hwnd,,1) |
|
} |
|
} |
|
x += this.Relative.HasProp("x") ? this.Relative.x : 0 |
|
y += this.Relative.HasProp("y") ? this.Relative.y : 0 |
|
} |
|
oldCoordMode := A_CoordModeMouse |
|
CoordMode "Mouse", mode |
|
Click(x+w//2, y+h//2, WhichButton?, ClickCount?, DownOrUp?) |
|
CoordMode "Mouse", oldCoordMode |
|
} |
|
|
|
/** |
|
* ControlClicks an object. |
|
* If the result object originates from OCR.FromWindow which captured only the client area, |
|
* then the result object will contain correct coordinates for the ControlClick. |
|
* Coordinates will be adjusted to Client area from the CoordMode that the OCR happened in. |
|
* Otherwise, if additionally a WinTitle is provided then the coordinates are treated as Screen |
|
* coordinates and converted to Client coordinates. |
|
* @param WinTitle If WinTitle is set, then the coordinates stored in Obj will be converted to |
|
* client coordinates and ControlClicked. |
|
*/ |
|
ControlClick(WinTitle?, WinText?, WhichButton?, ClickCount?, Options?, ExcludeTitle?, ExcludeText?) { |
|
local x := this.x, y := this.y, w := this.w, h := this.h, hWnd |
|
if this.HasProp("Relative") { |
|
x += this.Relative.HasProp("x") ? this.Relative.x : 0 |
|
y += this.Relative.HasProp("y") ? this.Relative.y : 0 |
|
} |
|
if this.HasProp("Relative") && this.Relative.HasProp("CoordMode") && (this.Relative.CoordMode = "Client" || this.Relative.CoordMode = "Window") { |
|
mode := this.Relative.CoordMode, hWnd := this.Relative.hWnd |
|
if mode = "Window" { |
|
; Window -> Client |
|
RECT := Buffer(16, 0), pt := Buffer(8, 0) |
|
DllCall("user32\GetWindowRect", "Ptr", hWnd, "Ptr", RECT) |
|
winX := NumGet(RECT, 0, "Int"), winY := NumGet(RECT, 4, "Int") |
|
NumPut("int", winX+x, "int", winY+y, pt) |
|
DllCall("user32\ScreenToClient", "Ptr", hWnd, "Ptr", pt) |
|
x := NumGet(pt,0,"int"), y := NumGet(pt,4,"int") |
|
} |
|
} else if IsSet(WinTitle) { |
|
hWnd := WinExist(WinTitle, WinText?, ExcludeTitle?, ExcludeText?) |
|
pt := Buffer(8), NumPut("int",x,pt), NumPut("int", y,pt,4) |
|
DllCall("ScreenToClient", "Int", Hwnd, "Ptr", pt) |
|
x := NumGet(pt,0,"int"), y := NumGet(pt,4,"int") |
|
} else |
|
throw TargetError("ControlClick needs to be called either after a OCR.FromWindow result or with a WinTitle argument") |
|
|
|
ControlClick("X" (x+w//2) " Y" (y+h//2), hWnd,, WhichButton?, ClickCount?, Options?) |
|
} |
|
|
|
OffsetCoordinates(offsetX?, offsetY?) { |
|
if !IsSet(offsetX) || !IsSet(offsetY) { |
|
if this.HasOwnProp("Relative") { |
|
offsetX := this.Relative.HasProp("x") ? this.Relative.X : 0 |
|
offsetY := this.Relative.HasProp("y") ? this.Relative.Y : 0 |
|
} else |
|
throw Error("No Relative property found",, -1) |
|
} |
|
if offsetX = 0 && offsetY = 0 |
|
return this |
|
local word |
|
for word in this.Words |
|
word.x += offsetX, word.y += offsetY, word.BoundingRect := {X:word.x, Y:word.y, W:word.w, H:word.h} |
|
return this |
|
} |
|
} |
|
|
|
/** |
|
* Returns an OCR results object for an image file. Locations of the words will be relative to |
|
* the top left corner of the image. |
|
* @param FileName Either full or relative (to A_WorkingDir) path to the file. |
|
* @param lang OCR language. Default is first from available languages. |
|
* @param transform Either a scale factor number, or an object {scale:Float, grayscale:Boolean, invertcolors:Boolean, monochrome:0-255, rotate: 0 | 90 | 180 | 270, flip: 0 | "x" | "y"} |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromFile(FileName, Options:=0) { |
|
if !(fe := FileExist(FileName)) or InStr(fe, "D") |
|
throw TargetError("File `"" FileName "`" doesn't exist", -1) |
|
GUID := this.CLSIDFromString(this.IID_IRandomAccessStream) |
|
DllCall("ShCore\CreateRandomAccessStreamOnFile", "wstr", FileName, "uint", Read := 0, "ptr", GUID, "ptr*", IRandomAccessStream:=this.IBase()) |
|
if IsObject(Options) && !Options.HasProp("Decoder") |
|
Options.Decoder := this.Vtbl_GetDecoder.HasOwnProp(ext := StrSplit(FileName, ".")[-1]) ? ext : "" |
|
return this(IRandomAccessStream, Options) |
|
} |
|
|
|
/** |
|
* Returns an array of OCR results objects for a PDF file. Locations of the words will be relative to |
|
* the top left corner of the PDF page. |
|
* @param FileName Either full or relative (to A_WorkingDir) path to the file. |
|
* @param Options Optional: OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* @param Start Optional: Page number to start from. Default is first page. |
|
* @param End Optional: Page number to end with (included). Default is last page. |
|
* @param Password Optional: PDF password. |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromPDF(FileName, Options:=0, Start:=1, End?, Password:="") { |
|
this.__ExtractNamedParameters(Options, "lang", &lang, "start", &Start, "end", &End, "password", &Password) |
|
if !(fe := FileExist(FileName)) or InStr(fe, "D") |
|
throw TargetError("File `"" FileName "`" doesn't exist", -1) |
|
|
|
DllCall("ShCore\CreateRandomAccessStreamOnFile", "wstr", FileName, "uint", Read := 0, "ptr", GUID := this.CLSIDFromString(this.IID_IRandomAccessStream), "ptr*", IRandomAccessStream:=ComValue(13,0)) |
|
PdfDocument := this.__OpenPdfDocument(IRandomAccessStream, Password) |
|
this.CloseIClosable(IRandomAccessStream) |
|
if !IsSet(End) { |
|
ComCall(7, PdfDocument, "uint*", &End:=0) ; GetPageCount |
|
if !End |
|
throw Error("Unable to get PDF page count", -1) |
|
} |
|
local results := [] |
|
Loop (End+1-Start) |
|
results.Push(this.FromPDFPage(PdfDocument, Start+(A_Index-1), Options)) |
|
return results |
|
} |
|
|
|
static GetPdfPageCount(FileName, Password:="") { |
|
DllCall("ShCore\CreateRandomAccessStreamOnFile", "wstr", FileName, "uint", Read := 0, "ptr", GUID := this.CLSIDFromString(this.IID_IRandomAccessStream), "ptr*", IRandomAccessStream:=ComValue(13,0)) |
|
PdfDocument := this.__OpenPdfDocument(IRandomAccessStream, Password) |
|
this.CloseIClosable(IRandomAccessStream) |
|
ComCall(7, PdfDocument, "uint*", &PageCount:=0) ; GetPageCount |
|
if !PageCount |
|
throw Error("Unable to get PDF page count", -1) |
|
|
|
return PageCount |
|
} |
|
|
|
; Returns {Width, Height, Rotation, PreferredZoom} |
|
static GetPdfPageProperties(FileName, Page, Password:="") { |
|
DllCall("ShCore\CreateRandomAccessStreamOnFile", "wstr", FileName, "uint", Read := 0, "ptr", GUID := this.CLSIDFromString(this.IID_IRandomAccessStream), "ptr*", IRandomAccessStream:=ComValue(13,0)) |
|
PdfDocument := this.__OpenPdfDocument(IRandomAccessStream, Password) |
|
this.CloseIClosable(IRandomAccessStream) |
|
ComCall(6, PdfDocument, "uint", Page-1, "ptr*", PdfPage:=ComValue(13, 0)) ; GetPage |
|
ComCall(10, PdfPage, "ptr*", Size:=Buffer(8, 0)) ; Size |
|
ComCall(12, PdfPage, "uint*", &Rotation:=0) |
|
ComCall(12, PdfPage, "float*", &PreferredZoom:=0) |
|
return {Width: NumGet(Size, 0, "float"), Height: NumGet(size, 4, "float"), Rotation: Rotation*90, PreferredZoom:PreferredZoom} |
|
} |
|
|
|
/** |
|
* Returns an OCR result object for a PDF page. Locations of the words will be relative to |
|
* the top left corner of the PDF page. |
|
* @param FileName Either full or relative (to A_WorkingDir) path to the file. |
|
* @param Page The page number to OCR. |
|
* @param Options Optional: OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* @param Password Optional: PDF password. |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromPDFPage(FileName, Page, Options:=0, Password:="") { |
|
local scale := 1, x := 0, y := 0, w := 0, h := 0 |
|
if IsObject(Options) |
|
Options := Options.Clone() |
|
this.__ExtractNamedParameters(Options, "Password", &Password, "scale", &scale, "x", &x, "y", &y, "w", &w, "h", &h) |
|
if FileName is String { |
|
if !(fe := FileExist(FileName)) or InStr(fe, "D") |
|
throw TargetError("File `"" FileName "`" doesn't exist", -1) |
|
GUID := this.CLSIDFromString(this.IID_IRandomAccessStream) |
|
DllCall("ShCore\CreateRandomAccessStreamOnFile", "wstr", FileName, "uint", Read := 0, "ptr", GUID, "ptr*", IRandomAccessStream:=ComValue(13, 0)) |
|
PdfDocument := this.__OpenPdfDocument(IRandomAccessStream, Password) |
|
} else |
|
PdfDocument := FileName |
|
ComCall(6, PdfDocument, "uint", Page-1, "ptr*", PdfPage:=ComValue(13, 0)) ; GetPage |
|
InMemoryRandomAccessStream := this.CreateClass("Windows.Storage.Streams.InMemoryRandomAccessStream") |
|
PdfPageRenderOptions := this.CreateClass("Windows.Data.Pdf.PdfPageRenderOptions") |
|
ComCall(15, PdfPageRenderOptions, "uint", true) ; IsIgnoringHighContrast |
|
if x || y || w || h { |
|
rect := Buffer(16, 0), NumPut("float", x, "float", y, "float", w, "float", h, rect) |
|
ComCall(7, PdfPageRenderOptions, "ptr", rect) ; put_SourceRect |
|
Options.w := Options.w*scale, Options.h := Options.h*scale |
|
Options.DeleteProp("x"), Options.DeleteProp("y"), Options.DeleteProp("w"), Options.DeleteProp("h") |
|
} |
|
if (scale != 1) { |
|
ComCall(10, PdfPage, "ptr", Size:=Buffer(8, 0)) ; get_Size |
|
ComCall(9, PdfPageRenderOptions, "uint", Floor((w || NumGet(size, 0, "float"))*scale)) ; put_DestinationWidth |
|
ComCall(11, PdfPageRenderOptions, "uint", Floor((h || NumGet(size, 4, "float"))*scale)) ; put_DestinationHeight |
|
Options.DeleteProp("scale") |
|
} |
|
ComCall(7, PdfPage, "ptr", InMemoryRandomAccessStream, "ptr", PdfPageRenderOptions, "ptr*", asyncInfo:=ComValue(13, 0)) ; RenderWithOptionsToStreamAsync |
|
this.WaitForAsync(&asyncInfo) |
|
if FileName is String |
|
this.CloseIClosable(IRandomAccessStream) |
|
PdfPage := "", PdfDocument := "", IRandomAccessStream := "" |
|
OcrResult := this(InMemoryRandomAccessStream, Options) |
|
if scale != 1 |
|
this.NormalizeCoordinates(OcrResult, scale) |
|
return OcrResult |
|
} |
|
|
|
/** |
|
* Returns an OCR results object for a given window. Locations of the words will be relative |
|
* using the CoordMode from A_CoordModePixel (default is Client). |
|
* The window from where the image was captured is stored in Result.Relative.hWnd |
|
* Additionally, Result.Relative.CoordMode is stored (the A_CoordModePixel at the time of OCR). |
|
* @param WinTitle A window title or other criteria identifying the target window. |
|
* @param Options Optional: OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* Additionally for FromWindow the options may include: |
|
* mode: Different methods of capturing the window. |
|
* 0 = uses GetDC with BitBlt |
|
* 1 = same as 0 but window transparency is turned off beforehand with WinSetTransparent |
|
* 2 = uses PrintWindow. |
|
* 3 = same as 1 but window transparency is turned off beforehand with WinSetTransparent |
|
* 4 = uses PrintWindow with undocumented PW_RENDERFULLCONTENT flag, allowing capture of hardware-accelerated windows |
|
* 5 = uses Direct3D11 from UWP Windows.Graphics.Capture (slowest option, but may work with games) |
|
* This may draw a yellow border around the target window in older Windows versions. |
|
* @param WinText Additional window criteria. |
|
* @param ExcludeTitle Additional window criteria. |
|
* @param ExcludeText Additional window criteria. |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromWindow(WinTitle:="", Options:=0, WinText:="", ExcludeTitle:="", ExcludeText:="") { |
|
local result, coordsmode := A_CoordModePixel, onlyClientArea := coordsMode = "Client", mode := 4, X := 0, Y := 0, W := 0, H := 0, sX, sY, hBitMap, hwnd, customRect := 0, transform := 0 |
|
if !Options && Type(WinTitle) = "Object" |
|
Options := WinTitle, WinTitle := "" |
|
if IsObject(Options) |
|
Options := Options.Clone() |
|
this.__ExtractTransformParameters(Options, &transform) |
|
this.__ExtractNamedParameters(Options, "x", &x, "y", &y, "w", &w, "width", &w, "h", &h, "height", &h, "mode", &mode, "WinTitle", &WinTitle, "WinText", &WinText, "ExcludeTitle", &ExcludeTitle, "ExcludeText", &ExcludeText) |
|
this.__DeleteProps(Options, "x", "y", "w", "width", "h", "height", "scale", "mode") |
|
if (x !=0 || y != 0 || w != 0 || h != 0) |
|
customRect := 1 |
|
if !(hWnd := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText)) |
|
throw TargetError("Target window not found", -1) |
|
if DllCall("IsIconic", "uptr", hwnd) |
|
DllCall("ShowWindow", "uptr", hwnd, "int", 4) |
|
if mode < 4 && mode&1 { |
|
oldStyle := WinGetExStyle(hwnd), i := 0 |
|
WinSetTransparent(255, hwnd) |
|
While (WinGetTransparent(hwnd) != 255 && ++i < 30) |
|
Sleep 100 |
|
} |
|
|
|
WinGetPos(&wX, &wY, &wW, &wH, hWnd) |
|
If onlyClientArea { |
|
WinGetClientPos(&cX, &cY, &cW, &cH, hWnd) |
|
W := W || cW, H := H || cH, sX := X + cX, sY := Y + cY ; Calculate final X and Y screen coordinates |
|
} else { |
|
W := W || wW, H := H || wH, sX := X + wX, sY := Y + wY |
|
} |
|
|
|
if mode = 5 { |
|
/* |
|
If we are capturing the whole window, then WinGetPos/MouseGetPos might include hidden borders. |
|
Eg (0,0) might be (-11, -11) for Direct3D, meaning (11,11) by WinGetPos is (0,0) for Direct3D. |
|
These offsets are calculated and stored in offsetX, offsetY, and if only the window |
|
area is captured then the result object coordinates are adjusted accordingly. |
|
|
|
If the SoftwareBitmap needs to be transformed in any way (eg scale or custom rect is |
|
provided) then we need to offset coordinates and possibly width/height as well. |
|
|
|
*/ |
|
SoftwareBitmap := this.CreateDirect3DSoftwareBitmapFromWindow(hWnd) |
|
|
|
local sbW := SoftwareBitmap.W, sbH := SoftwareBitmap.H, sbX := SoftwareBitmap.X, sbY := SoftwareBitmap.Y |
|
local offsetX := 0, offsetY := 0 |
|
|
|
if transform.scale != 1 || transform.rotate || transform.flip || customRect || onlyClientArea { |
|
; The bounds need to fit inside the SoftwareBitmap bounds, so possibly X,Y need to be adjusted along with W,H |
|
local tX := X, tY := Y, tW := W, tH := H |
|
if onlyClientArea |
|
tX -= SoftwareBitmap.X-cX, tY -= SoftwareBitmap.Y-cY |
|
else |
|
tX -= SoftwareBitmap.X-wX, tY -= SoftwareBitmap.Y-wY |
|
if tX < 0 ; If resulting coordinates are negative then adjust width and height accordingly |
|
tW += tX, offsetX := -tX, tX := 0 |
|
if tY < 0 |
|
tH += tY, offsetY := -tY, tY := 0 |
|
tW := Min(sbW-tX, tW), tH := Min(sbH-tY, tH) |
|
|
|
SoftwareBitmap := this.TransformSoftwareBitmap(SoftwareBitmap, &sbW, &sbH, transform.scale, transform.rotate, transform.flip, tX, tY, tW, tH) |
|
this.__DeleteProps(Options, "scale", "rotate", "flip") |
|
} else |
|
offsetX := sbX-wX, offsetY := sbY-wY |
|
result := this(SoftwareBitmap, Options) |
|
} else { |
|
hBitMap := this.CreateHBitmap(X, Y, W, H, {hWnd:hWnd, onlyClientArea:onlyClientArea, mode:(mode//2)}, transform.scale) |
|
if mode&1 |
|
WinSetExStyle(oldStyle, hwnd) |
|
SoftwareBitmap := this.HBitmapToSoftwareBitmap(hBitMap,, transform) |
|
this.__DeleteProps(Options, "invertcolors", "grayscale", "monochrome") |
|
result := this(SoftwareBitmap, Options) |
|
} |
|
|
|
result.Relative := {CoordMode:coordsmode, hWnd:hWnd} |
|
if coordsmode = "Screen" |
|
x += sX, y += sY |
|
this.NormalizeCoordinates(result, transform.scale, x, y) |
|
if mode = 5 && !onlyClientArea |
|
result.OffsetCoordinates(offsetX, offsetY) |
|
return result |
|
} |
|
|
|
/** |
|
* Returns an OCR results object for the whole desktop. Locations of the words will be relative to |
|
* the primary screen (CoordMode "Screen"), even if a secondary monitor is being captured. |
|
* @param Options Optional: OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* @param Monitor Optional: The monitor from which to get the desktop area. Default is primary monitor. |
|
* If screen scaling between monitors differs, then use DllCall("SetThreadDpiAwarenessContext", "ptr", -3) |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromDesktop(Monitor?, Options:=0) { |
|
if !Options && IsSet(Monitor) && IsObject(Monitor) |
|
Options := Monitor, Monitor := unset |
|
this.__ExtractNamedParameters(Options, "Monitor", &Monitor) |
|
MonitorGet(monitor?, &Left, &Top, &Right, &Bottom) |
|
return this.FromRect(Left, Top, Right-Left, Bottom-Top, Options) |
|
} |
|
|
|
/** |
|
* Returns an OCR results object for a region of the screen. Locations of the words will be relative |
|
* to the screen. |
|
* @param x Screen x coordinate |
|
* @param y Screen y coordinate |
|
* @param w Region width. Maximum is OCR.MaxImageDimension; minimum is 40 pixels (source: user FanaticGuru in AutoHotkey forums), smaller images will be scaled to at least 40 pixels. |
|
* @param h Region height. Maximum is OCR.MaxImageDimension; minimum is 40 pixels, smaller images will be scaled accordingly. |
|
* @param Options OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromRect(x, y, w, h, Options:=0) { |
|
local transform := 0, result |
|
if IsObject(Options) |
|
Options := Options.Clone() |
|
this.__ExtractTransformParameters(Options, &transform) |
|
this.__DeleteProps(Options, "scale", "invertcolors", "grayscale") |
|
local scale := transform.scale |
|
, hBitmap := this.CreateHBitmap(X, Y, W, H,, scale) |
|
, SoftwareBitmap := this.HBitmapToSoftwareBitmap(hBitmap,, transform) |
|
, result := this(SoftwareBitmap, Options) |
|
return this.NormalizeCoordinates(result, scale, x, y) |
|
} |
|
|
|
/** |
|
* Returns an OCR results object from a bitmap. Locations of the words will be relative |
|
* to the top left corner of the bitmap. |
|
* @param Bitmap A pointer to a GDIP Bitmap object, or HBITMAP, or an object with a ptr property |
|
* set to one of the two. |
|
* @param Options OCR options {lang, scale, grayscale, invertcolors, rotate, flip, x, y, w, h, decoder}. |
|
* @param hDC Optional: a device context for the bitmap. If omitted then the screen DC is used. |
|
* @returns {OCR.Result} |
|
*/ |
|
static FromBitmap(Bitmap, Options:=0, hDC?) { |
|
local result, pDC, hBitmap, hBM2, oBM, oBM2, pBitmapInfo := Buffer(32, 0), W, H, scale, transform := 0 |
|
if IsObject(Options) |
|
Options := Options.Clone() |
|
this.__ExtractTransformParameters(Options, &transform) |
|
scale := transform.scale |
|
this.__ExtractNamedParameters(Options, "hDC", &hDC) |
|
this.__DeleteProps(Options, "scale", "invertcolors", "grayscale") |
|
if !DllCall("GetObject", "ptr", Bitmap, "int", pBitmapInfo.Size, "ptr", pBitmapInfo) { |
|
DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "UPtr", Bitmap, "UPtr*", &hBitmap:=0, "Int", 0xffffffff) |
|
DllCall("GetObject", "ptr", hBitmap, "int", pBitmapInfo.Size, "ptr", pBitmapInfo) |
|
Bitmap := 0 ; Marks hBitmap to be deleted afterwards |
|
} else |
|
hBitmap := Bitmap |
|
|
|
W := NumGet(pBitmapInfo, 4, "int"), H := NumGet(pBitmapInfo, 8, "int") |
|
|
|
if scale != 1 || (W && H && (W < 40 || H < 40)) { |
|
sW := Ceil(W * scale), sH := Ceil(H * scale) |
|
|
|
hDC := DllCall("CreateCompatibleDC", "Ptr", 0, "Ptr") |
|
, oBM := DllCall("SelectObject", "Ptr", hDC, "Ptr", hBitmap, "Ptr") |
|
, pDC := DllCall("CreateCompatibleDC", "Ptr", hDC, "Ptr") |
|
, hBM2 := DllCall("CreateCompatibleBitmap", "Ptr", hDC, "Int", Max(40, sW), "Int", Max(40, sH), "Ptr") |
|
, oBM2 := DllCall("SelectObject", "Ptr", pDC, "Ptr", hBM2, "Ptr") |
|
if sW < 40 || sH < 40 ; Fills the bitmap so it's at least 40x40, which seems to improve recognition |
|
DllCall("StretchBlt", "Ptr", pDC, "Int", 0, "Int", 0, "Int", Max(40,sW), "Int", Max(40,sH), "Ptr", hDC, "Int", 0, "Int", 0, "Int", 1, "Int", 1, "UInt", 0x00CC0020 | this.CAPTUREBLT) ; SRCCOPY. |
|
PrevStretchBltMode := DllCall("SetStretchBltMode", "Ptr", PDC, "Int", 3, "Int") ; COLORONCOLOR |
|
, DllCall("StretchBlt", "Ptr", pDC, "Int", 0, "Int", 0, "Int", sW, "Int", sH, "Ptr", hDC, "Int", 0, "Int", 0, "Int", W, "Int", H, "UInt", 0x00CC0020 | this.CAPTUREBLT) ; SRCCOPY |
|
, DllCall("SetStretchBltMode", "Ptr", PDC, "Int", PrevStretchBltMode) |
|
, DllCall("SelectObject", "Ptr", pDC, "Ptr", oBM2) |
|
, DllCall("SelectObject", "Ptr", hDC, "Ptr", oBM) |
|
, DllCall("DeleteDC", "Ptr", hDC) |
|
SoftwareBitmap := this.HBitmapToSoftwareBitmap(hBM2, pDC, transform) |
|
result := this(SoftwareBitmap, Options) |
|
this.NormalizeCoordinates(result, scale) |
|
DllCall("DeleteDC", "Ptr", pDC) |
|
, DllCall("DeleteObject", "UPtr", hBM2) |
|
goto End |
|
} |
|
result := this(this.HBitmapToSoftwareBitmap(hBitmap, hDC?, transform), Options) |
|
End: |
|
if !Bitmap |
|
DllCall("DeleteObject", "UPtr", hBitmap) |
|
return result |
|
} |
|
|
|
/** |
|
* Returns all available languages as a string, where the languages are separated by newlines. |
|
* @returns {String} |
|
*/ |
|
static GetAvailableLanguages() { |
|
ComCall(7, this.OcrEngineStatics, "ptr*", &LanguageList := 0) ; AvailableRecognizerLanguages |
|
ComCall(7, LanguageList, "int*", &count := 0) ; count |
|
Loop count { |
|
ComCall(6, LanguageList, "int", A_Index - 1, "ptr*", &Language := 0) ; get_Item |
|
ComCall(6, Language, "ptr*", &hText := 0) |
|
buf := DllCall("Combase.dll\WindowsGetStringRawBuffer", "ptr", hText, "uint*", &length := 0, "ptr") |
|
text .= StrGet(buf, "UTF-16") "`n" |
|
this.DeleteHString(hText) |
|
ObjRelease(Language) |
|
} |
|
ObjRelease(LanguageList) |
|
return text |
|
} |
|
|
|
/** |
|
* Loads a new language which will be used with subsequent OCR calls. |
|
* @param {string} lang OCR language. Default is first from available languages. |
|
* @returns {void} |
|
*/ |
|
static LoadLanguage(lang:="FirstFromAvailableLanguages") { |
|
local hString, Language:=ComValue(13, 0), OcrEngine:=ComValue(13, 0) |
|
if this.HasOwnProp("CurrentLanguage") && this.HasOwnProp("OcrEngine") && this.CurrentLanguage = lang |
|
return |
|
if HasMethod(lang) |
|
lang := lang() |
|
if (lang = "FirstFromAvailableLanguages") |
|
ComCall(10, this.OcrEngineStatics, "ptr*", OcrEngine) ; TryCreateFromUserProfileLanguages |
|
else { |
|
hString := this.CreateHString(lang) |
|
, ComCall(6, this.LanguageFactory, "ptr", hString, "ptr*", Language) ; CreateLanguage |
|
, this.DeleteHString(hString) |
|
, ComCall(9, this.OcrEngineStatics, "ptr", Language, "ptr*", OcrEngine) ; TryCreateFromLanguage |
|
} |
|
if (OcrEngine.ptr = 0) |
|
Throw Error(lang = "FirstFromAvailableLanguages" ? "Failed to use FirstFromAvailableLanguages for OCR:`nmake sure the primary language pack has OCR capabilities installed.`n`nAlternatively try `"en-us`" as the language." : "Can not use language `"" lang "`" for OCR, please install language pack.") |
|
this.OcrEngine := OcrEngine, this.CurrentLanguage := lang |
|
} |
|
|
|
/** |
|
* Returns a bounding rectangle {x,y,w,h} for the provided Word objects |
|
* @param words Word object arguments (at least 1) |
|
* @returns {Object} |
|
*/ |
|
static WordsBoundingRect(words*) { |
|
if !words.Length |
|
throw ValueError("This function requires at least one argument", -1) |
|
local X1 := 100000000, Y1 := 100000000, X2 := -100000000, Y2 := -100000000, word |
|
for word in words { |
|
X1 := Min(word.x, X1), Y1 := Min(word.y, Y1), X2 := Max(word.x+word.w, X2), Y2 := Max(word.y+word.h, Y2) |
|
} |
|
return {X:X1, Y:Y1, W:X2-X1, H:Y2-Y1, X2:X2, Y2:Y2} |
|
} |
|
|
|
/** |
|
* Waits text to appear on screen. If the method is successful, then Func's return value is returned. |
|
* Otherwise nothing is returned. |
|
* @param needle The searched text |
|
* @param {number} timeout Timeout in milliseconds. Less than 0 is indefinite wait (default) |
|
* @param func The function to be called for the OCR. Default is OCR.FromDesktop |
|
* @param casesense Text comparison case-sensitivity |
|
* @param comparefunc A custom string compare/search function, that accepts two arguments: haystack and needle. |
|
* Default is InStr. If a custom function is used, then casesense is ignored. |
|
* @returns {OCR.Result} |
|
*/ |
|
static WaitText(needle, timeout:=-1, func?, casesense:=False, comparefunc?) { |
|
local endTime := A_TickCount+timeout, result, line, total |
|
if !IsSet(func) |
|
func := this.FromDesktop |
|
if !IsSet(comparefunc) |
|
comparefunc := InStr.Bind(,,casesense) |
|
While timeout > 0 ? (A_TickCount < endTime) : 1 { |
|
result := func(), total := "" |
|
for line in result.Lines |
|
total .= line.Text "`n" |
|
if comparefunc(Trim(total, "`n"), needle) |
|
return result |
|
} |
|
return |
|
} |
|
|
|
/** |
|
* Returns word clusters using a two-dimensional DBSCAN algorithm |
|
* @param objs An array of objects (Words, Lines etc) to cluster. Must have x, y, w, h and Text properties. |
|
* @param eps_x Optional epsilon value for x-axis. Default is infinite. |
|
* This is unused if compareFunc is provided. |
|
* @param eps_y Optional epsilon value for y-axis. Default is median height of objects divided by two. |
|
* This is unused if compareFunc is provided. |
|
* @param minPts Optional minimum cluster size. |
|
* @param compareFunc Optional comparison function to judge the minimum distance between objects |
|
* to consider it a cluster. Must accept two objects to compare. |
|
* Default comparison function determines whether the difference of middle y-coordinates of |
|
* the objects are less than epsilon-y, and whether objects are less than eps_x apart on the x-axis. |
|
* |
|
* Eg `(p1, p2) => ((Abs(p1.y+p1.h-p2.y) < 5 || Abs(p2.y+p2.h-p1.y) < 5) && ((p1.x >= p2.x && p1.x <= (p2.x+p2.w)) || ((p1.x+p1.w) >= p2.x && (p1.x+p1.w) <= (p2.x+p2.w))))` |
|
* will cluster objects if they are located on top of eachother on the x-axis, and less than 5 pixels |
|
* apart in the y-axis. |
|
* @param noise If provided, then will be set to an array of clusters that didn't satisfy minPts |
|
* @returns {Array} Array of objects with {x,y,w,h,Text,Words} properties |
|
*/ |
|
static Cluster(objs, eps_x:=-1, eps_y:=-1, minPts:=1, compareFunc?, &noise?) { |
|
local clusters := [], start := 0, cluster, word |
|
visited := Map(), clustered := Map(), C := [], c_n := 0, sum := 0, noise := IsSet(noise) && (noise is Array) ? noise : [] |
|
if !IsObject(objs) || !(objs is Array) |
|
throw ValueError("objs argument must be an Array", -1) |
|
if !objs.Length |
|
return [] |
|
if IsSet(compareFunc) && !HasMethod(compareFunc) |
|
throw ValueError("compareFunc must be a valid function", -1) |
|
|
|
if !IsSet(compareFunc) { |
|
if (eps_y < 0) { |
|
for point in objs |
|
sum += point.h |
|
eps_y := (sum // objs.Length) // 2 |
|
} |
|
compareFunc := (p1, p2) => Abs(p1.y+p1.h//2-p2.y-p2.h//2)<eps_y && (eps_x < 0 || (Abs(p1.x+p1.w-p2.x)<eps_x || Abs(p1.x-p2.x-p2.w)<eps_x)) |
|
} |
|
|
|
; DBSCAN adapted from https://github.com/ninopereira/DBSCAN_1D |
|
for point in objs { |
|
visited[point] := 1, neighbourPts := [], RegionQuery(point) |
|
if !clustered.Has(point) { |
|
C.Push([]), c_n += 1, C[c_n].Push(point), clustered[point] := 1 |
|
ExpandCluster(point) |
|
} |
|
if C[c_n].Length < minPts |
|
noise.Push(C[c_n]), C.RemoveAt(c_n), c_n-- |
|
} |
|
|
|
; Sort clusters by x-coordinate, get cluster bounding rects, and concatenate word texts |
|
for cluster in C { |
|
this.SortArray(cluster,,"x") |
|
br := this.Common(), br.DefineProp("BoundingRect", {value:this.WordsBoundingRect(cluster*)}), br.DefineProp("Words", {value:cluster}), br.DefineProp("Text", {value: ""}) |
|
for word in cluster |
|
br.Text .= word.Text " " |
|
br.Text := RTrim(br.Text) |
|
clusters.Push(br) |
|
} |
|
; Sort clusters/lines by y-coordinate |
|
this.SortArray(clusters,,"y") |
|
return clusters |
|
|
|
ExpandCluster(P) { |
|
local point |
|
for point in neighbourPts { |
|
if !visited.Has(point) { |
|
visited[point] := 1, RegionQuery(point) |
|
if !clustered.Has(point) |
|
C[c_n].Push(point), clustered[point] := 1 |
|
} |
|
} |
|
} |
|
|
|
RegionQuery(P) { |
|
local point |
|
for point in objs |
|
if !visited.Has(point) |
|
if compareFunc(P, point) |
|
neighbourPts.Push(point) |
|
} |
|
} |
|
|
|
/** |
|
* Sorts an array in-place, optionally by object keys or using a callback function. |
|
* @param arr The array to be sorted |
|
* @param OptionsOrCallback Optional: either a callback function, or one of the following: |
|
* |
|
* N => array is considered to consist of only numeric values. This is the default option. |
|
* C, C1 or COn => case-sensitive sort of strings |
|
* C0 or COff => case-insensitive sort of strings |
|
* |
|
* The callback function should accept two parameters elem1 and elem2 and return an integer: |
|
* Return integer < 0 if elem1 less than elem2 |
|
* Return 0 is elem1 is equal to elem2 |
|
* Return > 0 if elem1 greater than elem2 |
|
* @param Key Optional: Omit it if you want to sort a array of primitive values (strings, numbers etc). |
|
* If you have an array of objects, specify here the key by which contents the object will be sorted. |
|
* @returns {Array} |
|
*/ |
|
static SortArray(arr, optionsOrCallback:="N", key?) { |
|
static sizeofFieldType := 16 ; Same on both 32-bit and 64-bit |
|
if HasMethod(optionsOrCallback) |
|
pCallback := CallbackCreate(CustomCompare.Bind(optionsOrCallback), "F Cdecl", 2), optionsOrCallback := "" |
|
else { |
|
if InStr(optionsOrCallback, "N") |
|
pCallback := CallbackCreate(IsSet(key) ? NumericCompareKey.Bind(key) : NumericCompare, "F CDecl", 2) |
|
if RegExMatch(optionsOrCallback, "i)C(?!0)|C1|COn") |
|
pCallback := CallbackCreate(IsSet(key) ? StringCompareKey.Bind(key,,True) : StringCompare.Bind(,,True), "F CDecl", 2) |
|
if RegExMatch(optionsOrCallback, "i)C0|COff") |
|
pCallback := CallbackCreate(IsSet(key) ? StringCompareKey.Bind(key) : StringCompare, "F CDecl", 2) |
|
if InStr(optionsOrCallback, "Random") |
|
pCallback := CallbackCreate(RandomCompare, "F CDecl", 2) |
|
if !IsSet(pCallback) |
|
throw ValueError("No valid options provided!", -1) |
|
} |
|
mFields := NumGet(ObjPtr(arr) + (8 + (VerCompare(A_AhkVersion, "<2.1-") > 0 ? 3 : 5)*A_PtrSize), "Ptr") ; in v2.0: 0 is VTable. 2 is mBase, 3 is mFields, 4 is FlatVector, 5 is mLength and 6 is mCapacity |
|
DllCall("msvcrt.dll\qsort", "Ptr", mFields, "UInt", arr.Length, "UInt", sizeofFieldType, "Ptr", pCallback, "Cdecl") |
|
CallbackFree(pCallback) |
|
if RegExMatch(optionsOrCallback, "i)R(?!a)") |
|
this.ReverseArray(arr) |
|
if InStr(optionsOrCallback, "U") |
|
arr := this.Unique(arr) |
|
return arr |
|
|
|
CustomCompare(compareFunc, pFieldType1, pFieldType2) => (ValueFromFieldType(pFieldType1, &fieldValue1), ValueFromFieldType(pFieldType2, &fieldValue2), compareFunc(fieldValue1, fieldValue2)) |
|
NumericCompare(pFieldType1, pFieldType2) => (ValueFromFieldType(pFieldType1, &fieldValue1), ValueFromFieldType(pFieldType2, &fieldValue2), fieldValue1 - fieldValue2) |
|
NumericCompareKey(key, pFieldType1, pFieldType2) => (ValueFromFieldType(pFieldType1, &fieldValue1), ValueFromFieldType(pFieldType2, &fieldValue2), fieldValue1.%key% - fieldValue2.%key%) |
|
StringCompare(pFieldType1, pFieldType2, casesense := False) => (ValueFromFieldType(pFieldType1, &fieldValue1), ValueFromFieldType(pFieldType2, &fieldValue2), StrCompare(fieldValue1 "", fieldValue2 "", casesense)) |
|
StringCompareKey(key, pFieldType1, pFieldType2, casesense := False) => (ValueFromFieldType(pFieldType1, &fieldValue1), ValueFromFieldType(pFieldType2, &fieldValue2), StrCompare(fieldValue1.%key% "", fieldValue2.%key% "", casesense)) |
|
RandomCompare(pFieldType1, pFieldType2) => (Random(0, 1) ? 1 : -1) |
|
|
|
ValueFromFieldType(pFieldType, &fieldValue?) { |
|
static SYM_STRING := 0, PURE_INTEGER := 1, PURE_FLOAT := 2, SYM_MISSING := 3, SYM_OBJECT := 5 |
|
switch SymbolType := NumGet(pFieldType + 8, "Int") { |
|
case PURE_INTEGER: fieldValue := NumGet(pFieldType, "Int64") |
|
case PURE_FLOAT: fieldValue := NumGet(pFieldType, "Double") |
|
case SYM_STRING: fieldValue := StrGet(NumGet(pFieldType, "Ptr")+2*A_PtrSize) |
|
case SYM_OBJECT: fieldValue := ObjFromPtrAddRef(NumGet(pFieldType, "Ptr")) |
|
case SYM_MISSING: return |
|
} |
|
} |
|
} |
|
; Reverses the array in-place |
|
static ReverseArray(arr) { |
|
local len := arr.Length + 1, max := (len // 2), i := 0 |
|
while ++i <= max |
|
temp := arr[len - i], arr[len - i] := arr[i], arr[i] := temp |
|
return arr |
|
} |
|
; Returns a new array with only unique values |
|
static UniqueArray(arr) { |
|
local unique := Map() |
|
for v in arr |
|
unique[v] := 1 |
|
return [unique*] |
|
} |
|
|
|
; Returns a one-dimensional array from a multi-dimensional array |
|
static FlattenArray(arr) { |
|
local r := [] |
|
for v in arr { |
|
if v is Array |
|
r.Push(this.FlattenArray(v)*) |
|
else |
|
r.Push(v) |
|
} |
|
return r |
|
} |
|
|
|
;; Only internal methods ahead |
|
|
|
; Scales and optionally crops a SoftwareBitmap. Crop parameters need to not be scale-adjusted. |
|
; Rotation can be clockwise 0, 90, 180, or 270 degrees |
|
; Flip: 0 = no flip, 1 = around y-axis, 2 = around x-axis |
|
static TransformSoftwareBitmap(SoftwareBitmap, &sbW, &sbH, scale:=1, rotate:=0, flip:=0, X?, Y?, W?, H?) { |
|
InMemoryRandomAccessStream := this.SoftwareBitmapToRandomAccessStream(SoftwareBitmap) |
|
|
|
ComCall(this.Vtbl_GetDecoder.png, this.BitmapDecoderStatics, "ptr", DecoderGUID:=Buffer(16)) |
|
ComCall(15, this.BitmapDecoderStatics, "ptr", DecoderGUID, "ptr", InMemoryRandomAccessStream, "ptr*", BitmapDecoder:=ComValue(13,0)) ; CreateAsync |
|
this.WaitForAsync(&BitmapDecoder) |
|
|
|
BitmapFrameWithSoftwareBitmap := ComObjQuery(BitmapDecoder, IBitmapFrameWithSoftwareBitmap := "{FE287C9A-420C-4963-87AD-691436E08383}") |
|
BitmapFrame := ComObjQuery(BitmapDecoder, IBitmapFrame := "{72A49A1C-8081-438D-91BC-94ECFC8185C6}") |
|
|
|
BitmapTransform := this.CreateClass("Windows.Graphics.Imaging.BitmapTransform") |
|
|
|
if IsSet(W) && W |
|
sbW := Min(sbW, W) |
|
if IsSet(H) && H |
|
sbH := Min(sbH, H) |
|
local sW := Floor(sbW*scale), sH := Floor(sbH*scale), intermediate |
|
if scale != 1 { |
|
; First the bitmap is scaled, then cropped |
|
ComCall(7, BitmapTransform, "uint", sW) ; put_ScaledWidth |
|
ComCall(9, BitmapTransform, "uint", sH) ; put_ScaledHeight |
|
} |
|
if rotate { |
|
ComCall(15, BitmapTransform, "uint", rotate//90) ; put_Rotation |
|
if rotate = 90 || rotate = 270 |
|
intermediate := sW, sW := sH, sH := intermediate |
|
} |
|
if flip |
|
ComCall(13, BitmapTransform, "uint", flip) ; put_Flip |
|
|
|
if IsSet(X) && (X != 0 || Y != 0) { |
|
bounds := Buffer(16,0), NumPut("int", Floor(X*scale), "int", Floor(Y*scale), "int", Floor(sbW*scale), "int", Floor(sbH*scale), bounds) |
|
ComCall(17, BitmapTransform, "ptr", bounds) ; put_Bounds |
|
} |
|
ComCall(8, BitmapFrame, "uint*", &BitmapPixelFormat:=0) ; get_BitmapPixelFormat |
|
ComCall(9, BitmapFrame, "uint*", &BitmapAlphaMode:=0) ; get_BitmapAlphaMode |
|
ComCall(8, BitmapFrameWithSoftwareBitmap, "uint", BitmapPixelFormat, "uint", BitmapAlphaMode, "ptr", BitmapTransform, "uint", IgnoreExifOrientation := 0, "uint", DoNotColorManage := 0, "ptr*", SoftwareBitmap:=ComValue(13,0)) ; GetSoftwareBitmapTransformedAsync |
|
|
|
this.WaitForAsync(&SoftwareBitmap) |
|
; this.CloseIClosable(BitmapFrameWithSoftwareBitmap) ; Implemented, but is it necessary? |
|
this.CloseIClosable(InMemoryRandomAccessStream) |
|
sbW := sW, sbH := sH |
|
return SoftwareBitmap |
|
} |
|
|
|
static CreateDIBSection(w, h, hdc?, bpp:=32, &ppvBits:=0) { |
|
local hdc2 := IsSet(hdc) ? hdc : DllCall("GetDC", "Ptr", 0, "UPtr") |
|
, bi := Buffer(40, 0), hbm |
|
NumPut("int", 40, "int", w, "int", h, "ushort", 1, "ushort", bpp, "int", 0, bi) |
|
hbm := DllCall("CreateDIBSection", "uint", hdc2, "ptr" , bi, "uint" , 0, "uint*", &ppvBits:=0, "uint" , 0, "uint" , 0) |
|
if !IsSet(hdc) |
|
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hdc2) |
|
return hbm |
|
} |
|
|
|
/** |
|
* Creates an hBitmap of a region of the screen or a specific window |
|
* @param X Captured rectangle X coordinate. This is relative to the screen unless hWnd is specified, |
|
* in which case it may be relative to the window/client |
|
* @param Y Captured rectangle Y coordinate. |
|
* @param W Captured rectangle width. |
|
* @param H Captured rectangle height. |
|
* @param {Integer|Object} hWnd Window handle which to capture. Coordinates will be relative to the window. |
|
* hWnd may also be an object {hWnd, onlyClientArea, mode} where onlyClientArea:1 means the client area will be captured instead of the whole window (and X, Y will also be relative to client) |
|
* mode 0 uses GetDC + StretchBlt, mode 1 uses PrintWindow, mode 2 uses PrintWindow with undocumented PW_RENDERFULLCONTENT flag. |
|
* Default is mode 2. |
|
* @param {Integer} scale |
|
* @returns {OCR.IBase} |
|
*/ |
|
static CreateHBitmap(X, Y, W, H, hWnd:=0, scale:=1) { |
|
local sW := Ceil(W*scale), sH := Ceil(H*scale), onlyClientArea := 0, mode := 2, HDC, obm, hbm, pdc, hbm2 |
|
if hWnd { |
|
if IsObject(hWnd) |
|
onlyClientArea := hWnd.HasOwnProp("onlyClientArea") ? hWnd.onlyClientArea : onlyClientArea, mode := hWnd.HasOwnProp("mode") ? hWnd.mode : mode, hWnd := hWnd.hWnd |
|
HDC := DllCall("GetDCEx", "Ptr", hWnd, "Ptr", 0, "Int", 2|!onlyClientArea, "Ptr") |
|
if mode > 0 { |
|
PDC := DllCall("CreateCompatibleDC", "Ptr", 0, "Ptr") |
|
HBM := DllCall("CreateCompatibleBitmap", "Ptr", HDC, "Int", Max(40,X+W), "Int", Max(40,Y+H), "Ptr") |
|
, OBM := DllCall("SelectObject", "Ptr", PDC, "Ptr", HBM, "Ptr") |
|
, DllCall("PrintWindow", "Ptr", hWnd, "Ptr", PDC, "UInt", (mode=2?2:0)|!!onlyClientArea) |
|
if scale != 1 || X != 0 || Y != 0 { |
|
PDC2 := DllCall("CreateCompatibleDC", "Ptr", PDC, "Ptr") |
|
, HBM2 := DllCall("CreateCompatibleBitmap", "Ptr", PDC, "Int", Max(40,sW), "Int", Max(40,sH), "Ptr") |
|
, OBM2 := DllCall("SelectObject", "Ptr", PDC2, "Ptr", HBM2, "Ptr") |
|
, PrevStretchBltMode := DllCall("SetStretchBltMode", "Ptr", PDC, "Int", 3, "Int") ; COLORONCOLOR |
|
, DllCall("StretchBlt", "Ptr", PDC2, "Int", 0, "Int", 0, "Int", sW, "Int", sH, "Ptr", PDC, "Int", X, "Int", Y, "Int", W, "Int", H, "UInt", 0x00CC0020 | this.CAPTUREBLT) ; SRCCOPY |
|
, DllCall("SetStretchBltMode", "Ptr", PDC, "Int", PrevStretchBltMode) |
|
, DllCall("SelectObject", "Ptr", PDC2, "Ptr", obm2) |
|
, DllCall("DeleteDC", "Ptr", PDC) |
|
, DllCall("DeleteObject", "UPtr", HBM) |
|
, hbm := hbm2, pdc := pdc2 |
|
} |
|
DllCall("SelectObject", "Ptr", PDC, "Ptr", OBM) |
|
, DllCall("DeleteDC", "Ptr", HDC) |
|
, oHBM := this.IBase(HBM), oHBM.DC := PDC |
|
return oHBM.DefineProp("__Delete", {call:(this, *)=>(DllCall("DeleteObject", "Ptr", this), DllCall("DeleteDC", "Ptr", this.DC))}) |
|
} |
|
} else { |
|
HDC := DllCall("GetDC", "Ptr", 0, "Ptr") |
|
} |
|
PDC := DllCall("CreateCompatibleDC", "Ptr", HDC, "Ptr") |
|
, HBM := DllCall("CreateCompatibleBitmap", "Ptr", HDC, "Int", Max(40,sW), "Int", Max(40,sH), "Ptr") |
|
, OBM := DllCall("SelectObject", "Ptr", PDC, "Ptr", HBM, "Ptr") |
|
if sW < 40 || sH < 40 ; Fills the bitmap so it's at least 40x40, which seems to improve recognition |
|
DllCall("StretchBlt", "Ptr", PDC, "Int", 0, "Int", 0, "Int", Max(40,sW), "Int", Max(40,sH), "Ptr", HDC, "Int", X, "Int", Y, "Int", 1, "Int", 1, "UInt", 0x00CC0020 | this.CAPTUREBLT) ; SRCCOPY. |
|
PrevStretchBltMode := DllCall("SetStretchBltMode", "Ptr", PDC, "Int", 3, "Int") ; COLORONCOLOR |
|
, DllCall("StretchBlt", "Ptr", PDC, "Int", 0, "Int", 0, "Int", sW, "Int", sH, "Ptr", HDC, "Int", X, "Int", Y, "Int", W, "Int", H, "UInt", 0x00CC0020 | this.CAPTUREBLT) ; SRCCOPY |
|
, DllCall("SetStretchBltMode", "Ptr", PDC, "Int", PrevStretchBltMode) |
|
, DllCall("SelectObject", "Ptr", PDC, "Ptr", OBM) |
|
, DllCall("DeleteDC", "Ptr", HDC) |
|
, oHBM := this.IBase(HBM), oHBM.DC := PDC |
|
return oHBM.DefineProp("__Delete", {call:(this, *)=>(DllCall("DeleteObject", "Ptr", this), DllCall("DeleteDC", "Ptr", this.DC))}) |
|
} |
|
|
|
static CreateDirect3DSoftwareBitmapFromWindow(hWnd) { |
|
static init := 0, DXGIDevice, Direct3DDevice, Direct3D11CaptureFramePoolStatics, GraphicsCaptureItemInterop, GraphicsCaptureItemGUID, D3D_Device, D3D_Context |
|
local x, y, w, h, rect |
|
if !init { |
|
DllCall("LoadLibrary","str","DXGI") |
|
DllCall("LoadLibrary","str","D3D11") |
|
DllCall("LoadLibrary","str","Dwmapi") |
|
DllCall("D3D11\D3D11CreateDevice", "ptr", 0, "int", D3D_DRIVER_TYPE_HARDWARE := 1, "ptr", 0, "uint", D3D11_CREATE_DEVICE_BGRA_SUPPORT := 0x20, "ptr", 0, "uint", 0, "uint", D3D11_SDK_VERSION := 7, "ptr*", D3D_Device:=ComValue(13, 0), "ptr*", 0, "ptr*", D3D_Context:=ComValue(13, 0)) |
|
DXGIDevice := ComObjQuery(D3D_Device, IID_IDXGIDevice := "{54ec77fa-1377-44e6-8c32-88fd5f44c84c}") |
|
DllCall("D3D11\CreateDirect3D11DeviceFromDXGIDevice", "ptr", DXGIDevice, "ptr*", GraphicsDevice:=ComValue(13, 0)) |
|
Direct3DDevice := ComObjQuery(GraphicsDevice, IDirect3DDevice := "{A37624AB-8D5F-4650-9D3E-9EAE3D9BC670}") |
|
Direct3D11CaptureFramePoolStatics := this.CreateClass("Windows.Graphics.Capture.Direct3D11CaptureFramePool", IDirect3D11CaptureFramePoolStatics := "{7784056a-67aa-4d53-ae54-1088d5a8ca21}") |
|
GraphicsCaptureItemStatics := this.CreateClass("Windows.Graphics.Capture.GraphicsCaptureItem", IGraphicsCaptureItemStatics := "{A87EBEA5-457C-5788-AB47-0CF1D3637E74}") |
|
GraphicsCaptureItemInterop := ComObjQuery(GraphicsCaptureItemStatics, IGraphicsCaptureItemInterop := "{3628E81B-3CAC-4C60-B7F4-23CE0E0C3356}") |
|
GraphicsCaptureItemGUID := Buffer(16,0) |
|
DllCall("ole32\CLSIDFromString", "wstr", IGraphicsCaptureItem := "{79c3f95b-31f7-4ec2-a464-632ef5d30760}", "ptr", GraphicsCaptureItemGUID) |
|
init := 1 |
|
} |
|
; INIT done |
|
|
|
DllCall("Dwmapi.dll\DwmGetWindowAttribute", "ptr", hWnd, "uint", DWMWA_EXTENDED_FRAME_BOUNDS := 9, "ptr", rect := Buffer(16,0), "uint", 16) |
|
x := NumGet(rect, 0, "int"), y := NumGet(rect, 4, "int"), w := NumGet(rect, 8, "int") - x, h := NumGet(rect, 12, "int") - y |
|
ComCall(6, Direct3D11CaptureFramePoolStatics, "ptr", Direct3DDevice, "int", B8G8R8A8UIntNormalized := 87, "int", numberOfBuffers := 2, "int64", (h << 32) | w, "ptr*", Direct3D11CaptureFramePool:=ComValue(13, 0)) ; Direct3D11CaptureFramePool.Create |
|
if ComCall(3, GraphicsCaptureItemInterop, "ptr", hWnd, "ptr", GraphicsCaptureItemGUID, "ptr*", GraphicsCaptureItem:=ComValue(13, 0), "uint") { ; IGraphicsCaptureItemInterop::CreateForWindow |
|
this.CloseIClosable(Direct3D11CaptureFramePool) |
|
throw Error("Failed to capture GraphicsItem of window",, -1) |
|
} |
|
ComCall(10, Direct3D11CaptureFramePool, "ptr", GraphicsCaptureItem, "ptr*", GraphicsCaptureSession:=ComValue(13, 0)) ; Direct3D11CaptureFramePool.CreateCaptureSession |
|
|
|
GraphicsCaptureSession2 := ComObjQuery(GraphicsCaptureSession, IGraphicsCaptureSession2 := "{2c39ae40-7d2e-5044-804e-8b6799d4cf9e}") |
|
ComCall(7, GraphicsCaptureSession2, "int", 0) ; GraphicsCaptureSession.IsCursorCaptureEnabled put |
|
|
|
if (Integer(StrSplit(A_OSVersion, ".")[3]) >= 20348) { ; hide border |
|
GraphicsCaptureSession3 := ComObjQuery(GraphicsCaptureSession, IGraphicsCaptureSession3 := "{f2cdd966-22ae-5ea1-9596-3a289344c3be}") |
|
ComCall(7, GraphicsCaptureSession3, "int", 0) ; GraphicsCaptureSession.IsBorderRequired put |
|
} |
|
ComCall(6, GraphicsCaptureSession) ; GraphicsCaptureSession.StartCapture |
|
Loop { |
|
ComCall(7, Direct3D11CaptureFramePool, "ptr*", Direct3D11CaptureFrame:=ComValue(13, 0)) ; Direct3D11CaptureFramePool.TryGetNextFrame |
|
if (Direct3D11CaptureFrame.ptr != 0) |
|
break |
|
} |
|
ComCall(6, Direct3D11CaptureFrame, "ptr*", Direct3DSurface:=ComValue(13, 0)) ; Direct3D11CaptureFrame.Surface |
|
|
|
ComCall(11, this.SoftwareBitmapStatics, "ptr", Direct3DSurface, "ptr*", SoftwareBitmap:=ComValue(13, 0)) ; SoftwareBitmap::CreateCopyFromSurfaceAsync |
|
this.WaitForAsync(&SoftwareBitmap) |
|
|
|
this.CloseIClosable(Direct3D11CaptureFramePool) |
|
this.CloseIClosable(GraphicsCaptureSession) |
|
if GraphicsCaptureSession2 { |
|
this.CloseIClosable(GraphicsCaptureSession2) |
|
} |
|
if IsSet(GraphicsCaptureSession3) { |
|
this.CloseIClosable(GraphicsCaptureSession3) |
|
} |
|
this.CloseIClosable(Direct3D11CaptureFrame) |
|
this.CloseIClosable(Direct3DSurface) |
|
|
|
SoftwareBitmap.x := x, SoftwareBitmap.y := y, SoftwareBitmap.w := w, SoftwareBitmap.h := h |
|
return SoftwareBitmap |
|
} |
|
|
|
static HBitmapToRandomAccessStream(hBitmap) { |
|
static PICTYPE_BITMAP := 1 |
|
, BSOS_DEFAULT := 0 |
|
, sz := 8 + A_PtrSize*2 |
|
local PICTDESC, riid, size, pIRandomAccessStream |
|
|
|
DllCall("Ole32\CreateStreamOnHGlobal", "Ptr", 0, "UInt", true, "Ptr*", pIStream:=ComValue(13,0), "UInt") |
|
, PICTDESC := Buffer(sz, 0) |
|
, NumPut("uint", sz, "uint", PICTYPE_BITMAP, "ptr", IsInteger(hBitmap) ? hBitmap : hBitmap.ptr, PICTDESC) |
|
, riid := this.CLSIDFromString(this.IID_IPicture) |
|
, DllCall("OleAut32\OleCreatePictureIndirect", "Ptr", PICTDESC, "Ptr", riid, "UInt", 0, "Ptr*", pIPicture:=ComValue(13,0), "UInt") |
|
, ComCall(15, pIPicture, "Ptr", pIStream, "UInt", true, "uint*", &size:=0, "UInt") ; IPicture::SaveAsFile |
|
, riid := this.CLSIDFromString(this.IID_IRandomAccessStream) |
|
, DllCall("ShCore\CreateRandomAccessStreamOverStream", "Ptr", pIStream, "UInt", BSOS_DEFAULT, "Ptr", riid, "Ptr*", pIRandomAccessStream:=ComValue(13, 0), "UInt") |
|
Return pIRandomAccessStream |
|
} |
|
|
|
; Converts HBITMAP to SoftwareBitmap. NOTE: SetStretchBltMode HALFTONE breaks this |
|
; The optional transform parameter may contain {grayscale, invertcolors} |
|
static HBitmapToSoftwareBitmap(hBitmap, hDC?, transform?) { |
|
local bi := Buffer(40, 0), W, H, BitmapBuffer, MemoryBuffer, MemoryBufferReference, BufferByteAccess, BufferSize |
|
hDC := (hBitmap is OCR.IBase ? hBitmap.DC : (hDC ?? dhDC := DllCall("GetDC", "Ptr", 0, "UPtr"))) |
|
|
|
NumPut("uint", 40, bi, 0) |
|
DllCall("GetDIBits", "ptr", hDC, "ptr", hBitmap, "uint", 0, "uint", 0, "ptr", 0, "ptr", bi, "uint", 0) |
|
W := NumGet(bi, 4, "int"), H := NumGet(bi, 8, "int") |
|
|
|
ComCall(7, this.SoftwareBitmapFactory, "int", 87, "int", W, "int", H, "int", 0, "ptr*", SoftwareBitmap := ComValue(13,0)) ; CreateWithAlpha: Bgra8 & Premultiplied |
|
ComCall(15, SoftwareBitmap, "int", 2, "ptr*", &BitmapBuffer := 0) ; LockBuffer |
|
MemoryBuffer := ComObjQuery(BitmapBuffer, "{fbc4dd2a-245b-11e4-af98-689423260cf8}") |
|
ComCall(6, MemoryBuffer, "ptr*", &MemoryBufferReference := 0) ; CreateReference |
|
BufferByteAccess := ComObjQuery(MemoryBufferReference, "{5b0d3235-4dba-4d44-865e-8f1d0e4fd04d}") |
|
ComCall(3, BufferByteAccess, "ptr*", &SoftwareBitmapByteBuffer:=0, "uint*", &BufferSize:=0) ; GetBuffer |
|
|
|
NumPut("short", 32, "short", 0, bi, 14), NumPut("int", -H, bi, 8) ; Negative height to get correctly oriented image |
|
DllCall("GetDIBits", "ptr", hDC, "ptr", hBitmap, "uint", 0, "uint", H, "ptr", SoftwareBitmapByteBuffer, "ptr", bi, "uint", 0) |
|
if IsSet(transform) { |
|
if (transform.HasProp("grayscale") && transform.grayscale) |
|
DllCall(this.GrayScaleMCode, "ptr", SoftwareBitmapByteBuffer, "uint", w, "uint", h, "uint", (w*4+3) // 4 * 4, "cdecl uint") |
|
if (transform.HasProp("monochrome") && transform.monochrome) |
|
DllCall(this.MonochromeMCode, "ptr", SoftwareBitmapByteBuffer, "uint", w, "uint", h, "uint", (w*4+3) // 4 * 4, "uint", transform.monochrome, "cdecl uint") |
|
if (transform.HasProp("invertcolors") && transform.invertcolors) |
|
DllCall(this.InvertColorsMCode, "ptr", SoftwareBitmapByteBuffer, "uint", w, "uint", h, "uint", (w*4+3) // 4 * 4, "cdecl uint") |
|
} |
|
|
|
if IsSet(dhDC) |
|
DllCall("DeleteDC", "ptr", dhDC) |
|
BufferByteAccess := "", ObjRelease(MemoryBufferReference), MemoryBuffer := "", ObjRelease(BitmapBuffer) ; Release in correct order |
|
|
|
return SoftwareBitmap |
|
} |
|
|
|
static MCode(mcode) { |
|
static e := Map('1', 4, '2', 1), c := (A_PtrSize=8) ? "x64" : "x86" |
|
if (!regexmatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", &m)) |
|
return |
|
if (!DllCall("crypt32\CryptStringToBinary", "str", m.3, "uint", 0, "uint", e[m.1], "ptr", 0, "uint*", &s := 0, "ptr", 0, "ptr", 0)) |
|
return |
|
p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr") |
|
if (c="x64") |
|
DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", &op := 0) |
|
if (DllCall("crypt32\CryptStringToBinary", "str", m.3, "uint", 0, "uint", e[m.1], "ptr", p, "uint*", &s, "ptr", 0, "ptr", 0)) |
|
return p |
|
DllCall("GlobalFree", "ptr", p) |
|
} |
|
|
|
static DisplayHBitmap(hBitmap) { |
|
local gImage := Gui("-DPIScale"), W, H |
|
, hPic := gImage.Add("Text", "0xE w640 h640") |
|
SendMessage(0x172, 0, hBitmap,, hPic.hWnd) |
|
hPic.GetPos(,,&W, &H) |
|
gImage.Show("w" (W+20) " H" (H+20)) |
|
WinWaitClose gImage |
|
} |
|
|
|
static SoftwareBitmapToRandomAccessStream(SoftwareBitmap) { |
|
InMemoryRandomAccessStream := this.CreateClass("Windows.Storage.Streams.InMemoryRandomAccessStream") |
|
ComCall(8, this.BitmapEncoderStatics, "ptr", encoderId := Buffer(16, 0)) ; IBitmapEncoderStatics::PngEncoderId |
|
ComCall(13, this.BitmapEncoderStatics, "ptr", encoderId, "ptr", InMemoryRandomAccessStream, "ptr*", BitmapEncoder:=ComValue(13,0)) ; IBitmapEncoderStatics::CreateAsync |
|
this.WaitForAsync(&BitmapEncoder) |
|
BitmapEncoderWithSoftwareBitmap := ComObjQuery(BitmapEncoder, "{686cd241-4330-4c77-ace4-0334968b1768}") |
|
ComCall(6, BitmapEncoderWithSoftwareBitmap, "ptr", SoftwareBitmap) ; SetSoftwareBitmap |
|
ComCall(19, BitmapEncoder, "ptr*", asyncAction:=ComValue(13,0)) ; FlushAsync |
|
this.WaitForAsync(&asyncAction) |
|
ComCall(11, InMemoryRandomAccessStream, "int64", 0) ; Seek to beginning |
|
return InMemoryRandomAccessStream |
|
} |
|
|
|
static CreateClass(str, interface?) { |
|
local hString := this.CreateHString(str), result |
|
if !IsSet(interface) { |
|
result := DllCall("Combase.dll\RoActivateInstance", "ptr", hString, "ptr*", cls:=ComValue(13, 0), "uint") |
|
} else { |
|
GUID := this.CLSIDFromString(interface) |
|
result := DllCall("Combase.dll\RoGetActivationFactory", "ptr", hString, "ptr", GUID, "ptr*", cls:=ComValue(13, 0), "uint") |
|
} |
|
if (result != 0) { |
|
if (result = 0x80004002) |
|
throw Error("No such interface supported", -1, interface) |
|
else if (result = 0x80040154) |
|
throw Error("Class not registered", -1) |
|
else |
|
throw Error(result) |
|
} |
|
this.DeleteHString(hString) |
|
return cls |
|
} |
|
|
|
static CreateHString(str) => (DllCall("Combase.dll\WindowsCreateString", "wstr", str, "uint", StrLen(str), "ptr*", &hString:=0), hString) |
|
|
|
static DeleteHString(hString) => DllCall("Combase.dll\WindowsDeleteString", "ptr", hString) |
|
|
|
static WaitForAsync(&obj) { |
|
local AsyncInfo := ComObjQuery(obj, this.IID_IAsyncInfo), status, ErrorCode |
|
Loop { |
|
ComCall(7, AsyncInfo, "uint*", &status:=0) ; IAsyncInfo.Status |
|
if (status != 0) { |
|
if (status != 1) { |
|
ComCall(8, ASyncInfo, "uint*", &ErrorCode:=0) ; IAsyncInfo.ErrorCode |
|
throw Error("AsyncInfo failed with status error " ErrorCode, -1) |
|
} |
|
break |
|
} |
|
Sleep this.PerformanceMode ? -1 : 0 |
|
} |
|
ComCall(8, obj, "ptr*", ObjectResult:=this.IBase()) ; GetResults |
|
obj := ObjectResult |
|
} |
|
|
|
static CloseIClosable(pClosable) { |
|
static IClosable := "{30D5A829-7FA4-4026-83BB-D75BAE4EA99E}" |
|
local Close := ComObjQuery(pClosable, IClosable) |
|
ComCall(6, Close) ; Close |
|
} |
|
|
|
static CLSIDFromString(IID) { |
|
local CLSID := Buffer(16), res |
|
if res := DllCall("ole32\CLSIDFromString", "WStr", IID, "Ptr", CLSID, "UInt") |
|
throw Error("CLSIDFromString failed. Error: " . Format("{:#x}", res)) |
|
Return CLSID |
|
} |
|
|
|
static NormalizeCoordinates(result, scale, x:=0, y:=0) { |
|
local word |
|
if (scale == 1 && x == 0 && y == 0) |
|
return result |
|
for word in result.Words |
|
word.x := Integer(word.x / scale)+x, word.y := Integer(word.y / scale)+y, word.w := Integer(word.w / scale), word.h := Integer(word.h / scale), word.BoundingRect := {X:word.x, Y:word.y, W:word.w, H:word.h} |
|
return result |
|
} |
|
|
|
static __OpenPdfDocument(IRandomAccessStream, Password:="") { |
|
PdfDocumentStatics := this.CreateClass("Windows.Data.Pdf.PdfDocument", this.IID_IPdfDocumentStatics) |
|
ComCall(8, PdfDocumentStatics, "ptr", IRandomAccessStream, "ptr*", PdfDocument:=ComValue(13, 0)) ; LoadFromStreamAsync |
|
this.WaitForAsync(&PdfDocument) |
|
return PdfDocument |
|
} |
|
|
|
static __ExtractNamedParameters(obj, params*) { |
|
local i := 0 |
|
if !IsObject(obj) || Type(obj) != "Object" |
|
return 0 |
|
Loop params.Length // 2 { |
|
name := params[++i], value := params[++i] |
|
if obj.HasProp(name) |
|
%value% := obj.%name% |
|
} |
|
return 1 |
|
} |
|
|
|
static __ExtractTransformParameters(obj, &transform) { |
|
local scale := 1, grayscale := 0, invertcolors := 0, monochrome := 0, rotate := 0, flip := 0 |
|
if IsObject(obj) |
|
this.__ExtractNamedParameters(obj, "scale", &scale, "grayscale", &grayscale, "invertcolors", &invertcolors, "monochrome", &monochrome, "rotate", &rotate, "flip", &flip, "transform", &transform) |
|
|
|
if IsSet(transform) && IsObject(transform) { |
|
for prop in ["scale", "grayscale", "invertcolors", "monochrome", "rotate", "flip"] |
|
if !transform.HasProp(prop) |
|
transform.%prop% := %prop% |
|
} else |
|
transform := {scale:scale, grayscale:grayscale, invertcolors:invertcolors, monochrome:monochrome, rotate:rotate, flip:flip} |
|
|
|
transform.flip := transform.flip = "y" ? 1 : transform.flip = "x" ? 2 : transform.flip |
|
} |
|
|
|
static __DeleteProps(obj, props*) { |
|
if IsObject(obj) |
|
for prop in props |
|
obj.DeleteProp(prop) |
|
} |
|
|
|
/** |
|
* Converts coordinates between screen, window and client. |
|
* @param X X-coordinate to convert |
|
* @param Y Y-coordinate to convert |
|
* @param outX Variable where to store the converted X-coordinate |
|
* @param outY Variable where to store the converted Y-coordinate |
|
* @param relativeFrom CoordMode where to convert from. Default is A_CoordModeMouse. |
|
* @param relativeTo CoordMode where to convert to. Default is Screen. |
|
* @param winTitle A window title or other criteria identifying the target window. |
|
* @param winText If present, this parameter must be a substring from a single text element of the target window. |
|
* @param excludeTitle Windows whose titles include this value will not be considered. |
|
* @param excludeText Windows whose text include this value will not be considered. |
|
*/ |
|
static ConvertWinPos(X, Y, &outX, &outY, relativeFrom:="", relativeTo:="screen", winTitle?, winText?, excludeTitle?, excludeText?) { |
|
relativeFrom := relativeFrom || A_CoordModeMouse |
|
if relativeFrom = relativeTo { |
|
outX := X, outY := Y |
|
return |
|
} |
|
local hWnd := WinExist(winTitle?, winText?, excludeTitle?, excludeText?) |
|
|
|
switch relativeFrom, 0 { |
|
case "screen", "s": |
|
if relativeTo = "window" || relativeTo = "w" { |
|
DllCall("user32\GetWindowRect", "Int", hWnd, "Ptr", RECT := Buffer(16)) |
|
outX := X-NumGet(RECT, 0, "Int"), outY := Y-NumGet(RECT, 4, "Int") |
|
} else { |
|
; screen to client |
|
pt := Buffer(8), NumPut("int",X,pt), NumPut("int",Y,pt,4) |
|
DllCall("ScreenToClient", "Int", hWnd, "Ptr", pt) |
|
outX := NumGet(pt,0,"int"), outY := NumGet(pt,4,"int") |
|
} |
|
case "window", "w": |
|
; window to screen |
|
WinGetPos(&outX, &outY,,,hWnd) |
|
outX += X, outY += Y |
|
if relativeTo = "client" || relativeTo = "c" { |
|
; screen to client |
|
pt := Buffer(8), NumPut("int",outX,pt), NumPut("int",outY,pt,4) |
|
DllCall("ScreenToClient", "Int", hWnd, "Ptr", pt) |
|
outX := NumGet(pt,0,"int"), outY := NumGet(pt,4,"int") |
|
} |
|
case "client", "c": |
|
; client to screen |
|
pt := Buffer(8), NumPut("int",X,pt), NumPut("int",Y,pt,4) |
|
DllCall("ClientToScreen", "Int", hWnd, "Ptr", pt) |
|
outX := NumGet(pt,0,"int"), outY := NumGet(pt,4,"int") |
|
if relativeTo = "window" || relativeTo = "w" { ; screen to window |
|
DllCall("user32\GetWindowRect", "Int", hWnd, "Ptr", RECT := Buffer(16)) |
|
outX -= NumGet(RECT, 0, "Int"), outY -= NumGet(RECT, 4, "Int") |
|
} |
|
} |
|
} |
|
} |
|
|
|
; Still sane, Exile? |
Can you make it so instead of moving the mouse back to original position but move to item found, if one is found? so if you go fast you don't accidentally skip one?