public static bool PE24FRead(string saveText)
        {
            if (!PE_DownloadAndConnect())
            {
                return(false);
            }
            UpdateStatusWinText(saveText);
            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num  = 32;
            int num2 = 0;
            int num3 = 0;
            int num4 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar((int)((long)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem / (long)num));
            do
            {
                num4           = 0;
                array2[num4++] = 166;
                array2[num4++] = 0;
                array2[num4++] = 243;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = 4;
                array2[num4++] = 242;
                array2[num4++] = 32;
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[num];
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 15) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 7) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 << 1) & 0xFF];
                array2[num4++] = 243;
                array2[num4++] = 2;
                array2[num4++] = 231;
                array2[num4++] = 5;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 233;
                array2[num4++] = 3;
                array2[num4++] = 31;
                array2[num4++] = 172;
                array2[num4++] = 172;
                array2[1]      = (byte)(num4 - 4);
                for (; num4 < 64; num4++)
                {
                    array2[num4] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num3 = 0;
                for (int i = 0; i < num; i += 2)
                {
                    uint num5 = (uint)(BitReverseTable[array[num3++]] << 8);
                    num5 |= BitReverseTable[array[num3++]];
                    uint num6 = (uint)(BitReverseTable[array[num3++]] << 16);
                    num5  = (uint)((int)num5 | (BitReverseTable[array[num3++]] << 16));
                    num6  = (uint)((int)num6 | (BitReverseTable[array[num3++]] << 8));
                    num6 |= BitReverseTable[array[num3++]];
                    PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] = num5;
                    PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] = num6;
                    if (num2 >= PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num2 < PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }
        public static bool PE24FVerify(string saveText, bool writeVerify, int lastLocation)
        {
            if ((!writeVerify || !PEGoodOnWrite) && !PE_DownloadAndConnect())
            {
                return(false);
            }
            PEGoodOnWrite = false;
            if (!writeVerify)
            {
                lastLocation = (int)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem;
            }
            UpdateStatusWinText(saveText);
            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num  = 32;
            int num2 = 0;
            int num3 = 0;
            int num4 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar(lastLocation / num);
            do
            {
                num4           = 0;
                array2[num4++] = 166;
                array2[num4++] = 0;
                array2[num4++] = 243;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = 4;
                array2[num4++] = 242;
                array2[num4++] = 32;
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[num];
                array2[num4++] = 242;
                array2[num4++] = 0;
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 15) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 >> 7) & 0xFF];
                array2[num4++] = 242;
                array2[num4++] = BitReverseTable[(num2 << 1) & 0xFF];
                array2[num4++] = 243;
                array2[num4++] = 2;
                array2[num4++] = 231;
                array2[num4++] = 5;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 239;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 240;
                array2[num4++] = 233;
                array2[num4++] = 3;
                array2[num4++] = 31;
                array2[num4++] = 172;
                array2[num4++] = 172;
                array2[1]      = (byte)(num4 - 4);
                for (; num4 < 64; num4++)
                {
                    array2[num4] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num3 = 0;
                for (int i = 0; i < num; i += 2)
                {
                    uint num5 = (uint)(BitReverseTable[array[num3++]] << 8);
                    num5 |= BitReverseTable[array[num3++]];
                    uint num6 = (uint)(BitReverseTable[array[num3++]] << 16);
                    num5  = (uint)((int)num5 | (BitReverseTable[array[num3++]] << 16));
                    num6  = (uint)((int)num6 | (BitReverseTable[array[num3++]] << 8));
                    num6 |= BitReverseTable[array[num3++]];
                    if (PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] != num5)
                    {
                        string text = "";
                        text  = (writeVerify ? "Programming failed at Program Memory address\n" : "Verification of Program Memory failed at address\n");
                        text += $"0x{--num2 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(text);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    if (PICkitFunctions.DeviceBuffers.ProgramMemory[num2++] != num6)
                    {
                        string text2 = "";
                        text2  = (writeVerify ? "Programming failed at Program Memory address\n" : "Verification of Program Memory failed at address\n");
                        text2 += $"0x{--num2 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(text2);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    if (num2 >= lastLocation)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num2 < lastLocation);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }
        public static bool PE24FBlankCheck(string saveText)
        {
            if (!PE_DownloadAndConnect())
            {
                return(false);
            }
            UpdateStatusWinText(saveText);
            int num = (int)(PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem - PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigWords);

            byte[] array = new byte[128];
            _ = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BytesPerLocation;
            int num2 = 32;
            int num3 = 0;
            int num4 = 0;
            int num5 = 0;

            byte[] array2 = new byte[64];
            ResetStatusBar((int)((long)PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem / (long)num2));
            uint num6 = PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].BlankValue;

            do
            {
                num5           = 0;
                array2[num5++] = 166;
                array2[num5++] = 0;
                array2[num5++] = 243;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = 4;
                array2[num5++] = 242;
                array2[num5++] = 32;
                array2[num5++] = 242;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[num2];
                array2[num5++] = 242;
                array2[num5++] = 0;
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 >> 15) & 0xFF];
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 >> 7) & 0xFF];
                array2[num5++] = 242;
                array2[num5++] = BitReverseTable[(num3 << 1) & 0xFF];
                array2[num5++] = 243;
                array2[num5++] = 2;
                array2[num5++] = 231;
                array2[num5++] = 5;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 239;
                array2[num5++] = 240;
                array2[num5++] = 240;
                array2[num5++] = 240;
                array2[num5++] = 233;
                array2[num5++] = 3;
                array2[num5++] = 31;
                array2[num5++] = 172;
                array2[num5++] = 172;
                array2[1]      = (byte)(num5 - 4);
                for (; num5 < 64; num5++)
                {
                    array2[num5] = 173;
                }
                PICkitFunctions.writeUSB(array2);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 0L, 64L);
                PICkitFunctions.GetUpload();
                Array.Copy(PICkitFunctions.Usb_read_array, 1L, array, 64L, 64L);
                num4 = 0;
                for (int i = 0; i < num2; i += 2)
                {
                    uint num7 = (uint)(BitReverseTable[array[num4++]] << 8);
                    num7 |= BitReverseTable[array[num4++]];
                    uint num8 = (uint)(BitReverseTable[array[num4++]] << 16);
                    num7  = (uint)((int)num7 | (BitReverseTable[array[num4++]] << 16));
                    num8  = (uint)((int)num8 | (BitReverseTable[array[num4++]] << 8));
                    num8 |= BitReverseTable[array[num4++]];
                    if (num3 >= num)
                    {
                        num6 = (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[num3 - num]);
                    }
                    if (num6 != num7)
                    {
                        string str = "Program Memory is not blank starting at address\n";
                        str += $"0x{num3 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(str);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    num3++;
                    if (num3 >= num)
                    {
                        num6 = (uint)(0xFF0000 | PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ConfigBlank[num3 - num]);
                    }
                    if (num6 != num8)
                    {
                        string str2 = "Program Memory is not blank starting at address\n";
                        str2 += $"0x{num3 * PICkitFunctions.DevFile.Families[PICkitFunctions.GetActiveFamily()].AddressIncrement:X6}";
                        UpdateStatusWinText(str2);
                        PICkitFunctions.RunScript(1, 1);
                        restoreICSPSpeed();
                        return(false);
                    }
                    num3++;
                    if (num3 >= PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem)
                    {
                        break;
                    }
                }
                StepStatusBar();
            }while (num3 < PICkitFunctions.DevFile.PartsList[PICkitFunctions.ActivePart].ProgramMem);
            PICkitFunctions.RunScript(1, 1);
            restoreICSPSpeed();
            return(true);
        }