From 617f679912febdb206284d9e8a1340deb9c3b9f9 Mon Sep 17 00:00:00 2001
From: jamescussen <46733443+jamescussen@users.noreply.github.com>
Date: Thu, 22 Oct 2020 20:49:25 +1100
Subject: [PATCH] Add files via upload
---
TeamsPhoneScreenCaptureTool.ps1 | 2278 +++++++++++++++++++++++++++++++
1 file changed, 2278 insertions(+)
create mode 100644 TeamsPhoneScreenCaptureTool.ps1
diff --git a/TeamsPhoneScreenCaptureTool.ps1 b/TeamsPhoneScreenCaptureTool.ps1
new file mode 100644
index 0000000..f698e8b
--- /dev/null
+++ b/TeamsPhoneScreenCaptureTool.ps1
@@ -0,0 +1,2278 @@
+########################################################################
+# Name: Teams Phone Screen Capture Tool
+# Version: v1.0.0 (20/10/2020)
+# Original Release Date: 20/10/2020
+# Created By: James Cussen
+# Web Site: http://www.myteamslab.com
+# Notes: This is a PowerShell tool. To run the tool, open it from the PowerShell command line or right click on it and select "Run with PowerShell".
+# For more information on the requirements for setting up and using this tool please visit http://www.myteamslab.com.
+#
+# Copyright: Copyright (c) 2020, James Cussen (www.myteamslab.com) All rights reserved.
+# Licence: Redistribution and use of script, source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+# 1) Redistributions of script code must retain the above copyright notice, this list of conditions and the following disclaimer.
+# 2) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+# 3) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+# 4) This license does not include any resale or commercial use of this software.
+# 5) Any portion of this software may not be reproduced, duplicated, copied, sold, resold, or otherwise exploited for any commercial purpose without express written consent of James Cussen.
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; LOSS OF GOODWILL OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Prerequisites: You need a Microsoft Teams Phone to connect to
+# Known Issues: Doesn't work with AudioCodes phones because at the time of making it they don't support web based access to screen images.
+# Release Notes:
+# 1.00 - Initial Release
+#
+#########################################################################
+
+
+
+param (
+[parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
+[ValidateNotNullOrEmpty()]
+[string] $IPAddress = "10.0.0.10",
+
+[parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
+[ValidateNotNullOrEmpty()]
+[string] $DeviceType = "Poly",
+
+
+[parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
+[ValidateNotNullOrEmpty()]
+[string] $Password = "456"
+)
+
+
+$theVersion = $PSVersionTable.PSVersion
+$MajorVersion = $theVersion.Major
+
+Write-Host ""
+Write-Host "--------------------------------------------------------------"
+Write-Host "PowerShell Version Check..." -foreground "yellow"
+if($MajorVersion -eq "1")
+{
+ Write-Host "This machine only has Version 1 PowerShell installed. This version of PowerShell is not supported." -foreground "red"
+ exit
+}
+elseif($MajorVersion -eq "2")
+{
+ Write-Host "This machine has Version 2 PowerShell installed. This version of PowerShell is not supported." -foreground "red"
+ exit
+}
+
+
+add-type @"
+ using System.Net;
+ using System.Security.Cryptography.X509Certificates;
+
+ public class IDontCarePolicy : ICertificatePolicy {
+ public IDontCarePolicy() {}
+ public bool CheckValidationResult(
+ ServicePoint sPoint, X509Certificate cert,
+ WebRequest wRequest, int certProb) {
+ return true;
+ }
+ }
+"@
+[System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy
+[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls11
+
+
+
+
+# Set up the form ============================================================
+
+[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
+[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
+
+$objForm = New-Object System.Windows.Forms.Form
+$objForm.Text = "Teams Phone Screen Capture Tool 1.00"
+$objForm.Size = New-Object System.Drawing.Size(390,220)
+$objForm.MinimumSize = New-Object System.Drawing.Size(300,220)
+$objForm.StartPosition = "CenterScreen"
+#MyTeamsLab Icon
+[byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
+$ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
+$objForm.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
+$objForm.KeyPreview = $True
+$objForm.TabStop = $false
+
+
+$MyLinkLabel = New-Object System.Windows.Forms.LinkLabel
+$MyLinkLabel.Location = New-Object System.Drawing.Size(220,10)
+$MyLinkLabel.Size = New-Object System.Drawing.Size(130,15)
+$MyLinkLabel.DisabledLinkColor = [System.Drawing.Color]::Red
+$MyLinkLabel.VisitedLinkColor = [System.Drawing.Color]::Blue
+$MyLinkLabel.LinkBehavior = [System.Windows.Forms.LinkBehavior]::HoverUnderline
+$MyLinkLabel.LinkColor = [System.Drawing.Color]::Navy
+$MyLinkLabel.TabStop = $False
+$MyLinkLabel.Text = " www.myteamslab.com"
+$MyLinkLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right
+$MyLinkLabel.TextAlign = [System.Drawing.ContentAlignment]::BottomRight #TopRight
+$MyLinkLabel.add_click(
+{
+ [system.Diagnostics.Process]::start("http://www.myteamslab.com")
+})
+$objForm.Controls.Add($MyLinkLabel)
+
+
+$IPAddressLabel = New-Object System.Windows.Forms.Label
+$IPAddressLabel.Location = New-Object System.Drawing.Size(50,40)
+$IPAddressLabel.Size = New-Object System.Drawing.Size(80,15)
+$IPAddressLabel.Text = "IP Address:"
+$IPAddressLabel.TabStop = $false
+$IPAddressLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$objForm.Controls.Add($IPAddressLabel)
+
+
+#IPAddressTextBox ============================================================
+$IPAddressTextBox = new-object System.Windows.Forms.textbox
+$IPAddressTextBox.location = new-object system.drawing.size(130,40)
+$IPAddressTextBox.size= new-object system.drawing.size(150,23)
+$IPAddressTextBox.text = $IPAddress
+$IPAddressTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$IPAddressTextBox.tabIndex = 1
+$objform.controls.add($IPAddressTextBox)
+
+
+$BrandLabel = New-Object System.Windows.Forms.Label
+$BrandLabel.Location = New-Object System.Drawing.Size(50,70)
+$BrandLabel.Size = New-Object System.Drawing.Size(80,15)
+$BrandLabel.Text = "Phone Type:"
+$BrandLabel.TabStop = $false
+$BrandLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$objForm.Controls.Add($BrandLabel)
+
+$BrandDropDownBox = New-Object System.Windows.Forms.ComboBox
+$BrandDropDownBox.Location = New-Object System.Drawing.Size(130,70)
+$BrandDropDownBox.Size = New-Object System.Drawing.Size(150,15)
+$BrandDropDownBox.DropDownHeight = 100
+$BrandDropDownBox.tabIndex = 2
+$BrandDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$BrandDropDownBox.DropDownStyle = "DropDownList"
+
+[void] $BrandDropDownBox.Items.Add("Poly")
+[void] $BrandDropDownBox.Items.Add("Yealink")
+#[void] $BrandDropDownBox.Items.Add("AudioCodes")
+
+$objForm.Controls.Add($BrandDropDownBox)
+
+$DeviceType = $DeviceType.toLower()
+if($DeviceType -eq "yealink")
+{
+ $BrandDropDownBox.SelectedItem = "Yealink"
+}
+else
+{
+ $BrandDropDownBox.SelectedItem = "Poly"
+}
+
+
+$BrandDropDownBox.Add_SelectedIndexChanged({
+
+ if($BrandDropDownBox.SelectedItem -eq "Poly")
+ {
+ $PasswordTextBox.text = "456"
+ }
+ elseif($BrandDropDownBox.SelectedItem -eq "Yealink")
+ {
+ $PasswordTextBox.text = "admin"
+ }
+})
+
+#PasswordLabel ============================================================
+$PasswordLabel = New-Object System.Windows.Forms.Label
+$PasswordLabel.Location = New-Object System.Drawing.Size(50,100)
+$PasswordLabel.Size = New-Object System.Drawing.Size(80,15)
+$PasswordLabel.Text = "Password:"
+$PasswordLabel.TabStop = $false
+$PasswordLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$objForm.Controls.Add($PasswordLabel)
+
+
+#PasswordTextBox ============================================================
+$PasswordTextBox = new-object System.Windows.Forms.textbox
+$PasswordTextBox.location = new-object system.drawing.size(130,100)
+$PasswordTextBox.size = new-object system.drawing.size(150,23)
+$PasswordTextBox.text = $Password
+$PasswordTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$PasswordTextBox.tabIndex = 3
+$objform.controls.add($PasswordTextBox)
+
+
+# ScreenButton ============================================================
+$ScreenButton = New-Object System.Windows.Forms.Button
+$ScreenButton.Location = New-Object System.Drawing.Size(120,135)
+$ScreenButton.Size = New-Object System.Drawing.Size(130,23)
+$ScreenButton.Text = "Show Screen"
+$ScreenButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+$ScreenButton.Add_Click(
+{
+
+ [System.Windows.Forms.Application]::DoEvents()
+
+ $theIPAddress = $null
+ $theIPAddress = $IPAddressTextBox.Text
+
+ if($theIPAddress -ne $null)
+ {
+ $theBrand = $BrandDropDownBox.SelectedItem
+ $thePassword = $PasswordTextBox.text
+ Write-Host "INFO: Type Selected: $theBrand" -foreground yellow
+ $Script:ImageArrayResult = $null
+ ShowScreen -IPAddress $theIPAddress -Brand $theBrand -Password $thePassword
+ if($Script:ImageArrayResult -ne $null)
+ {
+ EditGifDialog -ImageArray $Script:ImageArrayResult
+ }
+
+ }
+
+})
+$objForm.Controls.Add($ScreenButton)
+
+
+$Script:ImageArrayResult = $null
+function ShowScreen([string]$IPAddress, [string] $Brand, [string] $Password)
+{
+
+ $SyncHash = [hashtable]::Synchronized(@{})
+ $SyncHash.boolWhile = $true
+ $SyncHash.IPAddress = $IPAddress
+ $SyncHash.Brand = $Brand
+ $SyncHash.Port = "443"
+ $SyncHash.Image = $null
+ if($SyncHash.Brand -eq "Poly")
+ {
+ $SyncHash.HTTPUsername = "Polycom"
+ $SyncHash.HTTPPassword = $Password
+ }
+ elseif($SyncHash.Brand -eq "Yealink")
+ {
+ $SyncHash.HTTPUsername = "admin"
+ $SyncHash.HTTPPassword = $Password
+ }
+
+ $SyncHash.UseHTTPS = $true
+
+ $SyncHash.screenConnected = $false
+
+ [byte[]]$SyncHash.connectingImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 46, 15, 20, 50, 14, 22, 56, 13, 24, 52, 15, 18, 62, 12, 17, 44, 18, 15, 62, 12, 22, 61, 12, 27, 48, 17, 17, 57, 14, 20, 65, 13, 13, 69, 11, 22, 44, 19, 21, 43, 19, 26, 72, 11, 17, 47, 18, 26, 55, 17, 14, 60, 16, 16, 50, 19, 23, 40, 22, 30, 84, 9, 23, 36, 25, 16, 34, 25, 26, 43, 23, 23, 92, 8, 22, 30, 27, 26, 29, 27, 30, 36, 25, 35, 40, 25, 23, 39, 25, 27, 24, 29, 35, 38, 25, 32, 27, 29, 26, 84, 12, 19, 26, 29, 31, 43, 24, 28, 68, 17, 22, 33, 28, 23, 34, 27, 32, 33, 27, 36, 37, 27, 24, 32, 29, 28, 31, 29, 32, 30, 30, 24, 77, 15, 30, 36, 28, 28, 33, 29, 28, 26, 32, 24, 25, 32, 28, 29, 31, 28, 30, 30, 37, 28, 31, 33, 97, 11, 19, 32, 30, 33, 23, 33, 33, 36, 29, 34, 30, 32, 29, 80, 17, 23, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 31, 33, 30, 78, 19, 27, 33, 33, 27, 40, 31, 31, 90, 16, 27, 96, 14, 32, 45, 31, 33, 34, 35, 33, 92, 18, 24, 113, 13, 34, 84, 24, 32, 106, 18, 31, 108, 18, 37, 38, 40, 37, 117, 17, 30, 117, 18, 37, 97, 25, 39, 99, 25, 34, 105, 23, 36, 42, 44, 41, 133, 19, 35, 115, 25, 43, 121, 23, 47,45, 47, 45, 131, 23, 45, 133, 23, 41, 111, 30, 42, 128, 29, 40, 109, 35, 42, 51, 53, 50, 122, 32, 48, 217, 3, 50, 151, 25, 45, 130, 32, 50, 143, 28, 52, 217, 5, 61, 160, 24, 49, 217, 6, 56, 55, 57, 54, 219, 8, 51, 160, 27, 45, 155, 28, 52,220, 11, 46, 210, 15, 47, 209, 15, 52, 135, 38, 55, 142, 36, 53, 220, 12, 52, 60, 62, 59, 137, 39, 51, 176, 27, 53, 219, 13, 62, 210, 17, 58, 220, 14, 57, 143, 40, 50, 203, 23, 44, 222, 17, 53, 212, 21, 49, 202, 24, 55, 212, 21, 54, 213, 22, 43, 211, 21, 64, 204, 25, 50, 169, 35, 61, 176, 33, 59, 155, 40, 55, 185, 31, 52, 169, 36, 56, 171, 36, 52, 212, 23, 60, 195, 29, 52, 203, 26, 61, 203, 26, 66, 214, 24, 50, 194, 29, 67, 186, 32, 63, 223, 21, 59, 164, 40, 60, 187, 33, 59,214, 25, 55, 186, 33, 69, 196, 31, 58, 195, 31, 63, 215, 26, 50, 165, 41, 66, 179, 37, 67, 69, 71, 69, 158, 44, 65, 206, 30, 57, 182, 38, 57, 217, 28, 51, 153, 47, 64, 182, 39, 63, 191, 37, 56, 173, 43, 65, 175, 43, 60, 191, 38, 62, 190, 38, 67, 165, 49, 57, 74, 76, 73, 202, 40, 68, 217, 36, 71, 79, 81, 78, 83, 85, 83, 88, 90, 87, 200, 56, 82, 200, 57, 88, 177, 65, 82, 204, 57, 78, 187, 62, 83, 94, 96, 93, 193, 66, 89, 102, 104, 101, 207, 83, 106, 203, 85, 99, 111, 113, 110,209, 84, 101, 198, 88, 97, 192, 89, 109, 204, 87, 106, 197, 90, 104, 175, 102, 112, 119, 121, 118, 124, 126, 123, 130, 132, 129, 135, 137, 134, 240, 105, 129, 222, 113, 133, 225, 113, 126, 139, 141, 138, 234, 114, 130, 235, 114, 139, 230, 117, 130, 225, 120, 136, 143, 145, 142, 231, 120, 140, 217, 125, 138, 207, 129, 146, 148, 150, 147, 197, 136, 146, 156, 158, 155, 163, 165, 162, 255, 137, 158, 255, 144, 169, 170, 172, 169, 255, 149, 171, 174, 177, 173, 245, 158, 164, 255, 155, 166, 253, 156, 174, 246, 160, 174, 179, 182, 178, 239, 167, 174, 187, 189, 186, 193, 195, 192, 198, 200, 197, 202, 205, 201, 255, 190, 208, 255, 191, 201, 206, 209, 205, 254, 198, 205, 210, 213, 209, 255, 199, 212, 214, 216, 213, 218, 221, 217, 255, 211, 224, 222, 224, 221, 255, 215, 224, 255, 219, 220, 225, 228, 224, 255, 224, 229, 230, 232, 229, 234, 237, 233, 255, 230, 241, 237, 240, 236, 255, 236, 239, 255, 236, 245, 254, 238, 253, 241, 244, 240, 255, 242, 236, 255, 242, 243, 254, 244, 250, 245, 248, 244, 250, 247, 252, 249, 251, 248, 255, 250, 242, 255, 250, 248, 255, 252, 251, 255, 252, 255, 251, 254, 250, 250, 254, 255, 254, 254, 245, 253, 255, 252, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116,101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 99, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 186, 112, 33, 16, 134, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 24, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57, 147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 81, 133, 10, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3,47, 84, 76, 184, 177, 99, 177, 103, 113, 8, 4, 193, 83, 34, 221, 131, 56, 36, 31, 100, 60, 16, 132, 231, 129, 53, 106, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 198, 17, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 119, 140, 214, 174, 97, 255, 45, 232, 153, 114, 12, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190,188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 129, 128, 145, 103, 48, 80, 54, 81, 11, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 46, 20, 151, 218, 132, 32, 56, 152, 22, 67, 192, 21, 52, 131, 131, 26, 209, 246, 87, 113, 34, 138, 168, 130, 9, 129, 89, 116, 28,106, 34, 248, 165, 130, 6, 26, 236, 48, 17, 8, 62, 200, 230, 163, 8, 34, 204, 160, 228, 111, 2, 225, 48, 209, 107, 158,37, 233, 3, 14, 21, 34, 133, 163, 143, 44, 213, 72, 160, 11, 38, 224, 56, 131, 13, 58, 254, 70, 164, 15, 51, 104, 80, 195, 14, 59, 36, 39, 89, 6, 40, 116, 208, 193, 5, 23, 48, 32, 129, 4, 12, 212, 9, 231, 8, 28, 116, 208, 66, 9, 37, 122, 134, 67, 17, 59, 168, 32, 2, 8, 61, 76, 233, 130, 143, 88, 106, 9, 225, 74, 74, 190, 232, 66, 11, 65, 252, 134, 195, 14, 55, 152, 80, 34, 12, 152, 246, 0, 130, 5, 12, 12, 64, 128, 3, 20, 132, 64, 3, 13, 73, 96, 128, 65, 8, 20, 56, 16, 1, 2, 23, 148, 176, 194, 11, 254, 56, 72, 232, 2, 144, 51, 100, 70, 99, 69, 74, 118, 169, 160, 162, 2, 42, 233, 215, 7, 24, 254, 150, 1, 164, 46, 148, 16, 4, 7, 157, 146, 128, 196, 19, 83, 188, 145, 201, 31, 160, 116, 210, 73, 32, 210, 46, 178, 8, 27, 111, 96, 225, 196, 15, 9, 12, 192, 0, 156, 122, 30, 10, 130, 6, 147, 173, 240, 42, 166, 51, 116, 9, 35, 175, 3, 190, 120, 163, 10, 51, 88, 88, 44, 10, 12, 36, 64, 65, 19, 103, 248, 1, 9, 36, 143, 60, 66, 200, 191, 120, 88, 98, 9, 31, 120, 224, 65, 72, 191, 144, 32, 146, 72, 31, 96, 76, 33, 4, 9, 3, 112, 192, 167, 11, 53, 40, 41, 153, 185, 43, 196, 144,46, 142, 236, 214, 56, 67, 154, 241, 174, 128, 66, 1, 16, 44, 240, 196, 26, 146, 36, 82, 200, 32, 99, 180, 225, 114, 27, 141, 196, 124, 7, 26, 101, 148, 113, 200, 24, 99, 204, 49, 134, 34, 113, 236, 33, 138, 35, 146, 88, 1, 197, 15, 16, 0,48, 130, 11, 72, 206, 64, 145, 185, 2, 37, 218, 177, 127, 126, 81, 228, 82, 153, 34, 20, 81, 66, 1, 33, 92, 33, 8, 35, 252, 226, 49, 72, 35, 56, 151, 209, 197, 33, 119, 148, 125, 136, 29, 46, 147, 109, 246, 29, 99, 52, 162, 70, 193, 143, 120, 18, 200, 21, 33, 36, 208, 2, 14, 47, 234, 250, 244, 254, 131, 81, 35, 69, 81, 133, 65, 116, 0, 64, 4, 90, 252, 225, 9, 31, 135, 196, 172, 56, 216, 99, 28, 226, 120, 226, 135, 212, 252, 248, 228, 143, 183, 129, 118, 35, 131, 64, 178, 200, 20, 36, 0, 208, 65, 165, 62, 238, 186, 55, 127, 26, 168, 80, 195, 74, 146, 149, 192, 192, 2, 74, 156, 161, 201, 35, 120, 152, 77, 57, 206, 180, 151, 129, 243, 226, 49, 59, 110, 118, 25, 47, 195, 204, 71, 33, 159, 244, 209, 196, 2, 12, 224, 32, 130, 6, 55, 220, 144, 129, 11, 154, 141, 206, 223, 12, 199, 87, 140, 131, 5, 23, 36, 144, 67, 22, 157, 24, 162, 134, 26, 141, 76, 94, 243, 247, 142, 211, 126, 187, 226, 145, 219, 76, 57, 239, 109, 220, 161, 179, 26, 133, 104, 194, 6, 18, 158, 155, 80, 169, 14, 37, 58, 223, 159, 103, 74, 218, 0, 2, 17, 4, 48, 33, 200, 38, 120, 72, 131, 34, 20, 97, 59, 156, 61, 174, 102, 104, 64, 67, 27, 10, 72, 62, 244, 185, 204, 102, 184, 19, 95, 204, 222, 246, 8, 78, 80, 97, 1, 23, 192, 129, 160, 124, 160, 33, 251, 229, 199, 56, 69, 112, 193, 8, 22, 144, 5, 79, 88, 66, 13, 135, 120, 160, 206, 104, 119, 192, 4, 46, 208, 118, 185, 115, 224, 203, 32, 24, 193, 220, 149, 173, 17, 150, 240, 3, 27, 8, 112, 129, 18, 37, 201, 131, 254, 250, 57, 77, 9, 46, 176, 128, 51, 64, 2, 15, 221, 211, 3, 26, 236, 224, 182, 49, 192, 112, 113, 141, 43, 159, 249, 190, 71, 197, 222, 221, 110, 16, 95, 195, 89, 218, 238, 80, 7, 75, 48, 130, 13, 14, 184, 64, 147, 128, 152, 159, 11, 9, 206, 1, 108, 16, 133, 204, 34, 215, 134, 46, 144, 47, 113, 109, 195, 93, 247, 164, 104, 62, 199, 117, 207, 138, 184, 179, 92, 2, 239, 16, 137, 70, 224, 193, 19, 127, 200, 1, 3, 74, 80, 36, 50, 226, 71, 3, 31, 0, 64, 14, 22, 177, 9, 196, 145, 45, 133, 99, 232, 194, 13, 187, 231, 64, 155, 221, 1, 138, 45, 163, 97, 35, 118, 39, 185, 196, 53, 34, 13, 119, 224,221, 18, 219, 112, 136, 52, 184, 77, 20, 146, 192, 128, 4, 68, 103, 200, 242, 248, 102, 6, 49, 8, 2, 0, 132, 240, 135, 71, 168, 97, 119, 181, 35, 91, 238, 202, 71, 51, 93, 42, 78, 139, 141, 147, 153, 236, 192, 183, 198, 222, 189, 44, 133, 153, 59, 3, 5, 16, 208, 129, 173, 176, 178, 149, 216, 185, 145, 174, 50, 80, 132, 223, 28, 74, 105, 28, 112, 192, 34, 68, 129, 196, 237, 241, 110, 151, 139, 83, 219, 29, 60, 185, 75, 244, 101, 178, 123, 107, 147, 98, 28, 121, 87, 134, 6, 190, 204, 143, 155, 48, 3, 13, 0, 208, 39, 14, 74, 72, 93, 235, 254, 130, 230, 117, 242, 166, 171, 88, 89, 68, 7, 63, 226,128, 2, 232, 0, 137, 9, 114, 207, 101, 114, 52, 96, 217, 198, 25, 199, 201, 1, 211, 113, 157, 60, 32, 66, 27, 145, 54, 183, 113, 143, 119, 104, 43, 195, 219, 8, 225, 5, 7, 140, 128, 154, 198, 185, 39, 188, 96, 201, 52, 125, 90, 7, 81, 127,241, 65, 166, 50, 96, 129, 32, 36, 224, 10, 158, 144, 67, 219, 184, 151, 66, 82, 206, 241, 118, 45, 163, 153, 57, 27, 183, 80, 220, 157, 141, 148, 143, 3, 219, 49, 237, 232, 182, 220, 245, 238, 14, 124, 240, 98, 19, 12, 208, 129, 113, 137,166, 7, 72, 241, 11, 73, 51, 102, 82, 234, 28, 74, 170, 21, 233, 129, 13, 244, 215, 1, 9, 12, 33, 17, 114, 80, 195, 28,98, 22, 201, 7, 62, 14, 167, 198, 68, 91, 250, 22, 186, 61, 197, 161, 15, 142, 113, 180, 220, 2, 229, 72, 201, 5, 46, 176, 108, 132, 224, 132, 18, 36, 144, 129, 27, 252, 5, 170, 49, 240, 209, 12, 74, 90, 85, 233, 92, 117, 73, 49, 192, 212,86, 123, 112, 1, 109, 22, 34, 103, 106, 192, 89, 23, 94, 216, 201, 39, 78, 180, 101, 104, 91, 168, 39, 29, 8, 215, 241,153, 149, 174, 141, 168, 217, 216, 30, 216, 136, 66, 44, 98, 1, 35, 184, 129, 6, 112, 112, 174, 23, 157, 192, 4, 175, 42, 254, 44, 117, 176, 74, 17, 28, 216, 160, 76, 56, 24, 192, 21, 32, 49, 136, 177, 70, 182, 11, 117, 172, 108, 1, 131, 41, 212, 204, 142, 243, 102, 57, 181, 41, 227, 60, 11, 212, 114, 218, 241, 146, 155, 180, 220, 229, 32, 241, 5, 3, 124, 64, 66, 175, 122, 1, 12, 164, 25, 131, 23, 200, 54, 58, 22, 161, 45, 69, 242, 198, 0, 33, 124, 66, 13, 131, 104, 171, 29,106, 182, 208, 154, 197, 176, 13, 113, 92, 110, 27, 18, 168, 7, 59, 166, 16, 13, 208, 93, 110, 92, 23, 88, 185, 25, 30,162, 173, 141, 152, 236, 203, 240, 48, 137, 33, 92, 160, 66, 64, 120, 129, 119, 221, 245, 93, 233, 132, 23, 94, 126, 187, 234, 8, 217, 128, 135, 54, 108, 239, 162, 118, 88, 104, 40, 219, 25, 218, 119, 46, 55, 133, 101, 64, 131, 30, 198, 137, 62, 14, 203, 151, 195, 21, 173, 89, 239, 32, 120, 201, 178, 189, 12, 13, 165, 61, 67, 2, 248, 212, 193, 6, 87, 167, 81, 171, 49, 129, 0, 154, 240, 9, 62, 0, 85, 197, 101, 208, 172, 123, 41, 186, 64, 180, 193, 149, 157, 143, 188, 131, 90,221, 216, 8, 2, 130, 248, 101, 151, 220, 30, 27, 103, 168, 73, 242, 181, 81, 13, 159, 112, 2, 3, 50, 226, 21, 196, 218,120, 58, 102, 100, 193, 25, 10, 113, 71, 255, 14, 19, 197, 46, 211, 131, 254, 229, 120, 122, 135, 177, 69, 185, 205, 11, 188, 29, 31, 184, 7, 92, 250, 90, 52, 134, 84, 236, 100, 30, 213, 247, 8, 54, 44, 160, 3, 61, 50, 65, 12, 152, 134, 227, 47, 47, 39, 159, 191, 105, 1, 3, 158, 112, 222, 232, 30, 243, 141, 194, 37, 91, 102, 83, 200, 68, 238, 13, 34, 96, 220, 211, 25, 230, 54, 17, 211, 77, 62, 114, 14, 119, 0, 112, 56, 43, 25, 206, 196, 225, 129, 17, 76, 0, 128, 6, 5, 189, 130, 18, 104, 204, 203, 134, 190, 13, 103, 2, 211, 1, 2, 188, 161, 160, 199, 141, 104, 3, 193, 247, 200, 67, 116, 97, 14,107, 69, 111, 33, 16, 209, 9, 102, 140, 98, 123, 99, 24, 196, 35, 192, 225, 139, 215, 89, 34, 13, 165, 228, 93, 124, 71, 237, 95, 220, 165, 33, 169, 98, 48, 0, 151, 44, 181, 130, 241, 194, 58, 214, 165, 9, 12, 211, 112, 132, 131, 11, 24, 97, 17, 143, 216, 100, 59, 185, 23, 90, 77, 150, 143, 114, 161, 76, 159, 205, 6, 81, 8, 71, 208, 194, 28, 237, 80, 5, 89,199, 192, 136, 118, 196, 195, 26, 169, 128, 4, 247, 198, 144, 6, 151, 229, 23, 210, 213, 86, 28, 40, 249, 141, 4, 14, 168, 107, 42, 136, 6, 247, 99, 196, 237, 221, 46, 197, 0, 0, 48, 117, 228, 76, 99, 166, 231, 119, 207, 17, 162, 160, 30, 39, 31, 254, 30, 49, 137, 98, 184, 227, 30, 241, 56, 133, 26, 218, 25, 6, 77, 180, 163, 31, 242, 40, 199, 43, 84, 54, 112, 245, 145, 115, 151, 16, 213, 179, 219, 28, 103, 135, 71, 96, 129, 153, 78, 43, 139, 196, 29, 227, 151, 236, 110, 87, 5, 32, 72, 128, 24, 6, 17, 185, 105, 59, 113, 138, 80, 222, 29, 219, 186, 48, 54, 53, 108, 194, 22, 220, 112, 7, 62, 252, 33, 143, 83, 80, 116, 12, 97, 72, 132, 59, 250, 129, 143, 121, 184, 131, 26, 125, 120, 4, 31, 208, 73, 197, 160, 150, 154, 168, 78, 180, 3, 30, 216, 64, 130, 14, 204, 64, 6, 50, 80, 1, 135, 134, 78, 24, 189, 155, 203, 34, 50, 48, 1, 10, 144, 192, 136, 57, 40, 48, 190, 78, 228, 239, 148, 97, 102, 54, 156, 205, 1, 189, 132, 96, 132, 48, 220, 33, 143, 173, 115, 29, 21, 44, 43, 67, 24, 28, 225, 14, 127, 248, 3, 31, 101, 31, 71, 45, 46, 65, 8, 104, 151, 216, 237, 13, 180, 99, 36, 121, 103, 137, 62, 24, 225, 2, 183, 141, 154, 208, 249, 62, 154, 208, 200, 160, 5, 8, 72, 2, 36, 50, 57, 134, 11, 119,152, 191, 57, 99, 225, 228, 112, 248, 137, 90, 128, 99, 30, 243, 208, 199, 214, 251, 209, 14, 84, 236, 97, 147, 113, 72, 68, 59, 60, 207, 15, 125, 212, 195, 236, 211, 8, 4, 30, 124, 254, 221, 70, 181, 17, 21, 108, 145, 182, 157, 26, 30, 33, 5, 9, 192, 96, 73, 46, 200, 0, 237, 113, 163, 164, 228, 201, 160, 3, 17, 200, 194, 35, 88, 24, 234, 139, 62, 176, 12, 43, 28, 67, 188, 47, 137, 135, 71, 104, 98, 24, 235, 48, 15, 248, 160, 15, 250, 176, 15, 251, 0, 115, 206, 151, 51, 141,32, 125, 254, 176, 15, 213, 87, 15, 214, 55, 15, 220, 32, 11, 176, 115, 75, 233, 147, 66, 227, 68, 86, 91, 36, 57, 138,99, 9, 98, 144, 0, 26, 82, 34, 205, 179, 126, 163, 209, 126, 56, 210, 1, 14, 64, 7, 243, 103, 64, 250, 5, 100, 166, 212, 86, 81, 118, 106, 182, 224, 13, 149, 7, 122, 91, 199, 15, 254, 192, 124, 167, 160, 127, 151, 36, 125, 3, 72, 128, 158,151, 131, 248, 208, 14, 198, 48, 9, 100, 182, 51, 167, 87, 102, 49, 51, 89, 139, 51, 8, 129, 64, 2, 234, 119, 17, 199, 65, 130, 165, 225, 43, 126, 113, 1, 33, 0, 10, 100, 150, 54, 55, 3, 95, 44, 132, 78, 25, 72, 48, 144, 48, 9, 195, 160, 117, 158, 103, 15, 250, 224, 15, 202, 39, 15, 242, 96, 12, 143, 96, 51, 138, 48, 126, 195, 80, 14, 200, 183, 117, 246, 96, 15, 251, 160, 134, 243, 176, 13, 173, 0, 9, 133, 32, 86, 119, 0, 109, 158, 228, 50, 97, 3, 51, 96, 19, 51, 254, 154, 128, 4, 22, 208, 60, 53, 70, 133, 164, 161, 2, 18, 64, 3, 157, 128, 68, 6, 55, 101, 180, 179, 70, 75, 116, 7, 163, 192, 8, 181, 192, 13, 108, 136, 15, 121, 72, 128, 252, 128, 15, 238, 0, 14, 178, 208, 72, 135, 120, 109, 132, 160, 9, 220, 240, 114, 121, 216, 128, 213, 135, 124, 238, 80, 132, 134, 32, 7, 95, 211, 83, 132, 24, 117, 186, 195, 8, 78, 208, 1, 94, 209, 136, 142, 72, 116, 18, 192, 4, 158, 128, 68, 188, 147, 107, 94, 104, 81, 119, 176, 64, 236, 227, 7, 101, 88, 121, 65, 168, 135, 216, 167, 125, 151, 116, 59, 138, 16, 73, 57, 100, 12, 53, 232, 128, 213, 151, 134, 164, 200, 135, 52, 39, 51, 68, 150, 73, 146, 68, 98, 93, 0, 9, 78, 208, 0, 83, 49, 130, 193, 56, 26, 32, 48, 0, 82, 0, 59, 171, 7, 119, 78, 247,120, 144, 48, 131, 53, 168, 134, 250, 192, 15, 177, 184, 14, 175, 192, 8, 120, 64, 83, 108, 214, 5, 138, 128, 67, 155, 32, 11, 158, 216, 15, 14, 40, 138, 159, 215, 14, 179, 152, 8, 123, 144, 73, 59, 21, 100, 143, 228, 50, 144, 48, 5, 1, 208, 2, 84, 197, 142, 237, 88, 24, 157, 145, 0, 94, 16, 144, 145, 52, 54, 158, 52, 109, 110, 131, 7, 137, 80, 12, 237, 0, 122, 65, 248, 131, 215, 231, 13, 156, 240, 254, 8, 97, 213, 56, 81, 228, 133, 138, 48, 7, 237, 132, 7, 130, 16, 13, 53, 104, 121, 159, 7, 122, 243, 48, 13, 167, 176, 50, 29, 134, 98, 227, 228, 98, 118, 80, 8, 92, 32, 0, 29, 144, 49, 32, 16,43, 29, 217, 24, 127, 3, 85, 74, 103, 9, 224, 167, 92, 115, 100, 54, 111, 115, 10, 158, 184, 117, 4, 248, 138, 160, 231, 14, 189, 240, 9, 21, 8, 73, 49, 35, 98, 165, 118, 7, 167, 246, 10, 229, 0, 141, 158, 71, 128, 214, 23, 115, 193, 0, 144, 1, 54, 89, 32, 118, 67, 243, 85, 8, 107, 192, 148, 43, 80, 36, 192, 24, 149, 109, 177, 17, 48, 64, 149, 75, 199, 113,230, 99, 64, 135, 160, 7, 245, 53, 126, 205, 32, 15, 121, 216, 141, 202, 135, 15, 242, 224, 13, 169, 0, 8, 115, 22, 51,30, 134, 122, 115, 52, 86, 143, 208, 7, 212, 0, 141, 112, 89, 15, 91, 135, 15, 235, 192, 9, 132, 16, 90, 106, 166, 64, 150, 20, 90, 104, 160, 151, 6, 192, 1, 43, 32, 25, 127, 9, 152, 107, 33, 152, 132, 249, 53, 31, 135, 92, 53, 51, 98, 119, 96, 9, 144, 240, 12, 102, 8, 153, 102, 103, 12, 130, 64, 8, 107, 247, 75, 104, 211, 123, 134, 57, 124, 23, 86, 8, 41, 217, 150, 248, 128, 131, 158, 87, 118, 235, 32, 9, 2, 23, 57, 46, 100, 62, 29, 254, 230, 154, 176, 41, 155, 180, 137, 23, 83, 129, 41, 49, 160, 116, 233, 181, 75, 181, 83, 6, 188, 233, 155, 205, 48, 15, 254, 80, 15, 16, 24, 129, 201, 144, 9, 182, 244, 73, 250, 53, 86, 110, 133, 6, 103, 5, 96, 106, 0, 9, 146, 112, 11, 236, 201, 143, 252, 88, 118, 238, 80, 9, 233, 54, 78, 217, 105, 95, 109, 240, 8, 107, 240, 154, 221, 86, 63, 223, 105, 23, 46, 129, 41, 73, 39, 6, 39, 68, 62, 81, 132, 64, 237, 36, 7, 144, 208, 152, 250, 8, 129, 122, 120, 12, 126, 112, 66, 142, 211, 6, 43, 132, 103, 52, 116, 59, 227, 148, 6, 131, 160, 9, 199, 128, 14, 55, 136, 131, 222, 216, 14, 4, 250, 73, 24, 72, 76, 221, 163, 160, 12, 186, 18, 179, 249, 160, 95, 17, 161, 21, 50, 0, 94, 80, 161, 224, 84, 62, 113, 198, 62, 207, 32, 15, 247, 240, 121, 162, 184, 15, 101, 183, 13, 168, 112, 68, 40, 244, 68, 183, 196, 59, 228, 132, 51, 129, 56, 114, 147, 48, 13, 148, 199, 146, 250, 40, 153, 235, 208, 7, 72, 84, 84, 237, 70, 67, 135, 240, 8, 95, 112, 0, 77, 57, 123, 60, 26, 22, 59, 241, 142, 33, 201, 61, 52, 165, 54, 53, 67, 59, 151, 198, 149, 160, 153, 134, 159, 119, 125, 98, 57, 9, 150, 16, 136, 203, 200, 97, 67, 134, 153, 11, 196, 7, 254, 140, 96, 11, 116, 8, 129, 150, 199, 15, 251, 160, 15, 243, 48, 14, 188, 80, 160, 19, 116, 158, 185, 227, 9, 103, 154, 166, 215, 180, 166, 119, 161, 36, 239, 24, 143, 86, 121, 81, 114, 58, 62, 110, 243, 8, 129, 160, 141, 54, 216, 128, 106, 40, 153, 238, 48, 13, 171, 160, 118, 203, 136, 6, 109, 3, 170, 161, 213, 8, 143, 224, 7, 211, 176, 14, 150, 135, 167, 160, 87, 15, 103, 183, 170, 209, 53, 92, 181, 51, 169, 92, 144, 145, 126, 131, 169, 110, 1, 75, 19, 225, 35, 145, 120, 9, 207, 150, 59, 110, 149, 140, 49, 115, 105, 158, 240, 10, 220, 16, 15, 73, 250, 150, 145, 57, 15, 229,64, 11, 202, 26, 98, 152, 51, 62, 208, 38, 171, 51, 136, 124, 251, 24, 141, 97, 57, 12, 137, 96, 149, 64, 101, 86, 52, 217, 54, 5, 199, 8, 79, 208, 0, 27, 32, 3, 26, 224, 2, 42, 69, 172, 107, 97, 3, 23, 129, 172, 70, 48, 137, 55, 199, 113,164, 85, 84, 189, 39, 170, 209, 16, 15, 165, 90, 128, 158, 39, 15, 238, 240, 12, 126, 112, 154, 219, 51, 7, 113, 168, 6, 124, 64, 8, 158, 208, 11, 90, 71, 128, 245, 224, 15, 246, 240, 147, 242, 192, 13, 169, 0, 86, 199, 180, 97, 162, 197, 54, 220, 51, 78, 140, 128, 4, 29, 112, 2, 175, 229, 2, 61, 16, 38, 246, 58, 254, 22, 46, 224, 46, 12, 144, 3, 127, 64, 8, 45, 243, 75, 137, 87, 81, 159, 116, 147, 244, 198, 8, 176, 0, 157, 209, 249, 147, 160, 55, 153, 181, 192, 8, 106, 64, 64, 109, 160, 162, 144, 176, 10, 52, 104, 131, 105, 152, 135, 94, 26, 12, 154, 80, 8, 182, 136, 66, 110, 247, 64, 110, 116, 80, 105, 112, 9, 36, 64, 49, 129, 119, 41, 45, 219, 22, 190, 50, 2, 182, 246, 134, 39, 218, 56, 156, 245, 130, 56, 51, 8, 26, 186, 8, 209, 208, 14, 208, 88, 170, 97, 9, 12, 120, 48, 89, 203, 72, 8, 193, 48, 14, 2, 104, 121, 25, 139, 170, 220, 208, 135, 17, 217, 123, 183, 228, 118, 153, 148, 56, 236, 198, 7, 129, 144, 0, 49, 80, 3, 122, 231, 160, 95, 11, 25, 2, 241, 34, 130, 131, 5, 144, 128, 158, 186, 68, 84, 83, 102, 159, 6, 37, 7, 167, 86, 11, 235, 224, 150, 55, 168, 124, 249, 70, 86, 122, 0, 8, 1, 72, 128, 160, 135, 131, 48, 183, 14, 197, 112, 9, 82, 219, 86, 52, 133, 179, 136, 25, 57, 161, 86, 8, 87, 48, 0, 61, 224, 40, 207, 212, 184, 87, 1, 113, 45, 208, 1, 72, 240, 9, 99, 80, 95, 108, 115, 115, 53, 21, 100, 184, 179, 114, 106, 0, 8, 139, 112, 124, 149, 183, 143, 252, 184, 15, 93, 183, 61, 203, 8, 8, 238, 0, 151, 150, 254, 39, 153, 222, 80, 11, 128, 128, 7, 52, 100, 74, 105, 208, 118, 200, 85, 87, 106, 249, 9, 71, 192, 0, 154, 98, 28, 138, 171, 187, 108, 58, 16, 142, 98, 0, 126, 176, 73, 122, 128, 100, 165, 150, 62, 138, 160, 59, 52, 117, 73, 132, 0, 7, 119, 91, 121, 246, 192, 143, 254, 208, 14, 94, 23, 51, 122, 112, 9, 213, 27, 141, 186, 250, 12, 175, 19, 64, 165, 52, 57,134, 88, 102, 138, 247, 50, 166, 69, 1, 25, 244, 148, 177, 178, 3, 228, 162, 190, 61, 202, 18, 74, 18, 0, 99, 150, 6, 106, 166, 120, 138, 99, 54, 109, 244, 78, 40, 20, 74, 119, 32, 7, 136, 32, 9, 219, 208, 188, 105, 56, 15, 1, 220, 61, 151, 240, 14, 251, 184, 134, 217, 10, 86, 136, 35, 59, 53, 101, 185, 84, 54, 89, 188, 131, 163, 29, 32, 25, 62, 240, 2, 32,96, 193, 17, 135, 193, 87, 161, 36, 15, 112, 4, 61, 246, 86, 30, 167, 89, 46, 99, 7, 106, 245, 72, 152, 83, 8, 254, 39,12, 1, 8, 129, 249, 6, 103, 101, 16, 195, 1, 218, 14, 210, 224, 7, 134, 112, 66, 233, 229, 118, 50, 84, 71, 83, 86, 141, 136, 160, 101, 45, 32, 16, 84, 229, 52, 70, 124, 196, 4, 49, 3, 13, 64, 1, 103, 192, 189, 25, 88, 188, 226, 84, 83, 43, 22, 62, 88, 4, 177, 155, 176, 10, 254, 219, 240, 14, 102, 167, 10, 203, 56, 89, 140, 80, 189, 216, 58, 11, 128, 32, 86, 27, 23, 168, 101, 252, 70, 192, 229, 54, 123, 208, 7, 36, 128, 2, 10, 242, 109, 111, 92, 21, 248, 58, 16, 55, 48, 1, 2, 48, 5, 159, 224, 54, 208, 37, 191, 228, 227, 78, 132, 216, 54, 87, 186, 138, 38, 135, 14, 170, 192, 110, 109, 176, 9, 235, 144, 170, 173, 240, 8, 117, 160, 8, 36, 138, 108, 19, 37, 84, 206, 42, 76, 115, 36, 7, 159, 96, 5, 1, 224, 36, 46, 146, 201, 89, 241, 37, 4, 209, 187, 23, 240, 3, 125, 176, 50, 151, 36, 69, 158, 20, 57, 55, 183, 83, 119, 149, 129, 40, 137, 117, 162, 0, 131, 203, 102, 174, 1, 217, 70, 192, 165, 62, 45, 211, 192, 140, 35, 71, 147, 116, 7, 133, 32, 9, 20, 48, 2, 195, 26, 88, 69, 76, 204, 76, 81, 104, 221, 214, 2, 45, 16, 0, 84, 192, 167, 36, 54, 87, 138, 227, 95, 122, 188, 78, 16, 116, 59, 150, 224, 47, 94, 131, 155, 35, 247, 8, 86, 89, 84, 138, 176, 68, 101, 144, 6, 160, 202, 110, 115, 132,59, 245, 247, 9, 24, 249, 1, 139, 219, 52, 235, 204, 206, 69, 1, 47, 195, 209, 106, 72, 51, 1, 44, 64, 160, 149, 99, 98, 68, 246, 192, 201, 232, 61, 119, 165, 54, 152, 163, 56, 145, 229, 75, 166, 84, 254, 6, 80, 204, 97, 55, 35, 142, 56, 199, 172, 161, 214, 122, 63, 208, 1, 26, 160, 52, 25, 99, 3, 121, 55, 104, 20, 93, 21, 130, 53, 104, 230, 34, 2, 27, 240,0, 88, 240, 8, 248, 21, 111, 52, 100, 163, 168, 204, 54, 183, 131, 62, 191, 150, 152, 118, 144, 212, 221, 51, 89, 115, 96, 95, 119, 80, 191, 13, 117, 122, 7, 84, 64, 15, 196, 7, 158, 112, 5, 118, 147, 36, 76, 131, 211, 127, 65, 85, 59, 237, 20, 61, 141, 49, 54, 160, 2, 31, 176, 0, 96, 26, 184, 111, 245, 113, 12, 173, 212, 70, 213, 6, 138, 224, 98, 241, 75, 74, 12, 197, 205, 54, 35, 136, 112, 218, 172, 189, 68, 98, 170, 231, 133, 166, 21, 2, 12, 0, 2, 208, 3, 34, 57, 77, 214,101, 13, 21, 79, 2, 3, 60, 96, 3, 241, 60, 4, 146, 192, 7, 248, 217, 8, 192, 198, 102, 143, 115, 92, 225, 115, 213, 247, 103, 185, 89, 109, 198, 207, 44, 62, 226, 180, 127, 255, 197, 200, 123, 224, 8, 66, 80, 0, 40, 144, 184, 34, 112, 91, 38, 0, 209, 139, 253, 20, 25, 97, 17, 143, 114, 55, 142, 205, 3, 46, 208, 0, 7, 64, 5, 155, 144, 6, 3, 103, 203, 186, 163, 217, 57, 71, 188, 37, 70, 166, 148, 115, 220, 14, 133, 162, 34, 236, 170, 69, 85, 6, 131, 128, 8, 86, 48, 0, 230, 254, 66, 36, 173, 61, 3, 31, 240, 1, 185, 27, 219, 81, 1, 19, 181, 45, 130, 18, 242, 1, 13, 240, 3, 94, 144, 110, 2, 36, 215, 155, 20, 111, 9, 135, 103, 47, 244, 204, 200, 221, 222, 77, 199, 217, 232, 51, 7, 115, 208, 5, 133, 64, 119, 21, 240,2, 43, 240, 148, 49, 224, 218, 130, 198, 178, 218, 45, 20, 74, 113, 33, 24, 82, 34, 19, 145, 1, 0, 112, 110, 5, 170, 156, 184, 169, 199, 233, 93, 87, 29, 231, 222, 199, 93, 95, 190, 250, 196, 107, 134, 67, 130, 240, 3, 173, 242, 2, 64, 16,43, 90, 197, 96, 255, 205, 20, 122, 113, 33, 22, 48, 224, 56, 192, 3, 49, 80, 94, 124, 74, 165, 191, 244, 50, 90, 196, 95, 165, 198, 107, 16, 142, 220, 141, 39, 62, 42, 102, 97, 166, 101, 4, 5, 176, 2, 64, 160, 227, 254, 180, 21, 31, 94, 20, 1, 222, 221, 32, 192, 3, 60, 0, 2, 18, 144, 4, 33, 202, 131, 130, 58, 81, 157, 13, 105, 48, 30, 227, 237, 13, 95, 240, 69, 54, 54, 30, 8, 80, 48, 0, 40, 224, 36, 25, 2, 149, 5, 17, 34, 63, 142, 19, 62, 161, 35, 143, 114, 41, 48, 128, 72,2, 0, 5, 126, 48, 103, 34, 12, 95, 205, 170, 115, 229, 244, 228, 80, 30, 69, 12, 254, 72, 132, 176, 8, 88, 16, 0, 29, 16, 4, 240, 220, 2, 254, 234, 199, 142, 239, 50, 209, 95, 94, 32, 43, 129, 41, 48, 128, 3, 203, 131, 33, 120, 115, 35, 45, 176, 99, 147, 64, 8, 117, 160, 152, 132, 88, 84, 206, 76, 188, 116, 4, 229, 201, 61, 162, 9, 100, 51, 236, 211, 9, 87,14, 209, 242, 115, 3, 37, 82, 4, 203, 67, 16, 127, 30, 232, 67, 225, 163, 180, 61, 230, 46, 80, 41, 59, 208, 1, 1, 0, 5, 154, 208, 167, 55, 68, 67, 185, 118, 64, 111, 30, 81, 200, 173, 107, 113, 154, 100, 135, 80, 8, 125, 160, 4, 76, 233, 87, 35, 101, 172, 193, 66, 232, 238, 2, 232, 166, 158, 18, 74, 33, 158, 126, 3, 207, 22, 240, 178, 62, 160, 3, 3, 144, 4, 125, 0, 64, 209, 149, 97, 166, 228, 105, 148, 51, 71, 224, 123, 220, 184, 14, 57, 12, 229, 219, 126, 4, 9, 98, 0, 5, 104, 42, 88, 91, 101, 3, 221, 157, 88, 232, 226, 46, 217, 157, 236, 38, 177, 34, 9, 1, 2, 64, 128, 41, 46, 224, 234, 44, 240, 5, 126, 48, 8, 118, 144, 64, 165, 4, 74, 23, 165, 107, 220, 14, 218, 7, 228, 61, 17, 181, 51, 165, 165, 9, 95, 0, 63, 31, 160, 90, 25, 96, 91, 233, 190, 238, 3, 145, 234, 239, 14, 239, 121, 33, 239, 5, 1, 3, 10, 246, 2, 61, 144, 1, 138, 59, 1, 11, 208, 4, 177, 78, 81, 217, 30, 254, 194, 108, 164, 157, 195, 13, 225, 188, 70, 147, 141, 160, 161, 147, 64, 5, 6, 112, 1, 132, 162, 229, 20, 177, 85, 74, 19, 44, 62, 110, 241, 55, 49, 23, 48, 129, 41, 10, 22, 155, 198, 227, 1, 173, 30, 0, 57, 192, 6, 159, 224, 53, 22, 197, 110, 236, 68, 240, 150, 62, 124, 109, 83, 8, 147, 176, 6, 78, 32, 0, 13, 96, 2, 56, 208, 3, 13, 42, 23, 195, 94, 241, 58, 79, 22, 1, 62, 241, 153, 194, 36, 183, 149, 36, 25, 112, 1, 4, 144, 4, 139, 144, 8, 176, 51, 103, 153, 214, 70, 223, 222, 244, 145, 131, 67, 143, 16, 60, 74, 96, 0, 85, 127, 3, 162, 129, 223, 13, 10, 207, 27, 177, 245, 92, 31, 232, 177, 242, 26, 31, 18, 18, 226, 121, 25, 46, 17, 43, 46, 160, 3, 32, 144, 41, 62,224, 2, 31, 48, 2, 18, 64, 0, 80, 240, 7, 141, 36, 189, 197, 171, 157, 185, 233, 237, 16, 21, 54, 167, 246, 7, 73, 64, 0, 12, 64, 4, 65, 240, 236, 2, 161, 93, 180, 237, 34, 61, 205, 34, 201, 174, 223, 76, 194, 250, 32, 193, 236, 101, 225, 18, 126, 97, 41, 204, 163, 96, 18, 162, 184, 155, 34, 1, 14, 32, 5, 102, 112, 9, 158, 224, 47, 150, 32, 7, 56, 231, 237,28, 120, 146, 253, 199, 8, 128, 96, 6, 76, 144, 3, 8, 176, 218, 250, 254, 51, 17, 78, 57, 152, 194, 156, 88, 143, 155, 250, 11, 193, 145, 255, 221, 60, 216, 191, 243, 207, 244, 40, 23, 224, 41, 57, 0, 5, 108, 32, 9, 154, 224, 135, 95, 243,61, 32, 29, 233, 153, 163, 9, 139, 144, 45, 57, 16, 1, 3, 112, 1, 107, 220, 27, 40, 177, 163, 93, 223, 20, 18, 210, 85,6, 64, 1, 73, 96, 5, 249, 146, 8, 0, 225, 233, 209, 64, 130, 3, 55, 49, 98, 228, 71, 204, 149, 36, 20, 8, 0, 224, 80, 2, 4, 136, 24, 21, 45, 94, 196, 152, 81, 227, 70, 142, 29, 61, 126, 4, 25, 82, 228, 72, 146, 37, 77, 158, 68, 153, 82, 229, 74, 148, 42, 84, 104, 48, 97, 162, 195, 5, 0, 3, 18, 144, 248, 33, 228, 9, 22, 44, 92, 124, 242, 116, 130, 228, 7, 137, 4, 3, 36, 48, 232, 208, 98, 199, 14, 138, 44, 157, 62, 133, 26, 85, 234, 84, 170, 85, 173, 58, 85, 33, 195, 131, 7, 17, 34, 102, 224, 192, 225, 2, 5, 135, 11, 12, 36, 72, 16, 96, 64, 64, 0, 6, 23, 80, 148, 88, 1, 4, 71, 69, 151, 117, 175, 222, 197, 155, 87, 239, 94, 190, 125, 67, 206, 232, 58, 67, 176, 75, 23, 25, 92, 180, 64, 140, 248, 195, 132, 9, 29, 92, 196, 0, 1, 3, 198, 68, 23, 46, 106, 212, 112, 233, 87, 243, 102, 206, 157, 61, 127, 254, 174, 40, 120, 34, 8, 176, 77, 113, 248, 16, 44, 56, 166, 138, 138, 48, 122, 244, 240, 129, 3, 68, 6, 195, 149, 65, 223, 198, 157, 91, 247, 238, 141,133, 93, 172, 88, 49, 49, 6, 142, 30, 146, 71, 131, 56, 140, 216, 197, 68, 24, 193, 129, 175, 224, 29, 93, 250, 116, 234, 121, 75, 148, 168, 12, 86, 182, 228, 225, 115, 43, 127, 127, 140, 17, 120, 69, 225, 213, 205, 159, 71, 159, 94, 35, 120, 246, 182, 99, 212, 85, 145, 122, 6, 235, 202, 202, 31, 75, 134, 161, 94, 255, 126, 254, 186, 193, 195, 7, 176, 174, 25, 108, 72, 205, 165, 152, 86, 27, 208, 6, 27, 250, 99, 176, 65, 7, 243, 146, 207, 165, 193, 234, 74, 46, 188, 208, 230, 11, 16, 190, 7, 55, 228, 176, 67, 15, 63, 4, 49, 68, 17, 71, 36, 177, 68, 19, 79, 68, 49, 69, 21, 87, 100, 177, 69, 23, 95, 132, 49, 70, 25, 103, 164, 177, 70, 27, 111, 196, 49, 71, 29, 119, 228, 241, 174, 101, 252, 241, 135, 156, 30, 135, 20, 105, 23, 108, 206, 129, 103, 159, 125, 224, 57, 39, 27, 98, 170, 120, 241, 71, 127, 156, 217, 72, 27, 32, 175, 33,50, 75, 142, 136, 81, 7, 72, 47, 191, 244, 7, 158, 106, 182, 104, 49, 27, 32, 113, 217, 40, 29, 32, 145, 209, 178, 77, 139, 40, 9, 7, 76, 57, 129, 220, 254, 135, 76, 22, 213, 180, 103, 9, 55, 247, 236, 200, 20, 53, 129, 100, 231, 26, 93, 76, 217, 194, 20, 92, 148, 209, 134, 30, 127, 210, 105, 209, 141, 125, 130, 228, 51, 210, 140, 200, 232, 210, 31, 123, 198, 220, 136, 146, 107, 178, 105, 113, 151, 43, 37, 5, 181, 34, 51, 253, 161, 103, 151, 146, 182, 80, 38, 28, 118, 236, 161, 39, 157, 107, 66, 209, 232, 26, 32, 119, 113, 229, 154, 115, 232, 217, 135, 30, 114, 126, 137, 117, 214, 90, 111, 205, 117, 215, 142, 126, 201, 70, 29, 92, 225, 249, 198, 84, 142, 118, 41, 246, 88, 113, 160, 49, 165, 34, 100, 230, 164, 211, 78, 89, 253, 33, 230, 162, 107, 105, 181, 21, 87, 93, 121, 221, 8, 85, 113, 146, 204, 213, 85, 69, 197, 9, 181, 63,93, 188, 4, 119, 164, 95, 42, 5, 19, 30, 52, 49, 34, 7, 200, 108, 30, 149, 115, 153, 140, 234, 245, 231, 222, 57, 245, 205, 200, 21, 113, 168, 173, 70, 35, 92, 248, 149, 211, 30, 88, 171, 161, 214, 31, 117, 44, 26, 216, 31, 88, 45, 226, 215, 223, 124, 53, 202, 5, 222, 57, 177, 76, 119, 191, 56, 251, 45, 73, 74, 106, 225, 161, 228, 162, 40, 236, 105, 24, 72,120, 244, 180, 232, 228, 148, 195, 100, 217, 162, 92, 20, 109, 88, 89, 139, 144, 65, 121, 228, 138, 186, 105, 56, 156, 138, 138, 254, 80, 244, 225, 150, 115, 110, 120, 101, 140, 126, 33, 154, 218, 118, 59, 70, 207, 21, 58, 89, 33, 105, 90,32, 207, 81, 198, 20, 55, 112, 177, 18, 200, 130, 45, 194, 229, 75, 118, 160, 113, 133, 12, 87, 70, 245, 39, 150, 139, 186, 246, 242, 235, 176, 199, 246, 210, 108, 139, 98, 65, 217, 158, 110, 136, 113, 101, 11, 74, 118, 225, 183, 155, 139,118, 193, 87, 157, 101, 234, 14, 37, 150, 101, 190, 209, 187, 34, 151, 25, 213, 40, 22, 32, 181, 57, 219, 107, 176, 197, 38, 219, 237, 138, 112, 201, 217, 111, 86, 196, 70, 166, 155, 156, 75, 102, 58, 61, 103, 128, 252, 134, 36, 82, 224, 185, 178, 8, 140, 70, 21, 210, 162, 207, 45, 117, 6, 74, 139, 150, 32, 221, 159, 92, 46, 90, 221, 158, 214, 47, 130, 29, 200, 217, 43, 34, 67, 205, 116, 92, 153, 20, 101, 161, 99, 160, 36, 118, 109, 236, 228, 40, 23, 32, 177, 217, 72, 74, 42, 85, 7, 210, 118, 215, 43, 202, 93, 246, 150, 255, 60, 126, 95, 135, 59, 87, 239, 27, 32, 159, 23, 233, 218, 194, 49, 114, 218, 31, 118, 46, 226, 217, 31, 101, 52, 58, 7, 72, 168, 45, 74, 127, 253, 140, 218, 247, 231, 253, 24, 160, 33, 181, 148, 141, 216, 9, 211, 34, 134, 253, 17, 135, 233, 60, 242, 191, 108, 105, 36, 107, 146, 139, 65, 252, 254, 216, 231, 62, 139, 72, 41, 128, 25, 169, 2, 202, 24, 199, 61, 244, 84, 106, 119, 33, 217, 2, 233, 236, 65, 10, 141, 44, 225, 81, 240, 184, 8, 255, 252, 161, 191, 140, 116, 9, 132, 33, 4, 18, 9, 49, 98, 194, 150, 197, 238, 101, 136, 171, 2, 233, 246, 97, 191, 142, 196, 105, 31, 110, 216, 72, 151, 232, 33, 192, 138, 136, 80, 133, 23, 97, 161, 69, 212, 52, 67, 141, 172, 203, 31, 0, 163, 160, 121, 104, 70, 195, 143, 120, 202, 31, 227, 195, 200, 22, 128, 132, 184, 24, 144, 2, 72, 195, 187, 136, 27, 128, 228, 51, 139, 88, 113, 123, 25, 209, 162, 63, 184, 24, 3, 35, 190, 204, 31, 161, 139, 129, 19, 161, 216, 17, 69, 157, 35, 83, 64, 66, 87, 23, 175, 168, 145, 48, 142, 81, 113, 103, 220, 200, 255, 16, 152, 68, 233, 68, 193, 75, 28, 20, 201, 255, 144, 136, 145, 59, 142, 81, 106, 19, 60, 154, 214, 46, 114, 72, 141, 252, 66, 145, 21, 249, 159, 25, 183, 118, 173, 65, 114, 228, 142, 28, 203, 136, 35, 253, 129, 201, 24, 48, 50, 147, 143, 140, 193, 234, 192, 135, 145, 129, 209, 131, 143, 230, 241, 35, 144, 246, 232, 145, 172, 233, 98, 35, 248, 243, 7, 52, 44, 66, 201, 94, 249, 195, 149, 179, 4, 82, 37, 43, 114, 173, 91, 198, 32, 107, 54, 99, 229, 172, 64, 254, 178, 58, 96, 106, 11, 72, 5, 220, 101, 46, 107, 217, 203, 86, 106, 196, 101, 113, 60, 37, 117, 104, 54, 202, 143, 124, 236, 130, 23, 41, 194, 159, 36, 199, 47, 224, 101, 100, 96, 246, 64, 94, 12, 184, 169, 145, 111, 34, 239, 99, 243, 170, 38, 144, 122, 217, 17, 158, 237, 131, 12, 27, 137, 216, 196, 42, 50, 78, 111, 90, 202, 156, 170, 196, 24, 40, 163, 41, 157, 136, 169, 35, 156, 30, 241, 158, 250, 52, 178, 58, 104, 46, 1, 101, 39, 196, 136, 65, 253, 225, 198, 215, 29, 180, 131, 40, 99, 104, 69, 2, 170, 203, 141, 124, 140, 162, 25, 225, 31, 22, 177, 25, 52, 220, 57, 52, 35, 10, 141, 104, 12, 34, 182, 52, 255, 1, 137, 164, 251, 220, 141, 200, 186, 241, 206, 14, 18, 67, 28, 243, 194, 198, 212, 120, 40, 173, 71, 237, 227, 130, 104, 67, 35, 70, 148, 231, 15, 230, 113, 13, 116, 249, 228, 169, 49, 29, 6, 72, 143, 196, 116, 81, 44, 229, 8, 37, 230, 152, 184, 197, 53, 14, 143, 25, 217, 105, 79, 119, 102, 175, 76, 118, 233, 134, 40, 157, 78, 21, 224, 165, 14, 103, 196, 194, 13, 100, 96, 5, 46, 150, 161, 13, 13, 70, 161, 34, 78, 12, 210, 46, 66, 17, 138, 93, 164, 111, 147, 180, 251, 158, 70, 96, 201, 38, 232, 77, 73, 174, 107, 114, 106, 152, 156, 81, 254, 183, 45, 144, 34, 23, 202, 192, 70, 58, 108, 166, 73, 135, 33, 131, 21, 91, 40, 133, 88, 181, 161, 14, 179, 198, 128, 21, 94, 130, 70, 41, 220, 128, 12, 104, 58, 15, 174, 118, 205, 200, 92, 47, 2, 203, 125, 92, 35, 108, 172, 88, 6, 253, 22, 149, 17, 145, 161, 179, 129, 94, 50, 109, 69, 74, 139, 213, 167, 196, 130, 102, 47, 75, 221, 60, 83, 198, 41, 244, 157, 73, 35, 1, 253, 97, 250, 82, 43, 209, 20, 98, 36, 107, 13, 187, 42, 197, 82, 22, 209, 45, 36, 109, 106, 22, 57, 96, 109, 253, 177, 219, 24, 224, 246, 34, 166, 48, 174, 156, 104, 123, 145, 172, 237, 48, 35, 213, 157, 105, 69, 176, 203, 218, 167, 184, 2, 97, 115, 162, 71, 54, 16, 232, 167, 57, 217, 174, 132, 164, 202, 110,69, 72, 167, 81, 29, 166, 55, 6, 235, 133, 224, 111, 231, 4, 205, 138, 144, 66, 180, 96, 218, 199, 214, 68, 37, 167, 241, 181, 23, 136, 232, 213, 8, 124, 49, 34, 178, 47, 169, 227, 90, 116, 253, 47, 0, 53, 82, 41, 250, 90, 132, 193, 220, 141, 138, 46, 178, 145, 14, 92, 217, 3, 30, 228, 192, 6, 49, 254, 201, 59, 103, 144, 227, 88, 231, 168, 70, 180, 48, 226,197, 6, 87, 164, 124, 80, 36, 177, 70, 78, 188, 145, 92, 76, 88, 81, 246, 96, 199, 55, 160, 177, 202, 245, 24, 68, 97, 25, 227, 218, 135, 133, 195, 225, 12, 162, 26, 206, 25, 20, 182, 135, 58, 186, 113, 203, 80, 192, 241, 34, 41, 14, 24, 144, 214, 120, 86, 113, 28, 139, 28, 203, 136, 66, 76, 247, 193, 57, 139, 148, 194, 75, 250, 173, 242, 149, 51, 98, 101, 125, 66, 216, 203, 123, 169, 2, 255, 114, 250, 101, 50, 243, 167, 8, 233, 91, 103, 153, 213, 188, 155, 88, 176, 35, 195,135, 21, 91, 104, 155, 186, 102, 58, 167, 116, 184, 56, 172, 115, 158, 111, 67, 54, 254, 202, 83, 207, 127, 230, 12, 46, 174, 65, 142, 85, 229, 234, 28, 216, 96, 46, 160, 21, 189, 104, 70, 55, 218, 209, 143, 134, 116, 164, 37, 61, 105, 74,87, 218, 210, 151, 198, 116, 166, 53, 189, 105, 78, 119, 218, 211, 46, 210, 206, 167, 25, 13, 150, 139, 104, 199, 212, 165, 54, 245, 92, 42, 146, 234, 211, 136, 90, 209, 170, 30, 201, 169, 81, 61, 23, 82, 187, 218, 214, 183, 198, 117, 174,117, 189, 107, 94, 247, 218, 215, 191, 6, 118, 176, 133, 61, 108, 98, 23, 219, 216, 199, 70, 118, 178, 149, 189, 108, 102, 55, 219, 217, 207, 134, 118, 180, 165, 61, 109, 106, 87, 219, 218, 215, 198, 118, 182, 181, 189, 109, 110, 119, 219,219, 223, 6, 119, 184, 197, 61, 110, 28, 5, 4, 0, 59)
+ [byte[]]$SyncHash.screenCapErrorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59)
+
+
+ # SaveImageButton ============================================================
+ $SyncHash.SaveImageButton = New-Object System.Windows.Forms.Button
+ $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,230)
+ $SyncHash.SaveImageButton.Size = New-Object System.Drawing.Size(80,22)
+ $SyncHash.SaveImageButton.Text = "Save Image"
+ $SyncHash.SaveImageButton.Margin = 10
+ $SyncHash.SaveImageButton.Enabled = $false
+ $SyncHash.SaveImageButton.Add_Click(
+ {
+ #SAVE IMAGE
+ $img = $SyncHash.PictureBox.Image
+ SaveImageFile -bmp $img
+ })
+
+
+ $SyncHash.RecordingGIF = $false
+
+ # RecordGifButton button ============================================================
+ $SyncHash.RecordGifButton = New-Object System.Windows.Forms.Button
+ $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(200,230)
+ $SyncHash.RecordGifButton.Size = New-Object System.Drawing.Size(80,22)
+ $SyncHash.RecordGifButton.Text = "Record GIF"
+ #$SyncHash.RecordGifButton.Margin = 10
+ $SyncHash.RecordGifButton.ForeColor = "green"
+ $SyncHash.RecordGifButton.Enabled = $false
+ #$SyncHash.RecordGifButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $SyncHash.RecordGifButton.Add_Click(
+ {
+ Write-Host "INFO: Recording GIF" -foreground yellow
+ $SyncHash.RecordGifButton.Enabled = $false
+ $SyncHash.SaveImageButton.Enabled = $false
+ $SyncHash.StopRecordGifButton.Enabled = $true
+
+ #SAVE IMAGE
+ $imgArray = @()
+
+ $SyncHash.RecordingGIF = $true
+ While ($SyncHash.RecordingGIF)
+ {
+ [System.Drawing.Image]$imageObject = $SyncHash.PictureBox.Image
+ $imgArray += $imageObject
+ [System.Windows.Forms.Application]::DoEvents()
+ Start-Sleep -Milliseconds 500
+ [System.Windows.Forms.Application]::DoEvents()
+
+ }
+
+ $SyncHash.RecordGifButton.Enabled = $true
+ $SyncHash.SaveImageButton.Enabled = $true
+ $Script:ImageArrayResult = $imgArray
+ $SyncHash.form.Close()
+ })
+
+ # StopRecordGifButton ============================================================
+ $SyncHash.StopRecordGifButton = New-Object System.Windows.Forms.Button
+ $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(290,230)
+ $SyncHash.StopRecordGifButton.Size = New-Object System.Drawing.Size(80,22)
+ $SyncHash.StopRecordGifButton.Text = "Stop Record"
+ $SyncHash.StopRecordGifButton.Enabled = $false
+ $SyncHash.StopRecordGifButton.ForeColor = "red"
+ $SyncHash.StopRecordGifButton.Add_Click(
+ {
+ Write-Host "INFO: Stop Recording GIF" -foreground yellow
+ $SyncHash.RecordingGIF = $false
+ $SyncHash.StopRecordGifButton.Enabled = $false
+ })
+
+ $SyncHash.ImageWidth = 300
+ $SyncHash.ImageHeight = 300
+
+ # PictureBox ============================================================
+ $SyncHash.PictureBox = new-object Windows.Forms.PictureBox
+ $SyncHash.PictureBox.Location = New-Object System.Drawing.Size(10,10)
+ $SyncHash.PictureBox.width = 0
+ $SyncHash.PictureBox.height = 0
+ $SyncHash.PictureBox.BorderStyle = "FixedSingle"
+ $SyncHash.PictureBox.sizemode = "Autosize"
+ $SyncHash.PictureBox.Margin = 10
+ $SyncHash.PictureBox.WaitOnLoad = $true
+ $SyncHash.PictureBox.Image = $SyncHash.connectingImage
+
+ $SyncHash.PictureBox.Add_SizeChanged(
+ {
+ if($SyncHash.screenConnected)
+ {
+ if($SyncHash.ImageHeight -gt 700)
+ {
+ $SyncHash.PictureBox.sizemode = "StretchImage"
+ $SyncHash.PictureBox.width = ($SyncHash.ImageWidth / 2)
+ $SyncHash.PictureBox.height = ($SyncHash.ImageHeight / 2)
+
+ if($SyncHash.form -ne $null)
+ {
+ $SyncHash.form.Height = ($SyncHash.ImageHeight / 2) + 60
+ $SyncHash.form.Width = ($SyncHash.ImageWidth / 2) + 40
+ $SyncHash.form.Refresh()
+ [System.Windows.Forms.Application]::DoEvents()
+ }
+ }
+ else
+ {
+ $SyncHash.form.Refresh()
+ [System.Windows.Forms.Application]::DoEvents()
+ }
+ }
+
+ elseif(!$SyncHash.screenConnected)
+ {
+ $SyncHash.PictureBox.sizemode = "Autosize"
+ }
+
+ $width = $SyncHash.PictureBox.Width
+ $height = $SyncHash.PictureBox.Height
+ $SyncHash.SaveImageButton.Location = New-Object System.Drawing.Size(20,($height + 20))
+ $SyncHash.RecordGifButton.Location = New-Object System.Drawing.Size(($width - 150),($height + 20))
+ $SyncHash.StopRecordGifButton.Location = New-Object System.Drawing.Size(($width - 70),($height + 20))
+
+ $SyncHash.form.Refresh()
+ [System.Windows.Forms.Application]::DoEvents()
+ })
+
+ $SyncHash.PictureBox.Add_MouseDown(
+ {
+ #$script:startX = $_.X
+ #$script:startY = $_.Y
+ })
+
+ $SyncHash.PictureBox.Add_MouseUp(
+ {
+ #$X = $_.X
+ #$Y = $_.Y
+ })
+
+
+
+
+ # Create the form
+ $SyncHash.form = New-Object System.Windows.Forms.Form
+ $SyncHash.form.Text = "Screen"
+ $SyncHash.form.Size = New-Object System.Drawing.Size(100,100)
+ $SyncHash.form.FormBorderStyle = "FixedSingle"
+ $SyncHash.form.StartPosition = "CenterScreen"
+ $SyncHash.form.AutoSizeMode = "GrowAndShrink"
+ $SyncHash.form.AutoSize = $True
+ $SyncHash.form.Topmost = $True
+ $SyncHash.form.MaximizeBox = $False
+ $SyncHash.form.MinimizeBox = $False
+ $SyncHash.form.tag = $null
+ #$SyncHash.form.MaximumSize = New-Object System.Drawing.Size(500,370)
+ #Myteamslab Icon
+ [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
+ $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
+ $SyncHash.form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
+ $SyncHash.form.ShowInTaskbar = $true
+
+ $SyncHash.form.Add_Closing(
+ {
+ Write-Host "INFO: Closing window" -foreground yellow
+ $SyncHash.boolWhile = $false
+ }
+ )
+
+
+ # Add all of the controls to the form
+ $SyncHash.form.Controls.Add($SyncHash.PictureBox)
+ $SyncHash.form.Controls.Add($SyncHash.TextLabel)
+ $SyncHash.form.Controls.Add($SyncHash.SaveImageButton)
+ $SyncHash.form.Controls.Add($SyncHash.RecordGifButton)
+ $SyncHash.form.Controls.Add($SyncHash.StopRecordGifButton)
+
+
+ $runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($Host)
+ $runspace.Open()
+ $runspace.SessionStateProxy.SetVariable('SyncHash',$SyncHash)
+ $powershell = [System.Management.Automation.PowerShell]::Create()
+ $powershell.Runspace = $runspace
+
+
+ #THIS IS THE RUNSPACE CODE
+ $powershell.AddScript({
+
+ [string]$theIPAddress = $SyncHash.IPAddress
+ [string]$thePort = $SyncHash.Port
+ [byte[]]$errorImage = @(71, 73, 70, 56, 57, 97, 100, 1, 200, 0, 231, 255, 0, 66, 8, 18, 46, 15, 20, 51, 14, 17, 50, 14, 21, 74, 7, 17, 61, 11, 21, 75, 8, 11, 56, 13, 24, 62, 12, 17, 50, 15, 26, 44, 18, 15, 43, 18, 20, 61, 12, 27, 48, 17, 17, 57, 14, 20, 31, 22, 23, 65, 13, 13, 43, 19, 26, 90, 5, 21, 47, 18, 26, 55, 17, 14, 55, 17, 20, 60, 16, 16, 50, 19, 23, 71, 13, 17, 42, 22, 22, 40, 22, 30, 72, 13, 22, 46, 21, 23, 71, 13, 27, 32, 25, 29, 31, 26, 21, 36, 25, 16, 36, 24, 30, 38, 24, 26, 85, 10, 24, 30, 27, 26, 29, 27, 30, 36, 25, 35, 35, 26, 27, 40, 25, 23, 24, 29, 35, 27, 29, 26, 26, 29, 31, 43, 24, 28, 68, 17, 22, 45, 24, 24, 33, 27, 36, 68, 17, 26, 23, 31, 27, 37, 27, 24, 22, 31, 32, 35, 27, 32, 40, 26, 28, 28, 30, 28, 32, 29, 28, 31, 29, 32, 30, 30, 24, 36, 28, 28, 33, 29, 28, 26, 32, 24, 27, 31, 33, 40, 27, 33, 29, 31, 28, 30, 30, 37, 97, 11, 19, 32, 30, 33, 87, 14, 21, 35, 30, 24, 36, 29, 34, 25, 33, 29, 24, 33, 34, 82, 16, 23, 77, 18, 22, 30, 32, 29, 34, 31, 30, 33, 31, 34, 22, 35, 30, 26, 34, 30, 82, 17, 31, 31, 33, 30, 30, 33, 35, 33, 33, 27, 99, 13, 27, 40, 31, 31, 96, 14, 32, 91, 17, 28, 45, 31, 33, 80, 21, 29, 34, 35, 33, 93, 19, 25, 122, 12, 38, 124, 13, 29, 109, 18, 32, 95, 22, 38, 87, 25,34, 38, 40, 37, 116, 16, 37, 117, 17, 30, 105, 23, 32, 99, 25, 34, 111, 21, 39, 105, 24, 37, 42, 44, 41, 45, 47, 45, 103, 30, 40, 141, 19, 39, 110, 29, 42, 131, 23, 39, 122, 25, 50, 124, 26, 47, 118, 29, 50, 132, 25, 47, 49, 51, 48, 157, 18, 42, 114, 33, 44, 128, 29, 40, 143, 24, 47, 121, 32, 47, 128, 30, 45, 52, 54, 51, 152, 26, 46, 160, 24, 50, 218, 6, 56, 55, 57, 54, 218, 8, 51, 132, 35, 53, 154, 29, 52, 57, 59, 57, 140, 34, 52, 210, 15, 47, 220, 12, 46, 209, 15, 52, 135,38, 55, 165, 29, 52, 220, 12, 52, 219, 12, 57, 158, 32, 45, 137, 39, 51, 152, 36, 53, 221, 15, 53, 62, 64, 61, 143, 40,50, 168, 33, 49, 211, 19, 59, 221, 16, 58, 167, 33, 59, 212, 21, 49, 212, 21, 54, 176, 32, 59, 211, 21, 64, 203, 25, 55, 148, 42, 57, 223, 19, 54, 214, 23, 44, 162, 38, 58, 205, 26, 45, 203, 26, 61, 223, 20, 59, 214, 24, 50, 205, 27, 51, 214, 24, 55, 196, 30, 53, 194, 30, 68, 171, 38, 64, 180, 36, 56, 196, 31, 58, 215, 25, 61, 163, 41, 65, 179, 36, 66, 188,34, 60, 187, 34, 65, 69, 71, 68, 206, 30, 58, 174, 40, 59, 205, 30, 68, 197, 33, 64, 160, 45, 59, 190, 36, 56, 182, 39,63, 168, 44, 62, 189, 37, 71, 207, 33, 64, 73, 75, 72, 192, 39, 63, 191, 39, 68, 169, 47, 58, 77, 79, 77, 213, 40, 63, 215, 41, 63, 81, 83, 81, 215, 43, 70, 86, 88, 85, 215, 53, 72, 90, 92, 89, 95, 97, 94, 216, 65, 81, 100, 103, 100, 104, 106, 103, 109, 111, 108, 114, 116, 113, 116, 119, 116, 120, 122, 120, 123, 126, 123, 130, 132, 129, 134, 136, 133, 137, 139, 136, 142, 144, 141, 222, 123, 130, 147, 149, 146, 222, 130, 134, 150, 152, 149, 156, 158, 155, 226, 141, 147, 162, 164, 161, 227, 148, 152, 166, 168, 165, 170, 173, 170, 229, 156, 157, 229, 158, 165, 175, 177, 174, 230, 165, 170, 179, 182, 179, 231, 173, 175, 185, 187, 184, 235, 177, 179, 188, 191, 187, 193, 195, 192, 198, 200, 197, 202, 204, 201, 206, 208, 205, 239, 202, 203, 210, 212, 209, 214, 216, 213, 242, 213, 212, 219, 221, 218, 244, 217, 221, 222, 224, 221, 225, 227, 224, 243, 223, 225, 230, 232, 229, 249, 229, 231, 246, 233, 233, 234, 237, 233, 238, 240, 237, 250, 237, 238, 247, 241, 240, 241, 244, 240, 246, 248, 245, 252, 247, 246, 249, 251, 248, 255, 251, 250, 251, 253, 250, 255, 253, 251, 253, 255, 252, 30, 30, 30, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 100, 1, 200, 0, 0, 8, 254, 0, 127, 8, 28, 72, 176, 160, 193, 131, 8, 19, 42, 92, 200, 176, 161, 195, 135, 16, 17, 238, 216, 33, 208, 136, 192, 137, 20, 7, 98, 140, 200, 177, 163, 199, 143, 32, 67, 138, 28, 73, 178, 164, 201, 147, 40, 21, 78, 172, 120, 113, 165, 70, 151, 41, 99, 202, 156, 73, 179, 166, 205, 155, 56, 65, 194, 108, 89, 112, 99, 206, 159, 64, 131, 10, 29, 74, 212, 230, 206, 31, 71, 125, 22, 93, 202, 180, 169, 211, 167, 57,147, 102, 124, 9, 181, 170, 213, 171, 88, 179, 30, 148, 106, 112, 170, 214, 175, 96, 195, 138, 141, 121, 116, 36, 198, 179, 104, 207, 142, 93, 203, 182, 45, 81, 165, 36, 211, 202, 133, 235, 182, 174, 221, 187, 113, 213, 66, 212, 235, 17, 7, 14, 134, 126, 241, 10, 30, 44, 24, 109, 68, 190, 29, 3, 47, 84, 76, 184, 177, 99, 177, 103, 149, 8, 84, 193, 83, 34, 221, 131, 74, 36, 31, 100, 60, 80, 133, 231, 129, 66, 132, 60, 30, 77, 26, 43, 70, 205, 159, 47, 183, 44, 251, 121, 96, 102, 132, 156, 39, 183, 86, 18, 186, 180, 237, 219, 75, 79, 203, 70, 76, 144, 247, 143, 214, 174, 97, 255, 45, 232, 153, 242, 15, 218, 162, 113, 43, 95, 206, 188, 185, 243, 231, 208, 163, 75, 159, 78, 189, 186, 245, 235, 216, 179, 107, 223, 206, 189, 187, 247, 239, 224, 195, 254, 139, 31, 79, 190, 188, 249, 243, 232, 211, 171, 95, 207, 190, 189, 251, 247, 240, 227, 203, 159, 79, 191, 190, 253, 251, 248, 243, 235, 223, 207, 191, 191, 255, 255, 0, 6, 40, 224, 128, 51, 41, 229, 153, 111, 171, 121, 197, 81, 108, 155, 13, 71, 224, 131, 157, 169, 128, 145, 103, 49, 80, 54, 145, 14, 20, 25, 215, 155, 106, 15, 49, 248, 218, 64, 12, 66, 40, 224, 129, 59, 20, 151, 218, 132, 42, 56, 152, 22, 67, 192, 21, 180, 130, 131, 26,209, 246, 87, 113, 34, 138, 136, 3, 13, 129, 89, 116, 28, 106, 47, 250, 85, 66, 9, 76, 76, 164, 2, 20, 178, 249, 133, 195, 10, 72, 70, 17, 197, 111, 2, 41, 49, 209, 107, 158, 173, 16, 5, 20, 74, 84, 136, 20, 142, 70, 178, 84, 35, 129, 59, 208, 128, 227, 10, 71, 232, 248, 219, 144, 80, 172, 80, 130, 16, 76, 48, 145, 156, 100, 36, 200, 80, 131, 8, 25, 100, 192, 193, 5, 23, 112, 96, 103, 6, 46, 176, 128, 66, 13, 58, 16, 81, 162, 103, 74, 100, 193, 196, 145, 42, 56, 65, 229, 14,70, 102, 185, 37, 132, 43, 33, 249, 226, 14, 58, 80, 241, 155, 18, 76, 20, 225, 65, 137, 49, 100, 234, 132, 10, 15, 44,32, 0, 2, 24, 140, 48, 68, 16, 65, 76, 49, 133, 4, 67, 140, 128, 129, 5, 13, 100, 240, 65, 14, 254, 60, 40, 33, 225, 14, 63, 70, 145, 25, 141, 21, 33, 233, 165, 130, 139, 10, 136, 164, 95, 33, 156, 144, 33, 9, 39, 80, 177, 3, 17, 84, 160, 224, 105, 11, 95, 144, 97, 135, 34, 152, 196, 162, 139, 43, 212, 82, 75, 11, 45, 152, 220, 49, 135, 23, 88, 56, 32, 192,2, 120, 242, 137, 168, 10, 37, 76, 150, 3, 172, 49, 24, 177, 130, 151, 48, 246, 58, 96, 143, 95, 90, 184, 195, 7, 50, 44, 224, 192, 8, 97, 252, 81, 9, 44, 176, 152, 98, 138, 40, 0, 95, 114, 73, 43, 160, 8, 44, 138, 191, 176, 140, 178, 138,36, 117, 148, 49, 66, 11, 2, 160, 240, 193, 68, 66, 32, 41, 217, 185, 57, 252, 176, 46, 142, 238, 214, 184, 130, 154, 43, 168, 144, 131, 12, 10, 80, 176, 1, 25, 133, 160, 178, 74, 39, 167, 32, 194, 200, 203, 140, 132, 18, 10, 37, 147, 12, 210, 71, 31, 159, 32, 162, 51, 34, 145, 156, 98, 9, 44, 181, 160, 18, 136, 25, 88, 80, 16, 0, 11, 59, 36, 73, 209, 185, 2, 41, 218, 177, 127, 126, 81, 228, 146, 153, 43, 100, 65, 132, 2, 67, 176, 241, 136, 42, 253, 94, 2, 73, 40, 58, 223, 252, 201, 36, 100, 127, 146, 9, 35, 56, 147, 61, 201, 216, 136, 132, 66, 136, 192, 166, 224, 98, 8, 27, 67, 56, 112, 130,18, 47, 238, 250, 244, 254, 131, 81, 35, 69, 145, 17, 42, 80, 81, 67, 0, 22, 164, 17, 139, 42, 160, 124, 66, 137, 204, 148, 52, 174, 243, 39, 144, 43, 254, 137, 216, 145, 87, 14, 121, 31, 103, 83, 2, 9, 44, 155, 148, 209, 66, 0, 34, 176, 219, 247, 222, 1, 150, 128, 131, 16, 43, 73, 70, 196, 2, 27, 148, 241, 199, 44, 166, 92, 82, 182, 229, 59, 135, 173, 115,227, 184, 83, 2, 121, 217, 55, 247, 30, 10, 40, 157, 44, 28, 70, 7, 28, 224, 93, 130, 151, 36, 236, 160, 25, 233, 252, 69, 97, 102, 197, 74, 60, 144, 129, 3, 72, 208, 225, 202, 43, 132, 16, 18, 74, 229, 189, 83, 94, 59, 34, 185, 79, 142, 179, 229, 189, 79, 162, 51, 33, 157, 204, 18, 200, 19, 160, 123, 233, 193, 18, 37, 50, 223, 95, 148, 96, 170, 112, 5, 2, 98, 60, 34, 203, 37, 130, 32, 226, 73, 31, 59, 139, 220, 205, 6, 97, 51, 0, 130, 175, 113, 226, 235, 158, 226, 114, 87, 187, 198, 189, 205, 20, 164, 112, 3, 0, 92, 160, 132, 35, 65, 65, 67, 242, 203, 143, 113, 178, 176, 3, 22, 0, 224, 14, 170, 184, 4, 33, 62, 129, 54, 3, 6, 240, 114, 4, 236, 221, 1, 19, 216, 61, 156, 229, 206, 113, 50, 27, 219, 36, 40, 209, 138, 74, 4, 2, 1, 25, 40, 145, 148, 50, 168, 159, 211, 124, 32, 3, 254, 27, 248, 3, 44, 46, 161, 59, 77, 12, 34, 19, 110, 67, 4, 0, 95, 136, 136, 203, 81, 174, 133, 80, 188, 29, 36, 32, 65, 137, 176, 165, 141, 19, 173, 80, 69, 32, 8, 224, 130, 38, 241, 48, 63, 19, 57, 193, 224, 48, 128, 9, 88, 52, 110, 109, 189, 91, 156, 238, 20, 119, 192, 23, 58, 145, 114, 144, 211, 93, 247, 218, 56, 51, 204, 17, 112, 109, 161, 184, 4, 46, 22, 145, 4, 14, 124, 128, 72, 95, 196, 79, 9, 124, 16, 0, 36, 108, 66, 22, 137, 27, 219, 228, 148, 72, 54, 4, 182, 112, 108, 12, 84, 162, 11, 207, 136, 70, 202, 53, 78, 16,147, 24, 224, 217, 62, 33, 8, 183, 193, 2, 21, 18, 184, 0, 175, 2, 105, 30, 223, 172, 224, 7, 84, 8, 192, 8, 22, 97, 10, 66, 240, 110, 103, 105, 67, 160, 248, 108, 6, 73, 220, 217, 110, 129, 106, 123, 35, 46, 89, 216, 187, 201, 109, 238, 15, 35, 104, 64, 13, 182, 50, 74, 82, 102, 231, 70, 187, 34, 65, 22, 126, 131, 168, 40, 236, 0, 5, 24, 216, 196, 16, 221,70, 136, 155, 201, 50, 124, 185, 124, 161, 54, 113, 87, 182, 74, 46, 145, 18, 105, 116, 100, 31, 94, 150, 71, 89, 36, 34, 8, 1, 248, 211, 5, 37, 36, 58, 99, 114, 39, 111, 187, 146, 85, 12, 126, 176, 4, 28, 148, 0, 5, 16, 254, 112, 132, 25,41, 145, 189, 80, 88, 147, 137, 77, 204, 101, 27, 183, 233, 70, 1, 254, 83, 108, 252, 36, 4, 56, 25, 113, 182, 62, 188,77, 20, 121, 192, 0, 11, 148, 105, 28, 118, 30, 233, 148, 76, 115, 167, 117, 18, 245, 23, 40, 104, 138, 88, 84, 112, 0,27, 112, 1, 137, 182, 105, 79, 124, 146, 203, 25, 248, 148, 88, 64, 130, 186, 212, 165, 113, 228, 167, 35, 75, 56, 9, 80, 100, 241, 14, 5, 168, 1, 185, 68, 227, 4, 164, 248, 5, 163, 25, 211, 40, 117, 16, 245, 83, 129, 196, 192, 9, 71, 56, 130, 10, 106, 112, 129, 42, 172, 2, 18, 132, 56, 160, 36, 225, 120, 59, 37, 50, 226, 165, 88, 205, 170, 56, 203, 55, 9, 81, 144, 162, 12, 23, 32, 1, 199, 122, 250, 3, 35, 173, 32, 163, 66, 149, 14, 81, 145, 100, 212, 24, 28, 97, 6, 78, 112,1, 1, 54, 209, 137, 243, 89, 81, 129, 139, 212, 170, 94, 181, 218, 203, 151, 245, 129, 18, 157, 160, 197, 6, 88, 80, 132, 18, 40, 1, 93, 47, 122, 1, 13, 96, 149, 86, 234, 20, 149, 34, 74, 152, 65, 20, 12, 91, 1, 54, 192, 162, 164, 73, 132,227, 19, 255, 186, 215, 206, 18, 116, 134, 161, 200, 100, 38, 206, 22, 10, 88, 184, 161, 0, 33, 144, 16, 172, 120, 96, 4, 100, 254, 128, 7, 141, 141, 254, 142, 69, 30, 75, 145, 40, 220, 104, 1, 86, 200, 5, 33, 160, 170, 189, 76, 220, 76, 109, 255, 92, 160, 103, 135, 155, 187, 126, 46, 20, 102, 151, 72, 69, 21, 50, 80, 33, 41, 240, 0, 182, 61, 138, 173, 116,102, 123, 36, 191, 17, 149, 5, 27, 8, 196, 37, 24, 145, 61, 237, 97, 78, 109, 153, 228, 44, 113, 199, 251, 194, 208, 134, 183, 15, 131, 8, 69, 39, 254, 224, 128, 137, 97, 80, 186, 213, 113, 212, 106, 104, 112, 128, 45, 228, 2, 20, 227, 235, 94, 46, 255, 73, 222, 254, 106, 147, 132, 14, 93, 69, 26, 22, 144, 17, 175, 176, 21, 190, 67, 133, 84, 13, 58, 32, 137, 78, 108, 239, 145, 179, 19, 175, 127, 39, 140, 187, 62, 152, 207, 20, 129, 216, 128, 8, 242, 246, 3, 166, 201, 23, 193, 203, 105, 215, 100, 116, 176, 0, 50, 232, 54, 180, 10, 196, 29, 228, 226, 225, 143, 22, 187, 248, 197, 48, 142, 177, 140, 103, 44, 99, 121, 192, 244, 19, 121, 84, 133, 24, 2, 80, 65, 26, 116, 152, 8, 26, 59, 48, 136, 113, 195, 153, 192, 212, 0, 1, 138, 48, 227, 218, 80, 26, 211, 198, 177, 152, 198, 80, 142, 178, 148, 109, 236, 210, 80, 8, 194, 166, 122, 40, 64, 151, 104, 176, 131, 28, 80, 228, 195, 67, 190, 77, 96, 152, 134, 35, 37, 100, 64, 11, 180, 48, 5, 254, 138, 101, 10, 206, 73, 82, 226, 201, 82, 142, 179, 156, 91, 76, 101, 130, 90, 217, 124, 170, 120, 2, 10, 216, 53, 21, 17, 135, 121,52, 99, 134, 173, 151, 126, 16, 128, 145, 38, 18, 124, 10, 109, 179, 112, 225, 60, 231, 70, 211, 184, 206, 219, 28, 161, 217, 76, 49, 7, 97, 58, 173, 44, 127, 118, 140, 95, 86, 27, 3, 191, 168, 192, 1, 134, 128, 68, 94, 109, 201, 223, 55, 183, 184, 30, 20, 206, 170, 60, 232, 140, 85, 37, 102, 226, 18, 152, 104, 65, 13, 86, 0, 4, 32, 224, 128, 67, 153, 38, 204, 173, 207, 101, 17, 32, 208, 64, 6, 88, 80, 5, 34, 6, 193, 136, 182, 57, 46, 156, 78, 62, 117, 170, 177, 186, 106, 127, 64, 186, 188, 146, 100, 68, 43, 72, 161, 5, 23, 28, 161, 71, 184, 206, 181, 99, 66, 3, 132, 19, 52, 96, 12, 176, 144,36, 34, 186, 219, 230, 23, 62, 25, 213, 4, 253, 133, 103, 213, 77, 208, 102, 63, 251, 133, 56, 3, 32, 33, 76, 193, 133,11, 168, 235, 148, 59, 32, 129, 182, 113, 163, 43, 26, 0, 65, 4, 22, 160, 131, 41, 2, 56, 137, 236, 149, 59, 119, 231, 38, 40, 52, 236, 81, 141, 189, 86, 195, 30, 208, 104, 55, 171, 93, 138, 179, 153, 133, 162, 21, 122, 112, 128, 134, 74, 180, 188, 125, 143, 166, 223, 56, 16, 1, 6, 254, 28, 49, 240, 199, 85, 113, 103, 218, 76, 184, 54, 161, 145, 15, 127, 236, 163, 225, 89, 189, 198, 62, 252, 145, 143, 136, 107, 211, 221, 90, 149, 25, 36, 92, 209, 2, 125, 95, 228, 56, 30, 47,205, 175, 252, 146, 129, 33, 232, 194, 193, 222, 51, 96, 202, 149, 173, 77, 118, 184, 120, 31, 215, 192, 170, 204, 93, 252, 142, 109, 226, 252, 165, 51, 59, 224, 44, 176, 112, 183, 206, 4, 93, 57, 56, 184, 64, 16, 92, 113, 9, 127, 90, 56, 129, 3, 77, 182, 63, 208, 253, 66, 98, 188, 227, 233, 218, 112, 233, 54, 102, 222, 226, 120, 16, 195, 234, 19, 119, 233,236, 38, 161, 138, 47, 136, 192, 43, 239, 253, 250, 99, 194, 46, 134, 16, 154, 125, 201, 55, 75, 187, 169, 215, 78, 208, 96, 188, 189, 197, 251, 216, 198, 54, 231, 78, 245, 187, 227, 221, 217, 88, 229, 93, 31, 96, 145, 134, 8, 76, 165, 227, 130, 31, 141, 10, 42, 160, 134, 216, 73, 50, 166, 183, 51, 55, 211, 183, 25, 12, 167, 67, 190, 27, 47, 236, 6, 221, 253, 241, 142, 96, 184, 244, 234, 48, 93, 219, 203, 96, 241, 134, 1, 232, 32, 168, 160, 15, 125, 97, 58, 227, 128, 60, 136, 240, 244, 11, 84, 252, 226, 217, 190, 205, 95, 168, 227, 197, 223, 192, 221, 55, 94, 172, 14, 219, 223, 62, 239, 4, 149, 33, 67, 59, 254, 97, 135, 3, 212, 32, 99, 42, 144, 149, 240, 27, 67, 145, 163, 254, 192, 1, 122, 104, 69, 21, 17, 122, 77, 213, 51, 254, 165, 188, 120, 190, 139, 195, 65, 137, 112, 80, 159, 23, 204, 198, 254, 54, 27, 137, 222, 78, 20, 194, 251, 57, 64, 36, 129, 55, 126, 110, 177, 17, 230, 7, 106, 167, 208, 56, 222, 211, 68, 194, 133, 59, 42, 247, 82, 167,112, 14, 47, 246, 120, 45, 166, 14, 248, 151, 127, 152, 247, 82, 144, 212, 127, 133, 80, 0, 40, 144, 3, 146, 49, 128, 4, 200, 22, 27, 97, 4, 61, 133, 128, 139, 83, 57, 86, 180, 116, 239, 135, 85, 161, 32, 129, 49, 118, 14, 9, 168, 106, 250, 247, 95, 138, 51, 78, 254, 231, 129, 32, 200, 36, 35, 120, 23, 83, 97, 4, 22, 1, 106, 80, 21, 67, 42, 37, 73, 44, 200,124, 88, 5, 131, 46, 118, 14, 51, 163, 85, 184, 151, 125, 146, 195, 8, 166, 208, 129, 31, 40, 36, 61, 232, 131, 25, 1, 132, 159, 150, 126, 218, 51, 51, 57, 227, 68, 71, 184, 87, 74, 216, 98, 76, 168, 87, 79, 184, 77, 147, 244, 9, 83, 168, 131, 43, 33, 130, 87, 8, 22, 46, 161, 133, 21, 144, 7, 173, 144, 104, 107, 36, 71, 18, 166, 118, 72, 104, 103, 99, 184, 132, 77, 136, 129, 239, 6, 111, 11, 164, 134, 126, 192, 0, 223, 135, 105, 254, 111, 8, 25, 128, 55, 135, 34, 36, 83, 187, 19, 94, 97, 136, 85, 17, 56, 129, 247, 71, 131, 25, 72, 113, 156, 245, 9, 184, 224, 6, 134, 232, 101, 136, 114, 74, 137, 104, 23, 72, 50, 122, 165, 167, 126, 222, 37, 67, 223, 132, 112, 171, 71, 80, 241, 247, 98, 244, 103, 127, 46, 102, 129, 128, 216, 106, 153, 136, 11, 189, 167, 3, 126, 19, 138, 110, 129, 111, 68, 21, 118, 65, 80, 10, 173, 208, 73, 186, 83, 97, 169, 168, 135, 47, 229, 124, 208, 39, 125, 212, 103, 125, 18, 119, 137, 4, 165, 51, 86, 198, 8, 170, 64, 6, 17, 96, 2, 64, 80, 2, 59, 224, 81, 186, 184, 22, 71, 112, 17, 70, 114, 1, 90, 160, 11, 151, 128, 99, 240, 86, 106, 203, 231, 82, 173, 247, 116, 176, 151, 59, 178, 71, 117, 204, 120, 115, 53, 200, 68, 218, 179, 54, 170, 128, 5, 34, 240, 2, 138, 181, 3, 78, 48, 79, 219, 72, 130, 61, 194, 1, 72, 16, 11, 162, 160, 68, 77, 120, 87, 238, 183, 135, 141, 227, 120, 79, 39, 121, 218, 212, 142, 45, 246, 14, 150, 7, 143, 206, 184, 77, 110, 227, 79, 130, 80, 10, 45, 176, 3, 66, 224, 107, 37, 34, 38, 253, 56, 22, 191, 194, 2, 72, 102, 10, 236, 247, 56, 200, 118, 142, 218, 228, 118, 112, 39, 119, 179, 103, 119, 151, 23, 136, 185, 227, 254, 54, 139, 3, 10, 134, 224, 0, 63, 32, 4, 183, 22, 63, 31, 57, 22, 25, 241, 34, 131, 51, 7, 176, 208, 7, 154, 48, 54, 219, 51, 136, 18, 246, 128, 185, 227, 122, 46, 23, 117, 47, 53, 117, 15, 249, 146, 26, 56, 57, 5, 215, 9, 117, 32, 0, 78, 240, 40, 197, 180, 147, 166, 1, 34, 58, 32, 2, 95, 144, 11, 136, 48, 148, 230, 211, 128, 147, 227, 128, 171, 136, 59, 44, 231, 114, 48, 39, 117, 51, 151, 15, 210, 0, 149, 48, 53, 78, 147, 112, 9, 171, 16, 6, 11, 176, 41, 198, 129, 147, 90, 25, 22, 83, 241, 40, 48, 80, 9, 161, 165, 9, 189, 20, 62, 102, 217, 130, 47, 180, 112, 107, 153, 85, 15, 103, 115, 18, 9, 147, 107, 52, 78, 125, 208, 9, 155, 48, 2, 25, 32, 43, 183, 194, 4, 229, 178, 151, 95, 145, 133, 65, 54, 0, 127, 208, 9, 130, 32, 152, 150, 68, 73, 198, 152, 110, 235, 118, 125, 19, 153, 59, 55, 83, 66, 166, 224,7, 5, 32, 2, 146, 1, 5, 60, 160, 2, 152, 233, 103, 154, 137, 21, 82, 50, 1, 97, 112, 95, 171, 233, 68, 138, 163, 54, 40, 185, 108, 205, 8, 147, 171, 57, 9, 96, 51, 10, 94, 176, 0, 184, 216, 97, 77, 19, 34, 183, 249, 20, 160, 40, 16, 43, 16, 1, 35, 240, 7, 151, 112, 118, 120, 152, 54, 101, 254, 131, 148, 194, 249, 66, 103, 40, 75, 214, 68, 8, 150, 32, 9, 45,32, 3, 10, 34, 100, 207, 121, 21, 221, 56, 16, 52, 160, 1, 7, 80, 6, 185, 192, 79, 51, 212, 102, 110, 182, 120, 142, 118, 159, 49, 22, 136, 141, 4, 57, 144, 144, 11, 112, 48, 0, 78, 226, 34, 233, 153, 21, 96, 66, 16, 58, 80, 3, 46, 176, 1,13, 6, 9, 51, 148, 64, 70, 201, 104, 248, 25, 161, 250, 105, 156, 161, 213, 9, 168, 48, 2, 44, 144, 139, 101, 101, 155,3, 218, 20, 31, 230, 101, 58, 160, 3, 3, 208, 6, 169, 32, 59, 9, 164, 154, 125, 0, 161, 17, 122, 159, 142, 89, 112, 132, 144, 11, 118, 48, 0, 62, 144, 147, 205, 217, 161, 88, 113, 36, 195, 145, 3, 126, 178, 2, 26, 240, 4, 152, 96, 10, 6, 133, 162, 42, 186, 162, 141, 86, 103, 49, 245, 155, 132, 48, 109, 27, 80, 3, 37, 224, 76, 25, 115, 4, 182, 198, 156, 54, 10, 21, 102, 213, 97, 231, 178, 2, 38, 48, 1, 107, 96, 10, 131, 64, 54, 131, 73, 159, 201, 71, 51, 230, 211, 157, 113, 105, 64, 189, 3, 10, 184, 192, 6, 14, 160, 3, 82, 194, 52, 80, 250, 23, 65, 53, 165, 78, 81, 165, 24, 115, 4, 56, 16, 2, 0, 32, 9, 34, 228, 77, 41, 213, 128, 98, 154, 122, 100, 202, 77, 147, 19, 71, 254, 74, 164, 51, 146, 105, 0, 28, 160, 2,206, 3, 34, 81, 26, 167, 114, 10, 21, 79, 18, 3, 77, 112, 4, 58, 144, 0, 85, 64, 10, 160, 48, 8, 108, 4, 64, 50, 20, 57, 75, 6, 57, 169, 199, 75, 126, 74, 92, 192, 117, 118, 217, 163, 51, 150, 80, 11, 86, 160, 0, 50, 112, 147, 96, 178, 46,51, 250, 168, 79, 193, 153, 144, 162, 3, 85, 210, 4, 77, 176, 3, 17, 192, 0, 109, 32, 11, 130, 160, 61, 97, 243, 136, 228, 83, 159, 162, 42, 75, 150, 115, 172, 145, 131, 114, 251, 53, 8, 136, 6, 78, 144, 48, 10, 112, 80, 1, 231, 50, 36, 43, 48, 3, 43, 224, 3, 33, 144, 149, 178, 250, 19, 74, 81, 171, 28, 39, 33, 33, 16, 1, 27, 144, 7, 166, 64, 9, 253, 99, 62, 7, 228, 165, 143, 20, 62, 235, 186, 70, 200, 250, 174, 74, 39, 71, 104, 131, 54, 97, 99, 11, 129, 208, 2, 32, 192, 3, 57, 16, 126, 63, 112, 109, 131, 230, 145, 219, 42, 20, 221, 234, 173, 37, 50, 17, 36, 16, 0, 67, 176, 9, 106, 102, 62, 218, 67, 69, 217, 153, 98, 42, 134, 87, 238, 250, 174, 150, 51, 148, 38, 100, 85, 190, 149, 9, 224, 211, 10, 143, 128, 5,25, 64, 4, 60, 32, 5, 178, 130, 84, 209, 21, 176, 76, 161, 23, 23, 114, 2, 24, 162, 60, 77, 240, 254, 3, 184, 149, 10, 173, 48, 78, 194, 101, 85, 102, 202, 126, 224, 9, 71, 20, 139, 172, 101, 243, 61, 171, 233, 80, 129, 165, 5, 10, 144, 3,82, 32, 180, 178, 2, 176, 63, 103, 178, 111, 1, 19, 23, 130, 33, 42, 128, 171, 42, 112, 1, 93, 80, 9, 173, 128, 8, 141,68, 159, 156, 5, 177, 143, 217, 75, 57, 187, 181, 0, 196, 169, 153, 132, 62, 174, 96, 6, 2, 32, 3, 78, 146, 33, 226, 87, 16, 206, 137, 180, 55, 225, 19, 58, 2, 41, 152, 98, 4, 131, 116, 0, 102, 80, 9, 160, 224, 74, 149, 212, 70, 18, 171, 98, 44, 180, 181, 180, 99, 80, 98, 179, 54, 162, 176, 9, 107, 48, 0, 53, 64, 5, 58, 160, 178, 250, 6, 122, 55, 146, 182, 106, 91, 19, 37, 8, 132, 74, 144, 60, 24, 130, 55, 55, 162, 3, 7, 16, 6, 169, 32, 10, 156, 160, 9, 162, 217, 172, 14, 74, 150, 123, 203, 183, 201, 202, 128, 232, 69, 75, 96, 43, 182, 51, 234, 37, 92, 166, 2, 89, 144, 60, 4, 177, 184, 28, 218, 184, 142, 155, 133, 64, 232, 55, 43, 107, 41, 76, 32, 2, 3, 96, 6, 179, 32, 59, 252, 183, 75, 131, 122, 57, 55, 139, 179, 199, 10, 71, 142, 184, 59, 138, 100, 11, 146, 80, 6, 7, 32, 2, 69, 240, 83, 108, 229, 182, 63, 0, 132, 234, 226, 52, 178, 254, 27, 21, 48, 81, 187, 182, 171, 3, 15, 144, 52, 80, 176, 4, 2, 48, 5, 146, 176, 63, 40, 150, 9, 147, 208, 73,161, 117, 172, 89, 75, 188, 6, 101, 57, 186, 179, 54, 136, 240, 171, 121, 4, 11, 122, 96, 6, 12, 32, 2, 102, 53, 3, 73,229, 173, 211, 11, 132, 67, 167, 173, 215, 123, 18, 43, 146, 16, 42, 32, 5, 153, 178, 3, 34, 144, 0, 79, 0, 7, 149, 0, 9, 153, 64, 64, 156, 132, 73, 10, 165, 181, 131, 200, 100, 197, 203, 61, 84, 5, 62, 233, 227, 7, 88, 16, 0, 33, 64, 3, 37, 64, 2, 74, 144, 84, 251, 27, 162, 94, 97, 17, 217, 22, 192, 38, 49, 23, 7, 97, 4, 207, 197, 3, 78, 64, 2, 56, 169, 1,29, 16, 6, 179, 160, 126, 125, 32, 140, 140, 195, 167, 41, 197, 190, 195, 58, 62, 77, 4, 62, 155, 147, 10, 110, 0, 3, 25, 80, 40, 101, 75, 17, 73, 181, 2, 210, 187, 21, 42, 140, 19, 115, 145, 189, 46, 172, 175, 153, 177, 2, 41, 144, 187, 3, 128, 4, 129, 176, 10, 94, 147, 80, 137, 134, 87, 162, 251, 174, 96, 163, 94, 169, 16, 8, 94, 112, 0, 17, 64, 3, 74, 224, 4, 158, 40, 23, 23, 197, 196, 79, 60, 20, 124, 241, 131, 70, 96, 126, 148, 113, 4, 206, 19, 5, 36, 144, 1, 8, 208, 5,155, 176, 10, 254, 177, 83, 183, 192, 90, 66, 227, 19, 198, 220, 115, 113, 166, 144, 11, 203, 91, 0, 105, 76, 3, 162, 161, 175, 158, 104, 194, 43, 241, 198, 136, 24, 199, 150, 41, 25, 31, 18, 18, 181, 123, 25, 46, 33, 43, 59, 176, 4, 42, 160, 41, 80, 176, 3, 33, 192, 2, 23, 128, 0, 102, 176, 8, 136, 148, 61, 186, 87, 66, 71, 74, 177, 249, 21, 54, 151, 160, 10, 139, 48, 6, 8, 176, 0, 87, 64, 5, 194, 34, 16, 60, 144, 41, 72, 225, 34, 85, 202, 34, 215, 203, 175, 76, 66, 204, 32, 161, 189, 101, 225, 18, 126, 193, 101, 202, 243, 92, 18, 130, 147, 42, 112, 2, 23, 64, 0, 92, 32, 7, 165, 128, 11, 255, 210, 197, 19, 251, 195, 138, 227, 54, 112, 163, 10, 178, 240, 8, 98, 128, 4, 13, 208, 170, 51, 48, 43, 224, 103, 130, 1, 58, 189, 210, 25, 204, 11, 17, 124, 1, 187, 60, 240, 188, 182, 89, 9, 41, 46, 240, 41, 73, 96, 6, 129, 128, 10, 179, 0, 11, 157, 240, 53, 143, 52, 57, 48, 35, 196, 176, 48, 11, 155, 160, 8, 107, 144, 4, 22, 80, 1, 25, 176, 156, 26, 129, 18, 110, 24, 199, 78, 33, 33, 76, 85, 0, 35, 208, 5, 112, 176, 9, 149, 176, 10, 170, 224, 47, 30, 237, 209, 178, 160, 10, 170, 80, 9, 122, 80, 7, 93, 48, 2, 8, 16, 254, 0, 18, 211, 34, 18, 29, 29, 62, 226, 37, 53, 144, 1, 1, 32, 0, 14, 208,2, 88, 96, 5, 100, 176, 6, 115, 96, 7, 60, 61, 7, 107, 224, 5, 95, 128, 5, 45, 224, 0, 21, 80, 39, 124, 146, 38, 17, 221, 210, 33, 6, 4, 41, 144, 2, 73, 146, 25, 59, 32, 3, 40, 144, 1, 11, 64, 39, 7, 80, 0, 7, 48, 0, 224, 34, 3, 175, 34, 178, 205, 105, 189, 74, 13, 29, 142, 162, 36, 216, 38, 185, 33, 26, 162, 33, 160, 1, 26, 80, 3, 25, 146, 41, 36, 18, 26, 140, 27, 214, 203, 161, 36, 197, 113, 43, 77, 2, 5, 206, 3, 114, 21, 225, 4, 134, 34, 43, 36, 144, 60, 149, 44, 215, 202, 145, 111, 93, 182, 175, 148, 177, 198, 110, 93, 28, 181, 202, 180, 161, 188, 175, 24, 35, 216, 215, 65, 4, 126, 162, 60, 183, 82, 187, 175, 49, 192, 4, 145, 81, 44, 13, 217, 204, 17, 197, 202, 108, 86, 142, 242, 23, 75, 187, 18, 212, 203,217, 209, 113, 22, 28, 149, 218, 71, 114, 109, 67, 167, 186, 95, 66, 194, 166, 45, 214, 161, 125, 81, 137, 194, 191, 3,49, 116, 170, 29, 215, 177, 189, 219, 188, 221, 219, 190, 253, 219, 192, 29, 220, 194, 61, 220, 196, 93, 220, 198, 13, 22, 216, 208, 98, 237, 16, 219, 206, 48, 14, 238, 112, 15, 250, 160, 15, 247, 254, 224, 14, 228, 240, 12, 104, 64, 29, 214, 208, 98, 217, 128, 16, 229, 208, 98, 226, 240, 20, 183, 32, 103, 212, 224, 78, 207, 48, 15, 80, 118, 15, 222, 128, 7, 210, 65, 14, 45, 166, 12, 8, 1, 15, 45, 22, 13, 79, 17, 13, 114, 118, 12, 164, 196, 10, 233, 16, 103, 250, 160, 222, 209, 1, 223, 250, 0, 6, 99, 33, 14, 250, 189, 76, 95, 36, 12, 240, 221, 98, 244, 32, 14, 204, 32, 12, 120, 32, 12, 202, 64, 13, 229, 128, 15, 254, 0, 15, 210, 209, 8, 252, 224, 15, 203, 61, 22, 237, 208, 98, 207, 128, 96, 128, 96, 222, 254, 160, 15, 222, 16, 7, 8, 209, 8, 226, 64, 14, 210, 225, 12, 222, 61, 22, 103, 160, 15, 45, 198, 10, 8, 198, 222, 254, 128, 15, 205, 192, 17, 120, 64, 13, 233, 64, 15, 250, 128, 15, 240, 0, 14, 187, 112, 16, 2, 238, 15, 206, 80, 12, 224, 224,14, 248, 192, 15, 248, 208, 14, 29, 110, 16, 65, 62, 228, 69, 126, 228, 73, 190, 228, 8, 225, 12, 228, 48, 15, 248, 32,221, 232, 224, 12, 10, 65, 229, 86, 46, 221, 235, 192, 13, 192, 32, 16, 244, 61, 99, 252, 192, 223, 224, 192, 225, 6, 113, 227, 57, 190, 227, 61, 254, 227, 76, 222, 98, 78, 110, 228, 72, 174, 228, 28, 177, 12, 45, 70, 225, 14, 49, 14, 45, 86, 227, 254, 202, 80, 14, 58, 174, 15, 224, 32, 16, 122, 238, 15, 124, 238, 231, 209, 29, 232, 3, 161, 230, 58, 206, 227, 62, 126, 16, 131, 94, 232, 127, 142, 232, 217, 193, 12, 46, 38, 229, 15, 225, 12, 32, 14, 99, 247, 224, 222, 5, 177, 225, 254, 64, 14, 23, 30, 99, 214, 96, 16, 158, 14, 234, 50, 54, 234, 6, 97, 12, 235, 48, 99, 222, 112, 16, 202, 224, 233, 49, 166, 15, 183, 240, 3, 222, 64, 99, 243, 48, 16, 171, 238, 15, 110, 62, 16, 152, 46, 99, 155, 78, 234, 45, 102, 234, 162, 30, 17, 220, 16, 236, 15, 225, 14, 33, 110, 12, 249, 253, 98, 168, 142, 236, 250, 160, 236, 48, 134, 234, 63, 208, 235, 49, 246, 235, 5, 225, 236, 208, 206, 236, 219, 177, 236, 40, 30, 17, 217, 77, 99, 247, 0, 227, 3, 209, 226, 81, 118, 15, 0, 62, 238, 46, 126, 222, 231, 62, 16, 203, 32, 225, 52, 86, 227, 4, 17, 13, 233, 238, 235, 2, 97, 14, 52, 150,14, 2, 145, 5, 18, 126, 235, 4, 241, 237, 51, 22, 238, 4, 65, 238, 234, 14, 17, 232, 208, 98, 227, 221, 16, 113, 224, 226, 209, 29, 99, 246, 157, 240, 33, 62, 239, 46, 102, 223, 63, 224, 239, 190, 46, 238, 2, 225, 240, 11, 15, 99, 18, 143,29, 197, 208, 98, 250, 32, 12, 17, 49, 230, 254, 224, 14, 212, 32, 254, 12, 141, 208, 231, 46, 214, 234, 3, 161, 12, 47, 70, 15, 220, 96, 12, 128, 80, 12, 50, 238, 15, 27, 255, 3, 44, 239, 98, 46, 15, 243, 50, 31, 241, 4, 113, 12, 10, 111,14, 207, 80, 12, 120, 192, 10, 205, 224, 233, 232, 64, 16, 205, 16, 234, 243, 128, 13, 66, 127, 11, 200, 96, 13, 232, 112, 244, 2, 65, 238, 120, 110, 16, 199, 208, 98, 230, 16, 239, 46, 70, 242, 38, 143, 242, 45, 166, 242, 2, 113, 243, 8, 254, 242, 49, 63, 243, 53, 207, 16, 247, 208, 98, 195, 224, 16, 148, 238, 98, 240, 144, 13, 198, 112, 221, 3, 209, 246, 119, 14, 247, 114, 47, 230, 91, 95, 242, 39, 223, 221, 95, 79, 16, 116, 63, 225, 118, 223, 29, 201, 237, 15, 82, 255, 16, 187, 144, 246, 254, 32, 14, 4, 62, 16, 50, 158, 225, 2, 145, 13, 30, 159, 13, 119, 255, 3, 96, 128, 248, 203, 64, 16, 144, 31, 226, 146, 79, 16, 149, 223, 98, 151, 47, 16, 124, 0, 223, 240, 80, 12, 6, 1, 8, 46, 206, 239, 63, 192, 10, 136,111, 14, 36, 174, 16, 109, 63, 14, 8, 49, 248, 216, 48, 16, 135, 239, 221, 139, 47, 16, 141, 143, 249, 145, 63, 249, 157, 239, 15, 159, 223, 16, 195, 32, 103, 210, 94, 236, 51, 110, 13, 183, 63, 16, 196, 143, 15, 198, 111, 16, 181, 159, 248, 199, 254, 159, 251, 200, 223, 98, 202, 127, 252, 219, 81, 240, 254, 48, 251, 16, 17, 228, 89, 159, 234, 8, 78, 16, 246, 238, 15, 7, 127, 237, 45, 6, 242, 3, 241, 253, 225, 79, 16, 200, 238, 15, 228, 255, 3, 197, 142, 15, 97, 126, 16, 244, 224, 15, 247, 48, 16, 103, 238, 15, 235, 64, 253, 6, 65, 252, 150, 78, 16, 124, 143, 12, 3, 161, 253, 0, 241, 67, 224,192, 31, 198, 252, 249, 163, 71, 208, 220, 65, 106, 4, 7, 186, 59, 40, 204, 225, 68, 130, 212, 14, 94, 196, 152, 17, 217, 64, 116, 7, 149, 81, 20, 216, 209, 223, 71, 138, 226, 14, 154, 163, 104, 16, 33, 65, 145, 36, 65, 190, 132, 25, 83, 230, 76, 154, 53, 107, 206, 59, 184, 204, 38, 158, 123, 254, 244, 237, 162, 8, 134, 159, 191, 123, 4, 233, 29, 4, 70, 17,103, 81, 163, 72, 149, 18, 29, 120, 166, 103, 70, 170, 254, 224, 9, 68, 211, 83, 223, 176, 153, 233, 124, 54, 2, 137, 19, 95, 22, 129, 60, 125, 2, 157, 40, 20, 234, 192, 163, 254, 146, 78, 92, 106, 147, 92, 85, 170, 250, 192, 176, 245, 55,246, 229, 81, 189, 19, 205, 254, 12, 58, 148, 169, 64, 190, 100, 109, 30, 70, 156, 88, 49, 98, 124, 7, 185, 214, 116, 118, 18, 100, 156, 131, 87, 5, 250, 58, 56, 143, 98, 163, 131, 233, 8, 98, 254, 246, 167, 121, 34, 103, 127, 158, 5, 50, 163, 75, 21, 157, 192, 102, 7, 87, 207, 108, 236, 14, 36, 171, 131, 235, 6, 70, 246, 135, 146, 34, 101, 171, 3, 65, 139,118, 72, 218, 52, 77, 120, 7, 163, 209, 4, 86, 251, 101, 114, 127, 182, 41, 226, 214, 61, 145, 183, 229, 31, 204, 157, 47, 198, 158, 93, 251, 225, 51, 23, 209, 210, 4, 119, 208, 26, 72, 100, 157, 7, 70, 59, 88, 238, 249, 65, 111, 4, 209, 251, 83, 63, 17, 119, 123, 129, 225, 83, 99, 4, 87, 255, 32, 182, 153, 229, 253, 229, 167, 232, 153, 131, 0, 252, 193, 190, 241, 40, 242, 111, 184, 247, 226, 115, 104, 190, 154, 26, 25, 74, 31, 176, 102, 154, 102, 192, 151, 42, 252, 15, 36, 3, 201, 51, 79, 32, 12, 9, 220, 46, 68, 17, 71, 236, 238, 160, 141, 106, 42, 231, 32, 102, 64, 226, 230, 32, 110, 6, 50,201, 159, 3, 29, 178, 111, 69, 24, 197, 163, 168, 198, 129, 82, 244, 199, 25, 154, 120, 244, 81, 38, 108, 14, 10, 114, 34, 251, 158, 217, 81, 69, 22, 93, 188, 81, 198, 28, 149, 164, 9, 183, 118, 106, 26, 231, 32, 36, 65, 170, 210, 159, 43,39, 226, 209, 198, 137, 90, 244, 231, 69, 129, 178, 220, 114, 68, 51, 207, 84, 172, 49, 127, 248, 171, 201, 43, 127, 116, 154, 40, 139, 226, 252, 57, 254, 102, 160, 118, 14, 42, 134, 162, 117, 124, 194, 131, 160, 59, 253, 201, 115, 162, 61, 245, 233, 83, 32, 55, 93, 138, 201, 77, 47, 97, 90, 136, 31, 64, 64, 218, 211, 159, 91, 6, 114, 19, 78, 135, 228, 60, 168, 78, 129, 254, 12, 212, 161, 65, 11, 157, 201, 62, 16, 99, 250, 115, 82, 144, 74, 5, 169, 82, 138, 48, 165, 211, 206, 131, 76, 69, 51, 86, 89, 101, 138, 116, 158, 56, 106, 18, 169, 161, 137, 178, 81, 78, 32, 48, 244, 89, 203, 161, 95, 253, 145, 109, 160, 97, 7, 35, 104, 216, 98, 67, 194, 177, 171, 102, 99, 58, 10, 184, 75, 27, 147, 54, 87, 138, 120, 109,206, 88, 96, 145, 213, 150, 88, 155, 34, 181, 52, 166, 51, 128, 149, 214, 161, 113, 67, 123, 201, 218, 93, 123, 253, 225, 220, 114, 103, 133, 55, 222, 31, 134, 116, 141, 15, 144, 192, 120, 102, 29, 146, 178, 116, 199, 176, 129, 166, 1, 150, 31, 75, 149, 113, 141, 34, 130, 253, 25, 135, 160, 131, 95, 115, 232, 224, 132, 7, 178, 111, 158, 239, 96, 202, 18, 30, 123, 97, 162, 13, 93, 4, 211, 35, 136, 95, 127, 61, 12, 120, 224, 130, 39, 114, 184, 166, 44, 26, 235, 75, 166, 131, 25, 36, 153, 99, 44, 15, 234, 215, 33, 128, 253, 17, 120, 160, 149, 229, 197, 57, 94, 52, 112, 202, 44, 155, 99, 26, 254,225, 99, 24, 101, 176, 49, 71, 171, 51, 4, 194, 205, 159, 118, 154, 185, 229, 22, 103, 22, 178, 112, 32, 122, 179, 161,8, 204, 105, 8, 154, 186, 234, 131, 174, 182, 249, 162, 123, 176, 49, 6, 143, 56, 124, 81, 134, 154, 113, 224, 105, 102, 32, 1, 51, 155, 102, 152, 56, 128, 81, 198, 154, 114, 230, 57, 250, 135, 97, 46, 226, 198, 151, 70, 162, 185, 142, 94,54, 145, 190, 104, 233, 166, 159, 190, 8, 196, 172, 191, 220, 186, 38, 255, 24, 150, 9, 219, 191, 215, 93, 243, 165, 164, 5, 119, 26, 234, 12, 7, 114, 60, 103, 205, 101, 61, 70, 205, 251, 148, 246, 243, 62, 114, 28, 130, 250, 68, 135, 68, 242, 69, 33, 19, 41, 66, 221, 33, 30, 83, 227, 103, 194, 77, 239, 91, 22, 15, 96, 51, 90, 150, 71, 211, 103, 79, 109, 116, 213, 253, 217, 157, 163, 131, 82, 167, 137, 222, 207, 145, 45, 253, 165, 228, 95, 250, 147, 46, 223, 7, 90, 126, 115,233, 71, 44, 166, 249, 170, 240, 33, 71, 83, 129, 128, 153, 51, 35, 125, 168, 118, 72, 172, 143, 7, 234, 169, 92, 241, 41, 42, 127, 34, 52, 94, 175, 234, 186, 203, 32, 170, 138, 31, 250, 4, 154, 43, 163, 232, 206, 39, 136, 251, 170, 190, 135, 43, 175, 241, 5, 74, 95, 77, 44, 119, 159, 225, 252, 0, 127, 79, 73, 25, 69, 254, 244, 87, 23, 240, 17, 228, 128, 211, 131, 224, 118, 152, 65, 14, 120, 224, 131, 31, 250, 184, 71, 59, 198, 17, 141, 91, 77, 132, 15, 217, 104, 135, 5, 239, 225, 14, 111, 72, 196, 33, 187, 232, 144, 67, 84, 18, 157, 31, 160, 176, 52, 41, 145, 12, 69, 150, 65, 193, 198, 232, 131, 30, 232, 224, 134, 246, 8, 114, 6, 107, 172, 227, 30, 250, 192, 96, 58, 176, 65, 188, 168, 96, 163, 130, 250, 152, 135, 57, 108, 116, 11, 118, 17, 228, 131, 33, 228, 199, 8, 75, 56, 17, 23, 22, 112, 32, 43, 180, 9, 207, 62, 71, 32, 23,186, 239, 132, 77, 4, 201, 19, 69, 72, 66, 19, 18, 164, 139, 17, 68, 99, 26, 213, 184, 70, 54, 182, 209, 141, 111, 132,99, 28, 229, 56, 71, 58, 214, 209, 142, 119, 196, 99, 30, 245, 184, 71, 62, 246, 209, 143, 127, 4, 100, 32, 5, 57, 72, 66, 22, 210, 144, 135, 68, 100, 34, 21, 185, 72, 70, 54, 210, 145, 143, 132, 100, 36, 37, 57, 73, 74, 86, 210, 146, 151,196, 100, 38, 53, 185, 73, 78, 118, 210, 147, 159, 4, 101, 40, 69, 57, 74, 82, 150, 210, 148, 167, 68, 101, 42, 85, 185, 74, 86, 182, 242, 37, 74, 128, 165, 43, 101, 73, 201, 88, 14, 4, 150, 183, 172, 165, 64, 112, 153, 203, 93, 42, 1, 10,179, 4, 230, 35, 149, 96, 128, 24, 92, 58, 228, 150, 63, 200, 101, 48, 149, 185, 76, 102, 54, 211, 153, 207, 132, 102, 52, 165, 57, 77, 106, 86, 211, 154, 215, 196, 102, 54, 181, 185, 77, 110, 118, 211, 155, 223, 4, 103, 56, 197, 57, 78, 114, 150, 211, 156, 231, 68, 103, 58, 213, 185, 78, 118, 182, 211, 157, 239, 132, 103, 60, 229, 57, 79, 122, 214, 211, 158, 247, 196, 103, 62, 245, 185, 79, 126, 246, 211, 159, 255, 4, 104, 64, 5, 58, 80, 130, 22, 180, 158, 1, 1, 0, 59)
+
+ $RetryTimer = 3
+
+ While($SyncHash.boolWhile)
+ {
+ if($SyncHash.UseHTTPS)
+ {
+ try {
+ if($SyncHash.Brand -eq "Poly")
+ {
+ $PhoneUrl = "https://${theIPAddress}:${thePort}/captureScreen/mainScreen"
+ }
+ elseif($SyncHash.Brand -eq "Yealink")
+ {
+ $PhoneUrl = "https://${theIPAddress}:${thePort}/screencapture/download"
+ }
+
+ } catch {
+ Write-Host "ERROR: Failed to connect to phone..." -foreground "red"
+ Write-Host "Exception:" $_.Exception.Message -foreground "red"
+ if($_.Exception.Response.StatusCode.value__ -eq "")
+ {
+ Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__ -foreground "red"
+ Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription -foreground "red"
+ }
+ }
+ }
+ else
+ {
+ try {
+
+ if($SyncHash.Brand -eq "Poly")
+ {
+ $PhoneUrl = "http://${theIPAddress}:${thePort}/captureScreen/mainScreen"
+ }
+ elseif($SyncHash.Brand -eq "Yealink")
+ {
+ $PhoneUrl = "http://${theIPAddress}:${thePort}/screencapture/download"
+ }
+
+ } catch {
+ Write-Host "ERROR: Failed to connect to phone..." -foreground "red"
+ Write-Host "Exception:" $_.Exception.Message -foreground "red"
+ if($_.Exception.Response.StatusCode.value__ -eq "")
+ {
+ Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__ -foreground "red"
+ Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription -foreground "red"
+ }
+ }
+ }
+
+ $WebClient = $null
+ $WebClient = New-Object System.Net.WebClient
+ $WebClient.Timeout = 800
+ $WebClient.Credentials = New-Object System.Net.NetworkCredential($SyncHash.HTTPUsername,$SyncHash.HTTPPassword)
+
+ Try {
+ [System.Drawing.Image] $Image = $WebClient.DownloadData($PhoneUrl)
+ }
+ Catch [Exception] {
+ $theError = $_.Exception.Message
+ Write-Host "ERROR: $theError" -foreground red
+ $WebResponse = [net.HttpWebResponse]$_.Exception.Response
+ $resst = $WebResponse.getResponseStream()
+ $sr = new-object IO.StreamReader($resst)
+ [string]$result = $sr.ReadToEnd()
+ $WebResponse.close()
+
+ if($theError -imatch "Not Found")
+ {
+ Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red"
+ $Image = $null
+ $SyncHash.screenConnected = $false
+ $SyncHash.form.Close()
+ }
+ elseif($theError -imatch "Unauthorized")
+ {
+ Write-Host "ERROR: The password you have entered is incorrect. Check your password." -foreground "red"
+ $Image = $null
+ $SyncHash.screenConnected = $false
+ $SyncHash.form.Close()
+ }
+ elseif($theError -imatch "Forbidden")
+ {
+ Write-Host "ERROR: It looks like the phone does not have the Screen Capture feature enabled. Enable Screen Capture in the settings of the phone and try again." -foreground "red"
+ $Image = $null
+ $SyncHash.screenConnected = $false
+ $SyncHash.form.Close()
+ }
+ else
+ {
+ $Image = $null
+ $SyncHash.screenConnected = $false
+ Write-Host "INFO: " $_.Exception.Message -foreground "yellow"
+ }
+
+ }
+ if($Image -ne $null)
+ {
+
+ Try {
+ #DISPLAY IMAGE
+ $SyncHash.screenConnected = $true
+
+ #Get the Image Size
+ $SyncHash.ImageWidth = $Image.Width
+ $SyncHash.ImageHeight = $Image.Height
+
+ #Display Image
+ $SyncHash.PictureBox.Image = $Image
+ $SyncHash.PictureBox.Visible = $true
+
+ if($SyncHash.RecordingGIF)
+ {
+ $SyncHash.RecordGifButton.Enabled = $false
+ $SyncHash.StopRecordGifButton.Enabled = $true
+ $SyncHash.SaveImageButton.Enabled = $false
+ }
+ else
+ {
+ $SyncHash.RecordGifButton.Enabled = $true
+ $SyncHash.StopRecordGifButton.Enabled = $false
+ $SyncHash.SaveImageButton.Enabled = $true
+ }
+
+
+ $RetryTimer = 1
+
+ }
+ Catch [Exception] {
+ Write-Host "INFO: Cannot display image." -foreground "yellow"
+
+ $SyncHash.screenConnected = $false
+
+ #If display fails show error image.
+ $SyncHash.PictureBox.Image = $errorImage
+ $SyncHash.PictureBox.Visible = $true
+ $SyncHash.SaveImageButton.Enabled = $false
+ $SyncHash.RecordGifButton.Enabled = $false
+
+ $RetryTimer = 10
+ }
+ }
+ else
+ {
+ #RESIZE THE IMAGE SIZE
+ $SyncHash.PictureBox.sizemode = "Autosize"
+
+ $SyncHash.screenConnected = $false
+ #If display fails show error image.
+ $SyncHash.PictureBox.Image = $SyncHash.screenCapErrorImage
+ $SyncHash.PictureBox.Visible = $true
+ $SyncHash.SaveImageButton.Enabled = $false
+ $SyncHash.RecordGifButton.Enabled = $false
+ }
+
+ for($i=0; $i -lt $RetryTimer; $i++)
+ {
+ if(!$SyncHash.boolWhile)
+ {
+ break
+ }
+ Start-Sleep -milliseconds 300
+ }
+
+ }
+
+ }) | Out-Null
+
+ $handle = $powershell.BeginInvoke()
+
+
+ # Initialize and show the form.
+ $SyncHash.form.Add_Shown({$SyncHash.form.Activate()})
+ $SyncHash.form.ShowDialog() > $null # Trash the text of the button that was clicked.
+
+ $SyncHash.boolWhile = $false
+ While (-Not $handle.IsCompleted) {
+ Start-Sleep -Milliseconds 50
+ }
+
+ $script:screenConnected = $false
+
+ $runspace.Close()
+ $powershell.Dispose()
+}
+
+
+$script:startX = 0
+$script:startY = 0
+$script:currentImage = 0
+$script:frames = @()
+$script:mouseDown = $false
+$script:ghostBoxCount = 0
+
+function EditGifDialog([array] $ImageArray)
+{
+ Add-Type -AssemblyName System.Drawing
+ Add-Type -AssemblyName System.Windows.Forms
+
+ Write-Host "INFO: Opening GIF Editing Studio." -foreground yellow
+
+ $X = 0
+ $Y = 0
+
+ function Update-ShapeTable
+ {
+ $lv.Items.Clear()
+ foreach($frame in $frames)
+ {
+ $lvItem = new-object System.Windows.Forms.ListViewItem($frame.ShapeNumber)
+ [void]$lvItem.SubItems.Add($frame.StartFrame)
+ [void]$lvItem.SubItems.Add($frame.EndFrame)
+ [void]$lv.Items.Add($lvItem)
+ }
+ }
+
+
+ #DrawShapesLabel ============================================================
+ $DrawShapesLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $DrawShapesLabel.Font = $Font
+ $DrawShapesLabel.Location = New-Object System.Drawing.Size(20,5)
+ $DrawShapesLabel.Size = New-Object System.Drawing.Size(150,18)
+ $DrawShapesLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $DrawShapesLabel.Text = "Draw Shapes:"
+ $DrawShapesLabel.TabStop = $false
+
+ $PictureBox = new-object Windows.Forms.PictureBox
+ $PictureBox.Location = New-Object System.Drawing.Size(20,25)
+ $PictureBox.width = 280
+ $PictureBox.height = 280
+ $PictureBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $PictureBox.BorderStyle = "FixedSingle"
+ $PictureBox.sizemode = "Zoom"
+ $PictureBox.Margin = 10
+ #$PictureBox.ForeColor = [System.Drawing.Color]::Black
+ $PictureBox.WaitOnLoad = $true
+ if($ImageArray.Length -ne -1)
+ {
+ $PictureBox.Image = $ImageArray[0]
+ }
+
+ $PictureBox.Add_MouseDown(
+ {
+ $script:startX = $_.X
+ $script:startY = $_.Y
+ $script:mouseDown = $true
+ })
+
+ $PictureBox.Add_MouseMove(
+ {
+ $script:ghostBoxCount++
+
+ if($script:ghostBoxCount -gt 10)
+ {
+ if($script:mouseDown -eq $true)
+ {
+ $X = $_.X
+ $Y = $_.Y
+
+ $img = $ImageArray[$script:currentImage]
+
+ $sizeMultiplier = 1
+ $lineThickness = 1
+
+ $tempY = $script:startY
+ $tempX = $script:startX
+ if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height)
+ {
+ $sizeMultiplier = ($img.Width / $PictureBox.Width)
+
+ $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2
+ $tempY = $tempY - $difference
+ $Y = $Y - $difference
+ $tempY = $tempY -as [int]
+ $Y = $Y -as [int]
+
+ [int]$lineThickness = $img.Width / 200
+
+ }
+ elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width)
+ {
+ $sizeMultiplier = ($img.Height / $PictureBox.Height)
+ $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2
+ $tempX = $tempX - $difference
+ $X = $X - $difference
+ $tempX = $tempX -as [int]
+ $X = $X -as [int]
+
+ [int]$lineThickness = $img.Height / 200
+
+ }
+
+ $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
+ [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
+ $graph.DrawImage($img, 0, 0)
+
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Gray, $lineThickness)
+
+ $1 = $tempX * $sizeMultiplier
+ $2 = $tempY * $sizeMultiplier
+ $3 = ($X * $sizeMultiplier - ($tempX * $sizeMultiplier))
+ $4 =($Y * $sizeMultiplier - ($tempY * $sizeMultiplier))
+ $1 = $1 -as [int]
+ $2 = $2 -as [int]
+ $3 = $3 -as [int]
+ $4 = $4 -as [int]
+
+ if($3 -lt 0)
+ {
+ $1 = $1 + $3
+ $3 = $3 * -1
+ }
+ if($4 -lt 0)
+ {
+ $2 = $2 + $4
+ $4 = $4 * -1
+ }
+
+ if($ShapeDropDownBox.SelectedItem -eq "Circle")
+ {
+ $graph.DrawEllipse($pen,$1, $2, $3, $4)
+ }
+ else
+ {
+ $graph.DrawRectangle($pen,$1, $2, $3, $4)
+ }
+ $graph.Dispose()
+
+ $PictureBox.Image = $imgForGraph
+ $imgForGraph = $null
+ $script:ghostBoxCount = 0
+ }
+ }
+ })
+
+ $PictureBox.Add_MouseUp(
+ {
+ $script:mouseDown = $false
+
+ $X = $_.X
+ $Y = $_.Y
+
+ $img = $ImageArray[$script:currentImage]
+
+ $sizeMultiplier = 1
+ $lineThickness = 1
+ if($img.Width -gt $PictureBox.Width -and $img.Width -gt $img.Height)
+ {
+ $sizeMultiplier = ($img.Width / $PictureBox.Width)
+
+ $difference = ($PictureBox.Height - ($img.Height / $sizeMultiplier)) / 2
+ $script:startY = $script:startY - $difference
+ $Y = $Y - $difference
+ $script:startY = $script:startY -as [int]
+ $Y = $Y -as [int]
+
+ [int]$lineThickness = $img.Width / 200
+
+ }
+ elseif($img.Height -gt $PictureBox.Height -and $img.Height -gt $img.Width)
+ {
+ $sizeMultiplier = ($img.Height / $PictureBox.Height)
+ $difference = ($PictureBox.Width - ($img.Width / $sizeMultiplier)) / 2
+ $script:startX = $script:startX - $difference
+ $X = $X - $difference
+ $script:startX = $script:startX -as [int]
+ $X = $X -as [int]
+
+ [int]$lineThickness = $img.Height / 200
+
+ }
+
+ $1 = $script:startX * $sizeMultiplier
+ $2 = $script:startY * $sizeMultiplier
+ $3 = ($X * $sizeMultiplier - ($script:startX * $sizeMultiplier))
+ $4 =($Y * $sizeMultiplier - ($script:startY * $sizeMultiplier))
+ $1 = $1 -as [int]
+ $2 = $2 -as [int]
+ $3 = $3 -as [int]
+ $4 = $4 -as [int]
+
+ if($3 -lt 0)
+ {
+ $1 = $1 + $3
+ $3 = $3 * -1
+ }
+ if($4 -lt 0)
+ {
+ $2 = $2 + $4
+ $4 = $4 * -1
+ }
+
+ $lvItem = new-object System.Windows.Forms.ListViewItem($script:currentImage)
+ [void]$lvItem.SubItems.Add($script:currentImage)
+ [void]$lvItem.SubItems.Add($ShapeDropDownBox.SelectedItem)
+ [void]$lvItem.SubItems.Add($ColourDropDownBox.SelectedItem)
+ [void]$lvItem.SubItems.Add($1)
+ [void]$lvItem.SubItems.Add($2)
+ [void]$lvItem.SubItems.Add($3)
+ [void]$lvItem.SubItems.Add($4)
+ [void]$lv.Items.Add($lvItem)
+
+ Update-AnimationScreen
+
+ })
+
+
+ #ShapeLabel ============================================================
+ $ShapeLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $ShapeLabel.Font = $Font
+ $ShapeLabel.Location = New-Object System.Drawing.Size(340,20)
+ $ShapeLabel.Size = New-Object System.Drawing.Size(140,18)
+ $ShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ShapeLabel.Text = "Markup Shape:"
+ $ShapeLabel.TabStop = $false
+
+
+ $ShapeDropDownBox = New-Object System.Windows.Forms.ComboBox
+ $ShapeDropDownBox.Location = New-Object System.Drawing.Size(340,40)
+ $ShapeDropDownBox.Size = New-Object System.Drawing.Size(140,15)
+ $ShapeDropDownBox.DropDownHeight = 100
+ $ShapeDropDownBox.tabIndex = 4
+ $ShapeDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ShapeDropDownBox.DropDownStyle = "DropDownList"
+
+ [void] $ShapeDropDownBox.Items.Add("Rectangle")
+ [void] $ShapeDropDownBox.Items.Add("Circle")
+
+ $numberOfItems = $ShapeDropDownBox.count
+ if($numberOfItems -gt 0)
+ {
+ $ShapeDropDownBox.SelectedIndex = 0
+ }
+
+ #ColourLabel ============================================================
+ $ColourLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $ColourLabel.Font = $Font
+ $ColourLabel.Location = New-Object System.Drawing.Size(500,20)
+ $ColourLabel.Size = New-Object System.Drawing.Size(140,18)
+ $ColourLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ColourLabel.Text = "Markup Colour:"
+ $ColourLabel.TabStop = $false
+
+
+ $ColourDropDownBox = New-Object System.Windows.Forms.ComboBox
+ $ColourDropDownBox.Location = New-Object System.Drawing.Size(500,40)
+ $ColourDropDownBox.Size = New-Object System.Drawing.Size(140,15)
+ $ColourDropDownBox.DropDownHeight = 200
+ $ColourDropDownBox.tabIndex = 5
+ $ColourDropDownBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ColourDropDownBox.DropDownStyle = "DropDownList"
+
+ [void] $ColourDropDownBox.Items.Add("Red")
+ [void] $ColourDropDownBox.Items.Add("Purple")
+ [void] $ColourDropDownBox.Items.Add("Green")
+ [void] $ColourDropDownBox.Items.Add("Blue")
+ [void] $ColourDropDownBox.Items.Add("Orange")
+ [void] $ColourDropDownBox.Items.Add("Pink")
+ [void] $ColourDropDownBox.Items.Add("Yellow")
+ [void] $ColourDropDownBox.Items.Add("White")
+ [void] $ColourDropDownBox.Items.Add("Maroon")
+ [void] $ColourDropDownBox.Items.Add("Black")
+
+ $numberOfItems = $ColourDropDownBox.count
+ if($numberOfItems -gt 0)
+ {
+ $ColourDropDownBox.SelectedIndex = 0
+ }
+
+ #MarkupShapeLabel ============================================================
+ $MarkupShapeLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $MarkupShapeLabel.Font = $Font
+ $MarkupShapeLabel.Location = New-Object System.Drawing.Size(340,70)
+ $MarkupShapeLabel.Size = New-Object System.Drawing.Size(200,18)
+ $MarkupShapeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $MarkupShapeLabel.Text = "Markup Shapes:"
+ $MarkupShapeLabel.TabStop = $false
+
+ $lv = New-Object windows.forms.ListView
+ $lv.View = [System.Windows.Forms.View]"Details"
+ $lv.Size = New-Object System.Drawing.Size(510,190)
+ $lv.Location = New-Object System.Drawing.Size(340,90)
+ $lv.FullRowSelect = $true
+ $lv.GridLines = $true
+ $lv.HideSelection = $false
+ #$lv.Sorting = [System.Windows.Forms.SortOrder]::Ascending
+ $lv.Sorting = [System.Windows.Forms.SortOrder]::None
+ $lv.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ [void]$lv.Columns.Add("StartFrame", 65)
+ [void]$lv.Columns.Add("EndFrame", 60)
+ [void]$lv.Columns.Add("Shape", 60)
+ [void]$lv.Columns.Add("Colour", 60)
+ [void]$lv.Columns.Add("StartX", 60)
+ [void]$lv.Columns.Add("StartY", 60)
+ [void]$lv.Columns.Add("Width", 60)
+ [void]$lv.Columns.Add("Height", 60)
+
+ $lv.add_MouseUp(
+ {
+ foreach ($item in $lv.SelectedItems)
+ {
+ $user = $item.Text
+ if($item -ne $null)
+ {
+ $startFrame = $item.Text -as [int]
+ $endFrame = $item.SubItems[1].Text -as [int]
+ $Shape = $item.SubItems[2].Text
+ $Colour = $item.SubItems[3].Text
+ $StartX = $item.SubItems[4].Text -as [int]
+ $StartY = $item.SubItems[5].Text -as [int]
+ $Width = $item.SubItems[6].Text -as [int]
+ $Height = $item.SubItems[7].Text -as [int]
+ $StartFrameTextBox.text = "$startFrame"
+ $EndFrameTextBox.text = "$endFrame"
+ $ShapeTextBox.SelectedItem = "$Shape"
+ $ColourTextBox.SelectedItem = "$Colour"
+ $StartXTextBox.text = "$StartX"
+ $StartYTextBox.text = "$StartY"
+ $WidthTextBox.text = "$Width"
+ $HeightTextBox.text = "$Height"
+
+ #Update the image number
+ $arrayLength = $ImageArray.length - 1
+ $script:currentImage = $startFrame
+ Update-AnimationScreen
+ $currentImageNumber = $script:currentImage
+ $FrameNumberNumberBox.Value = $currentImageNumber
+ }
+ }
+ #Write-Host "Number of selected items: " $lv.SelectedItems.count
+ if($lv.SelectedItems.count -eq 0)
+ {
+ $StartFrameTextBox.text = ""
+ $EndFrameTextBox.text = ""
+ $ShapeTextBox.SelectedItem = ""
+ $ColourTextBox.SelectedItem = ""
+ $StartXTextBox.text = ""
+ $StartYTextBox.text = ""
+ $WidthTextBox.text = ""
+ $HeightTextBox.text = ""
+ }
+ $lv.Refresh()
+ })
+
+ # List Key Event ============================================================
+ $lv.add_KeyUp(
+ {
+ if ($_.KeyCode -eq "Up" -or $_.KeyCode -eq "Down")
+ {
+ foreach ($item in $lv.SelectedItems)
+ {
+ if($item -ne $null)
+ {
+ $startFrame = $item.Text -as [int]
+ $endFrame = $item.SubItems[1].Text -as [int]
+ $Shape = $item.SubItems[2].Text
+ $Colour = $item.SubItems[3].Text
+ $StartX = $item.SubItems[4].Text -as [int]
+ $StartY = $item.SubItems[5].Text -as [int]
+ $Width = $item.SubItems[6].Text -as [int]
+ $Height = $item.SubItems[7].Text -as [int]
+ $StartFrameTextBox.text = "$startFrame"
+ $EndFrameTextBox.text = "$endFrame"
+ $ShapeTextBox.SelectedItem = "$Shape"
+ $ColourTextBox.SelectedItem = "$Colour"
+ $StartXTextBox.text = "$StartX"
+ $StartYTextBox.text = "$StartY"
+ $WidthTextBox.text = "$Width"
+ $HeightTextBox.text = "$Height"
+
+ #Update the image number
+ $arrayLength = $ImageArray.length - 1
+ $script:currentImage = $startFrame
+ Update-AnimationScreen
+ $currentImageNumber = $script:currentImage
+ $FrameNumberNumberBox.Value = $currentImageNumber
+
+ }
+ }
+ }
+ if($lv.SelectedItems.count -eq 0)
+ {
+ $StartFrameTextBox.text = ""
+ $EndFrameTextBox.text = ""
+ $ShapeTextBox.SelectedItem = ""
+ $ColourTextBox.SelectedItem = ""
+ $StartXTextBox.text = ""
+ $StartYTextBox.text = ""
+ $WidthTextBox.text = ""
+ $HeightTextBox.text = ""
+ }
+ $lv.Refresh()
+ })
+
+ $lv.add_SelectedIndexChanged(
+ {
+ Update-AnimationScreen
+ })
+
+
+
+ #StartFrameTextBox ============================================================
+ $StartFrameTextBox = new-object System.Windows.Forms.textbox
+ $StartFrameTextBox.location = new-object system.drawing.size(340,285)
+ $StartFrameTextBox.size = new-object system.drawing.size(70,23)
+ $StartFrameTextBox.text = ""
+ $StartFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $StartFrameTextBox.tabIndex = 6
+
+
+ #EndFrameTextBox ============================================================
+ $EndFrameTextBox = new-object System.Windows.Forms.textbox
+ $EndFrameTextBox.location = new-object system.drawing.size(410,285)
+ $EndFrameTextBox.size = new-object system.drawing.size(60,23)
+ $EndFrameTextBox.text = ""
+ $EndFrameTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $EndFrameTextBox.tabIndex = 7
+
+ #ShapeTextBox ============================================================
+ $ShapeTextBox = New-Object System.Windows.Forms.ComboBox
+ $ShapeTextBox.Location = New-Object System.Drawing.Size(470,285)
+ $ShapeTextBox.Size = New-Object System.Drawing.Size(60,23)
+ $ShapeTextBox.DropDownHeight = 100
+ $ShapeTextBox.tabIndex = 8
+ $ShapeTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ShapeTextBox.DropDownStyle = "DropDownList"
+
+ [void] $ShapeTextBox.Items.Add("Rectangle")
+ [void] $ShapeTextBox.Items.Add("Circle")
+
+ $numberOfItems = $ShapeTextBox.count
+ if($numberOfItems -gt 0)
+ {
+ $ShapeTextBox.SelectedIndex = 0
+ }
+
+
+ $ColourTextBox = New-Object System.Windows.Forms.ComboBox
+ $ColourTextBox.Location = New-Object System.Drawing.Size(530,285)
+ $ColourTextBox.Size = New-Object System.Drawing.Size(60,23)
+ $ColourTextBox.DropDownHeight = 200
+ $ColourTextBox.tabIndex = 9
+ $ColourTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ColourTextBox.DropDownStyle = "DropDownList"
+
+ [void] $ColourTextBox.Items.Add("Red")
+ [void] $ColourTextBox.Items.Add("Purple")
+ [void] $ColourTextBox.Items.Add("Green")
+ [void] $ColourTextBox.Items.Add("Blue")
+ [void] $ColourTextBox.Items.Add("Orange")
+ [void] $ColourTextBox.Items.Add("Pink")
+ [void] $ColourTextBox.Items.Add("Yellow")
+ [void] $ColourTextBox.Items.Add("White")
+ [void] $ColourTextBox.Items.Add("Maroon")
+ [void] $ColourTextBox.Items.Add("Black")
+
+ $numberOfItems = $ColourTextBox.count
+ if($numberOfItems -gt 0)
+ {
+ $ColourTextBox.SelectedIndex = 0
+ }
+
+
+ #StartXTextBox ============================================================
+ $StartXTextBox = new-object System.Windows.Forms.textbox
+ $StartXTextBox.location = new-object system.drawing.size(590,285)
+ $StartXTextBox.size = new-object system.drawing.size(60,23)
+ $StartXTextBox.text = ""
+ $StartXTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $StartXTextBox.tabIndex = 10
+
+ #StartYTextBox ============================================================
+ $StartYTextBox = new-object System.Windows.Forms.textbox
+ $StartYTextBox.location = new-object system.drawing.size(650,285)
+ $StartYTextBox.size = new-object system.drawing.size(60,23)
+ $StartYTextBox.text = ""
+ $StartYTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $StartYTextBox.tabIndex = 11
+
+ #WidthTextBox ============================================================
+ $WidthTextBox = new-object System.Windows.Forms.textbox
+ $WidthTextBox.location = new-object system.drawing.size(710,285)
+ $WidthTextBox.size = new-object system.drawing.size(60,23)
+ $WidthTextBox.text = ""
+ $WidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $WidthTextBox.tabIndex = 12
+
+ #HeightTextBox ============================================================
+ $HeightTextBox = new-object System.Windows.Forms.textbox
+ $HeightTextBox.location = new-object system.drawing.size(770,285)
+ $HeightTextBox.size = new-object system.drawing.size(60,23)
+ $HeightTextBox.text = ""
+ $HeightTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $HeightTextBox.tabIndex = 13
+
+
+
+ #EditShapeButton ============================================================
+ $EditShapeButton = New-Object System.Windows.Forms.Button
+ $EditShapeButton.Location = New-Object System.Drawing.Size(490,315)
+ $EditShapeButton.Size = New-Object System.Drawing.Size(100,20)
+ $EditShapeButton.Text = "Update Shape"
+ $EditShapeButton.TabIndex = 14
+ $EditShapeButton.Add_Click(
+ {
+ foreach ($item in $lv.SelectedItems)
+ {
+ $StartFrame = $StartFrameTextBox.text -as [int]
+ if($StartFrame -gt 0 -and $StartFrame -lt ($ImageArray.length))
+ {
+ $item.Text = $StartFrameTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Start Frame value" -foreground yellow
+ }
+ $EndFrame = $EndFrameTextBox.text -as [int]
+ if($EndFrame -gt 0 -and $EndFrame -lt ($ImageArray.length))
+ {
+ $item.SubItems[1].Text = $EndFrameTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the End Frame value" -foreground yellow
+ }
+ if($ShapeTextBox.text -eq "Rectangle" -or $ShapeTextBox.text -eq "Circle")
+ {
+ $item.SubItems[2].Text = $ShapeTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Shape value" -foreground yellow
+ }
+
+ $item.SubItems[3].Text = $ColourTextBox.text
+
+ $StartX = $StartXTextBox.text -as [int]
+ if($StartX -ge 0)
+ {
+ $item.SubItems[4].Text = $StartXTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Start X value" -foreground yellow
+ }
+ $StartY = $StartYTextBox.text -as [int]
+ if($StartY -ge 0)
+ {
+ $item.SubItems[5].Text = $StartYTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Start Y value" -foreground yellow
+ }
+ $Width = $WidthTextBox.text -as [int]
+ if($Width -ge 0)
+ {
+ $item.SubItems[6].Text = $WidthTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Width value" -foreground yellow
+ }
+ $Height = $HeightTextBox.text -as [int]
+ if($Height -ge 0)
+ {
+ $item.SubItems[7].Text = $HeightTextBox.text
+ }
+ else
+ {
+ Write-Host "INFO: Unable to use the Height value" -foreground yellow
+ }
+
+ }
+ Update-AnimationScreen
+
+ })
+
+ #DeleteShapeButton ============================================================
+ $DeleteShapeButton = New-Object System.Windows.Forms.Button
+ $DeleteShapeButton.Location = New-Object System.Drawing.Size(600,315)
+ $DeleteShapeButton.Size = New-Object System.Drawing.Size(100,20)
+ $DeleteShapeButton.Text = "Delete Shape"
+ $DeleteShapeButton.TabIndex = 15
+ $DeleteShapeButton.Add_Click(
+ {
+ $beforeDelete = $lv.SelectedItems[0].Index
+ if($beforeDelete -ne $null)
+ {
+ $lv.Items.RemoveAt($lv.SelectedItems[0].Index)
+ Update-AnimationScreen
+ }
+ if($beforeDelete -ge $lv.Items.Count)
+ {
+ $beforeDelete = $beforeDelete - 1
+ }
+ if($lv.items.Count -ge 1)
+ {
+ $lv.Items[$beforeDelete].Selected = $true;
+ }
+ elseif($lv.items.Count -eq 0)
+ {
+ Write-Host "No items left"
+ }
+ })
+
+
+
+ function Update-AnimationScreen
+ {
+ $img = $ImageArray[$script:currentImage]
+
+ $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
+ [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
+ $graph.DrawImage($img, 0, 0)
+
+ foreach ($item in $lv.Items)
+ {
+ [int]$lineThickness = $img.Height / 200
+
+ $startFrame = $item.Text -as [int]
+ $endFrame = $item.SubItems[1].Text -as [int]
+ $shape = $item.SubItems[2].Text
+ $colour = $item.SubItems[3].Text
+ $1 = $item.SubItems[4].Text -as [int]
+ $2 = $item.SubItems[5].Text -as [int]
+ $3 = $item.SubItems[6].Text -as [int]
+ $4 = $item.SubItems[7].Text -as [int]
+
+ if($script:currentImage -ge $startFrame -and $script:currentImage -le $endFrame)
+ {
+ Write-Host "INFO: Found $shape to render" -foreground yellow
+
+ if($item.Index -eq $lv.SelectedItems[0].Index)
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::MediumTurquoise, $lineThickness)
+ }
+ elseif($colour -eq "Green")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness)
+ }
+ elseif($colour -eq "Purple")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness)
+ }
+ elseif($colour -eq "Blue")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness)
+ }
+ elseif($colour -eq "Orange")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness)
+ }
+ elseif($colour -eq "Pink")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness)
+ }
+ elseif($colour -eq "Yellow")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness)
+ }
+ elseif($colour -eq "White")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness)
+ }
+ elseif($colour -eq "Maroon")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness)
+ }
+ elseif($colour -eq "Black")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness)
+ }
+ else
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness)
+ }
+
+ if($shape -eq "Circle")
+ {
+ $graph.DrawEllipse($pen,$1, $2, $3, $4)
+ }
+ else
+ {
+ $graph.DrawRectangle($pen,$1, $2, $3, $4)
+ }
+ }
+ }
+ $graph.Dispose()
+ $PictureBox.Image = $imgForGraph
+ $imgForGraph = $null
+ }
+
+
+ #LeftManualButton ============================================================
+ $LeftManualButton = New-Object System.Windows.Forms.Button
+ $LeftManualButton.Location = New-Object System.Drawing.Size(30,310)
+ $LeftManualButton.Size = New-Object System.Drawing.Size(60,18)
+ $LeftManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $LeftManualButton.Text = "Previous"
+ $LeftManualButton.TabIndex = 16
+ $LeftManualButton.Add_Click(
+ {
+ $arrayLength = $ImageArray.length - 1
+ if($script:currentImage -gt 0)
+ {$script:currentImage--}
+ $img = $ImageArray[$script:currentImage]
+
+ Update-AnimationScreen
+
+ $currentImageNumber = $script:currentImage
+ $FrameNumberNumberBox.Value = $currentImageNumber
+
+ })
+
+
+ #RightManualButton ============================================================
+ $RightManualButton = New-Object System.Windows.Forms.Button
+ $RightManualButton.Location = New-Object System.Drawing.Size(100,310)
+ $RightManualButton.Size = New-Object System.Drawing.Size(60,18)
+ $RightManualButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $RightManualButton.Text = "Next"
+ $RightManualButton.TabIndex = 17
+ $RightManualButton.Add_Click(
+ {
+ $arrayLength = $ImageArray.length - 1
+ if($script:currentImage -lt ($ImageArray.length - 1))
+ {
+ $script:currentImage++
+ }
+
+ Update-AnimationScreen
+
+ $currentImageNumber = $script:currentImage
+ $FrameNumberNumberBox.Value = $currentImageNumber
+ })
+
+ #FrameNumberLabel ============================================================
+ $FrameNumberLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $FrameNumberLabel.Font = $Font
+ $FrameNumberLabel.Location = New-Object System.Drawing.Size(170,310)
+ $FrameNumberLabel.Size = New-Object System.Drawing.Size(53,18)
+ $FrameNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $FrameNumberLabel.Text = "Frame:"
+ $FrameNumberLabel.TabStop = $false
+
+
+ $FrameNumberNumberBox = New-Object System.Windows.Forms.NumericUpDown
+ $FrameNumberNumberBox.Location = New-Object Drawing.Size(226,310)
+ $FrameNumberNumberBox.Size = New-Object Drawing.Size(45,24)
+ $FrameNumberNumberBox.Minimum = 0
+ $FrameNumberNumberBox.Maximum = $ImageArray.length - 1
+ $FrameNumberNumberBox.Increment = 1
+ $FrameNumberNumberBox.Value = 0
+ $FrameNumberNumberBox.TabIndex = 18
+
+ $FrameNumberNumberBox.Add_ValueChanged({
+
+ $script:currentImage = $FrameNumberNumberBox.Value
+
+ Update-AnimationScreen
+
+ })
+
+ #FrameNumberLabel ============================================================
+ $FrameNumberEndNumberLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $FrameNumberEndNumberLabel.Font = $Font
+ $FrameNumberEndNumberLabel.Location = New-Object System.Drawing.Size(280,310)
+ $FrameNumberEndNumberLabel.Size = New-Object System.Drawing.Size(60,18)
+ $FrameNumberEndNumberLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $arrayLength = $ImageArray.length - 1
+ $FrameNumberEndNumberLabel.Text = "/ $arrayLength"
+ $FrameNumberEndNumberLabel.TabStop = $false
+
+
+ #StartFrameLabel ============================================================
+ $StartFrameImageLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $StartFrameImageLabel.Font = $Font
+ $StartFrameImageLabel.Location = New-Object System.Drawing.Size(20,340)
+ $StartFrameImageLabel.Size = New-Object System.Drawing.Size(90,18)
+ $StartFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $StartFrameImageLabel.Text = "Start Frame:"
+ $StartFrameImageLabel.TabStop = $false
+
+
+ $StartFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown
+ $StartFrameImageNumberBox.Location = New-Object Drawing.Size(110,340)
+ $StartFrameImageNumberBox.Size = New-Object Drawing.Size(45,24)
+ $StartFrameImageNumberBox.Minimum = 0
+ $StartFrameImageNumberBox.Maximum = $ImageArray.length - 1
+ $StartFrameImageNumberBox.Increment = 1
+ $StartFrameImageNumberBox.Value = 0
+ $StartFrameImageNumberBox.TabIndex = 19
+
+ $StartFrameImageNumberBox.Add_ValueChanged({
+
+ if($StartFrameImageNumberBox.Value -ge $EndFrameImageNumberBox.Value)
+ {
+ $StartFrameImageNumberBox.Value = $StartFrameImageNumberBox.Value - 1
+ }
+ })
+
+
+ #EndFrameLabel ============================================================
+ $EndFrameImageLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $EndFrameImageLabel.Font = $Font
+ $EndFrameImageLabel.Location = New-Object System.Drawing.Size(160,340)
+ $EndFrameImageLabel.Size = New-Object System.Drawing.Size(90,18)
+ $EndFrameImageLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $EndFrameImageLabel.Text = "End Frame:"
+ $EndFrameImageLabel.TabStop = $false
+
+
+ $EndFrameImageNumberBox = New-Object System.Windows.Forms.NumericUpDown
+ $EndFrameImageNumberBox.Location = New-Object Drawing.Size(250,340)
+ $EndFrameImageNumberBox.Size = New-Object Drawing.Size(45,24)
+ $EndFrameImageNumberBox.Minimum = 0
+ $EndFrameImageNumberBox.Maximum = $ImageArray.length - 1
+ $EndFrameImageNumberBox.Increment = 1
+ $EndFrameImageNumberBox.Value = $ImageArray.length - 1
+ $EndFrameImageNumberBox.TabIndex = 20
+
+
+ $EndFrameImageNumberBox.Add_ValueChanged({
+
+ if($EndFrameImageNumberBox.Value -le $StartFrameImageNumberBox.Value)
+ {
+ $EndFrameImageNumberBox.Value = $EndFrameImageNumberBox.Value + 1
+ }
+ })
+
+
+ #ImageSizeLabel ============================================================
+ $ImageSizeLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $ImageSizeLabel.Font = $Font
+ $ImageSizeLabel.Location = New-Object System.Drawing.Size(20,365)
+ $ImageSizeLabel.Size = New-Object System.Drawing.Size(90,18)
+ $ImageSizeLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ImageSizeLabel.Text = "Image Size:"
+ $ImageSizeLabel.TabStop = $false
+
+
+ $ImageHeightTextBox = New-Object System.Windows.Forms.NumericUpDown
+ $ImageHeightTextBox.Location = New-Object Drawing.Size(110,365)
+ $ImageHeightTextBox.Size = New-Object Drawing.Size(50,23)
+ $ImageHeightTextBox.Minimum = 0
+ $ImageHeightTextBox.Maximum = 5000
+ $ImageHeightTextBox.Increment = 1
+ $ImageHeightTextBox.Value = $imgSize.Height -as [int]
+ $ImageHeightTextBox.TabIndex = 21
+
+
+ $ImageHeightTextBox.Add_ValueChanged({
+
+ [int]$imageHeight = $ImageHeightTextBox.Value
+ $SizeMult = $imageHeight / $imgSize.Height
+ $ImageWidthTextBox.text = ($imgSize.Width * $SizeMult) -as [int]
+
+ })
+
+
+ #ImageSizeXLabel ============================================================
+ $ImageSizeXLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $ImageSizeXLabel.Font = $Font
+ $ImageSizeXLabel.Location = New-Object System.Drawing.Size(167,365)
+ $ImageSizeXLabel.Size = New-Object System.Drawing.Size(9,18)
+ $ImageSizeXLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ImageSizeXLabel.Text = "x"
+ $ImageSizeXLabel.TabStop = $false
+
+ #WidthWidth Text box ============================================================
+ $ImageWidthTextBox = new-object System.Windows.Forms.textbox
+ $ImageWidthTextBox.location = new-object system.drawing.size(185,365)
+ $ImageWidthTextBox.size = new-object system.drawing.size(50,23)
+ $ImageWidthTextBox.text = ""
+ $ImageWidthTextBox.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ImageWidthTextBox.tabIndex = 22
+ $ImageWidthTextBox.Enabled = $false
+
+
+ $imgSize = $ImageArray[0]
+ if($imgSize -ne $null)
+ {
+ $ImageHeightTextBox.text = $imgSize.Height
+ $ImageWidthTextBox.text = $imgSize.Width
+ }
+
+ #ResetSizeButton ============================================================
+ $ResetSizeButton = New-Object System.Windows.Forms.Button
+ $ResetSizeButton.Location = New-Object System.Drawing.Size(245,365)
+ $ResetSizeButton.Size = New-Object System.Drawing.Size(70,18)
+ $ResetSizeButton.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ResetSizeButton.Text = "Reset Size"
+ $ResetSizeButton.TabIndex = 23
+ $ResetSizeButton.Add_Click(
+ {
+ $imgSize = $ImageArray[0]
+ if($imgSize -ne $null)
+ {
+ $ImageHeightTextBox.Value = $imgSize.Height
+ #$ImageWidthTextBox.text = $imgSize.Width
+ }
+
+ })
+
+
+ #InfiniteLoopsLabel ============================================================
+ $InfiniteLoopsLabel = New-Object System.Windows.Forms.Label
+ $Font = New-Object System.Drawing.Font("Arial",10,[System.Drawing.FontStyle]::Bold)
+ # Font styles are: Regular, Bold, Italic, Underline, Strikeout
+ $InfiniteLoopsLabel.Font = $Font
+ $InfiniteLoopsLabel.Location = New-Object System.Drawing.Size(20,390)
+ $InfiniteLoopsLabel.Size = New-Object System.Drawing.Size(95,18)
+ $InfiniteLoopsLabel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
+ $InfiniteLoopsLabel.Text = "Infinite Loop:"
+ $InfiniteLoopsLabel.TabStop = $false
+
+ # InfiniteLoopsCheckBox ============================================================
+ $InfiniteLoopsCheckBox = New-Object System.Windows.Forms.Checkbox
+ $InfiniteLoopsCheckBox.Location = New-Object System.Drawing.Size(120,390)
+ $InfiniteLoopsCheckBox.Size = New-Object System.Drawing.Size(20,20)
+ $InfiniteLoopsCheckBox.Checked = $true
+ $InfiniteLoopsCheckBox.TabIndex = 24
+
+
+ # ExportGIFButton button.
+ $ExportGIFButton = New-Object System.Windows.Forms.Button
+ $ExportGIFButton.Location = New-Object System.Drawing.Size(350,385)
+ $ExportGIFButton.Size = New-Object System.Drawing.Size(90,25)
+ $ExportGIFButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $ExportGIFButton.Text = "Export GIF"
+ $ExportGIFButton.tabIndex = 25
+ $ExportGIFButton.Add_Click({
+
+ #Process the array
+ $loopNo = 0
+ $FinalImageArray = @()
+ foreach($img in $ImageArray)
+ {
+ $StartFrameImageSetting = $StartFrameImageNumberBox.Value
+ $EndFrameImageSetting = $EndFrameImageNumberBox.Value
+ if($loopNo -ge $StartFrameImageSetting -and $loopNo -le $EndFrameImageSetting)
+ {
+ $imgForGraph = New-Object System.Drawing.Bitmap($img.Width, $img.Height)
+ [System.Drawing.Graphics] $graph = [System.Drawing.Graphics]::FromImage($imgForGraph) #Converting image to stop indexed image error on GIFs
+ $graph.DrawImage($img, 0, 0)
+
+
+ foreach ($item in $lv.Items)
+ {
+ [int]$lineThickness = $img.Height / 200
+
+ $startFrame = $item.Text -as [int]
+ $endFrame = $item.SubItems[1].Text -as [int]
+ $shape = $item.SubItems[2].Text
+ $colour = $item.SubItems[3].Text
+ $1 = $item.SubItems[4].Text -as [int]
+ $2 = $item.SubItems[5].Text -as [int]
+ $3 = $item.SubItems[6].Text -as [int]
+ $4 = $item.SubItems[7].Text -as [int]
+
+ if($loopNo -ge $startFrame -and $loopNo -le $endFrame)
+ {
+ #Write-Host "INFO: Found shape to render - $colour,$1,$2,$3,$4" -foreground yellow
+
+ if($colour -eq "Green")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Green, $lineThickness)
+ }
+ elseif($colour -eq "Purple")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Purple, $lineThickness)
+ }
+ elseif($colour -eq "Blue")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Blue, $lineThickness)
+ }
+ elseif($colour -eq "Orange")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Orange, $lineThickness)
+ }
+ elseif($colour -eq "Pink")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Pink, $lineThickness)
+ }
+ elseif($colour -eq "Yellow")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Yellow, $lineThickness)
+ }
+ elseif($colour -eq "White")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::White, $lineThickness)
+ }
+ elseif($colour -eq "Maroon")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Maroon, $lineThickness)
+ }
+ elseif($colour -eq "Black")
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, $lineThickness)
+ }
+ else
+ {
+ [System.Drawing.Pen] $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Red, $lineThickness)
+ }
+
+ if($shape -eq "Circle")
+ {
+ $graph.DrawEllipse($pen,$1, $2, $3, $4)
+ }
+ else
+ {
+ $graph.DrawRectangle($pen,$1, $2, $3, $4)
+ }
+ }
+ }
+
+ $graph.Dispose()
+
+ $ImageHeightSetting = $ImageHeightTextBox.Value -as [int]
+ if($imgForGraph.Height -ne $ImageHeightSetting)
+ {
+ Write-Host "INFO: Resizing image." -foreground yellow
+ $imgForGraph = ResizeImageHeightRetainRatio -img $imgForGraph -heightInPixels $ImageHeightSetting
+ }
+
+ $FinalImageArray += $imgForGraph
+ }
+ else
+ {
+ Write-Host "INFO: Ignoring frame $loopNo as it's outside of the start/end bounds." -foreground yellow
+ }
+ $loopNo++
+ }
+
+ if($FinalImageArray -eq $null)
+ {
+ Write-Host "INFO: Canceled Dialog - Image array equals null" -foreground "yellow"
+ }
+ else
+ {
+ try {
+
+ $fileDialog = New-Object System.Windows.Forms.SaveFileDialog
+ $fileDialog.FileName = "AnimatedScreenShot.gif"
+ $fileDialog.Title = "Save Animated GIF"
+ $fileDialog.Filter = "GIF (*.gif)|*.*"
+ $fileDialog.CheckFileExists = $false
+ $Show = $fileDialog.ShowDialog()
+ if ($Show -eq "OK")
+ {
+ [string]$filename = $fileDialog.FileName
+
+ #Write-Host 'INFO: Creating GifWriter object' -foreground yellow
+
+ $infiniteloops = $InfiniteLoopsCheckBox.Checked
+ $fileLocation = $filename
+ $GifWriterObject = Import-GifWriter -FileLocation $fileLocation -InfiniteLoops $infiniteloops
+
+ foreach ($img in $FinalImageArray)
+ {
+ Write-Host "INFO: Adding image to GIF." -foreground yellow
+ $GifWriterObject.WriteFrame([System.Drawing.Image]$img)
+ $img = $null
+ }
+
+ $GifWriterObject.Dispose()
+ $FinalImageArray = @()
+ Write-Output $True
+ }
+ }
+ catch {
+ Write-Host $Error[0] -foreground red
+ exit -1
+ }
+ }
+
+ })
+
+
+ # Create the Cancel button.
+ $CancelButton = New-Object System.Windows.Forms.Button
+ $CancelButton.Location = New-Object System.Drawing.Size(450,385)
+ $CancelButton.Size = New-Object System.Drawing.Size(90,25)
+ $CancelButton.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left
+ $CancelButton.Text = "Close"
+ $CancelButton.tabIndex = 26
+ $CancelButton.Add_Click({
+ Write-Host "INFO: Canceled dialog" -foreground "yellow"
+ $form.Tag = $null
+ $form.Close()
+
+ })
+
+ # Create the form.
+ $form = New-Object System.Windows.Forms.Form
+ $form.Text = "GIF Editing Studio"
+ $form.Size = New-Object System.Drawing.Size(880,465)
+ $form.FormBorderStyle = 'FixedSingle'
+ $form.StartPosition = "CenterScreen"
+ $form.AutoSizeMode = 'GrowAndShrink'
+ [byte[]]$WindowIcon = @(71, 73, 70, 56, 57, 97, 32, 0, 32, 0, 231, 137, 0, 0, 52, 93, 0, 52, 94, 0, 52, 95, 0, 53, 93, 0, 53, 94, 0, 53, 95, 0,53, 96, 0, 54, 94, 0, 54, 95, 0, 54, 96, 2, 54, 95, 0, 55, 95, 1, 55, 96, 1, 55, 97, 6, 55, 96, 3, 56, 98, 7, 55, 96, 8, 55, 97, 9, 56, 102, 15, 57, 98, 17, 58, 98, 27, 61, 99, 27, 61, 100, 24, 61, 116, 32, 63, 100, 36, 65, 102, 37, 66, 103, 41, 68, 104, 48, 72, 106, 52, 75, 108, 55, 77, 108, 57, 78, 109, 58, 79, 111, 59, 79, 110, 64, 83, 114, 65, 83, 114, 68, 85, 116, 69, 86, 117, 71, 88, 116, 75, 91, 120, 81, 95, 123, 86, 99, 126, 88, 101, 125, 89, 102, 126, 90, 103, 129, 92, 103, 130, 95, 107, 132, 97, 108, 132, 99, 110, 134, 100, 111, 135, 102, 113, 136, 104, 114, 137, 106, 116, 137, 106,116, 139, 107, 116, 139, 110, 119, 139, 112, 121, 143, 116, 124, 145, 120, 128, 147, 121, 129, 148, 124, 132, 150, 125,133, 151, 126, 134, 152, 127, 134, 152, 128, 135, 152, 130, 137, 154, 131, 138, 155, 133, 140, 157, 134, 141, 158, 135,141, 158, 140, 146, 161, 143, 149, 164, 147, 152, 167, 148, 153, 168, 151, 156, 171, 153, 158, 172, 153, 158, 173, 156,160, 174, 156, 161, 174, 158, 163, 176, 159, 163, 176, 160, 165, 177, 163, 167, 180, 166, 170, 182, 170, 174, 186, 171,175, 186, 173, 176, 187, 173, 177, 187, 174, 178, 189, 176, 180, 190, 177, 181, 191, 179, 182, 192, 180, 183, 193, 182,185, 196, 185, 188, 197, 188, 191, 200, 190, 193, 201, 193, 195, 203, 193, 196, 204, 196, 198, 206, 196, 199, 207, 197,200, 207, 197, 200, 208, 198, 200, 208, 199, 201, 208, 199, 201, 209, 200, 202, 209, 200, 202, 210, 202, 204, 212, 204,206, 214, 206, 208, 215, 206, 208, 216, 208, 210, 218, 209, 210, 217, 209, 210, 220, 209, 211, 218, 210, 211, 219, 210,211, 220, 210, 212, 219, 211, 212, 219, 211, 212, 220, 212, 213, 221, 214, 215, 223, 215, 216, 223, 215, 216, 224, 216,217, 224, 217, 218, 225, 218, 219, 226, 218, 220, 226, 219, 220, 226, 219, 220, 227, 220, 221, 227, 221, 223, 228, 224,225, 231, 228, 229, 234, 230, 231, 235, 251, 251, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 33, 254, 17, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, 32, 71, 73, 77, 80, 0, 33, 249, 4, 1, 10, 0, 255, 0, 44, 0, 0, 0, 0, 32, 0, 32, 0, 0, 8, 254, 0, 255, 29, 24, 72, 176, 160, 193, 131, 8, 25, 60, 16, 120, 192, 195, 10, 132, 16, 35, 170, 248, 112, 160, 193, 64, 30, 135, 4, 68, 220, 72, 16, 128, 33, 32, 7, 22, 92, 68, 84, 132, 35, 71, 33, 136, 64, 18, 228, 81, 135, 206, 0, 147, 16, 7, 192, 145, 163, 242, 226, 26, 52, 53, 96, 34, 148, 161, 230, 76, 205, 3, 60, 214, 204, 72, 163, 243, 160, 25, 27, 62, 11, 6, 61, 96, 231, 68, 81, 130, 38, 240, 28, 72, 186, 114, 205, 129, 33, 94, 158, 14, 236, 66, 100, 234, 207, 165, 14, 254, 108, 120, 170, 193, 15, 4, 175, 74, 173, 30, 120, 50, 229, 169, 20, 40, 3, 169, 218, 28, 152, 33, 80, 2, 157, 6, 252, 100, 136, 251, 85, 237, 1, 46, 71,116, 26, 225, 66, 80, 46, 80, 191, 37, 244, 0, 48, 57, 32, 15, 137, 194, 125, 11, 150, 201, 97, 18, 7, 153, 130, 134, 151, 18, 140, 209, 198, 36, 27, 24, 152, 35, 23, 188, 147, 98, 35, 138, 56, 6, 51, 251, 29, 24, 4, 204, 198, 47, 63, 82, 139, 38, 168, 64, 80, 7, 136, 28, 250, 32, 144, 157, 246, 96, 19, 43, 16, 169, 44, 57, 168, 250, 32, 6, 66, 19, 14, 70, 248, 99, 129, 248, 236, 130, 90, 148, 28, 76, 130, 5, 97, 241, 131, 35, 254, 4, 40, 8, 128, 15, 8, 235, 207, 11, 88, 142, 233, 81, 112, 71, 24, 136, 215, 15, 190, 152, 67, 128, 224, 27, 22, 232, 195, 23, 180, 227, 98, 96, 11, 55, 17, 211, 31, 244, 49, 102, 160, 24, 29, 249, 201, 71, 80, 1, 131, 136, 16, 194, 30, 237, 197, 215, 91, 68, 76, 108, 145, 5, 18, 27, 233, 119, 80, 5, 133, 0, 66, 65, 132, 32, 73, 48, 16, 13, 87, 112, 20, 133, 19, 28, 85, 113, 195, 1, 23, 48, 164, 85, 68, 18, 148, 24, 16, 0, 59)
+
+ $ico = New-Object IO.MemoryStream($WindowIcon, 0, $WindowIcon.Length)
+ $form.Icon = [System.Drawing.Icon]::FromHandle((new-object System.Drawing.Bitmap -argument $ico).GetHIcon())
+ #$form.Topmost = $True
+ #$form.AcceptButton = $okButton
+ $form.ShowInTaskbar = $true
+ #$form.MinimizeBox = $False
+ $form.Tag = $null
+
+ $form.Controls.Add($okButton)
+ $form.Controls.Add($CancelButton)
+ $form.Controls.Add($DrawShapesLabel)
+ $form.Controls.Add($PictureBox)
+ $form.Controls.Add($ShapeLabel)
+ $form.Controls.Add($ShapeDropDownBox)
+ $form.Controls.Add($ColourLabel)
+ $form.Controls.Add($ColourDropDownBox)
+ $form.Controls.Add($RightManualButton)
+ $form.Controls.Add($LeftManualButton)
+ $form.Controls.Add($FrameNumberLabel)
+ $form.Controls.Add($FrameNumberNumberBox)
+ $form.Controls.Add($FrameNumberEndNumberLabel)
+ $form.Controls.Add($lv)
+ $form.Controls.Add($EditShapeButton)
+ $form.Controls.Add($DeleteShapeButton)
+ $form.Controls.Add($StartFrameTextBox)
+ $form.Controls.Add($EndFrameTextBox)
+ $form.Controls.Add($ShapeTextBox)
+ $form.Controls.Add($ColourTextBox)
+ $form.Controls.Add($StartXTextBox)
+ $form.Controls.Add($StartYTextBox)
+ $form.Controls.Add($WidthTextBox)
+ $form.Controls.Add($HeightTextBox)
+ $form.Controls.Add($MarkupShapeLabel)
+ $form.Controls.Add($ImageSizeLabel)
+ $form.Controls.Add($ImageHeightTextBox)
+ $form.Controls.Add($ImageWidthTextBox)
+ $form.Controls.Add($ImageSizeXLabel)
+ $form.Controls.Add($StartFrameImageLabel)
+ $form.Controls.Add($StartFrameImageNumberBox)
+ $form.Controls.Add($EndFrameImageLabel)
+ $form.Controls.Add($EndFrameImageNumberBox)
+ $form.Controls.Add($ExportGIFButton)
+ $form.Controls.Add($ResetSizeButton)
+ $form.Controls.Add($InfiniteLoopsLabel)
+ $form.Controls.Add($InfiniteLoopsCheckBox)
+
+
+ # Initialize and show the form.
+ $form.Add_Shown({$form.Activate()})
+ $form.ShowDialog() > $null # Trash the text of the button that was clicked.
+
+}
+
+function ResizeImageHeightRetainRatio([System.Drawing.Image] $img, [int] $heightInPixels)
+{
+ Write-Host "INFO: Resizing image to height: $heightInPixels" -foreground yellow
+ $imgWidth = $img.Width
+ $imgHeight = $img.Height
+ $ratio = $heightInPixels / $imgHeight
+ [int] $widthInPixels = $imgWidth*$ratio
+ $imgResized = New-Object System.Drawing.Bitmap([int]($imgWidth*$ratio), $heightInPixels)
+ $graph = [System.Drawing.Graphics]::FromImage($imgResized)
+
+ $graph.Clear([System.Drawing.Color]::White)
+ $rectangle = New-Object System.Drawing.Rectangle(0, 0, $widthInPixels, $heightInPixels)
+
+ $graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
+ $graph.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::HighQuality
+ $graph.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality
+ $graph.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::HighQuality
+ $graph.DrawImage($img,$rectangle, 0,0, $imgWidth, $imgHeight, [System.Drawing.GraphicsUnit]::Pixel)
+
+ $img.Dispose()
+ return $imgResized
+}
+
+function SaveImageFile([System.Drawing.Image] $bmp)
+{
+
+ Write-Host "Saving Image..." -foreground "yellow"
+ #File Dialog
+ $objFileForm = New-Object System.Windows.Forms.SaveFileDialog
+ $objFileForm.FileName = "ScreenShot.jpg"
+ $objFileForm.Title = "Save Image"
+ $objFileForm.Filter = "JPG (*.jpg)|*.*"
+ $objFileForm.CheckFileExists = $false
+ $Show = $objFileForm.ShowDialog()
+ if ($Show -eq "OK")
+ {
+ [string]$imageTarget = $objFileForm.FileName
+
+ Write-Host "Output File: $imageTarget" -foreground "green"
+ [int]$quality = 95
+
+ #Encoder parameter for image quality
+ $myEncoder = [System.Drawing.Imaging.Encoder]::Quality
+ $encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
+ $encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($myEncoder, $quality)
+ # get codec
+ $myImageCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders()|where {$_.MimeType -eq 'image/jpeg'}
+
+ #save to file
+ $bmp.Save($imageTarget,$myImageCodecInfo, $($encoderParams))
+ $bmp.Dispose()
+
+ }
+ else
+ {
+ Write-Host "INFO: Canceled save image dialog..." -foreground "Yellow"
+ return
+ }
+}
+
+
+function Import-GifWriter {
+ Param (
+ [parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
+ [ValidateNotNullOrEmpty()]
+ [string] $FileLocation,
+ [bool] $InfiniteLoops = $true
+ )
+
+#https://stackoverflow.com/questions/1196322/how-to-create-an-animated-gif-in-net
+ $GifWriter = @'
+using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Threading.Tasks;
+
+///
+/// Creates a GIF using .Net GIF encoding and additional animation headers.
+///
+
+public class GifWriter
+{
+ #region Fields
+ const long SourceGlobalColorInfoPosition = 10, SourceImageBlockPosition = 789;
+
+ readonly BinaryWriter _writer;
+ bool _firstFrame = true;
+ readonly object _syncLock = new object();
+ #endregion
+
+ ///
+ /// Creates a new instance of GifWriter.
+ ///
+ /// The to output the Gif to.
+ /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay.
+ /// No of times the Gif should repeat... -1 to repeat indefinitely.
+ public GifWriter(Stream OutStream, int DefaultFrameDelay = 500, int Repeat = -1)
+ {
+ if (OutStream == null)
+ throw new ArgumentNullException("OutStream");
+
+ if (DefaultFrameDelay <= 0)
+ throw new ArgumentOutOfRangeException("DefaultFrameDelay");
+
+ if (Repeat < -1)
+ throw new ArgumentOutOfRangeException("Repeat");
+
+ _writer = new BinaryWriter(OutStream);
+ this.DefaultFrameDelay = DefaultFrameDelay;
+ this.Repeat = Repeat;
+ }
+
+ ///
+ /// Creates a new instance of GifWriter.
+ ///
+ /// The path to the file to output the Gif to.
+ /// Default Delay between consecutive frames... FrameRate = 1000 / DefaultFrameDelay.
+ /// No of times the Gif should repeat... -1 to repeat indefinitely.
+ public GifWriter(string FileName, int DefaultFrameDelay = 500, int Repeat = -1)
+ : this(new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), DefaultFrameDelay, Repeat) { }
+
+ #region Properties
+ ///
+ /// Gets or Sets the Default Width of a Frame. Used when unspecified.
+ ///
+ public int DefaultWidth { get; set; }
+
+ ///
+ /// Gets or Sets the Default Height of a Frame. Used when unspecified.
+ ///
+ public int DefaultHeight { get; set; }
+
+ ///
+ /// Gets or Sets the Default Delay in Milliseconds.
+ ///
+ public int DefaultFrameDelay { get; set; }
+
+ ///
+ /// The Number of Times the Animation must repeat.
+ /// -1 indicates no repeat. 0 indicates repeat indefinitely
+ ///
+ public int Repeat { get; set; }
+ #endregion
+
+ ///
+ /// Adds a frame to this animation.
+ ///
+ /// The image to add
+ /// Delay in Milliseconds between this and last frame... 0 =
+ public void WriteFrame(Image Image, int Delay = 0)
+ {
+ lock (_syncLock)
+ using (var gifStream = new MemoryStream())
+ {
+ Image.Save(gifStream, ImageFormat.Gif);
+
+ // Steal the global color table info
+ if (_firstFrame)
+ InitHeader(gifStream, _writer, Image.Width, Image.Height);
+
+ WriteGraphicControlBlock(gifStream, _writer, Delay == 0 ? DefaultFrameDelay : Delay);
+ WriteImageBlock(gifStream, _writer, !_firstFrame, 0, 0, Image.Width, Image.Height);
+ }
+
+ if (_firstFrame)
+ _firstFrame = false;
+ }
+
+ #region Write
+ void InitHeader(Stream SourceGif, BinaryWriter Writer, int Width, int Height)
+ {
+ // File Header
+ Writer.Write("GIF".ToCharArray()); // File type
+ Writer.Write("89a".ToCharArray()); // File Version
+
+ Writer.Write((short)(DefaultWidth == 0 ? Width : DefaultWidth)); // Initial Logical Width
+ Writer.Write((short)(DefaultHeight == 0 ? Height : DefaultHeight)); // Initial Logical Height
+
+ SourceGif.Position = SourceGlobalColorInfoPosition;
+ Writer.Write((byte)SourceGif.ReadByte()); // Global Color Table Info
+ Writer.Write((byte)0); // Background Color Index
+ Writer.Write((byte)0); // Pixel aspect ratio
+ WriteColorTable(SourceGif, Writer);
+
+ // App Extension Header for Repeating
+ if (Repeat == -1)
+ return;
+
+ Writer.Write(unchecked((short)0xff21)); // Application Extension Block Identifier
+ Writer.Write((byte)0x0b); // Application Block Size
+ Writer.Write("NETSCAPE2.0".ToCharArray()); // Application Identifier
+ Writer.Write((byte)3); // Application block length
+ Writer.Write((byte)1);
+ Writer.Write((short)Repeat); // Repeat count for images.
+ Writer.Write((byte)0); // terminator
+ }
+
+ static void WriteColorTable(Stream SourceGif, BinaryWriter Writer)
+ {
+ SourceGif.Position = 13; // Locating the image color table
+ var colorTable = new byte[768];
+ SourceGif.Read(colorTable, 0, colorTable.Length);
+ Writer.Write(colorTable, 0, colorTable.Length);
+ }
+
+ static void WriteGraphicControlBlock(Stream SourceGif, BinaryWriter Writer, int FrameDelay)
+ {
+ SourceGif.Position = 781; // Locating the source GCE
+ var blockhead = new byte[8];
+ SourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE
+
+ Writer.Write(unchecked((short)0xf921)); // Identifier
+ Writer.Write((byte)0x04); // Block Size
+ Writer.Write((byte)(blockhead[3] & 0xf7 | 0x08)); // Setting disposal flag
+ Writer.Write((short)(FrameDelay / 10)); // Setting frame delay
+ Writer.Write(blockhead[6]); // Transparent color index
+ Writer.Write((byte)0); // Terminator
+ }
+
+ static void WriteImageBlock(Stream SourceGif, BinaryWriter Writer, bool IncludeColorTable, int X, int Y, int Width, int Height)
+ {
+ SourceGif.Position = SourceImageBlockPosition; // Locating the image block
+ var header = new byte[11];
+ SourceGif.Read(header, 0, header.Length);
+ Writer.Write(header[0]); // Separator
+ Writer.Write((short)X); // Position X
+ Writer.Write((short)Y); // Position Y
+ Writer.Write((short)Width); // Width
+ Writer.Write((short)Height); // Height
+
+ if (IncludeColorTable) // If first frame, use global color table - else use local
+ {
+ SourceGif.Position = SourceGlobalColorInfoPosition;
+ Writer.Write((byte)(SourceGif.ReadByte() & 0x3f | 0x80)); // Enabling local color table
+ WriteColorTable(SourceGif, Writer);
+ }
+ else Writer.Write((byte)(header[9] & 0x07 | 0x07)); // Disabling local color table
+
+ Writer.Write(header[10]); // LZW Min Code Size
+
+ // Read/Write image data
+ SourceGif.Position = SourceImageBlockPosition + header.Length;
+
+ var dataLength = SourceGif.ReadByte();
+ while (dataLength > 0)
+ {
+ var imgData = new byte[dataLength];
+ SourceGif.Read(imgData, 0, dataLength);
+
+ Writer.Write((byte)dataLength);
+ Writer.Write(imgData, 0, dataLength);
+ dataLength = SourceGif.ReadByte();
+ }
+
+ Writer.Write((byte)0); // Terminator
+ }
+ #endregion
+
+ ///
+ /// Frees all resources used by this object.
+ ///
+ public void Dispose()
+ {
+ // Complete File
+ _writer.Write((byte)0x3b); // File Trailer
+
+ _writer.BaseStream.Dispose();
+ _writer.Dispose();
+ }
+}
+'@
+
+ Write-Host 'INFO: Adding GifWriter Class Assembly' -foreground yellow
+ try {
+ Add-Type $GifWriter -ReferencedAssemblies 'System.Windows.Forms', 'System.Drawing'
+
+ Write-Host "INFO: Saving GIF to file location: $FileLocation" -foreground green
+ if($InfiniteLoops)
+ {
+ $GifWriterObject = [GifWriter]::new($FileLocation,500,0)
+ }
+ else
+ {
+ $GifWriterObject = [GifWriter]::new($FileLocation,500,-1)
+ }
+
+ Write-Host 'INFO: Returning GifWriter object' -foreground yellow
+
+ Write-Output $GifWriterObject
+ }
+ catch {
+ Write-Host $Error[0] -foreground red
+ }
+}
+
+# Activate the form ============================================================
+$objForm.Add_Shown({$objForm.Activate()})
+[void] $objForm.ShowDialog()
+
+
+# SIG # Begin signature block
+# MIIcfQYJKoZIhvcNAQcCoIIcbjCCHGoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUQ7/TgULDERKvYFRMkkbdSd/O
+# EYigghesMIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0B
+# AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
+# VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk
+# IElEIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQsw
+# CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
+# ZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQg
+# Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+# +NOzHH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ
+# 1DcZ17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0
+# sSgmuyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6s
+# cKKrzn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4Tz
+# rGdOtcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg
+# 0A9kczyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIB
+# ADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUH
+# AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYI
+# KwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz
+# c3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0
+# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaG
+# NGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RD
+# QS5jcmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0
+# dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYE
+# FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6en
+# IZ3zbcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06
+# GsTvMGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5j
+# DhNLrddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgC
+# PC6Ro8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIy
+# sjaKJAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4Gb
+# T8aTEAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIFNTCC
+# BB2gAwIBAgIQCjSHIb+9FkHaGapmaAdBYDANBgkqhkiG9w0BAQsFADByMQswCQYD
+# VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln
+# aWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29k
+# ZSBTaWduaW5nIENBMB4XDTIwMDEwNjAwMDAwMFoXDTIzMDExMDEyMDAwMFowcjEL
+# MAkGA1UEBhMCQVUxDDAKBgNVBAgTA1ZJQzEQMA4GA1UEBxMHTWl0Y2hhbTEVMBMG
+# A1UEChMMSmFtZXMgQ3Vzc2VuMRUwEwYDVQQLEwxKYW1lcyBDdXNzZW4xFTATBgNV
+# BAMTDEphbWVzIEN1c3NlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+# AM3q0UPJQVPnA/Y1s0Fe4trGhjc16182jZBFJFHWW3pueKrpZaRkMKegW9IcxBbD
+# yGj0ne/epCL70AnW9lulTPc6eWcWY/HSIed/X6K9jVuwL/JI4/qqavoHg+wRloS1
+# ynTEXX3VWYH/YYFovhTr/myR6eTAiovaTVhIvJoL2kWXdhbhie/kZWKWIRmpmDcP
+# Smld9v0/bdjJu2/QLNY5bLPv2Y2vibG+UaQxX4Ul+XihtRcvE9EJ2hLyZtC469ig
+# 9hPQAJgfemWpTbsIaj6HIhFH5U1Mq5kpWMPR8RWenFl7x4nXF5xVvXsR6WrFwtmo
+# MMWM2LPhaqGy+nA8NufJInUCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsq
+# CqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBT+fAtBa1j45lF9yIVym7Yzj/FB0DAO
+# BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1
+# oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1n
+# MS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3Vy
+# ZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUH
+# AgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggr
+# BgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv
+# bTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD
+# ZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAw
+# DQYJKoZIhvcNAQELBQADggEBAHwUySCXpI9ILpmOBI+3G0hy52zIdIaw16wGlMRW
+# nSyYCjApfDdGDrkf+VcOL6Ar4Frhb9XVTp7O5Wc7v2PU/5D6jacVc8Szuo2Qzd8x
+# D5qbdhNZ6npS9wXQRdHhCvIvJhJKxXYvEIE9VYao3kTgiylJvDfdvMDN4gRIx/aR
+# ckJQQzRxYIhbfR/zV4RSeSHwvMg827e2v/YVcLXFjFsoMb0ioy+qQkwFwVz1mo4l
+# PnXXFelUbN0LkWLHsdAxqwATNQHA150SmTpS7tm4Ye2m23lgVlwgGgR2JghWz6bK
+# VI+nm+UfACOdvpXnjBIIDyMNUl9tRx4eo6xyxfUSVASQ3kswggZqMIIFUqADAgEC
+# AhADAZoCOv9YsWvW1ermF/BmMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVT
+# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+# b20xITAfBgNVBAMTGERpZ2lDZXJ0IEFzc3VyZWQgSUQgQ0EtMTAeFw0xNDEwMjIw
+# MDAwMDBaFw0yNDEwMjIwMDAwMDBaMEcxCzAJBgNVBAYTAlVTMREwDwYDVQQKEwhE
+# aWdpQ2VydDElMCMGA1UEAxMcRGlnaUNlcnQgVGltZXN0YW1wIFJlc3BvbmRlcjCC
+# ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKNkXfx8s+CCNeDg9sYq5kl1
+# O8xu4FOpnx9kWeZ8a39rjJ1V+JLjntVaY1sCSVDZg85vZu7dy4XpX6X51Id0iEQ7
+# Gcnl9ZGfxhQ5rCTqqEsskYnMXij0ZLZQt/USs3OWCmejvmGfrvP9Enh1DqZbFP1F
+# I46GRFV9GIYFjFWHeUhG98oOjafeTl/iqLYtWQJhiGFyGGi5uHzu5uc0LzF3gTAf
+# uzYBje8n4/ea8EwxZI3j6/oZh6h+z+yMDDZbesF6uHjHyQYuRhDIjegEYNu8c3T6
+# Ttj+qkDxss5wRoPp2kChWTrZFQlXmVYwk/PJYczQCMxr7GJCkawCwO+k8IkRj3cC
+# AwEAAaOCAzUwggMxMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1Ud
+# JQEB/wQMMAoGCCsGAQUFBwMIMIIBvwYDVR0gBIIBtjCCAbIwggGhBglghkgBhv1s
+# BwEwggGSMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT
+# MIIBZAYIKwYBBQUHAgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABo
+# AGkAcwAgAEMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0
+# AGUAcwAgAGEAYwBjAGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBn
+# AGkAQwBlAHIAdAAgAEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBs
+# AHkAaQBuAGcAIABQAGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABp
+# AGMAaAAgAGwAaQBtAGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABh
+# AHIAZQAgAGkAbgBjAG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABi
+# AHkAIAByAGUAZgBlAHIAZQBuAGMAZQAuMAsGCWCGSAGG/WwDFTAfBgNVHSMEGDAW
+# gBQVABIrE5iymQftHt+ivlcNK2cCzTAdBgNVHQ4EFgQUYVpNJLZJMp1KKnkag0v0
+# HonByn0wfQYDVR0fBHYwdDA4oDagNIYyaHR0cDovL2NybDMuZGlnaWNlcnQuY29t
+# L0RpZ2lDZXJ0QXNzdXJlZElEQ0EtMS5jcmwwOKA2oDSGMmh0dHA6Ly9jcmw0LmRp
+# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRENBLTEuY3JsMHcGCCsGAQUFBwEB
+# BGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsG
+# AQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1
+# cmVkSURDQS0xLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAnSV+GzNNsiaBXJuGziMg
+# D4CH5Yj//7HUaiwx7ToXGXEXzakbvFoWOQCd42yE5FpA+94GAYw3+puxnSR+/iCk
+# V61bt5qwYCbqaVchXTQvH3Gwg5QZBWs1kBCge5fH9j/n4hFBpr1i2fAnPTgdKG86
+# Ugnw7HBi02JLsOBzppLA044x2C/jbRcTBu7kA7YUq/OPQ6dxnSHdFMoVXZJB2vkP
+# gdGZdA0mxA5/G7X1oPHGdwYoFenYk+VVFvC7Cqsc21xIJ2bIo4sKHOWV2q7ELlmg
+# Yd3a822iYemKC23sEhi991VUQAOSK2vCUcIKSK+w1G7g9BQKOhvjjz3Kr2qNe9zY
+# RDCCBs0wggW1oAMCAQICEAb9+QOWA63qAArrPye7uhswDQYJKoZIhvcNAQEFBQAw
+# ZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ
+# d3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJlZCBJRCBS
+# b290IENBMB4XDTA2MTExMDAwMDAwMFoXDTIxMTExMDAwMDAwMFowYjELMAkGA1UE
+# BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj
+# ZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgQXNzdXJlZCBJRCBDQS0xMIIBIjAN
+# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6IItmfnKwkKVpYBzQHDSnlZUXKnE
+# 0kEGj8kz/E1FkVyBn+0snPgWWd+etSQVwpi5tHdJ3InECtqvy15r7a2wcTHrzzpA
+# DEZNk+yLejYIA6sMNP4YSYL+x8cxSIB8HqIPkg5QycaH6zY/2DDD/6b3+6LNb3Mj
+# /qxWBZDwMiEWicZwiPkFl32jx0PdAug7Pe2xQaPtP77blUjE7h6z8rwMK5nQxl0S
+# QoHhg26Ccz8mSxSQrllmCsSNvtLOBq6thG9IhJtPQLnxTPKvmPv2zkBdXPao8S+v
+# 7Iki8msYZbHBc63X8djPHgp0XEK4aH631XcKJ1Z8D2KkPzIUYJX9BwSiCQIDAQAB
+# o4IDejCCA3YwDgYDVR0PAQH/BAQDAgGGMDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggr
+# BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCDCCAdIGA1UdIASC
+# AckwggHFMIIBtAYKYIZIAYb9bAABBDCCAaQwOgYIKwYBBQUHAgEWLmh0dHA6Ly93
+# d3cuZGlnaWNlcnQuY29tL3NzbC1jcHMtcmVwb3NpdG9yeS5odG0wggFkBggrBgEF
+# BQcCAjCCAVYeggFSAEEAbgB5ACAAdQBzAGUAIABvAGYAIAB0AGgAaQBzACAAQwBl
+# AHIAdABpAGYAaQBjAGEAdABlACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQBj
+# AGMAZQBwAHQAYQBuAGMAZQAgAG8AZgAgAHQAaABlACAARABpAGcAaQBDAGUAcgB0
+# ACAAQwBQAC8AQwBQAFMAIABhAG4AZAAgAHQAaABlACAAUgBlAGwAeQBpAG4AZwAg
+# AFAAYQByAHQAeQAgAEEAZwByAGUAZQBtAGUAbgB0ACAAdwBoAGkAYwBoACAAbABp
+# AG0AaQB0ACAAbABpAGEAYgBpAGwAaQB0AHkAIABhAG4AZAAgAGEAcgBlACAAaQBu
+# AGMAbwByAHAAbwByAGEAdABlAGQAIABoAGUAcgBlAGkAbgAgAGIAeQAgAHIAZQBm
+# AGUAcgBlAG4AYwBlAC4wCwYJYIZIAYb9bAMVMBIGA1UdEwEB/wQIMAYBAf8CAQAw
+# eQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
+# dC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
+# aWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0
+# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j
+# cmwwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3Vy
+# ZWRJRFJvb3RDQS5jcmwwHQYDVR0OBBYEFBUAEisTmLKZB+0e36K+Vw0rZwLNMB8G
+# A1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA0GCSqGSIb3DQEBBQUAA4IB
+# AQBGUD7Jtygkpzgdtlspr1LPUukxR6tWXHvVDQtBs+/sdR90OPKyXGGinJXDUOSC
+# uSPRujqGcq04eKx1XRcXNHJHhZRW0eu7NoR3zCSl8wQZVann4+erYs37iy2QwsDS
+# tZS9Xk+xBdIOPRqpFFumhjFiqKgz5Js5p8T1zh14dpQlc+Qqq8+cdkvtX8JLFuRL
+# cEwAiR78xXm8TBJX/l/hHrwCXaj++wc4Tw3GXZG5D2dFzdaD7eeSDY2xaYxP+1ng
+# Iw/Sqq4AfO6cQg7PkdcntxbuD8O9fAqg7iwIVYUiuOsYGk38KiGtSTGDR5V3cdyx
+# G0tLHBCcdxTBnU8vWpUIKRAmMYIEOzCCBDcCAQEwgYYwcjELMAkGA1UEBhMCVVMx
+# FTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNv
+# bTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIENvZGUgU2lnbmlu
+# ZyBDQQIQCjSHIb+9FkHaGapmaAdBYDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIB
+# DDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEE
+# AYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUUFBK7LxW+S38
+# 8WJoN3L0eETG8B4wDQYJKoZIhvcNAQEBBQAEggEAWhLCRsNgjRzmu0KISjje8282
+# iUD1ylg09M91yh/Hgg9qXEjPEzdyZDOjHom3zSRaTP2MRbmyLoOhvdNmSq2dU2oy
+# OwZ/0N/3fMO54cATtlglPge0wZZE9ZkRqVycMcWD3MxwWnJ3ertn1B2AtEa4zQOk
+# 930ObSFaJ+qZFODbmzcaImFkFpnOPNosJL9VwbyB4qmwbQ5+o1MURyS1nOcaTSO+
+# Yt1pvAXsxjNx3dGWEznzbFRfqceOc0jHg39waAFUkFbhM674RH2wPEW5k4HmdDD/
+# vanoTccxaTs7qw16TRXCaMSXhTBl+k19xxj18H4l2TwLGyj1I5HidScLmfoywaGC
+# Ag8wggILBgkqhkiG9w0BCQYxggH8MIIB+AIBATB2MGIxCzAJBgNVBAYTAlVTMRUw
+# EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
+# ITAfBgNVBAMTGERpZ2lDZXJ0IEFzc3VyZWQgSUQgQ0EtMQIQAwGaAjr/WLFr1tXq
+# 5hfwZjAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkq
+# hkiG9w0BCQUxDxcNMjAxMDIyMDk0NTQyWjAjBgkqhkiG9w0BCQQxFgQU+s8pi93V
+# XECKwrkDmxfQCciSdxswDQYJKoZIhvcNAQEBBQAEggEAcyol9GAIzsB1pT5W7kUN
+# 74+S/K6TI6lxGjFPau5saaQ8QTWC+qYTtSFDwgby7Cpyf/HhxI8FCv5BGzxLGNPI
+# SxUS+ds3eCMCoVzjASPeeSKiDMz36HAjvjifFuP2GonrcOpaOU12wmdRrw1lJ/aD
+# FTMwIAAXdLlfIXJof1B2e3kxlh4SUurQN2VZuRjlgtcAbxYCc1OZyepFuCRW0HKZ
+# 0VhD7rYF5U2Nya/6qLP1JYocPw9/yphouyvAaXP1JK0Bmmbx1cjU7pD1FBBZnaXp
+# Uh9sOAwljewEd2XoM4oRNQHeMNuCGMNeVcRFM+grtHoe22cNQJmw6eQH5oHbT6B/
+# Gg==
+# SIG # End signature block