#!/usr/local/cpython-3.4/bin/python

'''Seek to read ranges from an  uncompressed disk image - fast, but takes a lot more disk space'''

import os
import sys

left = 32768
right = 32768
width = left + right + 1

offsets = [
    15199397058,
    15199397788,
    15199401197,
    15199401289,
    15199401918,
    15199402669,
    15199403860,
    15199417538,
    15199418268,
    15199421677,
    15199421769,
    15199422398,
    15199423149,
    15199424340,
    103174333023,
    103174333666,
    103174336451,
    103174336531,
    103174337055,
    103174337650,
    103174338595,
    111923278431,
    111923279074,
    111923281859,
    111923281939,
    111923282463,
    111923283058,
    111923284003,
    115547013727,
    115547014370,
    115547017155,
    115547017235,
    115547017759,
    115547018354,
    115547019299,
    120517034591,
    120517035234,
    120517038019,
    120517034591,
    120517035234,
    120517038019,
    120517038099,
    120517038623,
    120517039218,
    120517040163,
    152317538911,
    152317539554,
    152317542339,
    152317542419,
    152317542943,
    152317543538,
    152317544483,
    169099809375,
    169099810018,
    169099812803,
    169099812883,
    169099813407,
    169099814002,
    169099814947,
    195790210390,
    195790211120,
    195790214583,
    195790214675,
    195790215304,
    195790216055,
    195790217246,
    195790222678,
    195790223408,
    195790226871,
    195790226963,
    195790227592,
    195790228343,
    195790229534,
    195790244098,
    195790252092,
    195790252212,
    195790271997,
    195790272822,
    195790276284,
    195790276376,
    195790276999,
    195790277750,
    195790278935,
    195790288506,
    195790289331,
    195790292793,
    195790292885,
    195790293508,
    195790294259,
    195790295444,
    195790300883,
    195790301708,
    195790305170,
    195790305262,
    195790305885,
    195791054342,
    195791055106,
    195791062692,
    195791062812,
    195791455955,
    195791456780,
    195791460211,
    195791460303,
    195791484627,
    195791485452,
    195791488883,
    195791488975,
    197705761986,
    197705762716,
    197705766125,
    197705766217,
    197705766846,
    197705767597,
    197705768788,
    197705786562,
    197705787292,
    197705790701,
    197705790793,
    197705791422,
    197705792173,
    197705793364,
    197734500471,
    197734501140,
    197734506121,
    197734507606,
    197734508353,
    197734508812,
    197734508932,
    197734511810,
    197734512540,
    197734515949,
    197734516041,
    197734516670,
    197734517421,
    197734518612,
    197734529238,
    197734529907,
    197734532295,
    197734533025,
    197734536434,
    197734536526,
    197734537155,
    197734537906,
    197734539097,
    197734544584,
    197734545314,
    197734548723,
    197734548815,
    197734549444,
    197734550195,
    197734551386,
    197734560972,
    197734561702,
    197734565111,
    197734565203,
    197734565832,
    197734566583,
    197734567774,
    197734573401,
    197734574131,
    197734577540,
    197734577632,
    197734578261,
    197734579012,
    197734580203,
    197734585689,
    197734586419,
    197734589862,
    197734589954,
    197734590583,
    197734591334,
    197734592525,
    197734597977,
    197734598707,
    197734602152,
    197734602244,
    197734602873,
    197734603624,
    197734604815,
    197734610265,
    197734610995,
    197734614440,
    197734614532,
    197734615161,
    197734615912,
    197734617103,
    197734626649,
    197734627379,
    197734630842,
    197734630934,
    197734631563,
    197734632314,
    197734633505,
    197734638937,
    197734639667,
    197734643130,
    197734643222,
    197734643851,
    197734644602,
    197734645793,
    197734655321,
    197734656051,
    197734659514,
    197734659606,
    197734660235,
    197734660986,
    197734662177,
    197734667609,
    197734668339,
    197734671802,
    197734671894,
    197734672523,
    197734673274,
    197734674465,
    197734688089,
    197734688819,
    197734692282,
    197734692374,
    197734693003,
    197734693754,
    197734694945,
    197734700377,
    197734701107,
    197734704570,
    197734704662,
    197734705291,
    197734706042,
    197734707233,
    197734716761,
    197734717491,
    197734720954,
    197734721046,
    197734721675,
    197734722426,
    197734723617,
    197734729049,
    197734729779,
    197734733242,
    197734733334,
    197734733963,
    197734734714,
    197734735905,
    197734741334,
    197734742064,
    197734745527,
    197734745619,
    197734746248,
    197734746999,
    197734748190,
    197734753622,
    197734754352,
    197734757815,
    197734757907,
    197734758536,
    197734759287,
    197734760478,
    197734774102,
    197734774832,
    197734778295,
    197734778387,
    197734779016,
    197734779767,
    197734780958,
    197734786390,
    197734787120,
    197734790583,
    197734790675,
    197734791304,
    197734792055,
    197734793246,
    197734798678,
    197734799408,
    197734802871,
    197734802963,
    197734803592,
    197734804343,
    197734805534,
    197734815062,
    197734815792,
    197734819255,
    197734819347,
    197734819976,
    197734820727,
    197734821918,
    197734827350,
    197734828080,
    197734831543,
    197734831635,
    197734832264,
    197734833015,
    197734834206,
    197734843734,
    197734844464,
    197734847927,
    197734848019,
    197734848648,
    197734849399,
    197734850590,
    197734856022,
    197734856752,
    197734860215,
    197734860307,
    197734860936,
    197734861687,
    197734862878,
    197734868310,
    197734869040,
    197734872503,
    197734872595,
    197734873224,
    197734873975,
    197734875166,
    197734880598,
    197734881328,
    197734884791,
    197734884883,
    197734885512,
    197734886263,
    197734887454,
    197734896982,
    197734897712,
    197734901175,
    197734901267,
    197734901896,
    197734902647,
    197734903838,
    197734909270,
    197734910000,
    197734913463,
    197734913555,
    197734914184,
    197734914935,
    197734916126,
    197734921558,
    197734922288,
    197734925751,
    197734925843,
    197734926472,
    197734927223,
    197734928414,
    197734937942,
    197734938672,
    197734942135,
    197734942227,
    197734942856,
    197734943607,
    197734944798,
    197734954326,
    197734955056,
    197734958519,
    197734958611,
    197734959240,
    197734959991,
    197734958519,
    197734958611,
    197734959240,
    197734959991,
    197734961182,
    197734966614,
    197734967344,
    197734970807,
    197734970899,
    197734971528,
    197734972279,
    197734973470,
    197734978902,
    197734979632,
    197734983095,
    197734983187,
    197734983816,
    197734984567,
    197734985758,
    197734991190,
    197734991920,
    197734995383,
    197734995475,
    197734996104,
    197734996855,
    197734998046,
    197735007574,
    197735008304,
    197735011767,
    197735011859,
    197735012488,
    197735013239,
    197735014430,
    197735036246,
    197735036976,
    197735040439,
    197735040531,
    197735041160,
    197735041911,
    197735043102,
    197735052630,
    197735053360,
    197735056823,
    197735056915,
    197735057544,
    197735058295,
    197735059486,
    197735064918,
    197735065648,
    197735069111,
    197735069203,
    197735069832,
    197735070583,
    197735071774,
    197735081302,
    197735082032,
    197735085495,
    197735085587,
    197735086216,
    197735086967,
    197735088158,
    197735093590,
    197735094320,
    197735097783,
    197735097875,
    197735098504,
    197735099255,
    197735100446,
    197735105878,
    197735106608,
    197735110071,
    197735110163,
    197735110792,
    197735111543,
    197735112734,
    197735118166,
    197735118896,
    197735122359,
    197735122451,
    197735123080,
    197735123831,
    197735125022,
    197735130454,
    197735131184,
    197735134647,
    197735134739,
    197735135368,
    197735136119,
    197735137310,
    197735142742,
    197735143472,
    197735146935,
    197735147027,
    197735147656,
    197735148407,
    197735149598,
    197735159126,
    197735159856,
    197735163319,
    197735163411,
    197735164040,
    197735164791,
    197735165982,
    197735171414,
    197735172144,
    197735175607,
    197735175699,
    197735176328,
    197735177079,
    197735178270,
    197735187798,
    197735188528,
    197735191991,
    197735192083,
    197735192712,
    197735193463,
    197735194654,
    197735200086,
    197735200816,
    197735204279,
    197735204371,
    197735205000,
    197735205751,
    197735206942,
    197735212374,
    197735213104,
    197735216567,
    197735216659,
    197735217288,
    197735218039,
    197735219230,
    197735224662,
    197735225392,
    197735228855,
    197735228947,
    197735229576,
    197735230327,
    197735231518,
    197735241046,
    197735241776,
    197735245239,
    197735245331,
    197735245960,
    197735246711,
    197735247896,
    197735257430,
    197735258160,
    197735261623,
    197735261715,
    197735262338,
    197735263089,
    197735264274,
    197735272385,
    197735273814,
    197735274565,
    197735278028,
    197735278120,
    197735278743,
    197735279494,
    197735280679,
    197735286102,
    197735286863,
    197735290326,
    197735290418,
    197735291041,
    197735291792,
    197735292977,
    197735298390,
    197735299069,
    197735302532,
    197735302624,
    197735303247,
    197735303998,
    197735305183,
    197735310678,
    197735311357,
    197735314819,
    197735314911,
    197735315534,
    197735316285,
    197735317470,
    197735322966,
    197735323645,
    197735327107,
    197735327199,
    197735327822,
    197735328573,
    197735329758,
    197735339350,
    197735340175,
    197735343637,
    197735343729,
    197735344352,
    197735345103,
    197735346288,
    197735355901,
    197735356726,
    197735360188,
    197735360280,
    197735360903,
    197735361654,
    197735362839,
    197735372322,
    197735373147,
    197735376609,
    197735376701,
    197735377324,
    197735378075,
    197735379260,
    197735384610,
    197735385435,
    197735388897,
    197735388989,
    197735389612,
    197735390363,
    197735391548,
    197735396888,
    197735397713,
    197735401175,
    197735401267,
    197735401890,
    197735402641,
    197735403826,
    197735409176,
    197735410001,
    197735413463,
    197735413555,
    197735414178,
    197735414929,
    197735416114,
    197735421464,
    197735422289,
    197735425751,
    197735425843,
    197735426466,
    197735427217,
    197735428402,
    197735433752,
    197735434577,
    197735438039,
    197735438131,
    197735438754,
    197735439505,
    197735440690,
    197735450136,
    197735450961,
    197735454423,
    197735454515,
    197735455138,
    197735455889,
    197735457074,
    197735466520,
    197735467345,
    197735470807,
    197735470899,
    197735471522,
    197735472273,
    197735473458,
    197735478827,
    197735479652,
    197735483114,
    197735483206,
    197735483829,
    197735484580,
    197735483114,
    197735483206,
    197735483829,
    197735484580,
    197735485765,
    197735491115,
    197735491940,
    197735495402,
    197735495494,
    197735496117,
    197735496868,
    197735498053,
    197735507541,
    197735508366,
    197735511828,
    197735511920,
    197735512543,
    197735513294,
    197735514479,
    197735519894,
    197735520719,
    197735524181,
    197735524273,
    197735524896,
    197735525647,
    197735526832,
    197735532182,
    197735533007,
    197735536469,
    197735536561,
    197735537184,
    197735537935,
    197735539120,
    197735548624,
    197735549449,
    197735552911,
    197735553003,
    197735553626,
    197735554377,
    197735555562,
    197735564922,
    197735565747,
    197735569209,
    197735569301,
    197735569924,
    197735570675,
    197735571860,
    197735577210,
    197735578035,
    197735581497,
    197735581589,
    197735582212,
    197735582963,
    197735584148,
    197735589498,
    197735590323,
    197735593785,
    197735593877,
    197735594500,
    197735595251,
    197735596436,
    197735601786,
    197735602611,
    197735606073,
    197735606165,
    197735606788,
    197735607539,
    197735608724,
    197735614074,
    197735614899,
    197735618361,
    197735618453,
    197735619076,
    197735619827,
    197735621012,
    197735630547,
    197735631372,
    197735634834,
    197735634926,
    197735635549,
    197735636300,
    197735637485,
    197735646931,
    197735647756,
    197735651218,
    197735651310,
    197735651933,
    197735652684,
    197735653869,
    197735659219,
    197735660044,
    197735663506,
    197735663598,
    197735664221,
    197735664972,
    197735666157,
    197735675603,
    197735676428,
    197735679890,
    197735679982,
    197735680605,
    197735681356,
    197735696083,
    197735696908,
    197735700370,
    197735700462,
    197735712467,
    197735713292,
    197735716754,
    197735716846,
    197735728851,
    197735729676,
    197735733142,
    197735733234,
    197735741139,
    197735741964,
    197735745383,
    197735745475,
    197735745383,
    197735745475,
    197735753427,
    197735754252,
    197735757671,
    197735757763,
    197735769811,
    197735770636,
    197735774069,
    197735774161,
    197735782099,
    197735782924,
    197735786343,
    197735786435,
    197735794387,
    197735795212,
    197735798631,
    197735798723,
    197735810771,
    197735811596,
    197735815016,
    197735815108,
    197735823059,
    197735823884,
    197735827304,
    197735827396,
    197738919635,
    197738920460,
    197738923880,
    197738923972,
    197744961030,
    197744961794,
    197744969369,
    197744969489,
    197744973523,
    197744974348,
    197744977779,
    197744977871,
    197744985811,
    197744986636,
    197744990067,
    197744990159,
    197745051347,
    197745052172,
    197745055603,
    197745055695,
    197745063635,
    197745064460,
    197745067891,
    197745067983,
    197748770515,
    197748771340,
    197748774760,
    197748774852,
    197748782803,
    197748783628,
    197748787048,
    197748787140,
    197750355462,
    197750356226,
    197750363812,
    197750363932,
    197750367955,
    197750368780,
    197750372200,
    197750372292,
    197750380243,
    197750381068,
    197750384488,
    197750384580,
    197751035398,
    197751036162,
    197751043731,
    197751043851,
    197751047891,
    197751048716,
    197751052148,
    197751052240,
    197751060179,
    197751061004,
    197751064436,
    197751064528,
    197751143883,
    197751144003,
    197751146195,
    197751147020,
    197751150451,
    197751150543,
    197751158483,
    197751159308,
    197751162739,
    197751162831,
    197751494150,
    197751494914,
    197751502489,
    197751502609,
    197751506643,
    197751507468,
    197751510899,
    197751510991,
    197751764486,
    197751765250,
    206808343135,
    206808343778,
    206808346563,
    206808346643,
    206808347167,
    206808347762,
    206808348707,
    207741997663,
    207741998306,
    207742234563,
    207742234643,
    207742235167,
    207742235762,
    207742236707,
    ]

num_offsets = len(offsets)

file_handle = os.open('/movie/sda6.dd', os.O_RDONLY)
for offsetno, offset in enumerate(offsets):
    sys.stdout.write('%f%% offset %d\n' % (offsetno * 100 / num_offsets, offset))
    os.lseek(file_handle, offset - left, os.SEEK_SET)
    portion = os.read(file_handle, width)
    range_file_handle = os.open('range-%d' % offset, os.O_WRONLY | os.O_CREAT)
    os.write(range_file_handle, portion)
    os.close(range_file_handle)
os.close(file_handle)