Author Topic: Sensor Factory Calibration  (Read 24808 times)

dfort

  • Guest
Re: Sensor Factory Calibration
« Reply #25 on: December 17, 2018, 05:56:41 AM »
Tried finding the addresses on the EOSM and got lost. Did better with the 7D.

ISO 100:
Code: [Select]
EDMAC#9: addr=0x3d9fc0 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x46cce8 conn=15 cbr=0 name='''''' size='''8x3516'''

ISO 200:
Code: [Select]
EDMAC#9: addr=0x3e9b18 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4816a0 conn=15 cbr=0 name='''''' size='''8x3516'''

ISO 400:
Code: [Select]
EDMAC#9: addr=0x3f9670 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x496058 conn=15 cbr=0 name='''''' size='''8x3516'''

ISO 800:
Code: [Select]
EDMAC#9: addr=0x4091c8 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#9: addr=0x4aaa10 conn=15 cbr=0 name='''''' size='''8x3516'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''

ISO 1600:
Code: [Select]
EDMAC#9: addr=0x418d20 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4bf3c8 conn=15 cbr=0 name='''''' size='''8x3516'''

ISO 3200:
Code: [Select]
EDMAC#9: addr=0x42dc40 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4c61b0 conn=15 cbr=0 name='''''' size='''8x3516'''

ISO 6400:
Code: [Select]
EDMAC#9: addr=0x44d2f0 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#9: addr=0x4ccf98 conn=15 cbr=0 name='''''' size='''8x3516'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''

ISO 12800
Code: [Select]
EDMAC#9: addr=0x457a80 conn=15 cbr=0 name='''''' size='''5360x4'''
EDMAC#0: addr=0x1ca23e84 conn=2 cbr=0 name='''''' size='''480x16'''
EDMAC#1: addr=0x1ca26084 conn=28 cbr=0 name='''''' size='''(432, skip 80) x 192'''
EDMAC#2: addr=0x4006e50 conn=0 cbr=0 name='''''' size='''9380x3516'''
EDMAC#6: addr=0x1ca3e204 conn=18 cbr=0 name='''''' size='''4096x18, 3072'''
EDMAC#8: addr=0x4ece3c conn=0 cbr=0 name='''''' size='''2000x224'''
EDMAC#9: addr=0x4d3d80 conn=15 cbr=0 name='''''' size='''8x3516'''

Plugging this into the module:

Code: [Select]
    if (is_camera("7D", "2.0.3"))
    {
        SENSOR_VFPN_ADDR_100 = 0x3d9fc0;
        SENSOR_VFPN_ADDR_200 = 0x3e9b18;
        SENSOR_VFPN_ADDR_400 = 0x3f9670;
        SENSOR_VFPN_ADDR_800 = 0x4091c8;
        SENSOR_VFPN_ADDR_1600 = 0x418d20;
        SENSOR_VFPN_ADDR_3200 = 0x42dc40;
        SENSOR_VFPN_ADDR_6400 = 0x44d2f0;
        SENSOR_VFPN_ADDR_12800 = 0x457a80;
        SENSOR_FULL_WIDTH = 5360; //if an error occurs, it prevents buffer overflow
    }

Does that look about right?

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #26 on: December 17, 2018, 11:09:01 AM »
maybe i wasn't specific enough.
using
int PROPAD_GetPropertyData(unsigned int property, void **data, int *length)
you can read the memory address of the properties i wrote.
no need for searching, you just need PROPAD_GetPropertyData to retrieve the RAM addresses you just searched for.

some example (untested)
Code: [Select]
int (*PROPAD_GetPropertyData) (unsigned int property, void **data, int *length) = 0xFF06934C; // 7D.203, see stubs.h where they are defined
unsigned int *table = NULL;
unsigned int table_length = 0;

PROPAD_GetPropertyData(0x0101004D, &table, &length);
if(length != SENSOR_FULL_WIDTH*4)
{
    return;
}

// table should now have the RAM address you tried to find manually
table[0] = value; // patch table entry 0


advantage of above code:
 - you are doing it correct (as most likely SPT tool does)
 - doesnt matter when RAM addresses change (they are not guaranteed to stay the same, may even vary between boots!)
 - you do not have to find RAM addresses for all models, just using the property function for that

