From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HBvmz-000664-Gy for qemu-devel@nongnu.org; Tue, 30 Jan 2007 11:24:57 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HBvmw-00065h-K9 for qemu-devel@nongnu.org; Tue, 30 Jan 2007 11:24:57 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HBvmw-00065c-Gq for qemu-devel@nongnu.org; Tue, 30 Jan 2007 11:24:54 -0500 Received: from md0.mail.umd.edu ([128.8.31.162]) by monty-python.gnu.org with esmtp (Exim 4.52) id 1HBvmw-0002HQ-1J for qemu-devel@nongnu.org; Tue, 30 Jan 2007 11:24:54 -0500 From: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-----86e936c262e57668e445330b4f0eb2e5" Message-Id: <20070130112442.BVE66081@po0.mail.umd.edu> Date: Tue, 30 Jan 2007 11:24:42 -0500 (EST) Subject: [Qemu-devel] block composite driver and partition driver Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org -------86e936c262e57668e445330b4f0eb2e5 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit I've finally gotten around to working on my multipart driver again. block-composite.c is the basic low level composite image format, which lets you use a bunch of disk images as a single image. block-ram.c is a ram block device, with the size of the "image" given in the number of disk sectors. block-partition.c is a partition block device that uses the composite driver to combine partitions together along with a fake mbr that it generates and stores inside of a ram block device. (It doesn't work yet - for some reason the number of cylinders being reported to the guest OS is 0.) -- Infinite complexity begets infinite beauty. Infinite precision begets infinite perfection. -------86e936c262e57668e445330b4f0eb2e5 Content-Type: text/plain; name="block-composite.c" Content-Disposition: inline; filename="block-composite.c" Content-Transfer-Encoding: base64 LyoKICogQmxvY2sgZHJpdmVyIHRvIHVzZSBjb21wb3NpdGUgaW1hZ2VzCiAqIAogKiBDb3B5 cmlnaHQgKGMpIDIwMDcgSmltIEJyb3duCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK ICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCgojaW5jbHVkZSAiYmxvY2tfY29tcG9zaXRlLmgi CgpzdGF0aWMgaW50IGNvbXBvc2l0ZV9wcm9iZShjb25zdCB1aW50OF90ICpidWYsIGludCBi dWZfc2l6ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCnsKICAgIGlmIChzdHJzdGFydChmaWxl bmFtZSwgImNvbXBvc2l0ZToiLCBOVUxMKSkKICAgICAgICByZXR1cm4gMTAwOwogICAgcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbnQgY29tcG9zaXRlX29wZW4oQmxvY2tEcml2ZXJTdGF0ZSAq YnMsIGNvbnN0IGNoYXIgKm5maWxlbmFtZSwgaW50IGZsYWdzKQp7CiAgICBCRFJWUGFydFN0 YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIEJsb2NrRHJpdmVyU3RhdGUgKiBzbGF2ZV9iczsK ICAgIGludCBwcmV2aW91c19zdGFydCwgZmlsZV9jb3VudCA9IDEsIGk7CiAgICBjb25zdCBj aGFyICogemZpbGVuYW1lID0gJihuZmlsZW5hbWVbMTBdKSwgKiBucHRyID0gemZpbGVuYW1l OwogICAgY2hhciAqIGZpbGVuYW1lOwoKICAgIGJzLT5yZWFkX29ubHkgPSAwOwogICAgcy0+ c2xhdmVfY291bnQgPSAwOwogICAgcHJldmlvdXNfc3RhcnQgPSAwOwoKICAgIHdoaWxlIChu cHRyICE9IE5VTEwpCiAgICB7CiAgICAJbnB0ciA9IHN0cmNocihucHRyLCAnLCcpKzE7CiAg ICAJaWYgKChucHRyLTEpICE9IE5VTEwpCiAgICAJewoJCWZpbGVfY291bnQrKzsKCX0KCWVs c2UKCXsKCQlucHRyID0gTlVMTDsKCX0KICAgIH0KICAgIHMtPnNsYXZlX2JzID0gcWVtdV9t YWxsb2N6KHNpemVvZihTbGF2ZURyaXZlclN0YXRlKSpmaWxlX2NvdW50KTsKICAgIGlmIChz LT5zbGF2ZV9icyA9PSBOVUxMKSByZXR1cm4gLTE7CiAgICBucHRyID0gemZpbGVuYW1lOwoK ICAgIHdoaWxlIChucHRyICE9IE5VTEwpCiAgICB7CiAgICAJbnB0ciA9IHN0cmNocih6Zmls ZW5hbWUsICcsJykrMTsKICAgIAlpZiAoKG5wdHItMSkgIT0gTlVMTCkKICAgIAl7CiAgICAJ CWZpbGVuYW1lID0gc3RybmR1cCh6ZmlsZW5hbWUsIChzaXplX3QpKChucHRyLTEpLXpmaWxl bmFtZSkpOwogICAgCQl6ZmlsZW5hbWUgPSBucHRyOwogICAgCX0KICAgIAllbHNlCiAgICAJ ewogICAgCQlmaWxlbmFtZSA9IHN0cmR1cCh6ZmlsZW5hbWUpOwoJCW5wdHIgPSBOVUxMOwog ICAgCX0KCiAgICAJc2xhdmVfYnMgPSBxZW11X21hbGxvY3ooc2l6ZW9mKEJsb2NrRHJpdmVy U3RhdGUpKTsKICAgIAlpZiAoKHNsYXZlX2JzID09IE5VTEwpIHx8IChiZHJ2X29wZW4yKHNs YXZlX2JzLCBmaWxlbmFtZSwgMCwgTlVMTCkgIT0gMCkpCiAgICAJewoJCWZvciAoaSA9IDA7 IGkgPCBzLT5zbGF2ZV9jb3VudDsgaSsrKQoJCXsKCQkJYmRydl9jbG9zZShzLT5zbGF2ZV9i c1tpXS5icyk7CgkJCXFlbXVfZnJlZShzLT5zbGF2ZV9ic1tpXS5icyk7CgkJfQoJCXFlbXVf ZnJlZShzLT5zbGF2ZV9icyk7CiAgICAJCXJldHVybiAtMTsKICAgIAl9CglmcmVlKGZpbGVu YW1lKTsKCiAgICAJcy0+c2xhdmVfYnNbcy0+c2xhdmVfY291bnRdLmJzID0gc2xhdmVfYnM7 CiAgICAJcy0+c2xhdmVfYnNbcy0+c2xhdmVfY291bnRdLnN0YXJ0X3NlY3RvciA9IHByZXZp b3VzX3N0YXJ0OwoJcHJldmlvdXNfc3RhcnQgPSBwcmV2aW91c19zdGFydCArIHMtPnNsYXZl X2JzW3MtPnNsYXZlX2NvdW50XS5icy0+dG90YWxfc2VjdG9yczsKICAgIAlzLT5zbGF2ZV9j b3VudCsrOwogICAgCWlmIChzbGF2ZV9icy0+cmVhZF9vbmx5KQoJewogICAgCQlicy0+cmVh ZF9vbmx5ID0gMTsKICAgIAl9CiAgICB9CgogICAgYnMtPnRvdGFsX3NlY3RvcnMgPSBwcmV2 aW91c19zdGFydDsKCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludCBjb21wb3NpdGVfcmVh ZChCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBzZWN0b3JfbnVtLCAKICAgICAgICAg ICAgICAgICAgICB1aW50OF90ICpidWYsIGludCBuYl9zZWN0b3JzKQp7CiAgICBCRFJWUGFy dFN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIGludCByZXQsc3N0YXJ0LHNlbmQsaTsKCiAg ICBzc3RhcnQgPSAtMTsKICAgIGZvciAoaSA9IDA7IGkgPCBzLT5zbGF2ZV9jb3VudDsgaSsr KQogICAgewoJICAgIGlmICgocy0+c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yICsKCQkJICAg IHMtPnNsYXZlX2JzW2ldLmJzLT50b3RhbF9zZWN0b3JzID4gc2VjdG9yX251bSkKCQkJICAg ICYmIChzLT5zbGF2ZV9ic1tpXS5zdGFydF9zZWN0b3IgPD0gc2VjdG9yX251bSkpCgkgICAg ewoJCSAgICBzc3RhcnQgPSBpOwoJCSAgICBicmVhazsKCSAgICB9CiAgICB9CiAgICBpZiAo c3N0YXJ0ID09IC0xKSByZXR1cm4gLTE7CgogICAgc2VuZCA9IC0xOwogICAgZm9yIChpID0g MDsgaSA8IHMtPnNsYXZlX2NvdW50OyBpKyspCiAgICB7CgkgICAgaWYoKHMtPnNsYXZlX2Jz W2ldLnN0YXJ0X3NlY3RvciArIHMtPnNsYXZlX2JzW2ldLmJzLT50b3RhbF9zZWN0b3JzCgkJ CSAgICA+IHNlY3Rvcl9udW0rbmJfc2VjdG9ycykKCQkJICAgICYmIChzLT5zbGF2ZV9ic1tp XS5zdGFydF9zZWN0b3IKCQkJICAgIDw9IHNlY3Rvcl9udW0rbmJfc2VjdG9ycykpCgkgICAg ewoJCSAgICBzZW5kID0gaTsKCQkgICAgYnJlYWs7CgkgICAgfQogICAgfQogICAgaWYgKHNl bmQgPT0gLTEpIHJldHVybiAtMTsKCiAgICBpZiAoc3N0YXJ0ID4gc2VuZCkgcmV0dXJuIC0y OyAvL3d0Zj8/PwoKICAgIGludCBhID0gMCwgYiA9IDAsIGJ1ZnBvcyA9IDA7CiAgICBpID0g c3N0YXJ0OwogICAgd2hpbGUgKGkgPCBzZW5kKQogICAgewoJICAgIGEgPSBzLT5zbGF2ZV9i c1tpXS5icy0+dG90YWxfc2VjdG9yczsKCSAgICByZXQgPSBiZHJ2X3JlYWQocy0+c2xhdmVf YnNbaV0uYnMsIHNlY3Rvcl9udW0rYiwgJihidWZbYnVmcG9zXSksIGEpOwoJICAgIGlmIChy ZXQgIT0gMCkgcmV0dXJuIHJldDsKCSAgICBiID0gYithOwoJICAgIGJ1ZnBvcyA9IGJ1ZnBv cyArIChhICogNTEyKTsKCSAgICBpKys7CiAgICB9CiAgICByZXR1cm4gYmRydl9yZWFkKHMt PnNsYXZlX2JzW3NlbmRdLmJzLCBzZWN0b3JfbnVtK2IsICYoYnVmW2J1ZnBvc10pLCBuYl9z ZWN0b3JzLWIpOwp9CgpzdGF0aWMgaW50IGNvbXBvc2l0ZV93cml0ZShCbG9ja0RyaXZlclN0 YXRlICpicywgaW50NjRfdCBzZWN0b3JfbnVtLCAKICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycykKewogICAgQkRSVlBhcnRTdGF0ZSAq cyA9IGJzLT5vcGFxdWU7CiAgICBpbnQgcmV0LHNzdGFydCxzZW5kLGk7CgogICAgc3N0YXJ0 ID0gLTE7CiAgICBmb3IgKGkgPSAwOyBpIDwgcy0+c2xhdmVfY291bnQ7IGkrKykKICAgIHsK CSAgICBpZiAoKHMtPnNsYXZlX2JzW2ldLnN0YXJ0X3NlY3RvciArCgkJCSAgICBzLT5zbGF2 ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9ycyA+IHNlY3Rvcl9udW0pCgkJCSAgICAmJiAocy0+ c2xhdmVfYnNbaV0uc3RhcnRfc2VjdG9yIDw9IHNlY3Rvcl9udW0pKQoJICAgIHsKCQkgICAg c3N0YXJ0ID0gaTsKCQkgICAgYnJlYWs7CgkgICAgfQogICAgfQogICAgaWYgKHNzdGFydCA9 PSAtMSkgcmV0dXJuIC0xOwoKICAgIHNlbmQgPSAtMTsKICAgIGZvciAoaSA9IDA7IGkgPCBz LT5zbGF2ZV9jb3VudDsgaSsrKQogICAgewoJICAgIGlmKChzLT5zbGF2ZV9ic1tpXS5zdGFy dF9zZWN0b3IgKyBzLT5zbGF2ZV9ic1tpXS5icy0+dG90YWxfc2VjdG9ycwoJCQkgICAgPiBz ZWN0b3JfbnVtK25iX3NlY3RvcnMpCgkJCSAgICAmJiAocy0+c2xhdmVfYnNbaV0uc3RhcnRf c2VjdG9yCgkJCSAgICA8PSBzZWN0b3JfbnVtK25iX3NlY3RvcnMpKQoJICAgIHsKCQkgICAg c2VuZCA9IGk7CgkJICAgIGJyZWFrOwoJICAgIH0KICAgIH0KICAgIGlmIChzZW5kID09IC0x KSByZXR1cm4gLTE7CgogICAgaWYgKHNzdGFydCA+IHNlbmQpIHJldHVybiAtMjsgLy93dGY/ Pz8KCiAgICBpbnQgYSA9IDAsIGIgPSAwLCBidWZwb3MgPSAwOwogICAgaSA9IHNzdGFydDsK ICAgIHdoaWxlIChpIDwgc2VuZCkKICAgIHsKCSAgICBhID0gcy0+c2xhdmVfYnNbaV0uYnMt PnRvdGFsX3NlY3RvcnM7CgkgICAgcmV0ID0gYmRydl93cml0ZShzLT5zbGF2ZV9ic1tpXS5i cywgc2VjdG9yX251bStiLCAmKGJ1ZltidWZwb3NdKSwgYSk7CgkgICAgaWYgKHJldCAhPSAw KSByZXR1cm4gcmV0OwoJICAgIGIgPSBiK2E7CgkgICAgYnVmcG9zID0gYnVmcG9zICsgKGEg KiA1MTIpOwoJICAgIGkrKzsKICAgIH0KICAgIGk9IGJkcnZfd3JpdGUocy0+c2xhdmVfYnNb c2VuZF0uYnMsIHNlY3Rvcl9udW0rYiwgJihidWZbYnVmcG9zXSksIG5iX3NlY3RvcnMtYik7 CiAgICByZXR1cm4gaTsKfQoKc3RhdGljIHZvaWQgY29tcG9zaXRlX2Nsb3NlKEJsb2NrRHJp dmVyU3RhdGUgKmJzKQp7CiAgICBCRFJWUGFydFN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAg IGludCBpOwogICAgZm9yIChpID0gMDsgaSA8IHMtPnNsYXZlX2NvdW50OyBpKyspCiAgICB7 CiAgICAgICAgYmRydl9jbG9zZShzLT5zbGF2ZV9ic1tpXS5icyk7CiAgICAgICAgcWVtdV9m cmVlKHMtPnNsYXZlX2JzW2ldLmJzKTsKICAgIH0KICAgIHFlbXVfZnJlZShzLT5zbGF2ZV9i cyk7CiAgICBzLT5zbGF2ZV9icyA9IE5VTEw7Cn0KCnN0YXRpYyBpbnQgY29tcG9zaXRlX2Ny ZWF0ZShjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50NjRfdCB0b3RhbF9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFja2luZ19maWxlLCBpbnQgZmxhZ3MpCnsK ICAgIC8qIHdoYXQgd291bGQgYmUgdGhlIHBvaW50Li4uIGp1c3QgbWFrZSBhIHJhdyBvciBx Y293ICovCiAgICByZXR1cm4gLUVOT1RTVVA7Cn0KCkJsb2NrRHJpdmVyIGJkcnZfY29tcG9z aXRlID0gewogICAgImNvbXBvc2l0ZSIsCiAgICBzaXplb2YoQkRSVlBhcnRTdGF0ZSksCiAg ICBjb21wb3NpdGVfcHJvYmUsCiAgICBjb21wb3NpdGVfb3BlbiwKICAgIGNvbXBvc2l0ZV9y ZWFkLAogICAgY29tcG9zaXRlX3dyaXRlLAogICAgY29tcG9zaXRlX2Nsb3NlLAogICAgY29t cG9zaXRlX2NyZWF0ZSwKICAgIC5wcm90b2NvbF9uYW1lID0gImNvbXBvc2l0ZSIsCn07Cgo= -------86e936c262e57668e445330b4f0eb2e5 Content-Type: text/plain; name="block-ram.c" Content-Disposition: inline; filename="block-ram.c" Content-Transfer-Encoding: base64 LyoKICogQmxvY2sgZHJpdmVyIGluIFJBTQogKiAKICogQ29weXJpZ2h0IChjKSAyMDA3IEpp bSBCb293bgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdB UkUuCiAqLwojaW5jbHVkZSAidmwuaCIKI2luY2x1ZGUgImJsb2NrX2ludC5oIgojaW5jbHVk ZSA8YXNzZXJ0Lmg+CgojaWZuZGVmIFFFTVVfVE9PTAojaW5jbHVkZSAiZXhlYy1hbGwuaCIK I2VuZGlmCgp0eXBlZGVmIHN0cnVjdCBCRFJWUmFtU3RhdGUgewogICAgY2hhciAqIHJhbV9k YXRhOwp9IEJEUlZSYW1TdGF0ZTsKCnN0YXRpYyBpbnQgcmFtX3Byb2JlKGNvbnN0IHVpbnQ4 X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKewogICAgaWYg KHN0cnN0YXJ0KGZpbGVuYW1lLCAicmFtOiIsIE5VTEwpKQoJICAgIHJldHVybiAxMDA7CiAg ICByZXR1cm4gMDsKfQpzdGF0aWMgaW50IHJhbV9vcGVuKEJsb2NrRHJpdmVyU3RhdGUgKmJz LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKQp7CiAgICBCRFJWUmFtU3RhdGUg KnMgPSBicy0+b3BhcXVlOwoKICAgIGlmICghc3Ryc3RhcnQoZmlsZW5hbWUsICJyYW06Iiwg TlVMTCkpCgkgICAgcmV0dXJuIC0xOwoKICAgIGludCBzZWN0bnVtID0gYXRvaShmaWxlbmFt ZSs0KTsKICAgIGlmIChzZWN0bnVtID09IDApIHJldHVybiAtMjsKCiAgICBzLT5yYW1fZGF0 YSA9IHFlbXVfbWFsbG9jeihzZWN0bnVtKjUxMik7CiAgICBpZiAocy0+cmFtX2RhdGEgPT0g TlVMTCkgcmV0dXJuIC0yOwogICAgbWVtc2V0KHMtPnJhbV9kYXRhLCAnICcsIHNlY3RudW0q NTEyKTsKCiAgICBicy0+dG90YWxfc2VjdG9ycyA9IHNlY3RudW07CiAgICByZXR1cm4gMDsK fQoKc3RhdGljIGludCByYW1fcmVhZChCbG9ja0RyaXZlclN0YXRlICpicywgaW50NjRfdCBz ZWN0b3JfbnVtLCAKICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCBpbnQgbmJf c2VjdG9ycykKewogICAgQkRSVlJhbVN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIGlmIChz ZWN0b3JfbnVtK25iX3NlY3RvcnMgPj0gYnMtPnRvdGFsX3NlY3RvcnMpCgkgICAgCXJldHVy biAtMTsKICAgIG1lbWNweShidWYsICYocy0+cmFtX2RhdGFbc2VjdG9yX251bSo1MTJdKSwg bmJfc2VjdG9ycyo1MTIpOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgcmFtX3dyaXRl KEJsb2NrRHJpdmVyU3RhdGUgKmJzLCBpbnQ2NF90IHNlY3Rvcl9udW0sIAogICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbmJfc2VjdG9ycykKewogICAg QkRSVlJhbVN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIGlmIChzZWN0b3JfbnVtK25iX3Nl Y3RvcnMgPj0gYnMtPnRvdGFsX3NlY3RvcnMpCgkgICAgCXJldHVybiAtMTsKICAgIG1lbWNw eSgmKHMtPnJhbV9kYXRhW3NlY3Rvcl9udW0qNTEyXSksIGJ1ZiwgbmJfc2VjdG9ycyo1MTIp OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIHJhbV9jbG9zZShCbG9ja0RyaXZlclN0 YXRlICpicykKewogICAgQkRSVlJhbVN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIHFlbXVf ZnJlZShzLT5yYW1fZGF0YSk7Cn0KCnN0YXRpYyBpbnQgcmFtX2lzX2FsbG9jYXRlZChCbG9j a0RyaXZlclN0YXRlICpicywKICAgICAgICBpbnQ2NF90IHNlY3Rvcl9udW0sIGludCBuYl9z ZWN0b3JzLCBpbnQqIG4pCnsKICAgICpuID0gYnMtPnRvdGFsX3NlY3RvcnMgLSBzZWN0b3Jf bnVtOwogICAgaWYgKCpuID4gbmJfc2VjdG9ycykKICAgICAgICAqbiA9IG5iX3NlY3RvcnM7 CiAgICBlbHNlIGlmICgqbiA8IDApCiAgICAgICAgcmV0dXJuIDA7CiAgICByZXR1cm4gMTsK fQoKQmxvY2tEcml2ZXIgYmRydl9yYW0gPSB7CiAgICAicmFtIiwKICAgIHNpemVvZihCRFJW UmFtU3RhdGUpLAogICAgcmFtX3Byb2JlLAogICAgcmFtX29wZW4sCiAgICByYW1fcmVhZCwK ICAgIHJhbV93cml0ZSwKICAgIHJhbV9jbG9zZSwKICAgIE5VTEwsCiAgICBOVUxMLAogICAg cmFtX2lzX2FsbG9jYXRlZCwKICAgLnByb3RvY29sX25hbWUgPSAicmFtIiwKfTsK -------86e936c262e57668e445330b4f0eb2e5 Content-Type: text/plain; name="block_composite.h" Content-Disposition: inline; filename="block_composite.h" Content-Transfer-Encoding: base64 LyoKICogQmxvY2sgZHJpdmVyIHRvIHVzZSBjb21wb3NpdGUgaW1hZ2VzCiAqIAogKiBDb3B5 cmlnaHQgKGMpIDIwMDcgSmltIEJyb3duCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 CiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK ICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLCBhbmQvb3Igc2VsbAogKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKICogZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElOCiAqIFRIRSBTT0ZUV0FSRS4KICovCiNpZm5kZWYgQkxPQ0tfQ09NUE9TSVRFX0gKI2Rl ZmluZSBCTE9DS19DT01QT1NJVEVfSAoKI2luY2x1ZGUgInZsLmgiCiNpbmNsdWRlICJibG9j a19pbnQuaCIKCnR5cGVkZWYgc3RydWN0IFNsYXZlRHJpdmVyU3RhdGUgewogICAgQmxvY2tE cml2ZXJTdGF0ZSAqIGJzOwogICAgaW50IHN0YXJ0X3NlY3RvcjsKICAgIGludCBlbmRfc2Vj dG9yOwp9IFNsYXZlRHJpdmVyU3RhdGU7Cgp0eXBlZGVmIHN0cnVjdCBCRFJWUGFydFN0YXRl IHsKICAgIFNsYXZlRHJpdmVyU3RhdGUgKiBzbGF2ZV9iczsKICAgIGludCBzbGF2ZV9jb3Vu dDsKfSBCRFJWUGFydFN0YXRlOwoKI2VuZGlmIC8qQkxPQ0tfQ09NUE9TSVRFX0gqLwo= -------86e936c262e57668e445330b4f0eb2e5 Content-Type: text/plain; name="block-partition.c" Content-Disposition: inline; filename="block-partition.c" Content-Transfer-Encoding: base64 LyoKICogQmxvY2sgZHJpdmVyIHRvIHVzZSBwYXJ0aXRpb25zIGFzIGhhcmQgZGlza3MKICog CiAqIENvcHlyaWdodCAoYykgMjAwNyBKaW0gQnJvd24KICogCiAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhl IHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCiAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KCi8qIHdlIG5lZWQgdGhpcyBpbiBv cmRlciB0byBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgdGhlIHNpemVzIG9mIHRoZSBpbmRpdmlk dWFsIHBhcnRpdGlvbnMgKi8KI2luY2x1ZGUgImJsb2NrX2NvbXBvc2l0ZS5oIgoKLyogaW4g c2VjdG9ycyAqLwojZGVmaW5lIE1CUl9TSVpFIDYzCgovKiBpZGVhbGx5IHRoaXMgd291bGQg YmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCiNkZWZpbmUgTUFYX1BBUlRfU1RSSU5HIDQw OTYKCnR5cGVkZWYgc3RydWN0IENvbXBvc2l0ZURyaXZlclN0YXRlIHsKICAgIEJsb2NrRHJp dmVyU3RhdGUgKiBiczsKfSBDb21wb3NpdGVEcml2ZXJTdGF0ZTsKCnN0YXRpYyBpbnQgcGFy dGl0aW9uX3Byb2JlKGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBjb25zdCBj aGFyICpmaWxlbmFtZSkKewogICAgaWYgKHN0cnN0YXJ0KGZpbGVuYW1lLCAicGFydGl0aW9u OiIsIE5VTEwpKQogICAgICAgIHJldHVybiAxMDA7CiAgICByZXR1cm4gMDsKfQoKc3RhdGlj IGludCBwYXJ0aXRpb25fb3BlbihCbG9ja0RyaXZlclN0YXRlICpicywgY29uc3QgY2hhciAq bmZpbGVuYW1lLCBpbnQgZmxhZ3MpCnsKICAgIENvbXBvc2l0ZURyaXZlclN0YXRlICpzID0g YnMtPm9wYXF1ZTsKICAgIEJsb2NrRHJpdmVyU3RhdGUgKiBiYnM7CiAgICBpbnQ2NF90IHNp emUsIHRvdGFsc2VjdG9yczsKICAgIGludCBib290X2ZkLCBpLCBwYXJ0aXRpb25fY291bnQg PSAwOwogICAgaW50IGhlYWQsIGN5bGluZGVyLCBzZWN0b3IsIG9sZHN0YXJ0OwogICAgaW50 IG9sZGhlYWQsIG9sZGN5bGluZGVyLCBvbGRzZWN0b3I7CiAgICBpbnQgc3lzaWRbMTBdOyAv KiBwcm9iYWJseSBvbmx5IG5lZWQgNCAqLwogICAgY29uc3QgY2hhciAqIHpmaWxlbmFtZSA9 ICYobmZpbGVuYW1lWzEwXSksICogbnB0ciA9IHpmaWxlbmFtZTsKICAgIGNoYXIgKiBmaWxl bmFtZSwgKiBzdHJlcnIgPSAoY2hhciopMHhGMDAxRjAwMTsKICAgIGNoYXIgbWJyX2RhdGFb TUJSX1NJWkUqNTEyXSwgcGFydGl0aW9uX3N0cmluZ1tNQVhfUEFSVF9TVFJJTkddOwogICAg cGFydGl0aW9uX3N0cmluZ1swXSA9ICdcMCc7CgogICAgc3RyY2F0KHBhcnRpdGlvbl9zdHJp bmcsICJjb21wb3NpdGU6cmFtOjYzIik7IC8qNjMgPT0gTUJSX1NJWkUgKi8KICAgIGJzLT5y ZWFkX29ubHkgPSAwOwoKICAgIGludCBuID0gMDsKICAgIHdoaWxlIChucHRyICE9IE5VTEwp CiAgICB7CiAgICAJbnB0ciA9IHN0cmNocih6ZmlsZW5hbWUsICcsJykrMTsKICAgIAlpZiAo KG5wdHItMSkgIT0gTlVMTCkKICAgIAl7CiAgICAJCWZpbGVuYW1lID0gc3RybmR1cCh6Zmls ZW5hbWUsIChzaXplX3QpKChucHRyLTEpLXpmaWxlbmFtZSkpOwogICAgCQl6ZmlsZW5hbWUg PSBucHRyOwogICAgCX0KICAgIAllbHNlCiAgICAJewogICAgCQlmaWxlbmFtZSA9IHN0cmR1 cCh6ZmlsZW5hbWUpOwoJCW5wdHIgPSBOVUxMOwogICAgCX0KCglpZiAoc3RybmNtcChmaWxl bmFtZSwgInN5c2lkPSIsIDYpID09IDApCgl7CgkJc3lzaWRbcGFydGl0aW9uX2NvdW50XSA9 IChpbnQpc3RydG9sKGZpbGVuYW1lKzYsIChjaGFyKiopJnN0ZGVyciwgMTYpOwoKCQlpZiAo ZmlsZW5hbWUrNiA9PSBzdHJlcnIpIC8qIGRldGVjdCBlcnJvciBpbiBjb252ZXJzaW9uICov CgkJCXN5c2lkW3BhcnRpdGlvbl9jb3VudF0gPSAweDBDOyAvKiBkZWZhdWx0IHRvIHdpbjk4 IEZBVDMyICovCgl9CgllbHNlCgl7CgkJLyogdGhlIHN0cmluZyBzaG91bGRuJ3Qgc3RhcnQg d2l0aCBhICcsJyAqLwoJCWlmIChuKQoJCQlzdHJjYXQocGFydGl0aW9uX3N0cmluZywgIiwi KTsKCQllbHNlCgkJCW4gPSAxOwoKCQlzdHJjYXQocGFydGl0aW9uX3N0cmluZywgZmlsZW5h bWUpOwoJCXBhcnRpdGlvbl9jb3VudCArKzsKCX0KCWZyZWUoZmlsZW5hbWUpOwogICAgfQoK ICAgIHMtPmJzID0gcWVtdV9tYWxsb2N6KHNpemVvZihCbG9ja0RyaXZlclN0YXRlKSk7CiAg ICBpZiAoYmRydl9vcGVuMihzLT5icywgcGFydGl0aW9uX3N0cmluZywgMCwgTlVMTCkgIT0g MCkKCSAgICByZXR1cm4gLTE7CgogICAgYnMtPnRvdGFsX3NlY3RvcnMgPSBzLT5icy0+dG90 YWxfc2VjdG9yczsKICAgIGJzLT5yZWFkX29ubHkgPSBzLT5icy0+cmVhZF9vbmx5OwoKICAg IC8qIGdldCB0aGUgZmFrZSBNQlIgKi8KICAgIG1lbXNldChtYnJfZGF0YSwgMCwgTUJSX1NJ WkUqNTEyKTsKICAgIGJvb3RfZmQgPSBvcGVuKCJib290bWJyLmJpbiIsIE9fUkRPTkxZKTsK ICAgIGlmIChib290X2ZkID09IC0xKQogICAgewoJICAgIHByaW50ZigiV2FybmluZzogZmFp bGVkIHRvIG9wZW4gYm9vdG1ici5iaW4gLSBNQlIgd2lsbCBub3QgYmUgYm9vdGFibGVcbiIp OwogICAgfQogICAgZWxzZQogICAgewoJICAgIGlmIChyZWFkKGJvb3RfZmQsIG1icl9kYXRh LCA1MTIpID09IC0xKQoJICAgIHsKCSAgICAJcHJpbnRmKCJXYXJuaW5nOiBmYWlsZWQgdG8g cmVhZCBib290bWJyLmJpbiAtIE1CUiB3aWxsIG5vdCBiZSBib290YWJsZVxuIik7CgkgICAg fQoJICAgIGNsb3NlKGJvb3RfZmQpOwogICAgfQoKICAgIG9sZHN0YXJ0ID0gMHgzRjsgLy8z RiA9PSA2MwogICAgb2xkaGVhZCA9IDB4MDE7CiAgICBvbGRzZWN0b3IgPSAweDAxOwogICAg b2xkY3lsaW5kZXIgPSAweDAwOwogICAgLyogcmVtZW1iZXIgdGhhdCB0aGUgdmVyeSBmaXJz dCBzbGF2ZSBpbiB0aGUgY29tcG9zaXRlIGlzIHRoZSByYW0gaW1hZ2UgKioKICAgICAqIHRo YXQgd2UncmUgdXNpbmcgdG8gc3RvcmUgdGhlIE1CUiwgc28gdGhlIHNlY29uZCBzbGF2ZSBp biB0aGUgY29tcG9zaXRlCiAgICAgKiBpcyB0aGUgZmlyc3QgcGFydGl0aW9uICovCiAgICBm b3IgKGkgPSAxOyBpIDw9IHBhcnRpdGlvbl9jb3VudDsgaSsrKQogICAgewoKICAgIGJicyA9 ICgoQkRSVlBhcnRTdGF0ZSopcy0+YnMtPm9wYXF1ZSktPnNsYXZlX2JzW2krMV0uYnM7CiAg ICAvKiBzZXQgdXAgYy9oL3MgKi8KICAgIGlmIChpID09IHBhcnRpdGlvbl9jb3VudCkKICAg IHRvdGFsc2VjdG9ycyA9IGJzLT50b3RhbF9zZWN0b3JzOwogICAgZWxzZQogICAgdG90YWxz ZWN0b3JzID0gYmJzLT50b3RhbF9zZWN0b3JzOwoKICAgIHNpemUgPSB0b3RhbHNlY3RvcnMg KiA1MTI7CiAgICBjeWxpbmRlciA9IHNpemUvKDYzKjE2KTsKICAgIGhlYWQgPSAxNjsKICAg IHNlY3RvciA9IDYzOwogICAgLyogc29tZSBiaXQgdHdpZGRsaW5nIGhlcmUgKi8KICAgIHNl Y3RvciA9ICgoKGN5bGluZGVyID4+IDgpICYgMykgPDwgNikgKyBzZWN0b3I7CgogICAgLyog c2V0IHVwIGZha2UgTUJSIC0gZWFjaCBwYXJ0aXRpb24gZW50cnkgaXMgMTYgYnl0ZXMgbG9u ZyAqLwogICAgLyogc3RhcnQgNDQ2ICovCiAgICAvKiBmaXJzdCBwYXJ0aXRpb24gaXMgYm9v dGFibGUgKi8KICAgIGlmIChpID09IDApCiAgICBtYnJfZGF0YVs0NDYrKGkqMTYpXSA9IDB4 ODA7CiAgICBlbHNlCiAgICBtYnJfZGF0YVs0NDYrKGkqMTYpXSA9IDB4MDA7CiAgICAvKiBz dGFydCBoZWFkICovCiAgICBtYnJfZGF0YVs0NDcrKGkqMTYpXSA9IG9sZGhlYWQ7CiAgICAv KiBzdGFydCBzZWN0b3IgLSBvbmx5IGZpcnN0IDYgYml0cyAqLwogICAgbWJyX2RhdGFbNDQ4 KyhpKjE2KV0gPSBvbGRzZWN0b3I7CiAgICAvKiBzdGFydCBjeWxpbmRlciAtIHRoaXMgYnl0 ZSBwbHVzIDIgYml0cyBmcm9tIG1icl9kYXRhWzQ0N10gKi8KICAgIG1icl9kYXRhWzQ0OSso aSoxNildID0gb2xkY3lsaW5kZXI7CiAgICAvKiBzeXN0ZW0gSUQgKi8KICAgIG1icl9kYXRh WzQ1MCsoaSoxNildID0gMHgwQzsgLyogc2F5IHdlJ3JlIHdpbjk4IGZhdDMyICovCiAgICAv KiBlbmRpbmcgaGVhZCAqLwogICAgbWJyX2RhdGFbNDUxKyhpKjE2KV0gPSBoZWFkOwogICAg LyogZW5kaW5nIHNlY3RvciAqLwogICAgbWJyX2RhdGFbNDUyKyhpKjE2KV0gPSBzZWN0b3I7 CiAgICAvKiBlbmRpbmcgY3lsaW5kZXIgKi8KICAgIG1icl9kYXRhWzQ1MysoaSoxNildID0g Y3lsaW5kZXI7CiAgICAvKiBhYnNvbHV0ZSBzdGFydCBzZWN0b3IgLSA0IGJ5dGVzL0RXT1JE ICovCiAgICAvL21icl9kYXRhWzQ1NCsoaSoxNildID0gMHgzRjsgLy8gM0YgPSA2MwogICAg KigodWludDMyX3QqKShtYnJfZGF0YSs0NTQrKGkqMTYpKSkgPSBjcHVfdG9fbGUzMihvbGRz dGFydCk7CiAgICAvKiBhYnNvbHV0ZSB0b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyAtIDQgYnl0 ZXMvRFdPUkQgKi8KICAgICooKHVpbnQzMl90KikobWJyX2RhdGErNDU4KyhpKjE2KSkpID0g Y3B1X3RvX2xlMzIodG90YWxzZWN0b3JzKTsKICAgIC8qIGVuZCA0NjIgKi8KCiAgICBvbGRz dGFydCA9IG9sZHN0YXJ0ICsgdG90YWxzZWN0b3JzOwogICAgb2xkaGVhZCA9IGhlYWQ7CiAg ICBvbGRjeWxpbmRlciA9IGN5bGluZGVyOwogICAgb2xkc2VjdG9yID0gc2VjdG9yOwoKICAg IG9sZHNlY3RvcisrOwogICAgaWYgKG9sZHNlY3RvciA+IDYzKQogICAgewoJICAgIG9sZGhl YWQrKzsKCSAgICBvbGRzZWN0b3IgPSAweDAxOwoJICAgIGlmIChvbGRoZWFkID4gMTYpCgkg ICAgewoJCSAgICBvbGRjeWxpbmRlcisrOwoJCSAgICBvbGRoZWFkID0gMHgwMTsKCSAgICB9 CiAgICB9CgogICAgfQoKICAgIC8qIHNldCB0aGUgTUJSIHNlY3RvciBzaWduYXR1cmUgKi8K ICAgIG1icl9kYXRhWzUxMF0gPSAweDU1OwogICAgbWJyX2RhdGFbNTExXSA9IDB4QUE7Cgog ICAgLyogbm93IHdyaXRlIGl0IHRvIHRoZSByYW0gaW1hZ2UgKi8KICAgIGJkcnZfd3JpdGUo cy0+YnMsIDAsIG1icl9kYXRhLCBNQlJfU0laRSk7CgogICAgYnMtPmN5bHMgPSBjeWxpbmRl cjsKICAgIGJzLT5oZWFkcyA9IGhlYWQ7CiAgICBicy0+c2VjcyA9IHNlY3RvcjsKICAgIGJz LT50cmFuc2xhdGlvbiA9IEJJT1NfQVRBX1RSQU5TTEFUSU9OX05PTkU7CgogICAgcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbnQgcGFydGl0aW9uX3JlYWQoQmxvY2tEcml2ZXJTdGF0ZSAqYnMs IGludDY0X3Qgc2VjdG9yX251bSwgCiAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVm LCBpbnQgbmJfc2VjdG9ycykKewogICAgQ29tcG9zaXRlRHJpdmVyU3RhdGUgKnMgPSBicy0+ b3BhcXVlOwogICAgcmV0dXJuIGJkcnZfcmVhZChzLT5icywgc2VjdG9yX251bSwgYnVmLCBu Yl9zZWN0b3JzKTsKfQoKc3RhdGljIGludCBwYXJ0aXRpb25fd3JpdGUoQmxvY2tEcml2ZXJT dGF0ZSAqYnMsIGludDY0X3Qgc2VjdG9yX251bSwgCiAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IG5iX3NlY3RvcnMpCnsKICAgIENvbXBvc2l0ZURyaXZl clN0YXRlICpzID0gYnMtPm9wYXF1ZTsKICAgIHJldHVybiBiZHJ2X3dyaXRlKHMtPmJzLCBz ZWN0b3JfbnVtLCBidWYsIG5iX3NlY3RvcnMpOwp9CgpzdGF0aWMgdm9pZCBwYXJ0aXRpb25f Y2xvc2UoQmxvY2tEcml2ZXJTdGF0ZSAqYnMpCnsKICAgIENvbXBvc2l0ZURyaXZlclN0YXRl ICpzID0gYnMtPm9wYXF1ZTsKICAgIGJkcnZfY2xvc2Uocy0+YnMpOwogICAgcWVtdV9mcmVl KHMtPmJzKTsKICAgIHMtPmJzID0gTlVMTDsKfQoKc3RhdGljIGludCBwYXJ0aXRpb25fY3Jl YXRlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQ2NF90IHRvdGFsX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpiYWNraW5nX2ZpbGUsIGludCBmbGFncykKewog ICAgLyogd2hhdCB3b3VsZCBiZSB0aGUgcG9pbnQuLi4ganVzdCBtYWtlIGEgcmF3IG9yIHFj b3cgKi8KICAgIHJldHVybiAtRU5PVFNVUDsKfQoKQmxvY2tEcml2ZXIgYmRydl9wYXJ0aXRp b24gPSB7CiAgICAicGFydGl0aW9uIiwKICAgIHNpemVvZihDb21wb3NpdGVEcml2ZXJTdGF0 ZSksCiAgICBwYXJ0aXRpb25fcHJvYmUsCiAgICBwYXJ0aXRpb25fb3BlbiwKICAgIHBhcnRp dGlvbl9yZWFkLAogICAgcGFydGl0aW9uX3dyaXRlLAogICAgcGFydGl0aW9uX2Nsb3NlLAog ICAgcGFydGl0aW9uX2NyZWF0ZSwKICAgIC5wcm90b2NvbF9uYW1lID0gInBhcnRpdGlvbiIs Cn07Cgo= -------86e936c262e57668e445330b4f0eb2e5--