)]}'
{
  "log": [
    {
      "commit": "3738968ed8587bb742ce8aed3ec61b3c9663b9d8",
      "tree": "e0a5b0c900158a34e7e6092e5ff7b0d60eb728cd",
      "parents": [
        "8b318d0c26c89acd7c716fb571bfd08d4393d12f"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Tue Apr 18 11:39:24 2017 -0500"
      },
      "committer": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Wed Apr 19 10:32:45 2017 -0500"
      },
      "message": "libsparse: Fix odd-sized input files total_blks\n\nIf the input file isn\u0027t a multiple of block_size, count the trailing\nbit as a block in the output, otherwise bootloader will try to write\npast the last declared block in the sparse file.\n\nTest: Run sparse_test\nBug: 37339998\nChange-Id: Iec143107d15795c6a6f4d3ea7b7515f6f16adcae\n"
    },
    {
      "commit": "a7eeb22efb88d8b8073d71138bcb31cb3f2c4f4d",
      "tree": "5cea928927e28978ca448e841fa1e5192037a8ec",
      "parents": [
        "f358bed6248926bf98f3493ec7f5ffa6b5671e1b"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Mon Apr 17 21:53:16 2017 -0500"
      },
      "committer": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Tue Apr 18 10:53:49 2017 -0500"
      },
      "message": "libsparse: Fix verbose_error string usage\n\nSwitch vnsprintf to StringPrintf to avoid off-by-one, and switch\nsparse_read.c to cpp.\n\nTest: fastboot flash normal image with smaller sparse limit\n\nChange-Id: Ia399b167625deb271bfd0ee3273071306d71c4d4\n"
    },
    {
      "commit": "b0c395955df706c4c453c0dddc13a4f5f7ca44bf",
      "tree": "ea2e84033641e0b12a59d0d47a6dcef35e37ec44",
      "parents": [
        "705353ae277e408e70169c0811c5d104a3b733f6"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Jan 11 14:37:50 2017 -0800"
      },
      "committer": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Jan 11 19:15:11 2017 -0800"
      },
      "message": "Remove \"_host\" and \"_static\" suffix from libsparse definition.\n\nThis now combines all the \"libsparse\" libraries into the same soong\ntarget. A minor side-effect of this change is that the libsparse\nstatic library depends on the libz shared library instead of the libz\nstatic library. This minor change has no effect since targets using\nthe static libsparse library need to explicitly include either the\nstatic libz or the shared one.\n\nBug: 34220783\nChange-Id: I8f41586cf4c3336791cfa57ab4f5ae59a76d7ffa\n"
    },
    {
      "commit": "a26a6bd6f36d29cdc959f746b495f79f74c7fad7",
      "tree": "c7fc492b1924ca83bb3839cd5cc92404f0ca2282",
      "parents": [
        "59826ddee5462d1be93176e2dee660c46e413e52"
      ],
      "author": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 11:49:47 2016 -0800"
      },
      "committer": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 19:16:28 2016 -0800"
      },
      "message": "libsparse: add a function to retrieve the data blocks\n\nTest: m libsparse\n\nChange-Id: I04bd3912bb4364e591b064ec2aab782cf02f6bd7\n"
    },
    {
      "commit": "fca594c2dee4972301d6301fbdc0b7b4ac0045fe",
      "tree": "c8ba92235c2f88b84af9958c2a7ee4f3701418f3",
      "parents": [
        "ec991585803bbcbc9abb1ba9510836e770d6f459"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Fri Sep 30 14:54:25 2016 +0200"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Oct 06 09:53:42 2016 -0700"
      },
      "message": "libsparse: output_file.c, fix large data chunk issue\n\nCHUNK_HEADER structure type allows DATA chunk to be up to MAX_UINT\nlarge.\n\nThe write() callback LEN parameter should be unsigned int.\n\nAlso:\n- write() callback should continue to write data if less than expected\n  data have been written.\n- gzerror() returns LEN on success, 0 otherwise\n\nTest: manual\nChange-Id: Id46d664b84c1a506f419524fe28055f784c2ae7a\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "34a4f0b8c75e2c5a347e04454423cf55c5406075",
      "tree": "9c4e7f6807ec36d74d010c2114ce916e9fe40323",
      "parents": [
        "093951a2307f6572f911883c1ae6d01996e872c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 05 09:37:18 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 05 09:37:44 2016 -0700"
      },
      "message": "Test for _WIN32 in instead of USE_MINGW.\n\nBug: http://b/23392815\nTest: builds\nChange-Id: I7fce8de1f0e2314170cce456cd49346dcee9d134\n"
    },
    {
      "commit": "45f05240c2d9d1f3903e2766b4883e256288f6c2",
      "tree": "ee0405336f534c9b00448860c3df845452e43223",
      "parents": [
        "dc9fbc34402a61ca9b23714b78cac4f92ee113e2"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Jul 12 22:10:56 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Jul 13 17:41:45 2016 -0700"
      },
      "message": "Convert more Android.mk files to Android.bp\n\nThese modules have their dependencies satisfied, and aren\u0027t doing\nanything strange.\n\nChange-Id: I72039a15256cbd5e5eee0d79a15d66d74a6c087d\n"
    },
    {
      "commit": "eabd5108b310c7dcc773285a15de5cd62b16575e",
      "tree": "24f17d7cbfb0911bc311321efe9ec2b99ee62120",
      "parents": [
        "9b0eb7cdf4ac4650fc3f476c2f5a91c50a18e524"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 18 15:41:16 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 18 15:41:16 2016 -0700"
      },
      "message": "Fix misc-macro-parentheses warnings in libion, libsparse, libmem*\n\nBug: 28705665\nChange-Id: I3dd5c086787f5e48ab100a71a42109ea0e417bf9\n"
    },
    {
      "commit": "1eb743ba8b63daf773ed4628504a3bb95ee2c156",
      "tree": "a1d24c7c5a9bbfe53d716cfc02129b5f2c3e353c",
      "parents": [
        "a9352202dd52a404199fbdca160d9d2d0992cf63"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 01 11:15:30 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 01 11:19:26 2016 -0800"
      },
      "message": "Fix static analyzer issues caught by clang\n\nsystem/core/libsparse/sparse_read.c:260:51: warning: Dereference of null pointer (loaded from variable \u0027crc_ptr\u0027)\n                        ret \u003d process_crc32_chunk(fd, chunk_data_size, *crc_ptr);\nsystem/core/libsparse/sparse_read.c:404:9: warning: Potential leak of memory pointed to by \u0027buf\u0027\n        return 0;\n\nFixes leak in sparse_file_read_normal, and null pointer dereference\ncrash if an image with an obsolete CRC chunk was read with CRC checking\ndisabled.\n\nBug: 26904425\n\nChange-Id: Ibc72cd37602929ae2c248bea1cdd1d22ea03baaf\n"
    },
    {
      "commit": "b5619d96303106304e95b73010b77eef47cf8d00",
      "tree": "e891e060e2e22a35370ccaf17c7d4e7b4681910d",
      "parents": [
        "7c20ab3e73421e4a36c8b3a0fc0d1c49653ab51b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 13:52:32 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 17:28:44 2015 -0800"
      },
      "message": "Turn off CRC checking for append2simg\n\nmake_ext4fs doesn\u0027t write out a CRC chunk, and append2simg doesn\u0027t\neither, but append2simg was still performing a CRC on every input\nblock.  Cuts append2simg time in half.\n\nChange-Id: I678f807abbb741042461ed68a0f61b406d3665fb\n"
    },
    {
      "commit": "f21f0f16e7056eb5c9029e4aa82b17958a744bb7",
      "tree": "dae976f1296518a1a3b6b1022692cb7c03209c0e",
      "parents": [
        "56543606b55e1e1455ef5c0bf9aa9f4febab967f"
      ],
      "author": {
        "name": "caozhiyuan",
        "email": "cao.zhiyuan@zte.com.cn",
        "time": "Tue Oct 20 14:28:52 2015 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 20 14:15:31 2015 -0700"
      },
      "message": "Fix parameter to lseek\n\nChange-Id: I9c497a3ebc24ca1db92d0b9d3d1e9ac49dc40f75\n"
    },
    {
      "commit": "af090a6ea897f90c02ffde8a1b49f76c426d9d31",
      "tree": "e27da3b6c8ad237c23254acb74b6d692611e65e4",
      "parents": [
        "9b3a2784b94d88492906384ab3f3c9863f6b5eea"
      ],
      "author": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Tue Oct 13 16:18:45 2015 -0400"
      },
      "committer": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Tue Oct 13 16:22:33 2015 -0400"
      },
      "message": "fix misuse of formatting specifiers\n\nThe Clang/GCC formatting warning triggers for usage of %lld with off_t\non 64-bit because it\u0027s defined as a long int, not a long long int. It\nisn\u0027t important, but it\u0027s technically undefined.\n\nThis fix is in anticipation of adding __attribute__((format(...))) to\nmany functions where it is currently missing.\n\nChange-Id: I2bf33e6563a2892d2f54d7c582cbdeadf867e84f\n"
    },
    {
      "commit": "87a419c8b1343c9025fe2593206a6e95b0aa9700",
      "tree": "ebe871c66424c8f9d7d205f686b6cd681cb856ec",
      "parents": [
        "03bbd64aa99bb03bf80a9340750afa96bdb34280"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 13 14:43:34 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 02 17:10:35 2015 -0700"
      },
      "message": "Remove USE_MINGW/CYGWIN; Whitelist windows modules\n\nCYGWIN is not supported, USE_MINGW and HOST_OS\u003d\u003dwindows are being\nreplaced with LOCAL_..._windows variables.\n\nBug: 23566667\nChange-Id: I3e4a1e4097dc994cf5abdce6939e83a91758fd75\n"
    },
    {
      "commit": "c227a1d855cb6ab86d4927c0231cd8d3afbc957d",
      "tree": "354f3ad28df9ef67e77de727d8dbbb13c2fbd5c2",
      "parents": [
        "dcf890914c7571d3068046b9df1f672e9f45b4d2"
      ],
      "author": {
        "name": "lei wang wang",
        "email": "leiwang211@gmail.com",
        "time": "Fri Aug 21 11:13:46 2015 +0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Aug 21 14:23:31 2015 +0000"
      },
      "message": "libsparse: use strcmp and validate last_used pointer\n\nThis patch is used to fix two Bugs in backed_block.c\n\nFirst, fix wrong comparing string way: we should use strcmp rather than\njust compare their address. Second, fix using illegal memory risk in\nbbl-\u003elast_used pointer. When entering queue_bb function,\nbbl-\u003elast_used \u003d new_bb, but in the following code if\nqueue_bb(xx, bb, new_bb) return ok, the space of new_bb is released. So\nnext time, if you use bbl-\u003elast_used pointer, may cause segment fault !\n\nChange-Id: I6abb505f9b903b697448639fc64fb7518df5cca1\n"
    },
    {
      "commit": "a29c0127fa1285a495145837641daa0b7d75829b",
      "tree": "5bf9b0e568ca895d56d8e01074905a514a44fd2a",
      "parents": [
        "a3ee46f1056fd52b05b627319cf82da75c6c7e59"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sat Jul 11 12:48:42 2015 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sat Jul 11 12:48:42 2015 -0700"
      },
      "message": "libsparse: Wrap sparse_crc32.h to be C++ compatible.\n\nChange-Id: Ic6b1721859937984619a262c459f1f734d81c149\n"
    },
    {
      "commit": "4cc3978276cd70936a35ad5f10b1d67e20a3888e",
      "tree": "3ca7d00d9e0b3a91b5928b7de976b01b531a34f6",
      "parents": [
        "4f021538a662c89e2bf81b3467d2ff03e34905e2"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "emiao@nvidia.com",
        "time": "Sun Apr 12 16:31:46 2015 -0700"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "emiao@nvidia.com",
        "time": "Thu Apr 30 16:36:17 2015 +0000"
      },
      "message": "libsparse: fix crc chunk parsing in simg_dump.py\n\nChange-Id: Ia5b7cedd88809b0e421a056704d25afa190470b8\n"
    },
    {
      "commit": "cfd3a03d3d147fca7a33d6f583b7047c5351fc32",
      "tree": "ab6ba56dac1b2de967a248cfb90324d5d2e3ca8a",
      "parents": [
        "27cda9a535c80470e913156e412cbf7e60c3217c"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Fri Apr 03 14:31:19 2015 +0200"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Wed Apr 08 10:10:17 2015 +0200"
      },
      "message": "libsparse: move_chunks_up_to_len() does not account skip chunks\n\nI caught the fastboot host command sending more data than the fastboot\ndevice can accept.  Fastboot host command was sending 36 surplus bytes\nbecause of 3 skip chunks that were not taken into account in\nmove_chunks_up_to_len() algorithm.\n\nChange-Id: I39a4a033c9b15893bd70e553f17116735ee4a48e\n"
    },
    {
      "commit": "80cc1f6864288f166b786a61ad57f12081114225",
      "tree": "b1c21a62d3a0aa23c69d77318ffe24ffbad2ec5a",
      "parents": [
        "b6f38def22add4b5d6878185d238f91659239161"
      ],
      "author": {
        "name": "Mohamad Ayyash",
        "email": "mkayyash@google.com",
        "time": "Tue Mar 31 12:09:29 2015 -0700"
      },
      "committer": {
        "name": "Mohamad Ayyash",
        "email": "mkayyash@google.com",
        "time": "Tue Mar 31 12:09:37 2015 -0700"
      },
      "message": "Add verbose param to sparse_file_import_auto\n\nChange-Id: I0c5607f7aa5e964abc2031bbe71ff5c6e6ef56cc\nSigned-off-by: Mohamad Ayyash \u003cmkayyash@google.com\u003e\n"
    },
    {
      "commit": "9f0d6bdd6691cbe78a3c03e531cb69ec2cc63602",
      "tree": "c58308d6e62627730a875067b7e343c28a409d99",
      "parents": [
        "be9712156bdcf8cff774a78a3afdb0c562998c73"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Feb 22 10:47:16 2015 +0100"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Mar 01 11:54:02 2015 +0100"
      },
      "message": "fastboot/sparse: propagate error code\n\nsparse_file_write_block calls functions that might failed.  This patch\nmakes sparse_file_write_block catch the error code and propagate it.\n\nWithout this patch, fastboot crashes on a segmentation fault if\nusb_write() fail during a sparse file image flashing.\n\nChange-Id: If9c0e8dfac8fa380628a2504e13abe8cf7d62726\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "a840300bab626bee5d44fbd56563eb0bbef7abcc",
      "tree": "b47bb427eeeed6b110608103352792a6f5a70225",
      "parents": [
        "ffe4d9cdc7e354cfa487223dd2bd5adb38869163"
      ],
      "author": {
        "name": "Trevor Drake",
        "email": "trevordrake.gerrit@gmail.com",
        "time": "Fri Dec 12 04:19:27 2014 +0000"
      },
      "committer": {
        "name": "Trevor Drake",
        "email": "trevordrake.gerrit@gmail.com",
        "time": "Fri Dec 12 04:19:27 2014 +0000"
      },
      "message": "Cleanup libsparse Android.mk\n\nRemoved unnecessary external/zlib reference from LOCAL_C_INCLUDES\n\nChange-Id: Ib61da00dc1e0eac89a68f244881b12e2a4e92e64\n"
    },
    {
      "commit": "51067914d11daceb3aae7461e9f14d915f040f4d",
      "tree": "ca6b6e949a03e6537af2190d064130cdf5c42fb4",
      "parents": [
        "87f1dd5da173dcd297fa8455e0a7845572931046",
        "d4d096370154492433f02df56a7508eb99f564e2"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 08 21:43:07 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 08 21:43:07 2014 +0000"
      },
      "message": "am d4d09637: am db32e788: am a2b03c4a: Merge \"libsparse: turn on -Werror\"\n\n* commit \u0027d4d096370154492433f02df56a7508eb99f564e2\u0027:\n  libsparse: turn on -Werror\n"
    },
    {
      "commit": "8116c8c37aadd83033ffea9e4f5fc86240428e43",
      "tree": "f7542f2184f2f0f889ecd0a380d77be4e9174fd1",
      "parents": [
        "86e3f22b6ae048ba8c9284b4900258c3ccd17cdf"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 01 09:15:02 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed May 07 16:56:22 2014 -0700"
      },
      "message": "libsparse: turn on -Werror\n\n- Deal with some -Wunused issues\n\nChange-Id: I9667d74c0dfbe55c625e65b9d44d7c6f861c455d\n"
    },
    {
      "commit": "0e3f47e4827a067b9b9795a3ae7297b51c9f0776",
      "tree": "83a1c9a76d708c900155729d92687ac78b59984f",
      "parents": [
        "9fdc8156ca8fb3449859bebf080a477fa3bcff5c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 25 14:28:54 2014 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 25 15:19:18 2014 -0700"
      },
      "message": "append2simg: write to temporary file\n\nappend2simg causes libsparse to write mmapped data from a file\nback to that same file.  On btrfs, this sometimes causes a page\nof zeroes to be written instead of the file data.  Work around\nthe issue by writing the output to a temporary file and then\nrenaming it over the original file.\n\nChange-Id: Ia194b6ba0ddb8548747b63292b523756f544706a\n"
    },
    {
      "commit": "b0cb721fb3f8c8019705da99f7ac727aab474209",
      "tree": "e7b83ca7a3f903468f5633568ce7ed1f95e2f763",
      "parents": [
        "e29590b08bce1667c6bddebeb80991b7d16344c4",
        "37d39eba0b3da124be747dd6a014332817135264"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 21:33:47 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 18 21:33:47 2014 +0000"
      },
      "message": "am 37d39eba: am 0cb82da2: am 958235bd: Merge \"libsparse: allow including from C++\"\n\n* commit \u002737d39eba0b3da124be747dd6a014332817135264\u0027:\n  libsparse: allow including from C++\n"
    },
    {
      "commit": "099824cce31853a0680723e70151d866416a5c78",
      "tree": "830552718fca3c066857baf653df1d5b328a2962",
      "parents": [
        "9101878dd06a74cedeadca3fec3b3db68cba8bf0"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 13:54:12 2014 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 14:22:22 2014 -0700"
      },
      "message": "libsparse: allow including from C++\n\nChange-Id: I3788fd07e2b52430a410f85fb79dc886c6a07fea\n"
    },
    {
      "commit": "470185211b09472ef11f826c5bf0d154c541040a",
      "tree": "0075a5103ef405f3690be8e5e30a32614bf43a62",
      "parents": [
        "128a26bf7bbc3479b3413d6119efc5bb0f540b3d",
        "d9f1702a10541b59cfc9582762360d3347712e09"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 28 17:10:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 28 17:10:02 2014 +0000"
      },
      "message": "am d9f1702a: am 2b6791d0: am 0577a067: Merge \"libsparse: deal with build warning messages\"\n\n* commit \u0027d9f1702a10541b59cfc9582762360d3347712e09\u0027:\n  libsparse: deal with build warning messages\n"
    },
    {
      "commit": "031a748b2a9bf6dcfd3983d8f0f616718fcddd88",
      "tree": "dc2a7fd3ec03336f02a30cf5e4ace2f5d5491094",
      "parents": [
        "b7a4868e1cad6a878c94077bc48b414c965cb516"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Feb 27 16:56:15 2014 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 28 08:08:01 2014 -0800"
      },
      "message": "libsparse: deal with build warning messages\n\n- mostly unused parameters, added defs.h to hold __unused macro\n- read_all prototype not included, added output_file.h to acquire\n\nChange-Id: Ib7ee00614acab53a6bd6a64f7e26a8c13dbe6297\n"
    },
    {
      "commit": "b70375abc2c4da6f868da4eef3d3f059acdf9774",
      "tree": "52e04bc7cf0e003783006d488c7c6d276d500f45",
      "parents": [
        "24239a99ffde4a264be3121bff8b1ee70b78f63c",
        "ec9e5891ac97c50cfb8d3d1c9c2d478637eff62b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 14:42:35 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 14:42:35 2014 -0800"
      },
      "message": "resolved conflicts for merge of ec9e5891 to master\n\nChange-Id: I704e3159d529e436e060cb66c1739ef8e7b612d4\n"
    },
    {
      "commit": "ccecf1425412beb2bc3bb38d470293fdc244d6f1",
      "tree": "9fd922197bc88bed453efa0738f3dfb5d6db4c3c",
      "parents": [
        "e847f429f43ae56aaa406697ca603c8469e2100b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 10:53:11 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 12:54:18 2014 -0800"
      },
      "message": "system/core 64-bit cleanup.\n\nThis cleans up most of the size-related problems in system/core.\nThere are still a few changes needed for a clean 64-bit build,\nbut they look like they might require changes to things like the\nfastboot protocol.\n\nChange-Id: I1560425a289fa158e13e2e3173cc3e71976f92c0\n"
    },
    {
      "commit": "288ebfda3b7de6d27a9e2ecce315e98f2e408e8b",
      "tree": "2c59301466b93d344340d49c415e9544345463e9",
      "parents": [
        "6996f91809c3b56a7a7e5ba5b170a9905192b62a",
        "9259663cdb8f15226844e3ecfc6e3aa53614ad03"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 18:36:16 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 29 18:36:16 2013 -0700"
      },
      "message": "am 9259663c: am f17f5591: am 36d44740: Merge \"Fix a bunch of small system/core bugs.\"\n\n* commit \u00279259663cdb8f15226844e3ecfc6e3aa53614ad03\u0027:\n  Fix a bunch of small system/core bugs.\n"
    },
    {
      "commit": "14e28d39f7f094225c1ddae8fa43bd792c621a8f",
      "tree": "f4d986698864a59ea87af253247753768916be37",
      "parents": [
        "98f87d92d89079f274374409efcf57ca52b13c1f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 14:12:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 14:12:46 2013 -0700"
      },
      "message": "Fix a bunch of small system/core bugs.\n\nMissing frees in:\n  adb/file_sync_client.c\n  fastboot/fastboot.c\n  libsparse/output_file.c\n\nMissing closedirs in:\n  adb/file_sync_service.c\n  cpio/mkbootfs.c\n  libcutils/dir_hash.c\n\nPotential buffer overrun in:\n  gpttool/gpttool.c\n\nIncorrect NULL check in:\n  libsparse/backed_block.c\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d61564\nChange-Id: If97838a9e73a77aef7f416c31c237ce1fca4ce21\n"
    },
    {
      "commit": "60549075e83e615179720f930c618a530462bc3c",
      "tree": "1a50349bb76d2b29250a237c26544b74ac9056d0",
      "parents": [
        "b5e14ead1ea7554914e9f332f51240520fb22eba",
        "4d5d633bf862dbb0a960019e80fadc40c93177f0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 20 09:58:54 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 09:58:54 2013 -0700"
      },
      "message": "am 4d5d633b: am 20eb7ac2: am 3c8bdef0: Merge \"libsparse: Use BIONIC implementation of mmap64()\"\n\n* commit \u00274d5d633bf862dbb0a960019e80fadc40c93177f0\u0027:\n  libsparse: Use BIONIC implementation of mmap64()\n"
    },
    {
      "commit": "fccfa414c96061689676a8803e3492f992618486",
      "tree": "6ef14555491836086905dafff87c428f02f802ce",
      "parents": [
        "4a280e3dbe002bb5419ec010f89cdc158244e435"
      ],
      "author": {
        "name": "Daniel Leung",
        "email": "daniel.leung@intel.com",
        "time": "Tue Dec 11 08:39:57 2012 -0800"
      },
      "committer": {
        "name": "Andrew Boie",
        "email": "andrew.p.boie@intel.com",
        "time": "Wed Sep 18 14:42:28 2013 -0700"
      },
      "message": "libsparse: Use BIONIC implementation of mmap64()\n\nChange-Id: I63692629d3a62b7aee21202b67241904b1cc9789\nSigned-off-by: Daniel Leung \u003cdaniel.leung@intel.com\u003e\n"
    },
    {
      "commit": "de807f2ed8af63a75174933c13705a7529a82914",
      "tree": "4c036589e7eede43beb2c87fd04d72e224550129",
      "parents": [
        "3ad3d1c4b5856d4e314febc5671c74e78a76db00"
      ],
      "author": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Mon Jul 08 14:04:02 2013 -0700"
      },
      "committer": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Tue Aug 06 22:16:07 2013 -0700"
      },
      "message": "Add append2simg.\n\nAppend2simg is a small utility designed to glue data to the end\nof a sparse image. Beware that it doesn\u0027t do anything clever with\nthat data.\n\nChange-Id: I33af330cb4f77e0842375797a35aebbb6af60163\n"
    },
    {
      "commit": "83a6d36d4226f82c202ffb27f89e080f95b71c30",
      "tree": "39d81591491497545bb2c9fa2f3dc65dd5faa987",
      "parents": [
        "f5562cb66c1c15d65bc372ede4c180430e1ce9d7"
      ],
      "author": {
        "name": "Hong-Mei Li",
        "email": "a21834@motorola.com",
        "time": "Mon Apr 01 11:22:50 2013 +0800"
      },
      "committer": {
        "name": "Hong-Mei Li",
        "email": "a21834@motorola.com",
        "time": "Mon Apr 01 11:22:50 2013 +0800"
      },
      "message": "libsparse: Fix null pointer issue\n\nFix the issue that \"out\" pointer is dereferenced without checking.\n\nChange-Id: I76a57ad7309841218231346f4807ef2be8628737\nSigned-off-by: Hong-Mei Li \u003ca21834@motorola.com\u003e\n"
    },
    {
      "commit": "5069b01e21129fe2d42a28e850645376560f2029",
      "tree": "bea871bb0942e5399a6de744e29f7e276356c962",
      "parents": [
        "1926c15a1219bc8426e0b9131633e02c76929fb7"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Jul 23 19:15:14 2012 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Aug 15 19:52:52 2012 -0700"
      },
      "message": "Support for multiple modules with the same name is going away.\n\nChange-Id: I5006b467978071f9107babe532efa71d05061580\n"
    },
    {
      "commit": "f1ec8ac84a8540b92a16f187bfa92b2f3c63917e",
      "tree": "1e2133a96b43a76d8b9dc7f9c795001ed09c4f53",
      "parents": [
        "ec7d9dc713322bd41b1e348c0ea3b1304a13dba9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:09:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:11:29 2012 -0700"
      },
      "message": "libsparse: fix 32 bit overflow when calculating last chunk\n\nlast_block * s-\u003eblock_size can overflow when writing large filesystems,\ncast to 64 bits before multiplying.\n\nChange-Id: I3e54097852ce7d0fd271eab53d65e666284898e4\n"
    },
    {
      "commit": "b43828b247fd4f1e0373584de0504004c69eeac9",
      "tree": "57141bc0f9b57cb3c7da4106e9276452da30ef90",
      "parents": [
        "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jun 08 16:55:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: rename symbols that conflict with libext4_utils\n\nUntil ext4_utils switches to using libsparse, libext4_utils defines some\nof the same symbols as libsparse.  Fastboot links statically against\nboth of them, and there is no easy way to make the symbols hidden, so\njust rename them in libsparse.\n\nChange-Id: Idc2cfe20efe3c3a7fb8233f453a89bbbeb0dcc8b\n"
    },
    {
      "commit": "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2",
      "tree": "1d16d24323042aa16d0994c05de22e2e043f6668",
      "parents": [
        "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu May 24 17:15:43 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add sparse_file_len\n\nAdd sparse_file_len, which will compute the size of data that would\nbe produced if sparse_file_write was called.  Useful combined with\nsparse_file_callback.\n\nChange-Id: I1a156d1071760f5559483954a5c62ffc20298703\n"
    },
    {
      "commit": "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2",
      "tree": "63fb3d31d9afc8ccc9c5a6ec96ddfcadb6a96f69",
      "parents": [
        "1e17b313a6257b7b5081e178e81435c09d60378e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 02 15:18:22 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add function to resparse a file and a utility to use it\n\nAdd sparse_file_repsarse, which splits chunks in an existing sparse\nfile such that the maximum size of a chunk, plus a header and footer,\nis smaller than the given size.  This will allow multiple smaller\nsparse files to result in the same data as a large sparse file.\n\nChange-Id: I177abdb958a23d5afd394ff265c5b0c6a3ff22fa\n"
    },
    {
      "commit": "1e17b313a6257b7b5081e178e81435c09d60378e",
      "tree": "aea5379ca96c99ec14f1c5c8dc202b7b5b36ca47",
      "parents": [
        "b4cd267db30c152245e6308598e0066d87c5c55d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 21 16:35:45 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add callback output file type\n\nAdd a new output file subclass that will call a callback for\neach block as it is written.  Will be used to measure the space\nused by each sparse block to allow resparsing files.\n\nAlso add sparse_file_callback, which will write out a sparse\nfile by calling the provided write function.\n\nChange-Id: I18707bd9c357b68da319cc07982e93d1c2b2bee2\n"
    },
    {
      "commit": "b4cd267db30c152245e6308598e0066d87c5c55d",
      "tree": "e888dfa52c033e91247daa5ad33c77696bfe6ff4",
      "parents": [
        "0c4c47f88dfc15cada154a1cf9b4db88b49890f0"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri May 18 14:49:50 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: pseudo-subclass output_file for normal and gz files\n\nCreate two subclasses of output_file that can handle normal\nand gzipped files, and refactor open_output_fd.  Will allow\nadding support for an output_file type that is not file\nbacked.\n\nChange-Id: I26744c74d13f205cf17df1ea9caac1eea9c57357\n"
    },
    {
      "commit": "0c4c47f88dfc15cada154a1cf9b4db88b49890f0",
      "tree": "36b4a1635c149cbdb26347387185a5c824cd203a",
      "parents": [
        "13a560659381b34ce3edbfa8dbe6c0aa6c076f20"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 19:02:58 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add sparse_file read and convert tools to use it\n\nAbstract the logic from simg2img into libsparse, and add logic\nfor reading a regular image into libsparse.  simg2img then\nbecomes a simple wrapper around libsparse.\n\nimg2simg was not actually making the file sparse, it was using\nsparse files to create multiple files that could be pieced back\ntogether.  Replace it with a simple wrapper around libsparse.\nIts functionality will be replaced by an simg2simg that can\nresparse a file into smaller chunks.\n\nChange-Id: I266f70e1c750454183ce46c71a7bb66bbb033a26\n"
    },
    {
      "commit": "13a560659381b34ce3edbfa8dbe6c0aa6c076f20",
      "tree": "cb0b3473d61f63a73e8832c182970939e29a736c",
      "parents": [
        "be8ddcb35a459481c0bcf5bfe645c1fefe963f5c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jun 19 16:45:48 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: fix windows image writing\n\nFix write_fd_chunk on windows.  Uses malloc and read instead of mmap.\n\nChange-Id: I75f10db2e04f19e7f3a6ff46b6978d143cb5254e\n"
    },
    {
      "commit": "be8ddcb35a459481c0bcf5bfe645c1fefe963f5c",
      "tree": "f3ab4517291fd1a8fc6c75d8670ba3cd3015be11",
      "parents": [
        "a21930b6b0dbb04a52948566d58fb48c6db58bab"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 21:02:16 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: merge adjacent blocks of the same type\n\nWhen a block is added that is adjacent to another block and of the same\ntype, merge it.  This will be useful for converting regular images to\nsparse images, allowing the reader to add a single block at a time and\nletting libsparse optimize into larger blocks as it goes.\n\nDoes not support merge two blocks that are backed by a data pointer,\nonly blocks that are backed by a file for now.\n\nChange-Id: I95aa231714cbe01ac194e868c21385806c0bdb97\n"
    },
    {
      "commit": "a21930b6b0dbb04a52948566d58fb48c6db58bab",
      "tree": "e74cfb32ad232c3b99364cd0931502519ca72111",
      "parents": [
        "9e1f17e926fa20255c5f4b4d2f68aa98a964253a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Apr 26 14:24:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add error reporting functions\n\nChange-Id: I2f21355b6c5339d1d724b4c121ea30d575b2d366\n"
    },
    {
      "commit": "9e1f17e926fa20255c5f4b4d2f68aa98a964253a",
      "tree": "142907cdec91851c3e162bdfc23638df9a0d675b",
      "parents": [
        "b55dceea986ab24f8b836b5116b389ed619c816e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 18:31:39 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add support for including fds\n\nAdd sparse_file_add_fd to include all or part of the contents\nof an fd in the output file.  Will be useful for re-sparsing files\nwhere fd will point to the input sparse file.\n\nChange-Id: I5d4ab07fb37231e8e9c1912f62a2968c8b0a00ef\n"
    },
    {
      "commit": "b55dceea986ab24f8b836b5116b389ed619c816e",
      "tree": "aa4f4ed6384931ec362c70eca7b25a7cb8dab450",
      "parents": [
        "411619e921904b896eddae81c086c1f687c8304d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 23:07:49 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: cleanups\n\nMove block loops into sparse.c with iterator helpers in backed_block.c.\nSimplify chunk writing by moving skip chunk calls from output_file.c to\nsparse.c.\nRename variables to be consistent with new naming.\nRemove use of u8, u32, u64.\n\nChange-Id: Ic138ad58bef9f96239266ccee12ee83ea285e7eb\n"
    },
    {
      "commit": "411619e921904b896eddae81c086c1f687c8304d",
      "tree": "d7b7f2f18b42c0aa6974e6d21c38109a01af3a48",
      "parents": [
        "28fa5bc347390480fe190294c6c385b6a9f0d68b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 18:51:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "libsparse: remove static variables\n\nRemoves static variables in backed_block.c to allow multiple\nsparse files to be open at the same time.\n\nChange-Id: I012d8a424c6e21a7352408416adb7c72ee8add21\n"
    },
    {
      "commit": "28fa5bc347390480fe190294c6c385b6a9f0d68b",
      "tree": "59189cf41baf263befeba392fc5bab814740eab1",
      "parents": [
        "2177c79bddc66e295599d87007d4cbec549e1cac"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sun May 20 13:28:05 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "system/core: move libsparse into system/core\n\nThis moves an exact copy of libsparse from\nsystem/extras/ext4_utils/libsparse to system/core/libsparse in\npreparation for linking tools in system/core against it.\n\nChange-Id: If664e4fcfd6612844ac745589beb1517e7f9fe58\n"
    }
  ]
}