disadvantage:
 - the PROPAD_ functions are commented out for safety reasons as it is not good to mess with property data in RAM. which is exactly what you are doing anyway. so you went down that rabbit hole already ;)
 - i didnt test this code

advantage/disadvantage:
 - need to map property ID <-> ISO which is a good thing to document!
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #27 on: December 17, 2018, 11:26:31 AM »
5D uses these dark offset table properties:

Code: [Select]
uint32_t dark_prop_ids[] = {
0x0101004D,
0x0101004E,
0x0101004F,
0x01010050,
0x01010051,
0x01010052,
0x01010053,
0x01010054,
0x01010055,
0x01010056,
0x01010057,
0x01010058,
0x01010059,
0x0101005A,
0x0101005B,
0x0101005C,
0x0101005D,
0x0101005E,
0x0101005F,
0x01010060,
0x01010061,
0x01010062,
0x0101007B,
0x0101007C }

in 5D3 code this setup is used to determine the property.
the raw iso value (0x40-0x99) is used as index to this table:

Code: [Select]
uint32_t dark_prop_ids_by_iso[89] = {
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004D,
0x101004E,
0x101004E,
0x101004F,
0x101004F,
0x101004F,
0x1010050,
0x1010050,
0x1010050,
0x1010051,
0x1010051,
0x1010052,
0x1010052,
0x1010052,
0x1010053,
0x1010053,
0x1010053,
0x1010054,
0x1010054,
0x1010055,
0x1010055,
0x1010055,
0x1010056,
0x1010056,
0x1010056,
0x1010057,
0x1010057,
0x1010058,
0x1010058,
0x1010058,
0x1010059,
0x1010059,
0x1010059,
0x101005A,
0x101005A,
0x101005B,
0x101005B,
0x101005B,
0x101005C,
0x101005C,
0x101005C,
0x101005D,
0x101005D,
0x101005E,
0x101005E,
0x101005E,
0x101005F,
0x101005F,
0x101005F,
0x1010060,
0x1010060,
0x1010061,
0x1010061,
0x1010061,
0x1010062,
0x1010062,
0x1010062,
0x101007B,
0x101007B,
0x101007C,
0x101007C,
0x101007C,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062,
0x1010062 }

7D uses only 73 entries for this table.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

dfort

  • Guest
Re: Sensor Factory Calibration
« Reply #28 on: December 17, 2018, 05:59:34 PM »
- the PROPAD_ functions are commented out for safety reasons as it is not good to mess with property data in RAM. which is exactly what you are doing anyway. so you went down that rabbit hole already ;)

Interesting--it is commented out on all platforms except the 100D:

Code: [Select]
/** Properties **/
NSTUB(0xFF129D54,  PROPAD_GetPropertyData)                  // check FF0CAAF0 later
NSTUB(0xFF128748, _prop_cleanup)
NSTUB(0xFF128100, _prop_request_change)
NSTUB(0xFF12867C,  prop_deliver)
NSTUB(0xFF127F10,  prop_register_slave)

Check back later!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #29 on: December 17, 2018, 06:11:11 PM »
I will not modify these properties. I'm using this with ADTG modifications. So if I started the camera without ML, the pictures will be worse than the factory calibration.
Maybe I did not clearly write what I mean by the publication of the module. I just wanted to create something that will present effects on other cameras. To see if it is useful.

We're in Reverse Engineering, so I'm trying to show how these registers work, RAM editing is more secure when I do not know what it does.

If someone can not find the address in RAM and does not understand what this code does, he should not use it at this stage.

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #30 on: December 17, 2018, 11:32:06 PM »
I will not modify these properties.

hehe not exactly.

you *already* edit the property RAM image.
exactly the same you get when calling the PROPAD function i wrote. it will return the property's RAM buffers you are guessing right now.

right now, you are already there:
-> writing a few bytes beyond end of buffer -> risk of bricked camera
-> triggering a write-back of the properties you modified -> risk of bricked camera


