)]}'
{
  "log": [
    {
      "commit": "66424a44c5a3f56516b2f3116d3b5410f2f5faab",
      "tree": "9ccbd852788735357b00ab9bc4f78260a23e4188",
      "parents": [
        "efdccf3ebbbed998207cd934638e8121b0508e1c"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Apr 08 17:24:26 2010 -0700"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Apr 08 17:30:37 2010 -0700"
      },
      "message": "Fix OperationScheduler moratorium calculation for clock rollback case.\n\nMake the unit test exercise some clock-rollback scenarios, using\na properly injected artificial clock.\n\nBug: 2579585\nChange-Id: I6f81c32318ba27429bd30ff53b48449218e4ac64\n"
    },
    {
      "commit": "49b35b5f9c6f301b9cd880934377cf9be33fb718",
      "tree": "9e0fa3c842110e9b2295609687f7be320eae5bb8",
      "parents": [
        "8421672e2e883e0cdda00f22e4f0e8c1053312ad"
      ],
      "author": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Fri Apr 02 08:53:22 2010 -0700"
      },
      "committer": {
        "name": "Brett Chabot",
        "email": "brettchabot@android.com",
        "time": "Fri Apr 02 08:53:22 2010 -0700"
      },
      "message": "Add test annotations to frameworks common tests.\n\nChange-Id: Iaf5af2cbd49015ac8f1bf23a4d20f055ac9a000e\n"
    },
    {
      "commit": "d26e9cebe7d8ce43ea4b80ff4f453b738a92443f",
      "tree": "5377f79bff9918f9e16ea67bc775d971ebbda6ee",
      "parents": [
        "6bb08bd64740661108c60969db93d3b360b45b66"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Fri Feb 19 18:47:49 2010 -0800"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Mar 02 09:36:33 2010 -0800"
      },
      "message": "Fix Proguard flags.\n"
    },
    {
      "commit": "5dda951bcfbc600ae25efb58920586e31def1f8e",
      "tree": "5a22f0322b2d038eccd720e31e4bf093b8b5f61d",
      "parents": [
        "d49c1ced10a5019b237064b8a5061a1cd9abdce3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Feb 24 19:54:22 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 25 11:39:33 2010 -0800"
      },
      "message": "Re-arrange android-common so framework no longer links with it.\n\nThis is the framework part, moving classes around so the framework\nno longer needs to link to android-common.  Makes some APIs public,\nothers that didn\u0027t need to be public are private in the framework,\nsome small things are copied.\n"
    },
    {
      "commit": "3283401e819a4915289567bb36fc0c77f692e051",
      "tree": "bccb68782e7f58de007b220f9e6939c90602f2dd",
      "parents": [
        "8e34931c685926821d9fb681371fd81f08f41f57"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 17 17:07:01 2010 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 17 17:07:01 2010 -0800"
      },
      "message": "Add some useful methods to OperationScheduler to inquire into\nthe history, in case you want to second-guess its scheduling.\n"
    },
    {
      "commit": "caa155187575532693e54960ab36b5b9e1d8e5d3",
      "tree": "92f246e56ed4babd5cf3a535b220290196349365",
      "parents": [
        "8b77bd8655a0e389d591b16c5571710bcf7a4552",
        "3207e29d107273115096be9b9cc621c915e61e1d"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Tue Feb 16 10:49:37 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 16 10:49:37 2010 -0800"
      },
      "message": "Merge \"Enhance URL regular expression to match more Unicode chars.\""
    },
    {
      "commit": "53fc61801e07532b7d9778dd6044f3022daa219a",
      "tree": "8aff4aea2272bdfe912b00f4da5773b83b7b5f85",
      "parents": [
        "cf920369f62a36c18251594df92a11f35d01cbae"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Sun Feb 14 15:31:27 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Sun Feb 14 15:31:27 2010 -0800"
      },
      "message": "remove Base64 from android-common\n\nThis is now available in the framework as android.util.base64.*;\n\nChange-Id: I54901d32b2b5b291cfa0b4c2479b805038ba12ac\n"
    },
    {
      "commit": "27a31e573fecc2d6f77cd9326571672de639532b",
      "tree": "293eabdaa124bbc8f955103071905d6a1d36ace6",
      "parents": [
        "0b3900316e63b45078f144387be05c5790f0a1ae"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 11 14:37:17 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Feb 12 10:53:46 2010 -0800"
      },
      "message": "add Base64InputStream\n\nChange-Id: I777b54bd6d01c86105b473a6701a06d350cee8d1\n"
    },
    {
      "commit": "3207e29d107273115096be9b9cc621c915e61e1d",
      "tree": "180d549ee144935e3d34b8a76841a9084b17ec3b",
      "parents": [
        "56811abc376e86d31ebd799b65cfa62cfaf8e16e"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Thu Feb 11 14:07:44 2010 -0800"
      },
      "committer": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Thu Feb 11 14:07:44 2010 -0800"
      },
      "message": "Enhance URL regular expression to match more Unicode chars.\n\nEnhance URL regular expression to match legal one byte Unicode characters in\nInternationalized Resource Identifiers as detailed in RFC 3987.  Specifically\ntwo byte Unicode characters are not included.  Not all things in RFC 3987 is\nimplemented, this is just an enhancement for recognizing more common used one\nbyte Unicode characters.\n\nThis change helps Browser address bar identify more valid URL without scheme\ntyped in, such as 현금영수증.kr\n\nmake-iana-tld-pattern.py is modified to contain only Top Level Domain\nregular expression generation.  Other parts of WEB_URL pattern are in\nsolely in Patters.java for better consistency and maintenance.\n"
    },
    {
      "commit": "0ab177114681bc944d7d4a0fcf89ee48df18466c",
      "tree": "028f7baa6db6f0ca6a63b9226002d9503fde2859",
      "parents": [
        "6d65fdbed1df3cf9805c2050dc1c919806046d67"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 10 11:02:23 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Wed Feb 10 11:10:53 2010 -0800"
      },
      "message": "add Base64OutputStream to android-common\n\nBase64OutputStream is a FilterOutputStream that can encode or decode\nbase-64 data (with any of the flags supported by the Base64 class --\ncrlf, padding vs not, line wrapping vs not, etc.)\n\nWe change Base64 to have package-private decodeInternal and\nencodeInternal methods that save all their state in objects and can be\ncalled multiple times to stream data.  The existing functions for\nin-memory encoding/decoding call the internal method once; the output\nstream calls it multiple times.\n\nChange-Id: Iac661d05329bc2e6b2863088efcedc974415ec44\n"
    },
    {
      "commit": "e757f9f464f63a0ed0ca367cabb96f9f9f9e5e49",
      "tree": "ed4ba9aa5576f10d11191140afa7a78a819ec327",
      "parents": [
        "7a31bae9f14a45d55d6b6cb48459c26e0635f77a"
      ],
      "author": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Fri Feb 05 17:57:45 2010 -0800"
      },
      "committer": {
        "name": "Shimeng (Simon) Wang",
        "email": "swang@google.com",
        "time": "Tue Feb 09 15:13:09 2010 -0800"
      },
      "message": "Regenerate the TopLevelDomain from iana.org website.\n\nThis is to capture recently added top level domains.\n\tmodified:   common/java/com/android/common/Patterns.java\n\n\tmodified:   common/tests/src/com/android/common/PatternsTest.java\n"
    },
    {
      "commit": "52a0bb3857866da55ffc71fd6542891a047eddca",
      "tree": "f8c8e0020013c3713bf3780f0589b30c521ca27c",
      "parents": [
        "8e83db5f24660f8645c919a6fb0ca487c6c6f537",
        "f9d3196cc837449ca4e1e6c8a54022892e44420a"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Fri Feb 05 05:44:17 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 05 05:44:17 2010 -0800"
      },
      "message": "Merge \"rename encodeString to encodeToString\""
    },
    {
      "commit": "8e83db5f24660f8645c919a6fb0ca487c6c6f537",
      "tree": "9dc4281eef120241f91a5ee1872bb9573637d4a6",
      "parents": [
        "cea135806a24d66f5c5da8e1f9e703fd166b6d7f",
        "d11052311f4361687123b4209d35f3e42ba81fe5"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu Feb 04 19:48:52 2010 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 04 19:48:52 2010 -0800"
      },
      "message": "Merge \"Add ability to parse HTTP-format moratorium times (since pretty much every user wants this).\""
    },
    {
      "commit": "f9d3196cc837449ca4e1e6c8a54022892e44420a",
      "tree": "7b225ac3d33a4ec87e4288fe82fbe2113d882ba1",
      "parents": [
        "b7cc1ec7234400b1077dd2dc1d8663f4573497b6"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 17:07:59 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 17:07:59 2010 -0800"
      },
      "message": "rename encodeString to encodeToString\n\nChange-Id: I777530b80a9e8be8c487e140574621cd9d35dc35\n"
    },
    {
      "commit": "b7cc1ec7234400b1077dd2dc1d8663f4573497b6",
      "tree": "f11e8ed5ac3534d801e9a4adcb0acfc6365a4916",
      "parents": [
        "7c482454b11943ea8a10b097740c455db958633a"
      ],
      "author": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 10:39:14 2010 -0800"
      },
      "committer": {
        "name": "Doug Zongker",
        "email": "dougz@android.com",
        "time": "Thu Feb 04 15:54:00 2010 -0800"
      },
      "message": "a new java implementation of base64 for android-common\n\nA new Base64 encoder/decoder class.  Some benchmarks comparing the\ndecoder it to those from android.os.Base64Utils (a decode-only native\nimplementation not accessible to apps) and\norg.apache.commons.codec.binary.Base64, all with the JIT enabled:\n\n  1k encoded data\n  APACHE   avg:   811 us    min:   244 us    max: 13671 us\n  COMMON   avg:   263 us    min:    30 us    max:  4730 us\n  NATIVE   avg:   102 us    min:    61 us    max:  5493 us\n\n  10k encoded data\n  APACHE   avg:  3624 us    min:  2746 us    max: 23895 us\n  COMMON   avg:   979 us    min:   518 us    max:  7751 us\n  NATIVE   avg:   817 us    min:   762 us    max:  3143 us\n\n  100k encoded data\n  APACHE   avg: 33167 us    min: 31829 us    max: 140411 us\n  COMMON   avg:  6047 us    min:  5493 us    max: 45227 us\n  NATIVE   avg: 10109 us    min: 10009 us    max: 12451 us\n\nChange-Id: Ic622e3a967a62d57d30bd25b80cbe4e0dd60e764\n"
    },
    {
      "commit": "d11052311f4361687123b4209d35f3e42ba81fe5",
      "tree": "122ee2f49ff2514c649c78c1acf60122c7745724",
      "parents": [
        "12632744a5d10a72c0e0a1d60ac35ae194852332"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 03 17:01:10 2010 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Feb 03 18:28:08 2010 -0800"
      },
      "message": "Add ability to parse HTTP-format moratorium times\n(since pretty much every user wants this).\n"
    },
    {
      "commit": "1b925b09981692a23f7a956a1f89feacdbdc1768",
      "tree": "4fca990974dd809b920132bc83778408996e1c30",
      "parents": [
        "46b6bc7c21641f51f8372b496facf443e035171e"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 12 14:00:07 2010 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 19 15:03:10 2010 -0800"
      },
      "message": "Addign more tests for DomainNameValidator.\n\nAdded tests that use actual certificates.\n\nSee bug:2369689 for background.\n"
    },
    {
      "commit": "831f258fd91a1e85fc59aea88a3e26e57d6c40d9",
      "tree": "3870e77f24d875c74f6db4d5de77cf63be37e04c",
      "parents": [
        "40d851cc47e140fada6a69f4506e42f747dec802"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Jan 08 13:34:57 2010 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Jan 12 10:27:13 2010 -0800"
      },
      "message": "Moved DomainNameChecker to android common.\n\n- Moved DomainNameChecker from android.net.http to android common, and renamed to DomainNameValidator.\n- Added a simplified version of DNParser, which DomainNameValidator uses instead of X509Name in order to extract Subject Name from a certificate.\n- Added unit tests for DomainNameChecker and DNParser.\n\nThere\u0027s a suspicious comment in DomainNameChecker saying something like \"X509Certificate fails to parse a certificate when a subject alt name begins with \u0027*\u0027\".  I think we should fix it if it\u0027s really the case -- otherwise certificates with the wildcard wouldn\u0027t work.  I\u0027ll see if it\u0027s true after submitting this patch.\n"
    },
    {
      "commit": "a649612e6839b36635c18d782816f31a509a6ba0",
      "tree": "efceddbd6f3b62324fee1b4b8c0ed698fc715435",
      "parents": [
        "e63efc88884efd8585456ed23a2dccdc463ea512"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Fri Nov 20 18:31:33 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Sat Nov 21 10:09:46 2009 -0800"
      },
      "message": "Add OperationScheduler (and test) to the common static library;\nincludes new string parsing function (and test).\n"
    },
    {
      "commit": "a6f46982893c49f2ebe9709d745959f8613d61b2",
      "tree": "869cc209a508d8d45655bb1940bf8ad6f4d97767",
      "parents": [
        "526b33cda2d953230275796ff2b1db7f89ff3e94"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 11:23:45 2009 -0800"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Wed Nov 18 12:05:04 2009 -0800"
      },
      "message": "Create android-common static library which gets included in frameworks.jar,\nbut can also be used by unbundled apps.  Move android.text.util.Regex there as\na starting example, renamed to a more sensible (?) com.android.common.Patterns.\nSet up a corresponding test package, and move RegexTest (to PatternsTest).\nUpdate clients.\n"
    }
  ]
}
