mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
REFACTOR: Reformat code.
This commit is contained in:
@@ -219,8 +219,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDATIP? Decode(byte[] CDATIPResponse)
|
||||
{
|
||||
if(CDATIPResponse == null)
|
||||
return null;
|
||||
if(CDATIPResponse == null) return null;
|
||||
|
||||
CDATIP decoded = new CDATIP();
|
||||
|
||||
@@ -228,7 +227,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
if(CDATIPResponse.Length != 32 && CDATIPResponse.Length != 28)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD ATIP decoder", "Expected CD ATIP size (32 bytes) is not received size ({0} bytes), not decoding", CDATIPResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD ATIP decoder",
|
||||
"Expected CD ATIP size (32 bytes) is not received size ({0} bytes), not decoding",
|
||||
CDATIPResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -283,8 +284,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDATIP? CDATIPResponse)
|
||||
{
|
||||
if(CDATIPResponse == null)
|
||||
return null;
|
||||
if(CDATIPResponse == null) return null;
|
||||
|
||||
CDATIP response = CDATIPResponse.Value;
|
||||
|
||||
@@ -293,10 +293,8 @@ namespace DiscImageChef.Decoders.CD
|
||||
if(response.DDCD)
|
||||
{
|
||||
sb.AppendFormat("Indicative Target Writing Power: 0x{0:X2}", response.ITWP).AppendLine();
|
||||
if(response.DiscType)
|
||||
sb.AppendLine("Disc is DDCD-RW");
|
||||
else
|
||||
sb.AppendLine("Disc is DDCD-R");
|
||||
if(response.DiscType) sb.AppendLine("Disc is DDCD-RW");
|
||||
else sb.AppendLine("Disc is DDCD-R");
|
||||
switch(response.ReferenceSpeed)
|
||||
{
|
||||
case 2:
|
||||
@@ -309,9 +307,16 @@ namespace DiscImageChef.Decoders.CD
|
||||
sb.AppendFormat("Reference speed set is unknown: {0}", response.ReferenceSpeed).AppendLine();
|
||||
break;
|
||||
}
|
||||
sb.AppendFormat("ATIP Start time of Lead-in: 0x{0:X6}", (response.LeadInStartMin << 16) + (response.LeadInStartSec << 8) + response.LeadInStartFrame).AppendLine();
|
||||
sb.AppendFormat("ATIP Last possible start time of Lead-out: 0x{0:X6}", (response.LeadOutStartMin << 16) + (response.LeadOutStartSec << 8) + response.LeadOutStartFrame).AppendLine();
|
||||
sb.AppendFormat("S4 value: 0x{0:X6}", (response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2]).AppendLine();
|
||||
|
||||
sb.AppendFormat("ATIP Start time of Lead-in: 0x{0:X6}",
|
||||
(response.LeadInStartMin << 16) + (response.LeadInStartSec << 8) +
|
||||
response.LeadInStartFrame).AppendLine();
|
||||
sb.AppendFormat("ATIP Last possible start time of Lead-out: 0x{0:X6}",
|
||||
(response.LeadOutStartMin << 16) + (response.LeadOutStartSec << 8) +
|
||||
response.LeadOutStartFrame).AppendLine();
|
||||
sb.AppendFormat("S4 value: 0x{0:X6}",
|
||||
(response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2])
|
||||
.AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -354,7 +359,8 @@ namespace DiscImageChef.Decoders.CD
|
||||
sb.AppendLine("Reference speed is 2x");
|
||||
break;
|
||||
default:
|
||||
sb.AppendFormat("Reference speed set is unknown: {0}", response.ReferenceSpeed).AppendLine();
|
||||
sb.AppendFormat("Reference speed set is unknown: {0}", response.ReferenceSpeed)
|
||||
.AppendLine();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -393,21 +399,30 @@ namespace DiscImageChef.Decoders.CD
|
||||
}
|
||||
}
|
||||
|
||||
if(response.URU)
|
||||
sb.AppendLine("Disc use is unrestricted");
|
||||
else
|
||||
sb.AppendLine("Disc use is restricted");
|
||||
if(response.URU) sb.AppendLine("Disc use is unrestricted");
|
||||
else sb.AppendLine("Disc use is restricted");
|
||||
|
||||
sb.AppendFormat("ATIP Start time of Lead-in: {0}:{1:D2}:{2:D2}", response.LeadInStartMin, response.LeadInStartSec, response.LeadInStartFrame).AppendLine();
|
||||
sb.AppendFormat("ATIP Last possible start time of Lead-out: {0}:{1:D2}:{2:D2}", response.LeadOutStartMin, response.LeadOutStartSec, response.LeadOutStartFrame).AppendLine();
|
||||
sb.AppendFormat("ATIP Start time of Lead-in: {0}:{1:D2}:{2:D2}", response.LeadInStartMin,
|
||||
response.LeadInStartSec, response.LeadInStartFrame).AppendLine();
|
||||
sb.AppendFormat("ATIP Last possible start time of Lead-out: {0}:{1:D2}:{2:D2}",
|
||||
response.LeadOutStartMin, response.LeadOutStartSec, response.LeadOutStartFrame)
|
||||
.AppendLine();
|
||||
if(response.A1Valid)
|
||||
sb.AppendFormat("A1 value: 0x{0:X6}", (response.A1Values[0] << 16) + (response.A1Values[1] << 8) + response.A1Values[2]).AppendLine();
|
||||
sb.AppendFormat("A1 value: 0x{0:X6}",
|
||||
(response.A1Values[0] << 16) + (response.A1Values[1] << 8) + response.A1Values[2])
|
||||
.AppendLine();
|
||||
if(response.A2Valid)
|
||||
sb.AppendFormat("A2 value: 0x{0:X6}", (response.A2Values[0] << 16) + (response.A2Values[1] << 8) + response.A2Values[2]).AppendLine();
|
||||
sb.AppendFormat("A2 value: 0x{0:X6}",
|
||||
(response.A2Values[0] << 16) + (response.A2Values[1] << 8) + response.A2Values[2])
|
||||
.AppendLine();
|
||||
if(response.A3Valid)
|
||||
sb.AppendFormat("A3 value: 0x{0:X6}", (response.A3Values[0] << 16) + (response.A3Values[1] << 8) + response.A3Values[2]).AppendLine();
|
||||
sb.AppendFormat("A3 value: 0x{0:X6}",
|
||||
(response.A3Values[0] << 16) + (response.A3Values[1] << 8) + response.A3Values[2])
|
||||
.AppendLine();
|
||||
if(response.S4Values != null)
|
||||
sb.AppendFormat("S4 value: 0x{0:X6}", (response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2]).AppendLine();
|
||||
sb.AppendFormat("S4 value: 0x{0:X6}",
|
||||
(response.S4Values[0] << 16) + (response.S4Values[1] << 8) + response.S4Values[2])
|
||||
.AppendLine();
|
||||
}
|
||||
|
||||
if(response.LeadInStartMin == 97)
|
||||
@@ -416,20 +431,16 @@ namespace DiscImageChef.Decoders.CD
|
||||
int frm = response.LeadInStartFrame - type;
|
||||
string manufacturer = "";
|
||||
|
||||
if(response.DiscType)
|
||||
sb.AppendLine("Disc uses phase change");
|
||||
if(response.DiscType) sb.AppendLine("Disc uses phase change");
|
||||
else
|
||||
{
|
||||
if(type < 5)
|
||||
sb.AppendLine("Disc uses long strategy type dye (Cyanine, AZO, etc...)");
|
||||
else
|
||||
sb.AppendLine("Disc uses short strategy type dye (Phthalocyanine, etc...)");
|
||||
if(type < 5) sb.AppendLine("Disc uses long strategy type dye (Cyanine, AZO, etc...)");
|
||||
else sb.AppendLine("Disc uses short strategy type dye (Phthalocyanine, etc...)");
|
||||
}
|
||||
|
||||
manufacturer = ManufacturerFromATIP(response.LeadInStartSec, frm);
|
||||
|
||||
if(manufacturer != "")
|
||||
sb.AppendFormat("Disc manufactured by: {0}", manufacturer).AppendLine();
|
||||
if(manufacturer != "") sb.AppendFormat("Disc manufactured by: {0}", manufacturer).AppendLine();
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
@@ -446,285 +457,198 @@ namespace DiscImageChef.Decoders.CD
|
||||
switch(sec)
|
||||
{
|
||||
case 15:
|
||||
if(frm == 00)
|
||||
return "TDK Corporation";
|
||||
if(frm == 10)
|
||||
return "Ritek Co.";
|
||||
if(frm == 20)
|
||||
return "Mitsubishi Chemical Corporation";
|
||||
if(frm == 30)
|
||||
return "NAN-YA Plastics Corporation";
|
||||
if(frm == 00) return "TDK Corporation";
|
||||
if(frm == 10) return "Ritek Co.";
|
||||
if(frm == 20) return "Mitsubishi Chemical Corporation";
|
||||
if(frm == 30) return "NAN-YA Plastics Corporation";
|
||||
|
||||
break;
|
||||
case 16:
|
||||
if(frm == 20)
|
||||
return "Shenzen SG&Gast Digital Optical Discs";
|
||||
if(frm == 30)
|
||||
return "Grand Advance Technology Ltd.";
|
||||
if(frm == 20) return "Shenzen SG&Gast Digital Optical Discs";
|
||||
if(frm == 30) return "Grand Advance Technology Ltd.";
|
||||
|
||||
break;
|
||||
case 17:
|
||||
if(frm == 00)
|
||||
return "Moser Baer India Limited";
|
||||
if(frm == 00) return "Moser Baer India Limited";
|
||||
|
||||
break;
|
||||
case 18:
|
||||
if(frm == 10)
|
||||
return "Wealth Fair Investment Ltd.";
|
||||
if(frm == 60)
|
||||
return "Taroko International Co. Ltd.";
|
||||
if(frm == 10) return "Wealth Fair Investment Ltd.";
|
||||
if(frm == 60) return "Taroko International Co. Ltd.";
|
||||
|
||||
break;
|
||||
case 20:
|
||||
if(frm == 10)
|
||||
return "CDA Datenträger Albrechts GmbH";
|
||||
if(frm == 10) return "CDA Datenträger Albrechts GmbH";
|
||||
|
||||
break;
|
||||
case 21:
|
||||
if(frm == 10)
|
||||
return "Grupo Condor S.L.";
|
||||
if(frm == 30)
|
||||
return "Bestdisc Technology Corporation";
|
||||
if(frm == 40)
|
||||
return "Optical Disc Manufacturing Equipment";
|
||||
if(frm == 50)
|
||||
return "Sound Sound Multi-Media Development Ltd.";
|
||||
if(frm == 10) return "Grupo Condor S.L.";
|
||||
if(frm == 30) return "Bestdisc Technology Corporation";
|
||||
if(frm == 40) return "Optical Disc Manufacturing Equipment";
|
||||
if(frm == 50) return "Sound Sound Multi-Media Development Ltd.";
|
||||
|
||||
break;
|
||||
case 22:
|
||||
if(frm == 00)
|
||||
return "Woongjin Media Corp.";
|
||||
if(frm == 10)
|
||||
return "Seantram Technology Inc.";
|
||||
if(frm == 20)
|
||||
return "Advanced Digital Media";
|
||||
if(frm == 30)
|
||||
return "EXIMPO";
|
||||
if(frm == 40)
|
||||
return "CIS Technology Inc.";
|
||||
if(frm == 50)
|
||||
return "Hong Kong Digital Technology Co., Ltd.";
|
||||
if(frm == 60)
|
||||
return "Acer Media Technology, Inc.";
|
||||
if(frm == 00) return "Woongjin Media Corp.";
|
||||
if(frm == 10) return "Seantram Technology Inc.";
|
||||
if(frm == 20) return "Advanced Digital Media";
|
||||
if(frm == 30) return "EXIMPO";
|
||||
if(frm == 40) return "CIS Technology Inc.";
|
||||
if(frm == 50) return "Hong Kong Digital Technology Co., Ltd.";
|
||||
if(frm == 60) return "Acer Media Technology, Inc.";
|
||||
|
||||
break;
|
||||
case 23:
|
||||
if(frm == 00)
|
||||
return "Matsushita Electric Industrial Co., Ltd.";
|
||||
if(frm == 10)
|
||||
return "Doremi Media Co., Ltd.";
|
||||
if(frm == 20)
|
||||
return "Nacar Media s.r.l.";
|
||||
if(frm == 30)
|
||||
return "Audio Distributors Co., Ltd.";
|
||||
if(frm == 40)
|
||||
return "Victor Company of Japan, Ltd.";
|
||||
if(frm == 50)
|
||||
return "Optrom Inc.";
|
||||
if(frm == 60)
|
||||
return "Customer Pressing Oosterhout";
|
||||
if(frm == 00) return "Matsushita Electric Industrial Co., Ltd.";
|
||||
if(frm == 10) return "Doremi Media Co., Ltd.";
|
||||
if(frm == 20) return "Nacar Media s.r.l.";
|
||||
if(frm == 30) return "Audio Distributors Co., Ltd.";
|
||||
if(frm == 40) return "Victor Company of Japan, Ltd.";
|
||||
if(frm == 50) return "Optrom Inc.";
|
||||
if(frm == 60) return "Customer Pressing Oosterhout";
|
||||
|
||||
break;
|
||||
case 24:
|
||||
if(frm == 00)
|
||||
return "Taiyo Yuden Company Ltd.";
|
||||
if(frm == 10)
|
||||
return "SONY Corporation";
|
||||
if(frm == 20)
|
||||
return "Computer Support Italy s.r.l.";
|
||||
if(frm == 30)
|
||||
return "Unitech Japan Inc.";
|
||||
if(frm == 40)
|
||||
return "kdg mediatech AG";
|
||||
if(frm == 50)
|
||||
return "Guann Yinn Co., Ltd.";
|
||||
if(frm == 60)
|
||||
return "Harmonic Hall Optical Disc Ltd.";
|
||||
if(frm == 00) return "Taiyo Yuden Company Ltd.";
|
||||
if(frm == 10) return "SONY Corporation";
|
||||
if(frm == 20) return "Computer Support Italy s.r.l.";
|
||||
if(frm == 30) return "Unitech Japan Inc.";
|
||||
if(frm == 40) return "kdg mediatech AG";
|
||||
if(frm == 50) return "Guann Yinn Co., Ltd.";
|
||||
if(frm == 60) return "Harmonic Hall Optical Disc Ltd.";
|
||||
|
||||
break;
|
||||
case 25:
|
||||
if(frm == 00)
|
||||
return "MPO";
|
||||
if(frm == 20)
|
||||
return "Hitachi Maxell, Ltd.";
|
||||
if(frm == 30)
|
||||
return "Infodisc Technology Co. Ltd.";
|
||||
if(frm == 40)
|
||||
return "Vivastar AG";
|
||||
if(frm == 50)
|
||||
return "AMS Technology Inc.";
|
||||
if(frm == 60)
|
||||
return "Xcitec Inc.";
|
||||
if(frm == 00) return "MPO";
|
||||
if(frm == 20) return "Hitachi Maxell, Ltd.";
|
||||
if(frm == 30) return "Infodisc Technology Co. Ltd.";
|
||||
if(frm == 40) return "Vivastar AG";
|
||||
if(frm == 50) return "AMS Technology Inc.";
|
||||
if(frm == 60) return "Xcitec Inc.";
|
||||
|
||||
break;
|
||||
case 26:
|
||||
if(frm == 00)
|
||||
return "Fornet International Pte Ltd.";
|
||||
if(frm == 10)
|
||||
return "POSTECH Corporation";
|
||||
if(frm == 20)
|
||||
return "SKC Co., Ltd.";
|
||||
if(frm == 30)
|
||||
return "Optical Disc Corporation";
|
||||
if(frm == 40)
|
||||
return "FUJI Photo Film Co., Ltd.";
|
||||
if(frm == 50)
|
||||
return "Lead Data Inc.";
|
||||
if(frm == 60)
|
||||
return "CMC Magnetics Corporation";
|
||||
if(frm == 00) return "Fornet International Pte Ltd.";
|
||||
if(frm == 10) return "POSTECH Corporation";
|
||||
if(frm == 20) return "SKC Co., Ltd.";
|
||||
if(frm == 30) return "Optical Disc Corporation";
|
||||
if(frm == 40) return "FUJI Photo Film Co., Ltd.";
|
||||
if(frm == 50) return "Lead Data Inc.";
|
||||
if(frm == 60) return "CMC Magnetics Corporation";
|
||||
|
||||
break;
|
||||
case 27:
|
||||
if(frm == 00)
|
||||
return "Digital Storage Technology Co., Ltd.";
|
||||
if(frm == 10)
|
||||
return "Plasmon Data systems Ltd.";
|
||||
if(frm == 20)
|
||||
return "Princo Corporation";
|
||||
if(frm == 30)
|
||||
return "Pioneer Video Corporation";
|
||||
if(frm == 40)
|
||||
return "Kodak Japan Ltd.";
|
||||
if(frm == 50)
|
||||
return "Mitsui Chemicals, Inc.";
|
||||
if(frm == 60)
|
||||
return "Ricoh Company Ltd.";
|
||||
if(frm == 00) return "Digital Storage Technology Co., Ltd.";
|
||||
if(frm == 10) return "Plasmon Data systems Ltd.";
|
||||
if(frm == 20) return "Princo Corporation";
|
||||
if(frm == 30) return "Pioneer Video Corporation";
|
||||
if(frm == 40) return "Kodak Japan Ltd.";
|
||||
if(frm == 50) return "Mitsui Chemicals, Inc.";
|
||||
if(frm == 60) return "Ricoh Company Ltd.";
|
||||
|
||||
break;
|
||||
case 28:
|
||||
if(frm == 00)
|
||||
return "Opti.Me.S. S.p.A.";
|
||||
if(frm == 10)
|
||||
return "Gigastore Corporation";
|
||||
if(frm == 20)
|
||||
return "Multi Media Masters & Machinary SA";
|
||||
if(frm == 30)
|
||||
return "Auvistar Industry Co., Ltd.";
|
||||
if(frm == 40)
|
||||
return "King Pro Mediatek Inc.";
|
||||
if(frm == 50)
|
||||
return "Delphi Technology Inc.";
|
||||
if(frm == 60)
|
||||
return "Friendly CD-Tek Co.";
|
||||
if(frm == 00) return "Opti.Me.S. S.p.A.";
|
||||
if(frm == 10) return "Gigastore Corporation";
|
||||
if(frm == 20) return "Multi Media Masters & Machinary SA";
|
||||
if(frm == 30) return "Auvistar Industry Co., Ltd.";
|
||||
if(frm == 40) return "King Pro Mediatek Inc.";
|
||||
if(frm == 50) return "Delphi Technology Inc.";
|
||||
if(frm == 60) return "Friendly CD-Tek Co.";
|
||||
|
||||
break;
|
||||
case 29:
|
||||
if(frm == 00)
|
||||
return "Taeil Media Co., Ltd.";
|
||||
if(frm == 10)
|
||||
return "Vanguard Disc Inc.";
|
||||
if(frm == 20)
|
||||
return "Unidisc Technology Co., Ltd.";
|
||||
if(frm == 30)
|
||||
return "Hile Optical Disc Technology Corp.";
|
||||
if(frm == 40)
|
||||
return "Viva Magnetics Ltd.";
|
||||
if(frm == 50)
|
||||
return "General Magnetics Ltd.";
|
||||
if(frm == 00) return "Taeil Media Co., Ltd.";
|
||||
if(frm == 10) return "Vanguard Disc Inc.";
|
||||
if(frm == 20) return "Unidisc Technology Co., Ltd.";
|
||||
if(frm == 30) return "Hile Optical Disc Technology Corp.";
|
||||
if(frm == 40) return "Viva Magnetics Ltd.";
|
||||
if(frm == 50) return "General Magnetics Ltd.";
|
||||
|
||||
break;
|
||||
case 30:
|
||||
if(frm == 10)
|
||||
return "CDA Datenträger Albrechts GmbH";
|
||||
if(frm == 10) return "CDA Datenträger Albrechts GmbH";
|
||||
|
||||
break;
|
||||
case 31:
|
||||
if(frm == 00)
|
||||
return "Ritek Co.";
|
||||
if(frm == 30)
|
||||
return "Grand Advance Technology Ltd.";
|
||||
if(frm == 00) return "Ritek Co.";
|
||||
if(frm == 30) return "Grand Advance Technology Ltd.";
|
||||
|
||||
break;
|
||||
case 32:
|
||||
if(frm == 00)
|
||||
return "TDK Corporation";
|
||||
if(frm == 10)
|
||||
return "Prodisc Technology Inc.";
|
||||
if(frm == 00) return "TDK Corporation";
|
||||
if(frm == 10) return "Prodisc Technology Inc.";
|
||||
|
||||
break;
|
||||
case 34:
|
||||
if(frm == 20)
|
||||
return "Mitsubishi Chemical Corporation";
|
||||
if(frm == 20) return "Mitsubishi Chemical Corporation";
|
||||
|
||||
break;
|
||||
case 42:
|
||||
if(frm == 20)
|
||||
return "Advanced Digital Media";
|
||||
if(frm == 20) return "Advanced Digital Media";
|
||||
|
||||
break;
|
||||
case 45:
|
||||
if(frm == 00)
|
||||
return "Fornet International Pte Ltd.";
|
||||
if(frm == 10)
|
||||
return "Unitech Japan Inc.";
|
||||
if(frm == 20)
|
||||
return "Acer Media Technology, Inc.";
|
||||
if(frm == 40)
|
||||
return "CIS Technology Inc.";
|
||||
if(frm == 50)
|
||||
return "Guann Yinn Co., Ltd.";
|
||||
if(frm == 60)
|
||||
return "Xcitec Inc.";
|
||||
if(frm == 00) return "Fornet International Pte Ltd.";
|
||||
if(frm == 10) return "Unitech Japan Inc.";
|
||||
if(frm == 20) return "Acer Media Technology, Inc.";
|
||||
if(frm == 40) return "CIS Technology Inc.";
|
||||
if(frm == 50) return "Guann Yinn Co., Ltd.";
|
||||
if(frm == 60) return "Xcitec Inc.";
|
||||
|
||||
break;
|
||||
case 46:
|
||||
if(frm == 00)
|
||||
return "Taiyo Yuden Company Ltd.";
|
||||
if(frm == 10)
|
||||
return "Hong Kong Digital Technology Co., Ltd.";
|
||||
if(frm == 20)
|
||||
return "Multi Media Masters & Machinary SA";
|
||||
if(frm == 30)
|
||||
return "Computer Support Italy s.r.l.";
|
||||
if(frm == 40)
|
||||
return "FUJI Photo Film Co., Ltd.";
|
||||
if(frm == 50)
|
||||
return "Auvistar Industry Co., Ltd.";
|
||||
if(frm == 60)
|
||||
return "CMC Magnetics Corporation";
|
||||
if(frm == 00) return "Taiyo Yuden Company Ltd.";
|
||||
if(frm == 10) return "Hong Kong Digital Technology Co., Ltd.";
|
||||
if(frm == 20) return "Multi Media Masters & Machinary SA";
|
||||
if(frm == 30) return "Computer Support Italy s.r.l.";
|
||||
if(frm == 40) return "FUJI Photo Film Co., Ltd.";
|
||||
if(frm == 50) return "Auvistar Industry Co., Ltd.";
|
||||
if(frm == 60) return "CMC Magnetics Corporation";
|
||||
|
||||
break;
|
||||
case 47:
|
||||
if(frm == 10)
|
||||
return "Hitachi Maxell, Ltd.";
|
||||
if(frm == 20)
|
||||
return "Princo Corporation";
|
||||
if(frm == 40)
|
||||
return "POSTECH Corporation";
|
||||
if(frm == 50)
|
||||
return "Ritek Co.";
|
||||
if(frm == 60)
|
||||
return "Prodisc Technology Inc.";
|
||||
if(frm == 10) return "Hitachi Maxell, Ltd.";
|
||||
if(frm == 20) return "Princo Corporation";
|
||||
if(frm == 40) return "POSTECH Corporation";
|
||||
if(frm == 50) return "Ritek Co.";
|
||||
if(frm == 60) return "Prodisc Technology Inc.";
|
||||
|
||||
break;
|
||||
case 48:
|
||||
if(frm == 00)
|
||||
return "Ricoh Company Ltd.";
|
||||
if(frm == 10)
|
||||
return "Kodak Japan Ltd.";
|
||||
if(frm == 20)
|
||||
return "Plasmon Data systems Ltd.";
|
||||
if(frm == 30)
|
||||
return "Pioneer Video Corporation";
|
||||
if(frm == 40)
|
||||
return "Digital Storage Technology Co., Ltd.";
|
||||
if(frm == 50)
|
||||
return "Mitsui Chemicals, Inc.";
|
||||
if(frm == 60)
|
||||
return "Lead Data Inc.";
|
||||
if(frm == 00) return "Ricoh Company Ltd.";
|
||||
if(frm == 10) return "Kodak Japan Ltd.";
|
||||
if(frm == 20) return "Plasmon Data systems Ltd.";
|
||||
if(frm == 30) return "Pioneer Video Corporation";
|
||||
if(frm == 40) return "Digital Storage Technology Co., Ltd.";
|
||||
if(frm == 50) return "Mitsui Chemicals, Inc.";
|
||||
if(frm == 60) return "Lead Data Inc.";
|
||||
|
||||
break;
|
||||
case 49:
|
||||
if(frm == 00)
|
||||
return "TDK Corporation";
|
||||
if(frm == 10)
|
||||
return "Gigastore Corporation";
|
||||
if(frm == 20)
|
||||
return "King Pro Mediatek Inc.";
|
||||
if(frm == 30)
|
||||
return "Opti.Me.S. S.p.A.";
|
||||
if(frm == 40)
|
||||
return "Victor Company of Japan, Ltd.";
|
||||
if(frm == 60)
|
||||
return "Matsushita Electric Industrial Co., Ltd.";
|
||||
if(frm == 00) return "TDK Corporation";
|
||||
if(frm == 10) return "Gigastore Corporation";
|
||||
if(frm == 20) return "King Pro Mediatek Inc.";
|
||||
if(frm == 30) return "Opti.Me.S. S.p.A.";
|
||||
if(frm == 40) return "Victor Company of Japan, Ltd.";
|
||||
if(frm == 60) return "Matsushita Electric Industrial Co., Ltd.";
|
||||
|
||||
break;
|
||||
case 50:
|
||||
if(frm == 10)
|
||||
return "Vanguard Disc Inc.";
|
||||
if(frm == 20)
|
||||
return "Mitsubishi Chemical Corporation";
|
||||
if(frm == 30)
|
||||
return "CDA Datenträger Albrechts GmbH";
|
||||
if(frm == 10) return "Vanguard Disc Inc.";
|
||||
if(frm == 20) return "Mitsubishi Chemical Corporation";
|
||||
if(frm == 30) return "CDA Datenträger Albrechts GmbH";
|
||||
|
||||
break;
|
||||
case 51:
|
||||
if(frm == 10)
|
||||
return "Grand Advance Technology Ltd.";
|
||||
if(frm == 20)
|
||||
return "Infodisc Technology Co. Ltd.";
|
||||
if(frm == 50)
|
||||
return "Hile Optical Disc Technology Corp.";
|
||||
if(frm == 10) return "Grand Advance Technology Ltd.";
|
||||
if(frm == 20) return "Infodisc Technology Co. Ltd.";
|
||||
if(frm == 50) return "Hile Optical Disc Technology Corp.";
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -187,8 +187,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDText? Decode(byte[] CDTextResponse)
|
||||
{
|
||||
if(CDTextResponse == null)
|
||||
return null;
|
||||
if(CDTextResponse == null) return null;
|
||||
|
||||
CDText decoded = new CDText();
|
||||
|
||||
@@ -199,12 +198,13 @@ namespace DiscImageChef.Decoders.CD
|
||||
decoded.Reserved2 = CDTextResponse[3];
|
||||
decoded.DataPacks = new CDTextPack[(decoded.DataLength - 2) / 18];
|
||||
|
||||
if(decoded.DataLength == 2)
|
||||
return null;
|
||||
if(decoded.DataLength == 2) return null;
|
||||
|
||||
if(decoded.DataLength + 2 != CDTextResponse.Length)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD-TEXT decoder", "Expected CD-TEXT size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDTextResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD-TEXT decoder",
|
||||
"Expected CD-TEXT size ({0} bytes) is not received size ({1} bytes), not decoding",
|
||||
decoded.DataLength + 2, CDTextResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -226,17 +226,14 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDText? CDTextResponse)
|
||||
{
|
||||
if(CDTextResponse == null)
|
||||
return null;
|
||||
if(CDTextResponse == null) return null;
|
||||
|
||||
CDText response = CDTextResponse.Value;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
#if DEBUG
|
||||
if(response.Reserved1 != 0)
|
||||
sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
|
||||
if(response.Reserved2 != 0)
|
||||
sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
|
||||
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
|
||||
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
|
||||
#endif
|
||||
|
||||
foreach(CDTextPack descriptor in response.DataPacks)
|
||||
@@ -245,110 +242,97 @@ namespace DiscImageChef.Decoders.CD
|
||||
{
|
||||
// Ignore NOPs
|
||||
if((descriptor.HeaderID1 & 0x80) != 0)
|
||||
sb.AppendFormat("Incorrect CD-Text pack type {0}, not decoding", descriptor.HeaderID1).AppendLine();
|
||||
sb.AppendFormat("Incorrect CD-Text pack type {0}, not decoding", descriptor.HeaderID1)
|
||||
.AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(descriptor.HeaderID1)
|
||||
{
|
||||
case 0x80:
|
||||
{
|
||||
sb.Append("CD-Text pack contains title for ");
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.Append("CD-Text pack contains title for ");
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x81:
|
||||
{
|
||||
sb.Append("CD-Text pack contains performer for ");
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.Append("CD-Text pack contains performer for ");
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x82:
|
||||
{
|
||||
sb.Append("CD-Text pack contains songwriter for ");
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.Append("CD-Text pack contains songwriter for ");
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x83:
|
||||
{
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x84:
|
||||
{
|
||||
sb.Append("CD-Text pack contains arranger for ");
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.Append("CD-Text pack contains arranger for ");
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x85:
|
||||
{
|
||||
sb.Append("CD-Text pack contains content provider's message for ");
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("album");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.Append("CD-Text pack contains content provider's message for ");
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("album");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x86:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains disc identification information");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains disc identification information");
|
||||
break;
|
||||
}
|
||||
case 0x87:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains genre identification information");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains genre identification information");
|
||||
break;
|
||||
}
|
||||
case 0x88:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains table of contents information");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains table of contents information");
|
||||
break;
|
||||
}
|
||||
case 0x89:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains second table of contents information");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains second table of contents information");
|
||||
break;
|
||||
}
|
||||
case 0x8A:
|
||||
case 0x8B:
|
||||
case 0x8C:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains reserved data");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains reserved data");
|
||||
break;
|
||||
}
|
||||
case 0x8D:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains data reserved for content provider only");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains data reserved for content provider only");
|
||||
break;
|
||||
}
|
||||
case 0x8E:
|
||||
{
|
||||
if(descriptor.HeaderID2 == 0x00)
|
||||
sb.AppendLine("CD-Text pack contains UPC");
|
||||
else
|
||||
sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
if(descriptor.HeaderID2 == 0x00) sb.AppendLine("CD-Text pack contains UPC");
|
||||
else sb.AppendFormat("track {0}", descriptor.HeaderID2).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0x8F:
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains size block information");
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendLine("CD-Text pack contains size block information");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch(descriptor.HeaderID1)
|
||||
@@ -362,19 +346,22 @@ namespace DiscImageChef.Decoders.CD
|
||||
case 0x86:
|
||||
case 0x87:
|
||||
case 0x8E:
|
||||
{
|
||||
if(descriptor.DBCC)
|
||||
sb.AppendLine("Double Byte Character Code is used");
|
||||
sb.AppendFormat("Block number {0}", descriptor.BlockNumber).AppendLine();
|
||||
sb.AppendFormat("Character position {0}", descriptor.CharacterPosition).AppendLine();
|
||||
sb.AppendFormat("Text field: \"{0}\"", StringHandlers.CToString(descriptor.TextDataField, Encoding.GetEncoding("iso-8859-1"))).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
if(descriptor.DBCC) sb.AppendLine("Double Byte Character Code is used");
|
||||
sb.AppendFormat("Block number {0}", descriptor.BlockNumber).AppendLine();
|
||||
sb.AppendFormat("Character position {0}", descriptor.CharacterPosition).AppendLine();
|
||||
sb.AppendFormat("Text field: \"{0}\"",
|
||||
StringHandlers.CToString(descriptor.TextDataField,
|
||||
Encoding.GetEncoding("iso-8859-1"))).AppendLine();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
sb.AppendFormat("Binary contents: {0}", PrintHex.ByteArrayToHexArrayString(descriptor.TextDataField, 28)).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
sb.AppendFormat("Binary contents: {0}",
|
||||
PrintHex.ByteArrayToHexArrayString(descriptor.TextDataField, 28))
|
||||
.AppendLine();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sb.AppendFormat("CRC: 0x{0:X4}", descriptor.CRC).AppendLine();
|
||||
@@ -390,5 +377,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
return Prettify(decoded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -95,5 +95,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
/// </summary>
|
||||
ReservedMask = 0x0C
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -147,8 +147,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDFullTOC? Decode(byte[] CDFullTOCResponse)
|
||||
{
|
||||
if(CDFullTOCResponse == null)
|
||||
return null;
|
||||
if(CDFullTOCResponse == null) return null;
|
||||
|
||||
CDFullTOC decoded = new CDFullTOC();
|
||||
|
||||
@@ -161,7 +160,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
if(decoded.DataLength + 2 != CDFullTOCResponse.Length)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD full TOC decoder", "Expected CDFullTOC size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDFullTOCResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD full TOC decoder",
|
||||
"Expected CDFullTOC size ({0} bytes) is not received size ({1} bytes), not decoding",
|
||||
decoded.DataLength + 2, CDFullTOCResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -188,8 +189,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDFullTOC? CDFullTOCResponse)
|
||||
{
|
||||
if(CDFullTOCResponse == null)
|
||||
return null;
|
||||
if(CDFullTOCResponse == null) return null;
|
||||
|
||||
CDFullTOC response = CDFullTOCResponse.Value;
|
||||
|
||||
@@ -202,8 +202,8 @@ namespace DiscImageChef.Decoders.CD
|
||||
foreach(TrackDataDescriptor descriptor in response.TrackDescriptors)
|
||||
{
|
||||
if((descriptor.CONTROL & 0x08) == 0x08 ||
|
||||
(descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 && descriptor.ADR != 6) ||
|
||||
descriptor.TNO != 0)
|
||||
(descriptor.ADR != 1 && descriptor.ADR != 5 && descriptor.ADR != 4 && descriptor.ADR != 6) ||
|
||||
descriptor.TNO != 0)
|
||||
{
|
||||
sb.AppendLine("Unknown TOC entry format, printing values as-is");
|
||||
sb.AppendFormat("SessionNumber = {0}", descriptor.SessionNumber).AppendLine();
|
||||
@@ -232,308 +232,365 @@ namespace DiscImageChef.Decoders.CD
|
||||
{
|
||||
case 1:
|
||||
case 4:
|
||||
{
|
||||
switch(descriptor.POINT)
|
||||
{
|
||||
switch(descriptor.POINT)
|
||||
case 0xA0:
|
||||
{
|
||||
case 0xA0:
|
||||
if(descriptor.ADR == 4)
|
||||
{
|
||||
sb.AppendFormat("First video track number: {0}", descriptor.PMIN).AppendLine();
|
||||
switch(descriptor.PSEC)
|
||||
{
|
||||
if(descriptor.ADR == 4)
|
||||
{
|
||||
sb.AppendFormat("First video track number: {0}", descriptor.PMIN).AppendLine();
|
||||
switch(descriptor.PSEC)
|
||||
{
|
||||
case 0x10:
|
||||
sb.AppendLine("CD-V single in NTSC format with digital stereo sound");
|
||||
break;
|
||||
case 0x11:
|
||||
sb.AppendLine("CD-V single in NTSC format with digital bilingual sound");
|
||||
break;
|
||||
case 0x12:
|
||||
sb.AppendLine("CD-V disc in NTSC format with digital stereo sound");
|
||||
break;
|
||||
case 0x13:
|
||||
sb.AppendLine("CD-V disc in NTSC format with digital bilingual sound");
|
||||
break;
|
||||
case 0x20:
|
||||
sb.AppendLine("CD-V single in PAL format with digital stereo sound");
|
||||
break;
|
||||
case 0x21:
|
||||
sb.AppendLine("CD-V single in PAL format with digital bilingual sound");
|
||||
break;
|
||||
case 0x22:
|
||||
sb.AppendLine("CD-V disc in PAL format with digital stereo sound");
|
||||
break;
|
||||
case 0x23:
|
||||
sb.AppendLine("CD-V disc in PAL format with digital bilingual sound");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("First track number: {0} (", descriptor.PMIN);
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
sb.AppendLine(")");
|
||||
sb.AppendFormat("Disc type: {0}", descriptor.PSEC).AppendLine();
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
}
|
||||
break;
|
||||
case 0x10:
|
||||
sb.AppendLine("CD-V single in NTSC format with digital stereo sound");
|
||||
break;
|
||||
case 0x11:
|
||||
sb.AppendLine("CD-V single in NTSC format with digital bilingual sound");
|
||||
break;
|
||||
case 0x12:
|
||||
sb.AppendLine("CD-V disc in NTSC format with digital stereo sound");
|
||||
break;
|
||||
case 0x13:
|
||||
sb.AppendLine("CD-V disc in NTSC format with digital bilingual sound");
|
||||
break;
|
||||
case 0x20:
|
||||
sb.AppendLine("CD-V single in PAL format with digital stereo sound");
|
||||
break;
|
||||
case 0x21:
|
||||
sb.AppendLine("CD-V single in PAL format with digital bilingual sound");
|
||||
break;
|
||||
case 0x22:
|
||||
sb.AppendLine("CD-V disc in PAL format with digital stereo sound");
|
||||
break;
|
||||
case 0x23:
|
||||
sb.AppendLine("CD-V disc in PAL format with digital bilingual sound");
|
||||
break;
|
||||
}
|
||||
case 0xA1:
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("First track number: {0} (", descriptor.PMIN);
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
if(descriptor.ADR == 4)
|
||||
sb.AppendFormat("Last video track number: {0}", descriptor.PMIN).AppendLine();
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("Last track number: {0} (", descriptor.PMIN);
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
sb.AppendLine(")");
|
||||
}
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
case 0xA2:
|
||||
|
||||
sb.AppendLine(")");
|
||||
sb.AppendFormat("Disc type: {0}", descriptor.PSEC).AppendLine();
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 0xA1:
|
||||
{
|
||||
if(descriptor.ADR == 4)
|
||||
sb.AppendFormat("Last video track number: {0}", descriptor.PMIN).AppendLine();
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("Last track number: {0} (", descriptor.PMIN);
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
|
||||
sb.AppendLine(")");
|
||||
}
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xA2:
|
||||
{
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("Lead-out start position: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.PHOUR).AppendLine();
|
||||
else
|
||||
sb.AppendFormat("Lead-out start position: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
|
||||
.AppendLine();
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.AppendLine("Lead-out is audio type");
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.AppendLine("Lead-out is data type");
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 0xF0:
|
||||
{
|
||||
sb.AppendFormat("Book type: 0x{0:X2}", descriptor.PMIN);
|
||||
sb.AppendFormat("Material type: 0x{0:X2}", descriptor.PSEC);
|
||||
sb.AppendFormat("Moment of inertia: 0x{0:X2}", descriptor.PFRAME);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min,
|
||||
descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
else
|
||||
sb.AppendFormat("Absolute time: {0:D2}:{1:D2}:{2:D2}", descriptor.Min,
|
||||
descriptor.Sec, descriptor.Frame).AppendLine();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63)
|
||||
{
|
||||
if(descriptor.ADR == 4)
|
||||
sb.AppendFormat("Video track {3} starts at: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.POINT).AppendLine();
|
||||
else
|
||||
{
|
||||
string type = "Audio";
|
||||
|
||||
if((TOC_CONTROL)(descriptor.CONTROL & 0x0D) == TOC_CONTROL.DataTrack ||
|
||||
(TOC_CONTROL)(descriptor.CONTROL & 0x0D) ==
|
||||
TOC_CONTROL.DataTrackIncremental) type = "Data";
|
||||
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("Lead-out start position: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("{5} track {3} starts at: {4:D2}:{0:D2}:{1:D2}:{2:D2} (",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.POINT, descriptor.PHOUR, type);
|
||||
else
|
||||
sb.AppendFormat("Lead-out start position: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME).AppendLine();
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("{4} track {3} starts at: {0:D2}:{1:D2}:{2:D2} (",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.POINT, type);
|
||||
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.AppendLine("Lead-out is audio type");
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.AppendLine("Lead-out is data type");
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0xF0:
|
||||
{
|
||||
sb.AppendFormat("Book type: 0x{0:X2}", descriptor.PMIN);
|
||||
sb.AppendFormat("Material type: 0x{0:X2}", descriptor.PSEC);
|
||||
sb.AppendFormat("Moment of inertia: 0x{0:X2}", descriptor.PFRAME);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
else
|
||||
sb.AppendFormat("Absolute time: {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x63)
|
||||
{
|
||||
if(descriptor.ADR == 4)
|
||||
sb.AppendFormat("Video track {3} starts at: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.POINT).AppendLine();
|
||||
else
|
||||
{
|
||||
string type = "Audio";
|
||||
|
||||
if((TOC_CONTROL)(descriptor.CONTROL & 0x0D) == TOC_CONTROL.DataTrack ||
|
||||
(TOC_CONTROL)(descriptor.CONTROL & 0x0D) == TOC_CONTROL.DataTrackIncremental)
|
||||
type = "Data";
|
||||
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("{5} track {3} starts at: {4:D2}:{0:D2}:{1:D2}:{2:D2} (", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.POINT, descriptor.PHOUR, type);
|
||||
else
|
||||
sb.AppendFormat("{4} track {3} starts at: {0:D2}:{1:D2}:{2:D2} (", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.POINT, type);
|
||||
|
||||
switch((TOC_CONTROL)(descriptor.CONTROL & 0x0D))
|
||||
{
|
||||
case TOC_CONTROL.TwoChanNoPreEmph:
|
||||
sb.Append(StereoNoPre);
|
||||
break;
|
||||
case TOC_CONTROL.TwoChanPreEmph:
|
||||
sb.Append(StereoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanNoPreEmph:
|
||||
sb.Append(QuadNoPreEm);
|
||||
break;
|
||||
case TOC_CONTROL.FourChanPreEmph:
|
||||
sb.Append(QuadPreEmph);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrack:
|
||||
sb.Append(DataUnintrp);
|
||||
break;
|
||||
case TOC_CONTROL.DataTrackIncremental:
|
||||
sb.Append(DataIncrtly);
|
||||
break;
|
||||
}
|
||||
sb.AppendLine(")");
|
||||
}
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
|
||||
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
|
||||
sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
|
||||
sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
}
|
||||
break;
|
||||
sb.AppendLine(")");
|
||||
}
|
||||
//sb.AppendFormat("Absolute time: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
|
||||
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
|
||||
sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
|
||||
sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
switch(descriptor.POINT)
|
||||
{
|
||||
switch(descriptor.POINT)
|
||||
case 0xB0:
|
||||
{
|
||||
case 0xB0:
|
||||
{
|
||||
if(descriptor.PHOUR > 0)
|
||||
{
|
||||
sb.AppendFormat("Start of next possible program in the recordable area of the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("Maximum start of outermost Lead-out in the recordable area of the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("Start of next possible program in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("Maximum start of outermost Lead-out in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME).AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0xB1:
|
||||
{
|
||||
sb.AppendFormat("Number of skip interval pointers: {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("Number of skip track pointers: {0}", descriptor.PSEC).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xB2:
|
||||
case 0xB3:
|
||||
case 0xB4:
|
||||
{
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Zero).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PFRAME).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xC0:
|
||||
{
|
||||
sb.AppendFormat("Optimum recording power: 0x{0:X2}", descriptor.Min).AppendLine();
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("Start time of the first Lead-in area in the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR).AppendLine();
|
||||
else
|
||||
sb.AppendFormat("Start time of the first Lead-in area in the disc: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xC1:
|
||||
{
|
||||
sb.AppendFormat("Copy of information of A1 from ATIP found");
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("Zero = {0}", descriptor.Zero).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xCF:
|
||||
{
|
||||
if(descriptor.PHOUR > 0)
|
||||
{
|
||||
sb.AppendFormat("Start position of outer part lead-in area: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("Stop position of inner part lead-out area: {3:D2}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("Start position of outer part lead-in area: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME).AppendLine();
|
||||
sb.AppendFormat("Stop position of inner part lead-out area: {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x40)
|
||||
{
|
||||
sb.AppendFormat("Start time for interval that should be skipped: {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME).AppendLine();
|
||||
sb.AppendFormat("Ending time for interval that should be skipped: {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
|
||||
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
|
||||
sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
|
||||
sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(descriptor.PHOUR > 0)
|
||||
{
|
||||
sb
|
||||
.AppendFormat("Start of next possible program in the recordable area of the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.Min, descriptor.Sec, descriptor.Frame,
|
||||
descriptor.HOUR).AppendLine();
|
||||
sb
|
||||
.AppendFormat("Maximum start of outermost Lead-out in the recordable area of the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.PHOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb
|
||||
.AppendFormat("Start of next possible program in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.Min, descriptor.Sec, descriptor.Frame)
|
||||
.AppendLine();
|
||||
sb
|
||||
.AppendFormat("Maximum start of outermost Lead-out in the recordable area of the disc: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
|
||||
.AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0xB1:
|
||||
{
|
||||
sb.AppendFormat("Number of skip interval pointers: {0}", descriptor.PMIN)
|
||||
.AppendLine();
|
||||
sb.AppendFormat("Number of skip track pointers: {0}", descriptor.PSEC).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xB2:
|
||||
case 0xB3:
|
||||
case 0xB4:
|
||||
{
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.Zero).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("Skip track {0}", descriptor.PFRAME).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xC0:
|
||||
{
|
||||
sb.AppendFormat("Optimum recording power: 0x{0:X2}", descriptor.Min).AppendLine();
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb
|
||||
.AppendFormat("Start time of the first Lead-in area in the disc: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.PHOUR).AppendLine();
|
||||
else
|
||||
sb
|
||||
.AppendFormat("Start time of the first Lead-in area in the disc: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
|
||||
.AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xC1:
|
||||
{
|
||||
sb.AppendFormat("Copy of information of A1 from ATIP found");
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("Zero = {0}", descriptor.Zero).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
break;
|
||||
}
|
||||
case 0xCF:
|
||||
{
|
||||
if(descriptor.PHOUR > 0)
|
||||
{
|
||||
sb
|
||||
.AppendFormat("Start position of outer part lead-in area: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME,
|
||||
descriptor.PHOUR).AppendLine();
|
||||
sb
|
||||
.AppendFormat("Stop position of inner part lead-out area: {3:D2}:{0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.Min, descriptor.Sec, descriptor.Frame,
|
||||
descriptor.HOUR).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb
|
||||
.AppendFormat("Start position of outer part lead-in area: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
|
||||
.AppendLine();
|
||||
sb
|
||||
.AppendFormat("Stop position of inner part lead-out area: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.Min, descriptor.Sec, descriptor.Frame)
|
||||
.AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
if(descriptor.POINT >= 0x01 && descriptor.POINT <= 0x40)
|
||||
{
|
||||
sb
|
||||
.AppendFormat("Start time for interval that should be skipped: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME)
|
||||
.AppendLine();
|
||||
sb
|
||||
.AppendFormat("Ending time for interval that should be skipped: {0:D2}:{1:D2}:{2:D2}",
|
||||
descriptor.Min, descriptor.Sec, descriptor.Frame)
|
||||
.AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendFormat("ADR = {0}", descriptor.ADR).AppendLine();
|
||||
sb.AppendFormat("CONTROL = {0}", descriptor.CONTROL).AppendLine();
|
||||
sb.AppendFormat("TNO = {0}", descriptor.TNO).AppendLine();
|
||||
sb.AppendFormat("POINT = {0}", descriptor.POINT).AppendLine();
|
||||
sb.AppendFormat("Min = {0}", descriptor.Min).AppendLine();
|
||||
sb.AppendFormat("Sec = {0}", descriptor.Sec).AppendLine();
|
||||
sb.AppendFormat("Frame = {0}", descriptor.Frame).AppendLine();
|
||||
sb.AppendFormat("HOUR = {0}", descriptor.HOUR).AppendLine();
|
||||
sb.AppendFormat("PHOUR = {0}", descriptor.PHOUR).AppendLine();
|
||||
sb.AppendFormat("PMIN = {0}", descriptor.PMIN).AppendLine();
|
||||
sb.AppendFormat("PSEC = {0}", descriptor.PSEC).AppendLine();
|
||||
sb.AppendFormat("PFRAME = {0}", descriptor.PFRAME).AppendLine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame);
|
||||
sb.AppendFormat("Disc ID: {0:X6}", id & 0x00FFFFFF).AppendLine();
|
||||
break;
|
||||
}
|
||||
{
|
||||
uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame);
|
||||
sb.AppendFormat("Disc ID: {0:X6}", id & 0x00FFFFFF).AppendLine();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -547,5 +604,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
return Prettify(decoded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -134,8 +134,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDPMA? Decode(byte[] CDPMAResponse)
|
||||
{
|
||||
if(CDPMAResponse == null)
|
||||
return null;
|
||||
if(CDPMAResponse == null) return null;
|
||||
|
||||
CDPMA decoded = new CDPMA();
|
||||
|
||||
@@ -148,7 +147,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
if(decoded.DataLength + 2 != CDPMAResponse.Length)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD PMA decoder", "Expected CDPMA size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDPMAResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD PMA decoder",
|
||||
"Expected CDPMA size ({0} bytes) is not received size ({1} bytes), not decoding",
|
||||
decoded.DataLength + 2, CDPMAResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -174,25 +175,21 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDPMA? CDPMAResponse)
|
||||
{
|
||||
if(CDPMAResponse == null)
|
||||
return null;
|
||||
if(CDPMAResponse == null) return null;
|
||||
|
||||
CDPMA response = CDPMAResponse.Value;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
#if DEBUG
|
||||
if(response.Reserved1 != 0)
|
||||
sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
|
||||
if(response.Reserved2 != 0)
|
||||
sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
|
||||
if(response.Reserved1 != 0) sb.AppendFormat("Reserved1 = 0x{0:X2}", response.Reserved1).AppendLine();
|
||||
if(response.Reserved2 != 0) sb.AppendFormat("Reserved2 = 0x{0:X2}", response.Reserved2).AppendLine();
|
||||
#endif
|
||||
|
||||
foreach(CDPMADescriptors descriptor in response.PMADescriptors)
|
||||
{
|
||||
#if DEBUG
|
||||
if(descriptor.Reserved != 0)
|
||||
sb.AppendFormat("Reserved = 0x{0:X2}", descriptor.Reserved).AppendLine();
|
||||
if(descriptor.Reserved != 0) sb.AppendFormat("Reserved = 0x{0:X2}", descriptor.Reserved).AppendLine();
|
||||
#endif
|
||||
|
||||
switch(descriptor.ADR)
|
||||
@@ -222,19 +219,24 @@ namespace DiscImageChef.Decoders.CD
|
||||
sb.Append(" (Data track, recorded incrementally)");
|
||||
break;
|
||||
}
|
||||
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat(" starts at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR);
|
||||
sb.AppendFormat(" starts at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME, descriptor.PHOUR);
|
||||
else
|
||||
sb.AppendFormat(" starts at {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME);
|
||||
sb.AppendFormat(" starts at {0:D2}:{1:D2}:{2:D2}", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat(" and ends at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR);
|
||||
sb.AppendFormat(" and ends at {3}:{0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec,
|
||||
descriptor.Frame, descriptor.HOUR);
|
||||
else
|
||||
sb.AppendFormat(" and ends at {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec, descriptor.Frame);
|
||||
sb.AppendFormat(" and ends at {0:D2}:{1:D2}:{2:D2}", descriptor.Min, descriptor.Sec,
|
||||
descriptor.Frame);
|
||||
|
||||
sb.AppendLine();
|
||||
}
|
||||
else
|
||||
goto default;
|
||||
else goto default;
|
||||
|
||||
break;
|
||||
case 2:
|
||||
uint id = (uint)((descriptor.Min << 16) + (descriptor.Sec << 8) + descriptor.Frame);
|
||||
@@ -242,58 +244,50 @@ namespace DiscImageChef.Decoders.CD
|
||||
break;
|
||||
case 3:
|
||||
sb.AppendFormat("Skip track assignment {0} says that tracks ", descriptor.POINT);
|
||||
if(descriptor.Min > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Min);
|
||||
if(descriptor.Sec > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Sec);
|
||||
if(descriptor.Frame > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Frame);
|
||||
if(descriptor.PMIN > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PMIN);
|
||||
if(descriptor.PSEC > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PSEC);
|
||||
if(descriptor.PFRAME > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PFRAME);
|
||||
if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
|
||||
if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
|
||||
if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
|
||||
if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
|
||||
if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
|
||||
if(descriptor.PFRAME > 0) sb.AppendFormat("{0} ", descriptor.PFRAME);
|
||||
sb.AppendLine("should be skipped");
|
||||
break;
|
||||
case 4:
|
||||
sb.AppendFormat("Unskip track assignment {0} says that tracks ", descriptor.POINT);
|
||||
if(descriptor.Min > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Min);
|
||||
if(descriptor.Sec > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Sec);
|
||||
if(descriptor.Frame > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.Frame);
|
||||
if(descriptor.PMIN > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PMIN);
|
||||
if(descriptor.PSEC > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PSEC);
|
||||
if(descriptor.PFRAME > 0)
|
||||
sb.AppendFormat("{0} ", descriptor.PFRAME);
|
||||
if(descriptor.Min > 0) sb.AppendFormat("{0} ", descriptor.Min);
|
||||
if(descriptor.Sec > 0) sb.AppendFormat("{0} ", descriptor.Sec);
|
||||
if(descriptor.Frame > 0) sb.AppendFormat("{0} ", descriptor.Frame);
|
||||
if(descriptor.PMIN > 0) sb.AppendFormat("{0} ", descriptor.PMIN);
|
||||
if(descriptor.PSEC > 0) sb.AppendFormat("{0} ", descriptor.PSEC);
|
||||
if(descriptor.PFRAME > 0) sb.AppendFormat("{0} ", descriptor.PFRAME);
|
||||
sb.AppendLine("should not be skipped");
|
||||
break;
|
||||
case 5:
|
||||
sb.AppendFormat("Skip time interval assignment {0} says that from ", descriptor.POINT);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR);
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME, descriptor.PHOUR);
|
||||
else
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME);
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR);
|
||||
else
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame);
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec,
|
||||
descriptor.Frame, descriptor.HOUR);
|
||||
else sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame);
|
||||
sb.AppendLine("should be skipped");
|
||||
break;
|
||||
case 6:
|
||||
sb.AppendFormat("Unskip time interval assignment {0} says that from ", descriptor.POINT);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME, descriptor.PHOUR);
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME, descriptor.PHOUR);
|
||||
else
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC, descriptor.PFRAME);
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} to ", descriptor.PMIN, descriptor.PSEC,
|
||||
descriptor.PFRAME);
|
||||
if(descriptor.PHOUR > 0)
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame, descriptor.HOUR);
|
||||
else
|
||||
sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame);
|
||||
sb.AppendFormat("{3}:{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec,
|
||||
descriptor.Frame, descriptor.HOUR);
|
||||
else sb.AppendFormat("{0:D2}:{1:D2}:{2:D2} ", descriptor.Min, descriptor.Sec, descriptor.Frame);
|
||||
sb.AppendLine("should not be skipped");
|
||||
break;
|
||||
default:
|
||||
@@ -323,5 +317,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
return Prettify(decoded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -39,177 +39,155 @@ namespace DiscImageChef.Decoders.CD
|
||||
{
|
||||
public static readonly byte[] ScrambleTable =
|
||||
{
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x60,
|
||||
0x00, 0x28, 0x00, 0x1E, 0x80, 0x08, 0x60, 0x06, 0xA8, 0x02, 0xFE, 0x81, 0x80, 0x60, 0x60, 0x28,
|
||||
0x28, 0x1E, 0x9E, 0x88, 0x68, 0x66, 0xAE, 0xAA, 0xFC, 0x7F, 0x01, 0xE0, 0x00, 0x48, 0x00, 0x36,
|
||||
0x80, 0x16, 0xE0, 0x0E, 0xC8, 0x04, 0x56, 0x83, 0x7E, 0xE1, 0xE0, 0x48, 0x48, 0x36, 0xB6, 0x96,
|
||||
0xF6, 0xEE, 0xC6, 0xCC, 0x52, 0xD5, 0xFD, 0x9F, 0x01, 0xA8, 0x00, 0x7E, 0x80, 0x20, 0x60, 0x18,
|
||||
0x28, 0x0A, 0x9E, 0x87, 0x28, 0x62, 0x9E, 0xA9, 0xA8, 0x7E, 0xFE, 0xA0, 0x40, 0x78, 0x30, 0x22,
|
||||
0x94, 0x19, 0xAF, 0x4A, 0xFC, 0x37, 0x01, 0xD6, 0x80, 0x5E, 0xE0, 0x38, 0x48, 0x12, 0xB6, 0x8D,
|
||||
0xB6, 0xE5, 0xB6, 0xCB, 0x36, 0xD7, 0x56, 0xDE, 0xBE, 0xD8, 0x70, 0x5A, 0xA4, 0x3B, 0x3B, 0x53,
|
||||
0x53, 0x7D, 0xFD, 0xE1, 0x81, 0x88, 0x60, 0x66, 0xA8, 0x2A, 0xFE, 0x9F, 0x00, 0x68, 0x00, 0x2E,
|
||||
0x80, 0x1C, 0x60, 0x09, 0xE8, 0x06, 0xCE, 0x82, 0xD4, 0x61, 0x9F, 0x68, 0x68, 0x2E, 0xAE, 0x9C,
|
||||
0x7C, 0x69, 0xE1, 0xEE, 0xC8, 0x4C, 0x56, 0xB5, 0xFE, 0xF7, 0x00, 0x46, 0x80, 0x32, 0xE0, 0x15,
|
||||
0x88, 0x0F, 0x26, 0x84, 0x1A, 0xE3, 0x4B, 0x09, 0xF7, 0x46, 0xC6, 0xB2, 0xD2, 0xF5, 0x9D, 0x87,
|
||||
0x29, 0xA2, 0x9E, 0xF9, 0xA8, 0x42, 0xFE, 0xB1, 0x80, 0x74, 0x60, 0x27, 0x68, 0x1A, 0xAE, 0x8B,
|
||||
0x3C, 0x67, 0x51, 0xEA, 0xBC, 0x4F, 0x31, 0xF4, 0x14, 0x47, 0x4F, 0x72, 0xB4, 0x25, 0xB7, 0x5B,
|
||||
0x36, 0xBB, 0x56, 0xF3, 0x7E, 0xC5, 0xE0, 0x53, 0x08, 0x3D, 0xC6, 0x91, 0x92, 0xEC, 0x6D, 0x8D,
|
||||
0xED, 0xA5, 0x8D, 0xBB, 0x25, 0xB3, 0x5B, 0x35, 0xFB, 0x57, 0x03, 0x7E, 0x81, 0xE0, 0x60, 0x48,
|
||||
0x28, 0x36, 0x9E, 0x96, 0xE8, 0x6E, 0xCE, 0xAC, 0x54, 0x7D, 0xFF, 0x61, 0x80, 0x28, 0x60, 0x1E,
|
||||
0xA8, 0x08, 0x7E, 0x86, 0xA0, 0x62, 0xF8, 0x29, 0x82, 0x9E, 0xE1, 0xA8, 0x48, 0x7E, 0xB6, 0xA0,
|
||||
0x76, 0xF8, 0x26, 0xC2, 0x9A, 0xD1, 0xAB, 0x1C, 0x7F, 0x49, 0xE0, 0x36, 0xC8, 0x16, 0xD6, 0x8E,
|
||||
0xDE, 0xE4, 0x58, 0x4B, 0x7A, 0xB7, 0x63, 0x36, 0xA9, 0xD6, 0xFE, 0xDE, 0xC0, 0x58, 0x50, 0x3A,
|
||||
0xBC, 0x13, 0x31, 0xCD, 0xD4, 0x55, 0x9F, 0x7F, 0x28, 0x20, 0x1E, 0x98, 0x08, 0x6A, 0x86, 0xAF,
|
||||
0x22, 0xFC, 0x19, 0x81, 0xCA, 0xE0, 0x57, 0x08, 0x3E, 0x86, 0x90, 0x62, 0xEC, 0x29, 0x8D, 0xDE,
|
||||
0xE5, 0x98, 0x4B, 0x2A, 0xB7, 0x5F, 0x36, 0xB8, 0x16, 0xF2, 0x8E, 0xC5, 0xA4, 0x53, 0x3B, 0x7D,
|
||||
0xD3, 0x61, 0x9D, 0xE8, 0x69, 0x8E, 0xAE, 0xE4, 0x7C, 0x4B, 0x61, 0xF7, 0x68, 0x46, 0xAE, 0xB2,
|
||||
0xFC, 0x75, 0x81, 0xE7, 0x20, 0x4A, 0x98, 0x37, 0x2A, 0x96, 0x9F, 0x2E, 0xE8, 0x1C, 0x4E, 0x89,
|
||||
0xF4, 0x66, 0xC7, 0x6A, 0xD2, 0xAF, 0x1D, 0xBC, 0x09, 0xB1, 0xC6, 0xF4, 0x52, 0xC7, 0x7D, 0x92,
|
||||
0xA1, 0xAD, 0xB8, 0x7D, 0xB2, 0xA1, 0xB5, 0xB8, 0x77, 0x32, 0xA6, 0x95, 0xBA, 0xEF, 0x33, 0x0C,
|
||||
0x15, 0xC5, 0xCF, 0x13, 0x14, 0x0D, 0xCF, 0x45, 0x94, 0x33, 0x2F, 0x55, 0xDC, 0x3F, 0x19, 0xD0,
|
||||
0x0A, 0xDC, 0x07, 0x19, 0xC2, 0x8A, 0xD1, 0xA7, 0x1C, 0x7A, 0x89, 0xE3, 0x26, 0xC9, 0xDA, 0xD6,
|
||||
0xDB, 0x1E, 0xDB, 0x48, 0x5B, 0x76, 0xBB, 0x66, 0xF3, 0x6A, 0xC5, 0xEF, 0x13, 0x0C, 0x0D, 0xC5,
|
||||
0xC5, 0x93, 0x13, 0x2D, 0xCD, 0xDD, 0x95, 0x99, 0xAF, 0x2A, 0xFC, 0x1F, 0x01, 0xC8, 0x00, 0x56,
|
||||
0x80, 0x3E, 0xE0, 0x10, 0x48, 0x0C, 0x36, 0x85, 0xD6, 0xE3, 0x1E, 0xC9, 0xC8, 0x56, 0xD6, 0xBE,
|
||||
0xDE, 0xF0, 0x58, 0x44, 0x3A, 0xB3, 0x53, 0x35, 0xFD, 0xD7, 0x01, 0x9E, 0x80, 0x68, 0x60, 0x2E,
|
||||
0xA8, 0x1C, 0x7E, 0x89, 0xE0, 0x66, 0xC8, 0x2A, 0xD6, 0x9F, 0x1E, 0xE8, 0x08, 0x4E, 0x86, 0xB4,
|
||||
0x62, 0xF7, 0x69, 0x86, 0xAE, 0xE2, 0xFC, 0x49, 0x81, 0xF6, 0xE0, 0x46, 0xC8, 0x32, 0xD6, 0x95,
|
||||
0x9E, 0xEF, 0x28, 0x4C, 0x1E, 0xB5, 0xC8, 0x77, 0x16, 0xA6, 0x8E, 0xFA, 0xE4, 0x43, 0x0B, 0x71,
|
||||
0xC7, 0x64, 0x52, 0xAB, 0x7D, 0xBF, 0x61, 0xB0, 0x28, 0x74, 0x1E, 0xA7, 0x48, 0x7A, 0xB6, 0xA3,
|
||||
0x36, 0xF9, 0xD6, 0xC2, 0xDE, 0xD1, 0x98, 0x5C, 0x6A, 0xB9, 0xEF, 0x32, 0xCC, 0x15, 0x95, 0xCF,
|
||||
0x2F, 0x14, 0x1C, 0x0F, 0x49, 0xC4, 0x36, 0xD3, 0x56, 0xDD, 0xFE, 0xD9, 0x80, 0x5A, 0xE0, 0x3B,
|
||||
0x08, 0x13, 0x46, 0x8D, 0xF2, 0xE5, 0x85, 0x8B, 0x23, 0x27, 0x59, 0xDA, 0xBA, 0xDB, 0x33, 0x1B,
|
||||
0x55, 0xCB, 0x7F, 0x17, 0x60, 0x0E, 0xA8, 0x04, 0x7E, 0x83, 0x60, 0x61, 0xE8, 0x28, 0x4E, 0x9E,
|
||||
0xB4, 0x68, 0x77, 0x6E, 0xA6, 0xAC, 0x7A, 0xFD, 0xE3, 0x01, 0x89, 0xC0, 0x66, 0xD0, 0x2A, 0xDC,
|
||||
0x1F, 0x19, 0xC8, 0x0A, 0xD6, 0x87, 0x1E, 0xE2, 0x88, 0x49, 0xA6, 0xB6, 0xFA, 0xF6, 0xC3, 0x06,
|
||||
0xD1, 0xC2, 0xDC, 0x51, 0x99, 0xFC, 0x6A, 0xC1, 0xEF, 0x10, 0x4C, 0x0C, 0x35, 0xC5, 0xD7, 0x13,
|
||||
0x1E, 0x8D, 0xC8, 0x65, 0x96, 0xAB, 0x2E, 0xFF, 0x5C, 0x40, 0x39, 0xF0, 0x12, 0xC4, 0x0D, 0x93,
|
||||
0x45, 0xAD, 0xF3, 0x3D, 0x85, 0xD1, 0xA3, 0x1C, 0x79, 0xC9, 0xE2, 0xD6, 0xC9, 0x9E, 0xD6, 0xE8,
|
||||
0x5E, 0xCE, 0xB8, 0x54, 0x72, 0xBF, 0x65, 0xB0, 0x2B, 0x34, 0x1F, 0x57, 0x48, 0x3E, 0xB6, 0x90,
|
||||
0x76, 0xEC, 0x26, 0xCD, 0xDA, 0xD5, 0x9B, 0x1F, 0x2B, 0x48, 0x1F, 0x76, 0x88, 0x26, 0xE6, 0x9A,
|
||||
0xCA, 0xEB, 0x17, 0x0F, 0x4E, 0x84, 0x34, 0x63, 0x57, 0x69, 0xFE, 0xAE, 0xC0, 0x7C, 0x50, 0x21,
|
||||
0xFC, 0x18, 0x41, 0xCA, 0xB0, 0x57, 0x34, 0x3E, 0x97, 0x50, 0x6E, 0xBC, 0x2C, 0x71, 0xDD, 0xE4,
|
||||
0x59, 0x8B, 0x7A, 0xE7, 0x63, 0x0A, 0xA9, 0xC7, 0x3E, 0xD2, 0x90, 0x5D, 0xAC, 0x39, 0xBD, 0xD2,
|
||||
0xF1, 0x9D, 0x84, 0x69, 0xA3, 0x6E, 0xF9, 0xEC, 0x42, 0xCD, 0xF1, 0x95, 0x84, 0x6F, 0x23, 0x6C,
|
||||
0x19, 0xED, 0xCA, 0xCD, 0x97, 0x15, 0xAE, 0x8F, 0x3C, 0x64, 0x11, 0xEB, 0x4C, 0x4F, 0x75, 0xF4,
|
||||
0x27, 0x07, 0x5A, 0x82, 0xBB, 0x21, 0xB3, 0x58, 0x75, 0xFA, 0xA7, 0x03, 0x3A, 0x81, 0xD3, 0x20,
|
||||
0x5D, 0xD8, 0x39, 0x9A, 0x92, 0xEB, 0x2D, 0x8F, 0x5D, 0xA4, 0x39, 0xBB, 0x52, 0xF3, 0x7D, 0x85,
|
||||
0xE1, 0xA3, 0x08, 0x79, 0xC6, 0xA2, 0xD2, 0xF9, 0x9D, 0x82, 0xE9, 0xA1, 0x8E, 0xF8, 0x64, 0x42,
|
||||
0xAB, 0x71, 0xBF, 0x64, 0x70, 0x2B, 0x64, 0x1F, 0x6B, 0x48, 0x2F, 0x76, 0x9C, 0x26, 0xE9, 0xDA,
|
||||
0xCE, 0xDB, 0x14, 0x5B, 0x4F, 0x7B, 0x74, 0x23, 0x67, 0x59, 0xEA, 0xBA, 0xCF, 0x33, 0x14, 0x15,
|
||||
0xCF, 0x4F, 0x14, 0x34, 0x0F, 0x57, 0x44, 0x3E, 0xB3, 0x50, 0x75, 0xFC, 0x27, 0x01, 0xDA, 0x80,
|
||||
0x5B, 0x20, 0x3B, 0x58, 0x13, 0x7A, 0x8D, 0xE3, 0x25, 0x89, 0xDB, 0x26, 0xDB, 0x5A, 0xDB, 0x7B,
|
||||
0x1B, 0x63, 0x4B, 0x69, 0xF7, 0x6E, 0xC6, 0xAC, 0x52, 0xFD, 0xFD, 0x81, 0x81, 0xA0, 0x60, 0x78,
|
||||
0x28, 0x22, 0x9E, 0x99, 0xA8, 0x6A, 0xFE, 0xAF, 0x00, 0x7C, 0x00, 0x21, 0xC0, 0x18, 0x50, 0x0A,
|
||||
0xBC, 0x07, 0x31, 0xC2, 0x94, 0x51, 0xAF, 0x7C, 0x7C, 0x21, 0xE1, 0xD8, 0x48, 0x5A, 0xB6, 0xBB,
|
||||
0x36, 0xF3, 0x56, 0xC5, 0xFE, 0xD3, 0x00, 0x5D, 0xC0, 0x39, 0x90, 0x12, 0xEC, 0x0D, 0x8D, 0xC5,
|
||||
0xA5, 0x93, 0x3B, 0x2D, 0xD3, 0x5D, 0x9D, 0xF9, 0xA9, 0x82, 0xFE, 0xE1, 0x80, 0x48, 0x60, 0x36,
|
||||
0xA8, 0x16, 0xFE, 0x8E, 0xC0, 0x64, 0x50, 0x2B, 0x7C, 0x1F, 0x61, 0xC8, 0x28, 0x56, 0x9E, 0xBE,
|
||||
0xE8, 0x70, 0x4E, 0xA4, 0x34, 0x7B, 0x57, 0x63, 0x7E, 0xA9, 0xE0, 0x7E, 0xC8, 0x20, 0x56, 0x98,
|
||||
0x3E, 0xEA, 0x90, 0x4F, 0x2C, 0x34, 0x1D, 0xD7, 0x49, 0x9E, 0xB6, 0xE8, 0x76, 0xCE, 0xA6, 0xD4,
|
||||
0x7A, 0xDF, 0x63, 0x18, 0x29, 0xCA, 0x9E, 0xD7, 0x28, 0x5E, 0x9E, 0xB8, 0x68, 0x72, 0xAE, 0xA5,
|
||||
0xBC, 0x7B, 0x31, 0xE3, 0x54, 0x49, 0xFF, 0x76, 0xC0, 0x26, 0xD0, 0x1A, 0xDC, 0x0B, 0x19, 0xC7,
|
||||
0x4A, 0xD2, 0xB7, 0x1D, 0xB6, 0x89, 0xB6, 0xE6, 0xF6, 0xCA, 0xC6, 0xD7, 0x12, 0xDE, 0x8D, 0x98,
|
||||
0x65, 0xAA, 0xAB, 0x3F, 0x3F, 0x50, 0x10, 0x3C, 0x0C, 0x11, 0xC5, 0xCC, 0x53, 0x15, 0xFD, 0xCF,
|
||||
0x01, 0x94, 0x00, 0x6F, 0x40, 0x2C, 0x30, 0x1D, 0xD4, 0x09, 0x9F, 0x46, 0xE8, 0x32, 0xCE, 0x95,
|
||||
0x94, 0x6F, 0x2F, 0x6C, 0x1C, 0x2D, 0xC9, 0xDD, 0x96, 0xD9, 0xAE, 0xDA, 0xFC, 0x5B, 0x01, 0xFB,
|
||||
0x40, 0x43, 0x70, 0x31, 0xE4, 0x14, 0x4B, 0x4F, 0x77, 0x74, 0x26, 0xA7, 0x5A, 0xFA, 0xBB, 0x03,
|
||||
0x33, 0x41, 0xD5, 0xF0, 0x5F, 0x04, 0x38, 0x03, 0x52, 0x81, 0xFD, 0xA0, 0x41, 0xB8, 0x30, 0x72,
|
||||
0x94, 0x25, 0xAF, 0x5B, 0x3C, 0x3B, 0x51, 0xD3, 0x7C, 0x5D, 0xE1, 0xF9, 0x88, 0x42, 0xE6, 0xB1,
|
||||
0x8A, 0xF4, 0x67, 0x07, 0x6A, 0x82, 0xAF, 0x21, 0xBC, 0x18, 0x71, 0xCA, 0xA4, 0x57, 0x3B, 0x7E,
|
||||
0x93, 0x60, 0x6D, 0xE8, 0x2D, 0x8E, 0x9D, 0xA4, 0x69, 0xBB, 0x6E, 0xF3, 0x6C, 0x45, 0xED, 0xF3,
|
||||
0x0D, 0x85, 0xC5, 0xA3, 0x13, 0x39, 0xCD, 0xD2, 0xD5, 0x9D, 0x9F, 0x29, 0xA8, 0x1E, 0xFE, 0x88,
|
||||
0x40, 0x66, 0xB0, 0x2A, 0xF4, 0x1F, 0x07, 0x48, 0x02, 0xB6, 0x81, 0xB6, 0xE0, 0x76, 0xC8, 0x26,
|
||||
0xD6, 0x9A, 0xDE, 0xEB, 0x18, 0x4F, 0x4A, 0xB4, 0x37, 0x37, 0x56, 0x96, 0xBE, 0xEE, 0xF0, 0x4C,
|
||||
0x44, 0x35, 0xF3, 0x57, 0x05, 0xFE, 0x83, 0x00, 0x61, 0xC0, 0x28, 0x50, 0x1E, 0xBC, 0x08, 0x71,
|
||||
0xC6, 0xA4, 0x52, 0xFB, 0x7D, 0x83, 0x61, 0xA1, 0xE8, 0x78, 0x4E, 0xA2, 0xB4, 0x79, 0xB7, 0x62,
|
||||
0xF6, 0xA9, 0x86, 0xFE, 0xE2, 0xC0, 0x49, 0x90, 0x36, 0xEC, 0x16, 0xCD, 0xCE, 0xD5, 0x94, 0x5F,
|
||||
0x2F, 0x78, 0x1C, 0x22, 0x89, 0xD9, 0xA6, 0xDA, 0xFA, 0xDB, 0x03, 0x1B, 0x41, 0xCB, 0x70, 0x57,
|
||||
0x64, 0x3E, 0xAB, 0x50, 0x7F, 0x7C, 0x20, 0x21, 0xD8, 0x18, 0x5A, 0x8A, 0xBB, 0x27, 0x33, 0x5A,
|
||||
0x95, 0xFB, 0x2F, 0x03, 0x5C, 0x01, 0xF9, 0xC0, 0x42, 0xD0, 0x31, 0x9C, 0x14, 0x69, 0xCF, 0x6E,
|
||||
0xD4, 0x2C, 0x5F, 0x5D, 0xF8, 0x39, 0x82, 0x92, 0xE1, 0xAD, 0x88, 0x7D, 0xA6, 0xA1, 0xBA, 0xF8,
|
||||
0x73, 0x02, 0xA5, 0xC1, 0xBB, 0x10, 0x73, 0x4C, 0x25, 0xF5, 0xDB, 0x07, 0x1B, 0x42, 0x8B, 0x71,
|
||||
0xA7, 0x64, 0x7A, 0xAB, 0x63, 0x3F, 0x69, 0xD0, 0x2E, 0xDC, 0x1C, 0x59, 0xC9, 0xFA, 0xD6, 0xC3,
|
||||
0x1E, 0xD1, 0xC8, 0x5C, 0x56, 0xB9, 0xFE, 0xF2, 0xC0, 0x45, 0x90, 0x33, 0x2C, 0x15, 0xDD, 0xCF,
|
||||
0x19, 0x94, 0x0A, 0xEF, 0x47, 0x0C, 0x32, 0x85, 0xD5, 0xA3, 0x1F, 0x39, 0xC8, 0x12, 0xD6, 0x8D,
|
||||
0x9E, 0xE5, 0xA8, 0x4B, 0x3E, 0xB7, 0x50, 0x76, 0xBC, 0x26, 0xF1, 0xDA, 0xC4, 0x5B, 0x13, 0x7B,
|
||||
0x4D, 0xE3, 0x75, 0x89, 0xE7, 0x26, 0xCA, 0x9A, 0xD7, 0x2B, 0x1E, 0x9F, 0x48, 0x68, 0x36, 0xAE,
|
||||
0x96, 0xFC, 0x6E, 0xC1, 0xEC, 0x50, 0x4D, 0xFC, 0x35, 0x81, 0xD7, 0x20, 0x5E, 0x98, 0x38, 0x6A,
|
||||
0x92, 0xAF, 0x2D, 0xBC, 0x1D, 0xB1, 0xC9, 0xB4, 0x56, 0xF7, 0x7E, 0xC6, 0xA0, 0x52, 0xF8, 0x3D,
|
||||
0x82, 0x91, 0xA1, 0xAC, 0x78, 0x7D, 0xE2, 0xA1, 0x89, 0xB8, 0x66, 0xF2, 0xAA, 0xC5, 0xBF, 0x13,
|
||||
0x30, 0x0D, 0xD4, 0x05, 0x9F, 0x43, 0x28, 0x31, 0xDE, 0x94, 0x58, 0x6F, 0x7A, 0xAC, 0x23, 0x3D,
|
||||
0xD9, 0xD1, 0x9A, 0xDC, 0x6B, 0x19, 0xEF, 0x4A, 0xCC, 0x37, 0x15, 0xD6, 0x8F, 0x1E, 0xE4, 0x08,
|
||||
0x4B, 0x46, 0xB7, 0x72, 0xF6, 0xA5, 0x86, 0xFB, 0x22, 0xC3, 0x59, 0x91, 0xFA, 0xEC, 0x43, 0x0D,
|
||||
0xF1, 0xC5, 0x84, 0x53, 0x23, 0x7D, 0xD9, 0xE1, 0x9A, 0xC8, 0x6B, 0x16, 0xAF, 0x4E, 0xFC, 0x34,
|
||||
0x41, 0xD7, 0x70, 0x5E, 0xA4, 0x38, 0x7B, 0x52, 0xA3, 0x7D, 0xB9, 0xE1, 0xB2, 0xC8, 0x75, 0x96,
|
||||
0xA7, 0x2E, 0xFA, 0x9C, 0x43, 0x29, 0xF1, 0xDE, 0xC4, 0x58, 0x53, 0x7A, 0xBD, 0xE3, 0x31, 0x89,
|
||||
0xD4, 0x66, 0xDF, 0x6A, 0xD8, 0x2F, 0x1A, 0x9C, 0x0B, 0x29, 0xC7, 0x5E, 0xD2, 0xB8, 0x5D, 0xB2,
|
||||
0xB9, 0xB5, 0xB2, 0xF7, 0x35, 0x86, 0x97, 0x22, 0xEE, 0x99, 0x8C, 0x6A, 0xE5, 0xEF, 0x0B, 0x0C,
|
||||
0x07, 0x45, 0xC2, 0xB3, 0x11, 0xB5, 0xCC, 0x77, 0x15, 0xE6, 0x8F, 0x0A, 0xE4, 0x07, 0x0B, 0x42,
|
||||
0x87, 0x71, 0xA2, 0xA4, 0x79, 0xBB, 0x62, 0xF3, 0x69, 0x85, 0xEE, 0xE3, 0x0C, 0x49, 0xC5, 0xF6,
|
||||
0xD3, 0x06, 0xDD, 0xC2, 0xD9, 0x91, 0x9A, 0xEC, 0x6B, 0x0D, 0xEF, 0x45, 0x8C, 0x33, 0x25, 0xD5,
|
||||
0xDB, 0x1F, 0x1B, 0x48, 0x0B, 0x76, 0x87, 0x66, 0xE2, 0xAA, 0xC9, 0xBF, 0x16, 0xF0, 0x0E, 0xC4,
|
||||
0x04, 0x53, 0x43, 0x7D, 0xF1, 0xE1, 0x84, 0x48, 0x63, 0x76, 0xA9, 0xE6, 0xFE, 0xCA, 0xC0, 0x57,
|
||||
0x10, 0x3E, 0x8C, 0x10, 0x65, 0xCC, 0x2B, 0x15, 0xDF, 0x4F, 0x18, 0x34, 0x0A, 0x97, 0x47, 0x2E,
|
||||
0xB2, 0x9C, 0x75, 0xA9, 0xE7, 0x3E, 0xCA, 0x90, 0x57, 0x2C, 0x3E, 0x9D, 0xD0, 0x69, 0x9C, 0x2E,
|
||||
0xE9, 0xDC, 0x4E, 0xD9, 0xF4, 0x5A, 0xC7, 0x7B, 0x12, 0xA3, 0x4D, 0xB9, 0xF5, 0xB2, 0xC7, 0x35,
|
||||
0x92, 0x97, 0x2D, 0xAE, 0x9D, 0xBC, 0x69, 0xB1, 0xEE, 0xF4, 0x4C, 0x47, 0x75, 0xF2, 0xA7, 0x05,
|
||||
0xBA, 0x83, 0x33, 0x21, 0xD5, 0xD8, 0x5F, 0x1A, 0xB8, 0x0B, 0x32, 0x87, 0x55, 0xA2, 0xBF, 0x39,
|
||||
0xB0, 0x12, 0xF4, 0x0D, 0x87, 0x45, 0xA2, 0xB3, 0x39, 0xB5, 0xD2, 0xF7, 0x1D, 0x86, 0x89, 0xA2,
|
||||
0xE6, 0xF9, 0x8A, 0xC2, 0xE7, 0x11, 0x8A, 0x8C, 0x67, 0x25, 0xEA, 0x9B, 0x0F, 0x2B, 0x44, 0x1F,
|
||||
0x73, 0x48, 0x25, 0xF6, 0x9B, 0x06, 0xEB, 0x42, 0xCF, 0x71, 0x94, 0x24, 0x6F, 0x5B, 0x6C, 0x3B,
|
||||
0x6D, 0xD3, 0x6D, 0x9D, 0xED, 0xA9, 0x8D, 0xBE, 0xE5, 0xB0, 0x4B, 0x34, 0x37, 0x57, 0x56, 0xBE,
|
||||
0xBE, 0xF0, 0x70, 0x44, 0x24, 0x33, 0x5B, 0x55, 0xFB, 0x7F, 0x03, 0x60, 0x01, 0xE8, 0x00, 0x4E,
|
||||
0x80, 0x34, 0x60, 0x17, 0x68, 0x0E, 0xAE, 0x84, 0x7C, 0x63, 0x61, 0xE9, 0xE8, 0x4E, 0xCE, 0xB4,
|
||||
0x54, 0x77, 0x7F, 0x66, 0xA0, 0x2A, 0xF8, 0x1F, 0x02, 0x88, 0x01, 0xA6, 0x80, 0x7A, 0xE0, 0x23,
|
||||
0x08, 0x19, 0xC6, 0x8A, 0xD2, 0xE7, 0x1D, 0x8A, 0x89, 0xA7, 0x26, 0xFA, 0x9A, 0xC3, 0x2B, 0x11,
|
||||
0xDF, 0x4C, 0x58, 0x35, 0xFA, 0x97, 0x03, 0x2E, 0x81, 0xDC, 0x60, 0x59, 0xE8, 0x3A, 0xCE, 0x93,
|
||||
0x14, 0x6D, 0xCF, 0x6D, 0x94, 0x2D, 0xAF, 0x5D, 0xBC, 0x39, 0xB1, 0xD2, 0xF4, 0x5D, 0x87, 0x79,
|
||||
0xA2, 0xA2, 0xF9, 0xB9, 0x82, 0xF2, 0xE1, 0x85, 0x88, 0x63, 0x26, 0xA9, 0xDA, 0xFE, 0xDB, 0x00,
|
||||
0x5B, 0x40, 0x3B, 0x70, 0x13, 0x64, 0x0D, 0xEB, 0x45, 0x8F, 0x73, 0x24, 0x25, 0xDB, 0x5B, 0x1B,
|
||||
0x7B, 0x4B, 0x63, 0x77, 0x69, 0xE6, 0xAE, 0xCA, 0xFC, 0x57, 0x01, 0xFE, 0x80, 0x40, 0x60, 0x30,
|
||||
0x28, 0x14, 0x1E, 0x8F, 0x48, 0x64, 0x36, 0xAB, 0x56, 0xFF, 0x7E, 0xC0, 0x20, 0x50, 0x18, 0x3C,
|
||||
0x0A, 0x91, 0xC7, 0x2C, 0x52, 0x9D, 0xFD, 0xA9, 0x81, 0xBE, 0xE0, 0x70, 0x48, 0x24, 0x36, 0x9B,
|
||||
0x56, 0xEB, 0x7E, 0xCF, 0x60, 0x54, 0x28, 0x3F, 0x5E, 0x90, 0x38, 0x6C, 0x12, 0xAD, 0xCD, 0xBD,
|
||||
0x95, 0xB1, 0xAF, 0x34, 0x7C, 0x17, 0x61, 0xCE, 0xA8, 0x54, 0x7E, 0xBF, 0x60, 0x70, 0x28, 0x24,
|
||||
0x1E, 0x9B, 0x48, 0x6B, 0x76, 0xAF, 0x66, 0xFC, 0x2A, 0xC1, 0xDF, 0x10, 0x58, 0x0C, 0x3A, 0x85,
|
||||
0xD3, 0x23, 0x1D, 0xD9, 0xC9, 0x9A, 0xD6, 0xEB, 0x1E, 0xCF, 0x48, 0x54, 0x36, 0xBF, 0x56, 0xF0,
|
||||
0x3E, 0xC4, 0x10, 0x53, 0x4C, 0x3D, 0xF5, 0xD1, 0x87, 0x1C, 0x62, 0x89, 0xE9, 0xA6, 0xCE, 0xFA,
|
||||
0xD4, 0x43, 0x1F, 0x71, 0xC8, 0x24, 0x56, 0x9B, 0x7E, 0xEB, 0x60, 0x4F, 0x68, 0x34, 0x2E, 0x97,
|
||||
0x5C, 0x6E, 0xB9, 0xEC, 0x72, 0xCD, 0xE5, 0x95, 0x8B, 0x2F, 0x27, 0x5C, 0x1A, 0xB9, 0xCB, 0x32,
|
||||
0xD7, 0x55, 0x9E, 0xBF, 0x28, 0x70, 0x1E, 0xA4, 0x08, 0x7B, 0x46, 0xA3, 0x72, 0xF9, 0xE5, 0x82,
|
||||
0xCB, 0x21, 0x97, 0x58, 0x6E, 0xBA, 0xAC, 0x73, 0x3D, 0xE5, 0xD1, 0x8B, 0x1C, 0x67, 0x49, 0xEA,
|
||||
0xB6, 0xCF, 0x36, 0xD4, 0x16, 0xDF, 0x4E, 0xD8, 0x34, 0x5A, 0x97, 0x7B, 0x2E, 0xA3, 0x5C, 0x79,
|
||||
0xF9, 0xE2, 0xC2, 0xC9, 0x91, 0x96, 0xEC, 0x6E, 0xCD, 0xEC, 0x55, 0x8D, 0xFF, 0x25, 0x80, 0x1B,
|
||||
0x20, 0x0B, 0x58, 0x07, 0x7A, 0x82, 0xA3, 0x21, 0xB9, 0xD8, 0x72, 0xDA, 0xA5, 0x9B, 0x3B, 0x2B,
|
||||
0x53, 0x5F, 0x7D, 0xF8, 0x21, 0x82, 0x98, 0x61, 0xAA, 0xA8, 0x7F, 0x3E, 0xA0, 0x10, 0x78, 0x0C,
|
||||
0x22, 0x85, 0xD9, 0xA3, 0x1A, 0xF9, 0xCB, 0x02, 0xD7, 0x41, 0x9E, 0xB0, 0x68, 0x74, 0x2E, 0xA7,
|
||||
0x5C, 0x7A, 0xB9, 0xE3, 0x32, 0xC9, 0xD5, 0x96, 0xDF, 0x2E, 0xD8, 0x1C, 0x5A, 0x89, 0xFB, 0x26,
|
||||
0xC3, 0x5A, 0xD1, 0xFB, 0x1C, 0x43, 0x49, 0xF1, 0xF6, 0xC4, 0x46, 0xD3, 0x72, 0xDD, 0xE5, 0x99
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x28,
|
||||
0x00, 0x1E, 0x80, 0x08, 0x60, 0x06, 0xA8, 0x02, 0xFE, 0x81, 0x80, 0x60, 0x60, 0x28, 0x28, 0x1E, 0x9E, 0x88,
|
||||
0x68, 0x66, 0xAE, 0xAA, 0xFC, 0x7F, 0x01, 0xE0, 0x00, 0x48, 0x00, 0x36, 0x80, 0x16, 0xE0, 0x0E, 0xC8, 0x04,
|
||||
0x56, 0x83, 0x7E, 0xE1, 0xE0, 0x48, 0x48, 0x36, 0xB6, 0x96, 0xF6, 0xEE, 0xC6, 0xCC, 0x52, 0xD5, 0xFD, 0x9F,
|
||||
0x01, 0xA8, 0x00, 0x7E, 0x80, 0x20, 0x60, 0x18, 0x28, 0x0A, 0x9E, 0x87, 0x28, 0x62, 0x9E, 0xA9, 0xA8, 0x7E,
|
||||
0xFE, 0xA0, 0x40, 0x78, 0x30, 0x22, 0x94, 0x19, 0xAF, 0x4A, 0xFC, 0x37, 0x01, 0xD6, 0x80, 0x5E, 0xE0, 0x38,
|
||||
0x48, 0x12, 0xB6, 0x8D, 0xB6, 0xE5, 0xB6, 0xCB, 0x36, 0xD7, 0x56, 0xDE, 0xBE, 0xD8, 0x70, 0x5A, 0xA4, 0x3B,
|
||||
0x3B, 0x53, 0x53, 0x7D, 0xFD, 0xE1, 0x81, 0x88, 0x60, 0x66, 0xA8, 0x2A, 0xFE, 0x9F, 0x00, 0x68, 0x00, 0x2E,
|
||||
0x80, 0x1C, 0x60, 0x09, 0xE8, 0x06, 0xCE, 0x82, 0xD4, 0x61, 0x9F, 0x68, 0x68, 0x2E, 0xAE, 0x9C, 0x7C, 0x69,
|
||||
0xE1, 0xEE, 0xC8, 0x4C, 0x56, 0xB5, 0xFE, 0xF7, 0x00, 0x46, 0x80, 0x32, 0xE0, 0x15, 0x88, 0x0F, 0x26, 0x84,
|
||||
0x1A, 0xE3, 0x4B, 0x09, 0xF7, 0x46, 0xC6, 0xB2, 0xD2, 0xF5, 0x9D, 0x87, 0x29, 0xA2, 0x9E, 0xF9, 0xA8, 0x42,
|
||||
0xFE, 0xB1, 0x80, 0x74, 0x60, 0x27, 0x68, 0x1A, 0xAE, 0x8B, 0x3C, 0x67, 0x51, 0xEA, 0xBC, 0x4F, 0x31, 0xF4,
|
||||
0x14, 0x47, 0x4F, 0x72, 0xB4, 0x25, 0xB7, 0x5B, 0x36, 0xBB, 0x56, 0xF3, 0x7E, 0xC5, 0xE0, 0x53, 0x08, 0x3D,
|
||||
0xC6, 0x91, 0x92, 0xEC, 0x6D, 0x8D, 0xED, 0xA5, 0x8D, 0xBB, 0x25, 0xB3, 0x5B, 0x35, 0xFB, 0x57, 0x03, 0x7E,
|
||||
0x81, 0xE0, 0x60, 0x48, 0x28, 0x36, 0x9E, 0x96, 0xE8, 0x6E, 0xCE, 0xAC, 0x54, 0x7D, 0xFF, 0x61, 0x80, 0x28,
|
||||
0x60, 0x1E, 0xA8, 0x08, 0x7E, 0x86, 0xA0, 0x62, 0xF8, 0x29, 0x82, 0x9E, 0xE1, 0xA8, 0x48, 0x7E, 0xB6, 0xA0,
|
||||
0x76, 0xF8, 0x26, 0xC2, 0x9A, 0xD1, 0xAB, 0x1C, 0x7F, 0x49, 0xE0, 0x36, 0xC8, 0x16, 0xD6, 0x8E, 0xDE, 0xE4,
|
||||
0x58, 0x4B, 0x7A, 0xB7, 0x63, 0x36, 0xA9, 0xD6, 0xFE, 0xDE, 0xC0, 0x58, 0x50, 0x3A, 0xBC, 0x13, 0x31, 0xCD,
|
||||
0xD4, 0x55, 0x9F, 0x7F, 0x28, 0x20, 0x1E, 0x98, 0x08, 0x6A, 0x86, 0xAF, 0x22, 0xFC, 0x19, 0x81, 0xCA, 0xE0,
|
||||
0x57, 0x08, 0x3E, 0x86, 0x90, 0x62, 0xEC, 0x29, 0x8D, 0xDE, 0xE5, 0x98, 0x4B, 0x2A, 0xB7, 0x5F, 0x36, 0xB8,
|
||||
0x16, 0xF2, 0x8E, 0xC5, 0xA4, 0x53, 0x3B, 0x7D, 0xD3, 0x61, 0x9D, 0xE8, 0x69, 0x8E, 0xAE, 0xE4, 0x7C, 0x4B,
|
||||
0x61, 0xF7, 0x68, 0x46, 0xAE, 0xB2, 0xFC, 0x75, 0x81, 0xE7, 0x20, 0x4A, 0x98, 0x37, 0x2A, 0x96, 0x9F, 0x2E,
|
||||
0xE8, 0x1C, 0x4E, 0x89, 0xF4, 0x66, 0xC7, 0x6A, 0xD2, 0xAF, 0x1D, 0xBC, 0x09, 0xB1, 0xC6, 0xF4, 0x52, 0xC7,
|
||||
0x7D, 0x92, 0xA1, 0xAD, 0xB8, 0x7D, 0xB2, 0xA1, 0xB5, 0xB8, 0x77, 0x32, 0xA6, 0x95, 0xBA, 0xEF, 0x33, 0x0C,
|
||||
0x15, 0xC5, 0xCF, 0x13, 0x14, 0x0D, 0xCF, 0x45, 0x94, 0x33, 0x2F, 0x55, 0xDC, 0x3F, 0x19, 0xD0, 0x0A, 0xDC,
|
||||
0x07, 0x19, 0xC2, 0x8A, 0xD1, 0xA7, 0x1C, 0x7A, 0x89, 0xE3, 0x26, 0xC9, 0xDA, 0xD6, 0xDB, 0x1E, 0xDB, 0x48,
|
||||
0x5B, 0x76, 0xBB, 0x66, 0xF3, 0x6A, 0xC5, 0xEF, 0x13, 0x0C, 0x0D, 0xC5, 0xC5, 0x93, 0x13, 0x2D, 0xCD, 0xDD,
|
||||
0x95, 0x99, 0xAF, 0x2A, 0xFC, 0x1F, 0x01, 0xC8, 0x00, 0x56, 0x80, 0x3E, 0xE0, 0x10, 0x48, 0x0C, 0x36, 0x85,
|
||||
0xD6, 0xE3, 0x1E, 0xC9, 0xC8, 0x56, 0xD6, 0xBE, 0xDE, 0xF0, 0x58, 0x44, 0x3A, 0xB3, 0x53, 0x35, 0xFD, 0xD7,
|
||||
0x01, 0x9E, 0x80, 0x68, 0x60, 0x2E, 0xA8, 0x1C, 0x7E, 0x89, 0xE0, 0x66, 0xC8, 0x2A, 0xD6, 0x9F, 0x1E, 0xE8,
|
||||
0x08, 0x4E, 0x86, 0xB4, 0x62, 0xF7, 0x69, 0x86, 0xAE, 0xE2, 0xFC, 0x49, 0x81, 0xF6, 0xE0, 0x46, 0xC8, 0x32,
|
||||
0xD6, 0x95, 0x9E, 0xEF, 0x28, 0x4C, 0x1E, 0xB5, 0xC8, 0x77, 0x16, 0xA6, 0x8E, 0xFA, 0xE4, 0x43, 0x0B, 0x71,
|
||||
0xC7, 0x64, 0x52, 0xAB, 0x7D, 0xBF, 0x61, 0xB0, 0x28, 0x74, 0x1E, 0xA7, 0x48, 0x7A, 0xB6, 0xA3, 0x36, 0xF9,
|
||||
0xD6, 0xC2, 0xDE, 0xD1, 0x98, 0x5C, 0x6A, 0xB9, 0xEF, 0x32, 0xCC, 0x15, 0x95, 0xCF, 0x2F, 0x14, 0x1C, 0x0F,
|
||||
0x49, 0xC4, 0x36, 0xD3, 0x56, 0xDD, 0xFE, 0xD9, 0x80, 0x5A, 0xE0, 0x3B, 0x08, 0x13, 0x46, 0x8D, 0xF2, 0xE5,
|
||||
0x85, 0x8B, 0x23, 0x27, 0x59, 0xDA, 0xBA, 0xDB, 0x33, 0x1B, 0x55, 0xCB, 0x7F, 0x17, 0x60, 0x0E, 0xA8, 0x04,
|
||||
0x7E, 0x83, 0x60, 0x61, 0xE8, 0x28, 0x4E, 0x9E, 0xB4, 0x68, 0x77, 0x6E, 0xA6, 0xAC, 0x7A, 0xFD, 0xE3, 0x01,
|
||||
0x89, 0xC0, 0x66, 0xD0, 0x2A, 0xDC, 0x1F, 0x19, 0xC8, 0x0A, 0xD6, 0x87, 0x1E, 0xE2, 0x88, 0x49, 0xA6, 0xB6,
|
||||
0xFA, 0xF6, 0xC3, 0x06, 0xD1, 0xC2, 0xDC, 0x51, 0x99, 0xFC, 0x6A, 0xC1, 0xEF, 0x10, 0x4C, 0x0C, 0x35, 0xC5,
|
||||
0xD7, 0x13, 0x1E, 0x8D, 0xC8, 0x65, 0x96, 0xAB, 0x2E, 0xFF, 0x5C, 0x40, 0x39, 0xF0, 0x12, 0xC4, 0x0D, 0x93,
|
||||
0x45, 0xAD, 0xF3, 0x3D, 0x85, 0xD1, 0xA3, 0x1C, 0x79, 0xC9, 0xE2, 0xD6, 0xC9, 0x9E, 0xD6, 0xE8, 0x5E, 0xCE,
|
||||
0xB8, 0x54, 0x72, 0xBF, 0x65, 0xB0, 0x2B, 0x34, 0x1F, 0x57, 0x48, 0x3E, 0xB6, 0x90, 0x76, 0xEC, 0x26, 0xCD,
|
||||
0xDA, 0xD5, 0x9B, 0x1F, 0x2B, 0x48, 0x1F, 0x76, 0x88, 0x26, 0xE6, 0x9A, 0xCA, 0xEB, 0x17, 0x0F, 0x4E, 0x84,
|
||||
0x34, 0x63, 0x57, 0x69, 0xFE, 0xAE, 0xC0, 0x7C, 0x50, 0x21, 0xFC, 0x18, 0x41, 0xCA, 0xB0, 0x57, 0x34, 0x3E,
|
||||
0x97, 0x50, 0x6E, 0xBC, 0x2C, 0x71, 0xDD, 0xE4, 0x59, 0x8B, 0x7A, 0xE7, 0x63, 0x0A, 0xA9, 0xC7, 0x3E, 0xD2,
|
||||
0x90, 0x5D, 0xAC, 0x39, 0xBD, 0xD2, 0xF1, 0x9D, 0x84, 0x69, 0xA3, 0x6E, 0xF9, 0xEC, 0x42, 0xCD, 0xF1, 0x95,
|
||||
0x84, 0x6F, 0x23, 0x6C, 0x19, 0xED, 0xCA, 0xCD, 0x97, 0x15, 0xAE, 0x8F, 0x3C, 0x64, 0x11, 0xEB, 0x4C, 0x4F,
|
||||
0x75, 0xF4, 0x27, 0x07, 0x5A, 0x82, 0xBB, 0x21, 0xB3, 0x58, 0x75, 0xFA, 0xA7, 0x03, 0x3A, 0x81, 0xD3, 0x20,
|
||||
0x5D, 0xD8, 0x39, 0x9A, 0x92, 0xEB, 0x2D, 0x8F, 0x5D, 0xA4, 0x39, 0xBB, 0x52, 0xF3, 0x7D, 0x85, 0xE1, 0xA3,
|
||||
0x08, 0x79, 0xC6, 0xA2, 0xD2, 0xF9, 0x9D, 0x82, 0xE9, 0xA1, 0x8E, 0xF8, 0x64, 0x42, 0xAB, 0x71, 0xBF, 0x64,
|
||||
0x70, 0x2B, 0x64, 0x1F, 0x6B, 0x48, 0x2F, 0x76, 0x9C, 0x26, 0xE9, 0xDA, 0xCE, 0xDB, 0x14, 0x5B, 0x4F, 0x7B,
|
||||
0x74, 0x23, 0x67, 0x59, 0xEA, 0xBA, 0xCF, 0x33, 0x14, 0x15, 0xCF, 0x4F, 0x14, 0x34, 0x0F, 0x57, 0x44, 0x3E,
|
||||
0xB3, 0x50, 0x75, 0xFC, 0x27, 0x01, 0xDA, 0x80, 0x5B, 0x20, 0x3B, 0x58, 0x13, 0x7A, 0x8D, 0xE3, 0x25, 0x89,
|
||||
0xDB, 0x26, 0xDB, 0x5A, 0xDB, 0x7B, 0x1B, 0x63, 0x4B, 0x69, 0xF7, 0x6E, 0xC6, 0xAC, 0x52, 0xFD, 0xFD, 0x81,
|
||||
0x81, 0xA0, 0x60, 0x78, 0x28, 0x22, 0x9E, 0x99, 0xA8, 0x6A, 0xFE, 0xAF, 0x00, 0x7C, 0x00, 0x21, 0xC0, 0x18,
|
||||
0x50, 0x0A, 0xBC, 0x07, 0x31, 0xC2, 0x94, 0x51, 0xAF, 0x7C, 0x7C, 0x21, 0xE1, 0xD8, 0x48, 0x5A, 0xB6, 0xBB,
|
||||
0x36, 0xF3, 0x56, 0xC5, 0xFE, 0xD3, 0x00, 0x5D, 0xC0, 0x39, 0x90, 0x12, 0xEC, 0x0D, 0x8D, 0xC5, 0xA5, 0x93,
|
||||
0x3B, 0x2D, 0xD3, 0x5D, 0x9D, 0xF9, 0xA9, 0x82, 0xFE, 0xE1, 0x80, 0x48, 0x60, 0x36, 0xA8, 0x16, 0xFE, 0x8E,
|
||||
0xC0, 0x64, 0x50, 0x2B, 0x7C, 0x1F, 0x61, 0xC8, 0x28, 0x56, 0x9E, 0xBE, 0xE8, 0x70, 0x4E, 0xA4, 0x34, 0x7B,
|
||||
0x57, 0x63, 0x7E, 0xA9, 0xE0, 0x7E, 0xC8, 0x20, 0x56, 0x98, 0x3E, 0xEA, 0x90, 0x4F, 0x2C, 0x34, 0x1D, 0xD7,
|
||||
0x49, 0x9E, 0xB6, 0xE8, 0x76, 0xCE, 0xA6, 0xD4, 0x7A, 0xDF, 0x63, 0x18, 0x29, 0xCA, 0x9E, 0xD7, 0x28, 0x5E,
|
||||
0x9E, 0xB8, 0x68, 0x72, 0xAE, 0xA5, 0xBC, 0x7B, 0x31, 0xE3, 0x54, 0x49, 0xFF, 0x76, 0xC0, 0x26, 0xD0, 0x1A,
|
||||
0xDC, 0x0B, 0x19, 0xC7, 0x4A, 0xD2, 0xB7, 0x1D, 0xB6, 0x89, 0xB6, 0xE6, 0xF6, 0xCA, 0xC6, 0xD7, 0x12, 0xDE,
|
||||
0x8D, 0x98, 0x65, 0xAA, 0xAB, 0x3F, 0x3F, 0x50, 0x10, 0x3C, 0x0C, 0x11, 0xC5, 0xCC, 0x53, 0x15, 0xFD, 0xCF,
|
||||
0x01, 0x94, 0x00, 0x6F, 0x40, 0x2C, 0x30, 0x1D, 0xD4, 0x09, 0x9F, 0x46, 0xE8, 0x32, 0xCE, 0x95, 0x94, 0x6F,
|
||||
0x2F, 0x6C, 0x1C, 0x2D, 0xC9, 0xDD, 0x96, 0xD9, 0xAE, 0xDA, 0xFC, 0x5B, 0x01, 0xFB, 0x40, 0x43, 0x70, 0x31,
|
||||
0xE4, 0x14, 0x4B, 0x4F, 0x77, 0x74, 0x26, 0xA7, 0x5A, 0xFA, 0xBB, 0x03, 0x33, 0x41, 0xD5, 0xF0, 0x5F, 0x04,
|
||||
0x38, 0x03, 0x52, 0x81, 0xFD, 0xA0, 0x41, 0xB8, 0x30, 0x72, 0x94, 0x25, 0xAF, 0x5B, 0x3C, 0x3B, 0x51, 0xD3,
|
||||
0x7C, 0x5D, 0xE1, 0xF9, 0x88, 0x42, 0xE6, 0xB1, 0x8A, 0xF4, 0x67, 0x07, 0x6A, 0x82, 0xAF, 0x21, 0xBC, 0x18,
|
||||
0x71, 0xCA, 0xA4, 0x57, 0x3B, 0x7E, 0x93, 0x60, 0x6D, 0xE8, 0x2D, 0x8E, 0x9D, 0xA4, 0x69, 0xBB, 0x6E, 0xF3,
|
||||
0x6C, 0x45, 0xED, 0xF3, 0x0D, 0x85, 0xC5, 0xA3, 0x13, 0x39, 0xCD, 0xD2, 0xD5, 0x9D, 0x9F, 0x29, 0xA8, 0x1E,
|
||||
0xFE, 0x88, 0x40, 0x66, 0xB0, 0x2A, 0xF4, 0x1F, 0x07, 0x48, 0x02, 0xB6, 0x81, 0xB6, 0xE0, 0x76, 0xC8, 0x26,
|
||||
0xD6, 0x9A, 0xDE, 0xEB, 0x18, 0x4F, 0x4A, 0xB4, 0x37, 0x37, 0x56, 0x96, 0xBE, 0xEE, 0xF0, 0x4C, 0x44, 0x35,
|
||||
0xF3, 0x57, 0x05, 0xFE, 0x83, 0x00, 0x61, 0xC0, 0x28, 0x50, 0x1E, 0xBC, 0x08, 0x71, 0xC6, 0xA4, 0x52, 0xFB,
|
||||
0x7D, 0x83, 0x61, 0xA1, 0xE8, 0x78, 0x4E, 0xA2, 0xB4, 0x79, 0xB7, 0x62, 0xF6, 0xA9, 0x86, 0xFE, 0xE2, 0xC0,
|
||||
0x49, 0x90, 0x36, 0xEC, 0x16, 0xCD, 0xCE, 0xD5, 0x94, 0x5F, 0x2F, 0x78, 0x1C, 0x22, 0x89, 0xD9, 0xA6, 0xDA,
|
||||
0xFA, 0xDB, 0x03, 0x1B, 0x41, 0xCB, 0x70, 0x57, 0x64, 0x3E, 0xAB, 0x50, 0x7F, 0x7C, 0x20, 0x21, 0xD8, 0x18,
|
||||
0x5A, 0x8A, 0xBB, 0x27, 0x33, 0x5A, 0x95, 0xFB, 0x2F, 0x03, 0x5C, 0x01, 0xF9, 0xC0, 0x42, 0xD0, 0x31, 0x9C,
|
||||
0x14, 0x69, 0xCF, 0x6E, 0xD4, 0x2C, 0x5F, 0x5D, 0xF8, 0x39, 0x82, 0x92, 0xE1, 0xAD, 0x88, 0x7D, 0xA6, 0xA1,
|
||||
0xBA, 0xF8, 0x73, 0x02, 0xA5, 0xC1, 0xBB, 0x10, 0x73, 0x4C, 0x25, 0xF5, 0xDB, 0x07, 0x1B, 0x42, 0x8B, 0x71,
|
||||
0xA7, 0x64, 0x7A, 0xAB, 0x63, 0x3F, 0x69, 0xD0, 0x2E, 0xDC, 0x1C, 0x59, 0xC9, 0xFA, 0xD6, 0xC3, 0x1E, 0xD1,
|
||||
0xC8, 0x5C, 0x56, 0xB9, 0xFE, 0xF2, 0xC0, 0x45, 0x90, 0x33, 0x2C, 0x15, 0xDD, 0xCF, 0x19, 0x94, 0x0A, 0xEF,
|
||||
0x47, 0x0C, 0x32, 0x85, 0xD5, 0xA3, 0x1F, 0x39, 0xC8, 0x12, 0xD6, 0x8D, 0x9E, 0xE5, 0xA8, 0x4B, 0x3E, 0xB7,
|
||||
0x50, 0x76, 0xBC, 0x26, 0xF1, 0xDA, 0xC4, 0x5B, 0x13, 0x7B, 0x4D, 0xE3, 0x75, 0x89, 0xE7, 0x26, 0xCA, 0x9A,
|
||||
0xD7, 0x2B, 0x1E, 0x9F, 0x48, 0x68, 0x36, 0xAE, 0x96, 0xFC, 0x6E, 0xC1, 0xEC, 0x50, 0x4D, 0xFC, 0x35, 0x81,
|
||||
0xD7, 0x20, 0x5E, 0x98, 0x38, 0x6A, 0x92, 0xAF, 0x2D, 0xBC, 0x1D, 0xB1, 0xC9, 0xB4, 0x56, 0xF7, 0x7E, 0xC6,
|
||||
0xA0, 0x52, 0xF8, 0x3D, 0x82, 0x91, 0xA1, 0xAC, 0x78, 0x7D, 0xE2, 0xA1, 0x89, 0xB8, 0x66, 0xF2, 0xAA, 0xC5,
|
||||
0xBF, 0x13, 0x30, 0x0D, 0xD4, 0x05, 0x9F, 0x43, 0x28, 0x31, 0xDE, 0x94, 0x58, 0x6F, 0x7A, 0xAC, 0x23, 0x3D,
|
||||
0xD9, 0xD1, 0x9A, 0xDC, 0x6B, 0x19, 0xEF, 0x4A, 0xCC, 0x37, 0x15, 0xD6, 0x8F, 0x1E, 0xE4, 0x08, 0x4B, 0x46,
|
||||
0xB7, 0x72, 0xF6, 0xA5, 0x86, 0xFB, 0x22, 0xC3, 0x59, 0x91, 0xFA, 0xEC, 0x43, 0x0D, 0xF1, 0xC5, 0x84, 0x53,
|
||||
0x23, 0x7D, 0xD9, 0xE1, 0x9A, 0xC8, 0x6B, 0x16, 0xAF, 0x4E, 0xFC, 0x34, 0x41, 0xD7, 0x70, 0x5E, 0xA4, 0x38,
|
||||
0x7B, 0x52, 0xA3, 0x7D, 0xB9, 0xE1, 0xB2, 0xC8, 0x75, 0x96, 0xA7, 0x2E, 0xFA, 0x9C, 0x43, 0x29, 0xF1, 0xDE,
|
||||
0xC4, 0x58, 0x53, 0x7A, 0xBD, 0xE3, 0x31, 0x89, 0xD4, 0x66, 0xDF, 0x6A, 0xD8, 0x2F, 0x1A, 0x9C, 0x0B, 0x29,
|
||||
0xC7, 0x5E, 0xD2, 0xB8, 0x5D, 0xB2, 0xB9, 0xB5, 0xB2, 0xF7, 0x35, 0x86, 0x97, 0x22, 0xEE, 0x99, 0x8C, 0x6A,
|
||||
0xE5, 0xEF, 0x0B, 0x0C, 0x07, 0x45, 0xC2, 0xB3, 0x11, 0xB5, 0xCC, 0x77, 0x15, 0xE6, 0x8F, 0x0A, 0xE4, 0x07,
|
||||
0x0B, 0x42, 0x87, 0x71, 0xA2, 0xA4, 0x79, 0xBB, 0x62, 0xF3, 0x69, 0x85, 0xEE, 0xE3, 0x0C, 0x49, 0xC5, 0xF6,
|
||||
0xD3, 0x06, 0xDD, 0xC2, 0xD9, 0x91, 0x9A, 0xEC, 0x6B, 0x0D, 0xEF, 0x45, 0x8C, 0x33, 0x25, 0xD5, 0xDB, 0x1F,
|
||||
0x1B, 0x48, 0x0B, 0x76, 0x87, 0x66, 0xE2, 0xAA, 0xC9, 0xBF, 0x16, 0xF0, 0x0E, 0xC4, 0x04, 0x53, 0x43, 0x7D,
|
||||
0xF1, 0xE1, 0x84, 0x48, 0x63, 0x76, 0xA9, 0xE6, 0xFE, 0xCA, 0xC0, 0x57, 0x10, 0x3E, 0x8C, 0x10, 0x65, 0xCC,
|
||||
0x2B, 0x15, 0xDF, 0x4F, 0x18, 0x34, 0x0A, 0x97, 0x47, 0x2E, 0xB2, 0x9C, 0x75, 0xA9, 0xE7, 0x3E, 0xCA, 0x90,
|
||||
0x57, 0x2C, 0x3E, 0x9D, 0xD0, 0x69, 0x9C, 0x2E, 0xE9, 0xDC, 0x4E, 0xD9, 0xF4, 0x5A, 0xC7, 0x7B, 0x12, 0xA3,
|
||||
0x4D, 0xB9, 0xF5, 0xB2, 0xC7, 0x35, 0x92, 0x97, 0x2D, 0xAE, 0x9D, 0xBC, 0x69, 0xB1, 0xEE, 0xF4, 0x4C, 0x47,
|
||||
0x75, 0xF2, 0xA7, 0x05, 0xBA, 0x83, 0x33, 0x21, 0xD5, 0xD8, 0x5F, 0x1A, 0xB8, 0x0B, 0x32, 0x87, 0x55, 0xA2,
|
||||
0xBF, 0x39, 0xB0, 0x12, 0xF4, 0x0D, 0x87, 0x45, 0xA2, 0xB3, 0x39, 0xB5, 0xD2, 0xF7, 0x1D, 0x86, 0x89, 0xA2,
|
||||
0xE6, 0xF9, 0x8A, 0xC2, 0xE7, 0x11, 0x8A, 0x8C, 0x67, 0x25, 0xEA, 0x9B, 0x0F, 0x2B, 0x44, 0x1F, 0x73, 0x48,
|
||||
0x25, 0xF6, 0x9B, 0x06, 0xEB, 0x42, 0xCF, 0x71, 0x94, 0x24, 0x6F, 0x5B, 0x6C, 0x3B, 0x6D, 0xD3, 0x6D, 0x9D,
|
||||
0xED, 0xA9, 0x8D, 0xBE, 0xE5, 0xB0, 0x4B, 0x34, 0x37, 0x57, 0x56, 0xBE, 0xBE, 0xF0, 0x70, 0x44, 0x24, 0x33,
|
||||
0x5B, 0x55, 0xFB, 0x7F, 0x03, 0x60, 0x01, 0xE8, 0x00, 0x4E, 0x80, 0x34, 0x60, 0x17, 0x68, 0x0E, 0xAE, 0x84,
|
||||
0x7C, 0x63, 0x61, 0xE9, 0xE8, 0x4E, 0xCE, 0xB4, 0x54, 0x77, 0x7F, 0x66, 0xA0, 0x2A, 0xF8, 0x1F, 0x02, 0x88,
|
||||
0x01, 0xA6, 0x80, 0x7A, 0xE0, 0x23, 0x08, 0x19, 0xC6, 0x8A, 0xD2, 0xE7, 0x1D, 0x8A, 0x89, 0xA7, 0x26, 0xFA,
|
||||
0x9A, 0xC3, 0x2B, 0x11, 0xDF, 0x4C, 0x58, 0x35, 0xFA, 0x97, 0x03, 0x2E, 0x81, 0xDC, 0x60, 0x59, 0xE8, 0x3A,
|
||||
0xCE, 0x93, 0x14, 0x6D, 0xCF, 0x6D, 0x94, 0x2D, 0xAF, 0x5D, 0xBC, 0x39, 0xB1, 0xD2, 0xF4, 0x5D, 0x87, 0x79,
|
||||
0xA2, 0xA2, 0xF9, 0xB9, 0x82, 0xF2, 0xE1, 0x85, 0x88, 0x63, 0x26, 0xA9, 0xDA, 0xFE, 0xDB, 0x00, 0x5B, 0x40,
|
||||
0x3B, 0x70, 0x13, 0x64, 0x0D, 0xEB, 0x45, 0x8F, 0x73, 0x24, 0x25, 0xDB, 0x5B, 0x1B, 0x7B, 0x4B, 0x63, 0x77,
|
||||
0x69, 0xE6, 0xAE, 0xCA, 0xFC, 0x57, 0x01, 0xFE, 0x80, 0x40, 0x60, 0x30, 0x28, 0x14, 0x1E, 0x8F, 0x48, 0x64,
|
||||
0x36, 0xAB, 0x56, 0xFF, 0x7E, 0xC0, 0x20, 0x50, 0x18, 0x3C, 0x0A, 0x91, 0xC7, 0x2C, 0x52, 0x9D, 0xFD, 0xA9,
|
||||
0x81, 0xBE, 0xE0, 0x70, 0x48, 0x24, 0x36, 0x9B, 0x56, 0xEB, 0x7E, 0xCF, 0x60, 0x54, 0x28, 0x3F, 0x5E, 0x90,
|
||||
0x38, 0x6C, 0x12, 0xAD, 0xCD, 0xBD, 0x95, 0xB1, 0xAF, 0x34, 0x7C, 0x17, 0x61, 0xCE, 0xA8, 0x54, 0x7E, 0xBF,
|
||||
0x60, 0x70, 0x28, 0x24, 0x1E, 0x9B, 0x48, 0x6B, 0x76, 0xAF, 0x66, 0xFC, 0x2A, 0xC1, 0xDF, 0x10, 0x58, 0x0C,
|
||||
0x3A, 0x85, 0xD3, 0x23, 0x1D, 0xD9, 0xC9, 0x9A, 0xD6, 0xEB, 0x1E, 0xCF, 0x48, 0x54, 0x36, 0xBF, 0x56, 0xF0,
|
||||
0x3E, 0xC4, 0x10, 0x53, 0x4C, 0x3D, 0xF5, 0xD1, 0x87, 0x1C, 0x62, 0x89, 0xE9, 0xA6, 0xCE, 0xFA, 0xD4, 0x43,
|
||||
0x1F, 0x71, 0xC8, 0x24, 0x56, 0x9B, 0x7E, 0xEB, 0x60, 0x4F, 0x68, 0x34, 0x2E, 0x97, 0x5C, 0x6E, 0xB9, 0xEC,
|
||||
0x72, 0xCD, 0xE5, 0x95, 0x8B, 0x2F, 0x27, 0x5C, 0x1A, 0xB9, 0xCB, 0x32, 0xD7, 0x55, 0x9E, 0xBF, 0x28, 0x70,
|
||||
0x1E, 0xA4, 0x08, 0x7B, 0x46, 0xA3, 0x72, 0xF9, 0xE5, 0x82, 0xCB, 0x21, 0x97, 0x58, 0x6E, 0xBA, 0xAC, 0x73,
|
||||
0x3D, 0xE5, 0xD1, 0x8B, 0x1C, 0x67, 0x49, 0xEA, 0xB6, 0xCF, 0x36, 0xD4, 0x16, 0xDF, 0x4E, 0xD8, 0x34, 0x5A,
|
||||
0x97, 0x7B, 0x2E, 0xA3, 0x5C, 0x79, 0xF9, 0xE2, 0xC2, 0xC9, 0x91, 0x96, 0xEC, 0x6E, 0xCD, 0xEC, 0x55, 0x8D,
|
||||
0xFF, 0x25, 0x80, 0x1B, 0x20, 0x0B, 0x58, 0x07, 0x7A, 0x82, 0xA3, 0x21, 0xB9, 0xD8, 0x72, 0xDA, 0xA5, 0x9B,
|
||||
0x3B, 0x2B, 0x53, 0x5F, 0x7D, 0xF8, 0x21, 0x82, 0x98, 0x61, 0xAA, 0xA8, 0x7F, 0x3E, 0xA0, 0x10, 0x78, 0x0C,
|
||||
0x22, 0x85, 0xD9, 0xA3, 0x1A, 0xF9, 0xCB, 0x02, 0xD7, 0x41, 0x9E, 0xB0, 0x68, 0x74, 0x2E, 0xA7, 0x5C, 0x7A,
|
||||
0xB9, 0xE3, 0x32, 0xC9, 0xD5, 0x96, 0xDF, 0x2E, 0xD8, 0x1C, 0x5A, 0x89, 0xFB, 0x26, 0xC3, 0x5A, 0xD1, 0xFB,
|
||||
0x1C, 0x43, 0x49, 0xF1, 0xF6, 0xC4, 0x46, 0xD3, 0x72, 0xDD, 0xE5, 0x99
|
||||
};
|
||||
|
||||
public static readonly byte[] SyncMark = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 };
|
||||
public static readonly byte[] SyncMark =
|
||||
{0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00};
|
||||
|
||||
public static byte[] Scramble(byte[] sector)
|
||||
{
|
||||
if(sector == null || sector.Length < 2352)
|
||||
return sector;
|
||||
if(sector == null || sector.Length < 2352) return sector;
|
||||
|
||||
byte[] sync = new byte[12];
|
||||
Array.Copy(sector, 0, sync, 0, 12);
|
||||
|
||||
if(!SyncMark.SequenceEqual(sync))
|
||||
return sector;
|
||||
if(!SyncMark.SequenceEqual(sync)) return sector;
|
||||
|
||||
byte[] scrambled = new byte[sector.Length];
|
||||
for(int i = 0; i < 2352; i++)
|
||||
scrambled[i] = (byte)(sector[i] ^ ScrambleTable[i]);
|
||||
for(int i = 0; i < 2352; i++) scrambled[i] = (byte)(sector[i] ^ ScrambleTable[i]);
|
||||
|
||||
if(sector.Length > 2352)
|
||||
{
|
||||
for(int i = 2352; i < sector.Length; i++)
|
||||
scrambled[i] = sector[i];
|
||||
}
|
||||
if(sector.Length > 2352) { for(int i = 2352; i < sector.Length; i++) scrambled[i] = sector[i]; }
|
||||
|
||||
return scrambled;
|
||||
}
|
||||
|
||||
@@ -109,8 +109,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDSessionInfo? Decode(byte[] CDSessionInfoResponse)
|
||||
{
|
||||
if(CDSessionInfoResponse == null)
|
||||
return null;
|
||||
if(CDSessionInfoResponse == null) return null;
|
||||
|
||||
CDSessionInfo decoded = new CDSessionInfo();
|
||||
|
||||
@@ -123,7 +122,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
if(decoded.DataLength + 2 != CDSessionInfoResponse.Length)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD Session Info decoder", "Expected CDSessionInfo size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDSessionInfoResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD Session Info decoder",
|
||||
"Expected CDSessionInfo size ({0} bytes) is not received size ({1} bytes), not decoding",
|
||||
decoded.DataLength + 2, CDSessionInfoResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -134,7 +135,8 @@ namespace DiscImageChef.Decoders.CD
|
||||
decoded.TrackDescriptors[i].CONTROL = (byte)(CDSessionInfoResponse[1 + i * 8 + 4] & 0x0F);
|
||||
decoded.TrackDescriptors[i].TrackNumber = CDSessionInfoResponse[2 + i * 8 + 4];
|
||||
decoded.TrackDescriptors[i].Reserved2 = CDSessionInfoResponse[3 + i * 8 + 4];
|
||||
decoded.TrackDescriptors[i].TrackStartAddress = BigEndianBitConverter.ToUInt32(CDSessionInfoResponse, 4 + i * 8 + 4);
|
||||
decoded.TrackDescriptors[i].TrackStartAddress =
|
||||
BigEndianBitConverter.ToUInt32(CDSessionInfoResponse, 4 + i * 8 + 4);
|
||||
}
|
||||
|
||||
return decoded;
|
||||
@@ -142,8 +144,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDSessionInfo? CDSessionInfoResponse)
|
||||
{
|
||||
if(CDSessionInfoResponse == null)
|
||||
return null;
|
||||
if(CDSessionInfoResponse == null) return null;
|
||||
|
||||
CDSessionInfo response = CDSessionInfoResponse.Value;
|
||||
|
||||
@@ -153,11 +154,12 @@ namespace DiscImageChef.Decoders.CD
|
||||
sb.AppendFormat("Last complete session number: {0}", response.LastCompleteSession).AppendLine();
|
||||
foreach(TrackDataDescriptor descriptor in response.TrackDescriptors)
|
||||
{
|
||||
sb.AppendFormat("First track number in last complete session: {0}", descriptor.TrackNumber).AppendLine();
|
||||
sb.AppendFormat("First track number in last complete session: {0}", descriptor.TrackNumber)
|
||||
.AppendLine();
|
||||
sb.AppendFormat("Track starts at LBA {0}, or MSF {1:X2}:{2:X2}:{3:X2}", descriptor.TrackStartAddress,
|
||||
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
|
||||
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
|
||||
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
|
||||
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
|
||||
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
|
||||
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
|
||||
|
||||
switch((TOC_ADR)descriptor.ADR)
|
||||
{
|
||||
@@ -201,10 +203,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
break;
|
||||
}
|
||||
|
||||
if((descriptor.CONTROL & (byte)TOC_CONTROL.CopyPermissionMask) == (byte)TOC_CONTROL.CopyPermissionMask)
|
||||
sb.AppendLine("Digital copy of track is permitted");
|
||||
else
|
||||
sb.AppendLine("Digital copy of track is prohibited");
|
||||
if((descriptor.CONTROL & (byte)TOC_CONTROL.CopyPermissionMask) ==
|
||||
(byte)TOC_CONTROL.CopyPermissionMask) sb.AppendLine("Digital copy of track is permitted");
|
||||
else sb.AppendLine("Digital copy of track is prohibited");
|
||||
|
||||
#if DEBUG
|
||||
if(descriptor.Reserved1 != 0)
|
||||
@@ -226,5 +227,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
return Prettify(decoded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -111,8 +111,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static CDTOC? Decode(byte[] CDTOCResponse)
|
||||
{
|
||||
if(CDTOCResponse == null)
|
||||
return null;
|
||||
if(CDTOCResponse == null) return null;
|
||||
|
||||
CDTOC decoded = new CDTOC();
|
||||
|
||||
@@ -125,7 +124,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
if(decoded.DataLength + 2 != CDTOCResponse.Length)
|
||||
{
|
||||
DicConsole.DebugWriteLine("CD TOC decoder", "Expected CDTOC size ({0} bytes) is not received size ({1} bytes), not decoding", decoded.DataLength + 2, CDTOCResponse.Length);
|
||||
DicConsole.DebugWriteLine("CD TOC decoder",
|
||||
"Expected CDTOC size ({0} bytes) is not received size ({1} bytes), not decoding",
|
||||
decoded.DataLength + 2, CDTOCResponse.Length);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -136,7 +137,8 @@ namespace DiscImageChef.Decoders.CD
|
||||
decoded.TrackDescriptors[i].CONTROL = (byte)(CDTOCResponse[1 + i * 8 + 4] & 0x0F);
|
||||
decoded.TrackDescriptors[i].TrackNumber = CDTOCResponse[2 + i * 8 + 4];
|
||||
decoded.TrackDescriptors[i].Reserved2 = CDTOCResponse[3 + i * 8 + 4];
|
||||
decoded.TrackDescriptors[i].TrackStartAddress = BigEndianBitConverter.ToUInt32(CDTOCResponse, 4 + i * 8 + 4);
|
||||
decoded.TrackDescriptors[i].TrackStartAddress =
|
||||
BigEndianBitConverter.ToUInt32(CDTOCResponse, 4 + i * 8 + 4);
|
||||
}
|
||||
|
||||
return decoded;
|
||||
@@ -144,8 +146,7 @@ namespace DiscImageChef.Decoders.CD
|
||||
|
||||
public static string Prettify(CDTOC? CDTOCResponse)
|
||||
{
|
||||
if(CDTOCResponse == null)
|
||||
return null;
|
||||
if(CDTOCResponse == null) return null;
|
||||
|
||||
CDTOC response = CDTOCResponse.Value;
|
||||
|
||||
@@ -155,14 +156,12 @@ namespace DiscImageChef.Decoders.CD
|
||||
sb.AppendFormat("Last track number in last complete session: {0}", response.LastTrack).AppendLine();
|
||||
foreach(CDTOCTrackDataDescriptor descriptor in response.TrackDescriptors)
|
||||
{
|
||||
if(descriptor.TrackNumber == 0xAA)
|
||||
sb.AppendLine("Track number: Lead-Out");
|
||||
else
|
||||
sb.AppendFormat("Track number: {0}", descriptor.TrackNumber).AppendLine();
|
||||
if(descriptor.TrackNumber == 0xAA) sb.AppendLine("Track number: Lead-Out");
|
||||
else sb.AppendFormat("Track number: {0}", descriptor.TrackNumber).AppendLine();
|
||||
sb.AppendFormat("Track starts at LBA {0}, or MSF {1:X2}:{2:X2}:{3:X2}", descriptor.TrackStartAddress,
|
||||
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
|
||||
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
|
||||
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
|
||||
(descriptor.TrackStartAddress & 0x0000FF00) >> 8,
|
||||
(descriptor.TrackStartAddress & 0x00FF0000) >> 16,
|
||||
(descriptor.TrackStartAddress & 0xFF000000) >> 24).AppendLine();
|
||||
|
||||
switch((TOC_ADR)descriptor.ADR)
|
||||
{
|
||||
@@ -212,10 +211,9 @@ namespace DiscImageChef.Decoders.CD
|
||||
break;
|
||||
}
|
||||
|
||||
if((descriptor.CONTROL & (byte)TOC_CONTROL.CopyPermissionMask) == (byte)TOC_CONTROL.CopyPermissionMask)
|
||||
sb.AppendLine("Digital copy of track is permitted");
|
||||
else
|
||||
sb.AppendLine("Digital copy of track is prohibited");
|
||||
if((descriptor.CONTROL & (byte)TOC_CONTROL.CopyPermissionMask) ==
|
||||
(byte)TOC_CONTROL.CopyPermissionMask) sb.AppendLine("Digital copy of track is permitted");
|
||||
else sb.AppendLine("Digital copy of track is prohibited");
|
||||
|
||||
#if DEBUG
|
||||
if(descriptor.Reserved1 != 0)
|
||||
@@ -237,5 +235,4 @@ namespace DiscImageChef.Decoders.CD
|
||||
return Prettify(decoded);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user