using PROPAD is just a cleaner way of getting to the RAM buffer, not by trial and error but by asking the camera.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #31 on: December 18, 2018, 02:20:03 PM »
I thought that your clone from Santa again wants to change the value in the ROM of my 500D.  :P

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #32 on: December 29, 2018, 01:37:51 AM »
500D properties :
Code: [Select]
VFPN correction (photo mode CR2 and FRSP)
0x0101004D - ISO 100
0x01010050 - ISO 200
0x01010053 - ISO 400
0x01010056 - ISO 800
0x01010059 - ISO 1600
0x0101005C - ISO 3200
0x0101005F - ISO 6400
0x01010062 - ISO 12800

HFPN correction
0x01010096 - ISO 100-12800 FRSP
0x010100A1 - ISO 100-12800 CR2

Attempt to read the RAM address and size using g3gg0's code :

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #33 on: December 29, 2018, 02:17:46 PM »
great!
thanks for helping reverse engineering those.

i wonder what would be the effort to generate a dark frame from the data in the properties.
dump data to SD card, build an image with HFPN and VFPN only applied and use mlv_dump subtract feature to remove that noise.
just like with the normal dark frame processing using VIDF frame, because mlv_dump doesn't support the DARK block yet.


if that works, it would eliminate (?) the FPN detection in mlv_dump.

of course that DARK mlv block (see there) would have to contain this image.
as long user doesn't switch ISO during recording, writing that block at the end is enough.

(could be integrated into mlv_meta, which isn't public yet)
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #34 on: December 30, 2018, 12:26:02 AM »
Canon photo mode function :
Code: [Select]
if (!raw_iso)
  assert("Iso != 0", "Param\\HivshdParam.c");
PROPAD_GetPropertyData(dword_FF447038[raw_iso - 64], (int)&v2, (int)&v3);
return v2;

Canon live view function :
Code: [Select]
if(raw_iso < 72)
  raw_ iso = 72;
if(raw_iso > 104)
  raw_iso = 104;
PROPAD_GetPropertyData((signed int)(raw_iso - 72) / 8 + 0x1050000, (int)&v2, (int)&v3);
Then it calculates the offset in the table (depends on the mode and position of the crop mode)

500D VFPN correction (live view)
Code: [Select]
0x1050000 - ISO 100
0x1050001 - ISO 200
0x1050002 - ISO 400
0x1050003 - ISO 800
0x1050004 - ISO 1600 - 12800



Live view on newer cameras works differently, but the address property seems to be the same.
5D3 ROM string "LiveView Gain Table Ver0.2" :
Code: [Select]
0x1050000
0x1050001
0x1050002
0x1050003
0x1050004
0x1050005
0x1050006
0x1050007
0x1050081
0x1050082
0x10500D1

BTW, we can find hotpixels table, also possible focus pixels.
For 500D this is EDMAC#8 [DEFM] engine.

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #35 on: December 30, 2018, 01:40:12 AM »
5D3 gives me those hints for defects, not sure if it is the track you are looking for.

Code: [Select]
    while ( v6 < 0x800 );
    PROPAD_GetPropertyData(0xE000001u, &dst, &length);
    memcpy(dst, (void *)data.pDestAddr, 0x2000);
    prop_request_change(0xE000001u, dst, length);
    msleep(100);
    DryosDebugMsg(0x93, 0x16, (const char *)"DefectsDetectionForLV");
    PROPAD_GetPropertyData(0xE000002u, &result, (int *)&dest);
    PROPAD_GetPropertyData(0xE000004u, &v17, (int *)&v13);
    PROPAD_GetPropertyData(0xE000003u, &v18, (int *)&v14);

here the properties, which are not quite helpful.
whats their content in your camera?

Code: [Select]
      <PropertySubBlock ValidFlag="0000FFFF" Id="00FF0000" TotalLength="00007074">
        <Properties>
          <Property Id="0E000001" BaseAddress="00EEDF40" Length="00002000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF00F0FFFF</Data>
          </Property>
          <Property Id="0E000002" BaseAddress="00EEFF48" Length="00002000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
          <Property Id="0E000003" BaseAddress="00EF1F50" Length="00001000">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
          <Property Id="0E000004" BaseAddress="00EF2F58" Length="00002048">
            <String>________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________</String>
            <Data>FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Data>
          </Property>
        </Properties>
      </PropertySubBlock>

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #36 on: December 30, 2018, 11:04:40 PM »
whats their content in your camera?
I do not remember, I just changed some values in RAM related to EDMAC#8 and I saw more defective pixsels (photo mode cr2).

I think that this code is more dangerous now.  :P
https://bitbucket.org/Gr3g01/ml-cmos-cal/commits/642112e37a254c4965280663694b87c6c45ed723?at=iso-research

For the safety of users who do not know what they are doing, the code downloaded from the repository will not be compiled.
Code: [Select]
//static int (*PROPAD_GetPropertyData) (unsigned int property, void* data, int *length) = 0xFF05A57C; // 500d.111 stubs.h

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #37 on: December 30, 2018, 11:11:13 PM »
recommendation:

make "PROPAD_GetPropertyData = NULL" global and assign the address in the firmware version check.
if the variable is NULL, just dont call the code.

the properties might be valid for all camera models
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #38 on: December 31, 2018, 12:03:12 AM »
whats the exact content of the table?

the 5D3 has a physical resolution or 5936x3952, so the table consists of pairs of two 16 bit words with 5936 entries.
in this pair, the fist value is always 510 or 512 (right y-axis), second one varies a lot (left y-axis)
the second one also has some wird gaps in it.

any idea what the second value is for?





here some excerpt



Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #39 on: December 31, 2018, 12:20:45 AM »
Using this module you can change the value of B and click "Read column sensor value" and look at diff.
500D also affects column_black_level - https://www.magiclantern.fm/forum/index.php?topic=23086.msg209326#msg209326

Code: [Select]
500D
[EDMAC#9] Starting transfer from 0x30A10C to <15>, 4832x4, flags=0x10000

Here, you can also see some 2 parts :
Code: [Select]
5D3
[EDMAC#24] Starting transfer from 0x174E100 to <15>, 2968x4, flags=0x40020000
[EDMAC#24] Starting transfer from 0x174B2A0 to <15>, 2968x4, flags=0x40020000

Maybe someone forgot about it and treated it again like optical black.

g3gg0

  • Developer
  • Hero Member
  • *****
  • Posts: 3190
Re: Sensor Factory Calibration
« Reply #40 on: December 31, 2018, 12:56:09 AM »
hmm maybe we have offset/scaling pairs?
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: paypal@g3gg0.de
ONLY donate for things we have done, not for things you expect!

Greg

  • Contributor
  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #41 on: January 02, 2019, 08:52:59 PM »
ISO 100-1600 (analog) changing the first value (A) by 1 affects column_black_level by 1.48
ISO 3200-12800 (digital) changing the first value (A) by 1 affects column_black_level by 2.96
Each camera may react differently to changing these values depending on the SHAD configuration.

update :
- stdev thershold,
- validation,
- save to file,

https://bitbucket.org/Gr3g01/ml-cmos-cal/src/iso-research/modules/cmos_cal/



To run on another camera need :
Code: [Select]
if (is_camera("500D", "1.1.1"))
{
    PROPAD_GetPropertyData = 0xFF05A57C;
    SENSOR_FULL_WIDTH = 4832;
}
- calibration ratio (1.48) may be different than 500D

timbytheriver

  • Senior
  • ****
  • Posts: 476
Re: Sensor Factory Calibration
« Reply #42 on: January 05, 2020, 11:48:12 AM »
Very interesting developments. Thanks to the brains behind it! :D

I notice that commit 4952e34 is cmos_cal.c - compatibility with other cameras

In layman's terms does this mean it is now possible to run the cmos_cal.mo on say 5D3, and if one can discover the correct RAM addresses add this data and complete a sensor calibration?

If one knows what one is doing – of course… ;)
5D3 1.1.3
5D2 2.1.2

70MM13

  • Hero Member
  • *****
  • Posts: 607
Re: Sensor Factory Calibration
« Reply #43 on: July 29, 2020, 12:40:55 PM »
this forgotten thread needs some love...

perhaps some fresh eyes can look at it!