diff --git a/History.markdown b/History.markdown index 7db11b3e..a1ad1b89 100644 --- a/History.markdown +++ b/History.markdown @@ -1 +1,1916 @@ -IyMgSEVBRAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVzZSBgTGlxdWlkOjpEcm9wYHMgaW5zdGVhZCBvZiBgSGFzaGBlcyBpbiBgI3RvX2xpcXVpZGAgKCM0Mjc3KQogICogQWRkICdzYW1wbGUnIExpcXVpZCBmaWx0ZXIgRXF1aXZhbGVudCB0byBBcnJheSNzYW1wbGUgZnVuY3Rpb25hbGl0eSAoIzQyMjMpCiAgKiBDYWNoZSBwYXJzZWQgaW5jbHVkZSBmaWxlIHRvIHNhdmUgbGlxdWlkIHBhcnNpbmcgdGltZS4gKCM0MTIwKQogICogU2xpZ2h0bHkgc3BlZWQgdXAgdXJsIHNhbml0aXphdGlvbiBhbmQgaGFuZGxlIG11bHRpcGxlcyBvZiAvLy8uICgjNDE2OCkKICAqIFByaW50IGRlYnVnIG1lc3NhZ2Ugd2hlbiBhIGRvY3VtZW50IGlzIHNraXBwZWQgZnJvbSByZWFkaW5nICgjNDE4MCkKICAqIEluY2x1ZGUgdGFnIHNob3VsZCBhY2NlcHQgbXVsdGlwbGUgdmFyaWFibGVzIGluIHRoZSBpbmNsdWRlIG5hbWUgKCM0MTgzKQogICogQWRkIGAtb2Agb3B0aW9uIHRvIHNlcnZlIGNvbW1hbmQgd2hpY2ggb3BlbnMgc2VydmVyIFVSTCAoIzQxNDQpCiAgKiBBZGQgQ29kZUNsaW1hdGUgcGxhdGZvcm0gZm9yIGJldHRlciBjb2RlIHF1YWxpdHkuICgjNDIyMCkKICAqIEdlbmVyYWwgaW1wcm92ZW1lbnRzIGZvciBXRUJyaWNrIHZpYSBqZWt5bGwgc2VydmUgc3VjaCBhcyBTU0wgJiBjdXN0b20gaGVhZGVycyAoIzQyMjQsICM0MjI4KQogICogQWRkIGEgZGVmYXVsdCBjaGFyc2V0IHRvIGNvbnRlbnQtdHlwZSBvbiB3ZWJyaWNrLiAoIzQyMzEpCiAgKiBTd2l0Y2ggYFBsdWdpbk1hbmFnZXJgIHRvIHVzZSBgcmVxdWlyZV93aXRoX2dyYWNlZnVsX2ZhaWxgIGZvciBiZXR0ZXIgVVggKCM0MjMzKQogICogQWxsb3cgcXVvdGVkIGRhdGUgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjNDE4NCkKICAqIEFkZCBhIEpla3lsbCBkb2N0b3Igd2FybmluZyBmb3IgVVJMcyB0aGF0IG9ubHkgZGlmZmVyIGJ5IGNhc2UgKCMzMTcxKQogICogZHJvcHM6IGNyZWF0ZSBvbmUgYmFzZSBEcm9wIGNsYXNzIHdoaWNoIGNhbiBiZSBzZXQgYXMgbXV0YWJsZSBvciBub3QgKCM0Mjg1KQogICogZHJvcHM6IHByb3ZpZGUgYCN0b19oYCB0byBhbGxvdyBmb3IgaGFzaCBpbnRyb3NwZWN0aW9uICgjNDI4MSkKICAqIFNoaW0gc3ViY29tbWFuZHMgd2l0aCBpbmRpY2F0aW9uIG9mIGdlbSBwb3NzaWJseSByZXF1aXJlZCBzbyB1c2VycyBrbm93IGhvdyB0byB1c2UgdGhlbSAoIzQyNTQpCgojIyMgQnVnIEZpeGVzCgogICogUGFzcyBidWlsZCBvcHRpb25zIGludG8gYGNsZWFuYCBjb21tYW5kICgjNDE3NykKICAqIEFsbG93IHVzZXJzIHRvIHVzZSAuaHRtIGFuZCAueGh0bWwgKFhIVE1MNS4pICgjNDE2MCkKICAqIFByZXZlbnQgU2hlbGwgSW5qZWN0aW9uLiAoIzQyMDApCiAgKiBDb252ZXJ0aWJsZSBzaG91bGQgbWFrZSBsYXlvdXQgZGF0YSBhY2Nlc3NpYmxlIHZpYSBgbGF5b3V0YCBpbnN0ZWFkIG9mIGBwYWdlYCAoIzQyMDUpCiAgKiBBdm9pZCB1c2luZyBgRGlyLmdsb2JgIHdpdGggYWJzb2x1dGUgcGF0aCB0byBhbGxvdyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHBhdGggKCM0MTUwKQogICogSGFuZGxlIGVtcHR5IGNvbmZpZyBmaWxlcyAoIzQwNTIpCiAgKiBSZW5hbWUgYEBvcHRpb25zYCBzbyB0aGF0IGl0IGRvZXMgbm90IGltcGFjdCBMaXF1aWQuICgjNDE3MykKICAqIHV0aWxzL2Ryb3BzOiB1cGRhdGUgRHJvcCB0byBzdXBwb3J0IGBVdGlscy5kZWVwX21lcmdlX2hhc2hlc2AgKCM0Mjg5KQogICogTWFrZSBzdXJlIGpla3lsbC9kcm9wcy9kcm9wIGlzIGxvYWRlZCBmaXJzdC4gKCM0MjkyKQogICogQ29udmVydGlibGUvUGFnZS9SZW5kZXJlcjogdXNlIHBheWxvYWQgaGFzaCBhY2Nlc3NvciAmIHNldHRlciBzeW50YXggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5ICgjNDMxMSkKICAqIERyb3A6IGZpeCBoYXNoIHNldHRlciBwcmVjZW5kZW5jZSAoIzQzMTIpCiAgKiB1dGlsczogYGhhc195YW1sX2hlYWRlcj9gIHNob3VsZCBhY2NlcHQgZmlsZXMgd2l0aCBleHRyYW5lb3VzIHNwYWNlcyAoIzQyOTApCiAgKiBFc2NhcGUgaHRtbCBmcm9tIHNpdGUudGl0bGUgYW5kIHBhZ2UudGl0bGUgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzQzMDcpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBgamVreWxsLWRvY3NgIHNob3VsZCBiZSBlYXNpbHkgcmVsZWFzZS1hYmxlICgjNDE1MikKICAqIEFsbG93IHVzZSBvZiBDdWN1bWJlciAyLjEgb3IgZ3JlYXRlciAoIzQxODEpCiAgKiBNb2Rlcm5pemUgS3JhbWRvd24gZm9yIE1hcmtkb3duIGNvbnZlcnRlci4gKCM0MTA5KQogICogQ2hhbmdlIFRlc3REb2N0b3JDb21tYW5kIHRvIEpla3lsbFVuaXRUZXN0Li4uICgjNDI2MykKICAqIENyZWF0ZSBuYW1lc3BhY2VkIHJha2UgdGFza3MgaW4gc2VwYXJhdGUgYC5yYWtlYCBmaWxlcyB1bmRlciBgbGliL3Rhc2tzYCAoIzQyODIpCiAgKiBtYXJrZG93bjogcmVmYWN0b3IgZm9yIGdyZWF0ZXIgcmVhZGFiaWxpdHkgJiBlZmZpY2llbmN5ICgjMzc3MSkKICAqIEZpeCBtYW55IFJ1Ym9jb3Agc3R5bGUgZXJyb3JzICgjNDMwMSkKICAqIEZpeCBzcGVsbGluZyBvZiAiR2l0SHViIiBpbiBkb2NzIGFuZCBoaXN0b3J5ICgjNDMyMikKICAqIFJlb3JnYW5pemUgYW5kIGNsZWFudXAgdGhlIEdlbWZpbGUsIHNob3J0ZW4gcmVxdWlyZWQgZGVwZW5kcy4gKCM0MzE4KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIHRocmVlIHBsdWdpbnMgdG8gZGlyZWN0b3J5ICgjNDE2MykKICAqIEFkZCB1cGdyYWRpbmcgZG9jcyBmcm9tIDIueCB0byAzLnggKCM0MTU3KQogICogQWRkIGBwcm90ZWN0X2VtYWlsYCB0byB0aGUgcGx1Z2lucyBpbmRleC4gKCM0MTY5KQogICogQWRkIGBqZWt5bGwtZGVwbG95YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCM0MTc5KQogICogQ2xhcmlmeSBwbHVnaW4gZG9jcyAoIzQxNTQpCiAgKiBBZGQgS2lja3N0ZXIgdG8gZGVwbG95bWVudCBtZXRob2RzIGluIGRvY3VtZW50YXRpb24gKCM0MTkwKQogICogQWRkIERhdmlkQnVyZWxhJ3MgdHV0b3JpYWwgZm9yIFdpbmRvd3MgdG8gV2luZG93cyBkb2NzIHBhZ2UgKCM0MjEwKQogICogQ2hhbmdlIEdpdEh1YiBjb2RlIGJsb2NrIHRvIGhpZ2hsaWdodCB0YWcgdG8gYXZvaWQgaXQgb3ZlcmxhcHMgcGFyZW50IGRpdiAoIzQxMjEpCiAgKiBVcGRhdGUgRm9ybUtlZXAgbGluayB0byBiZSBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byBKZWt5bGwgKCM0MjQzKQogICogUmVtb3ZlIGV4YW1wbGUgUm9nZXIgQ2hhcG1hbiBzaXRlLCBhcyB0aGUgZG9tYWluIGRvZXNuJ3QgZXhpc3QgKCM0MjQ5KQogICogQWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZHJhZnRfcG9zdHNgIHRvIGNvbmZpZ3VyYXRpb24gZG9jcyAoIzQyNTEpCiAgKiBGaXggY2hlY2tsaXN0IGluIGBfYXNzZXRzLm1kYCAoIzQyNTkpCiAgKiBBZGQgTWFya2Rvd24gZXhhbXBsZXMgdG8gUGFnZXMgZG9jcyAoIzQyNzUpCiAgKiBBZGQgamVreWxsLXBhZ2luYXRlLWNhdGVnb3J5IHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzQyNzMpCiAgKiBBZGQgYGpla3lsbC1yZXNwb25zaXZlX2ltYWdlYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCM0Mjg2KQogICogQWRkIGBqZWt5bGwtY29tbW9ubWFya2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjNDI5OSkKICAqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBpbmNyZW1lbnRhbCByZWdlbmVyYXRpb24gKCM0MjkzKQogICogQWRkIG5vdGUgYWJvdXQgcmVtb3ZhbCBvZiByZWxhdGl2ZSBwZXJtYWxpbmsgc3VwcG9ydCBpbiB1cGdyYWRpbmcgZG9jcyAoIzQzMDMpCiAgKiBBZGQgUHJvIFRpcCB0byB1c2UgZnJvbnQgbWF0dGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSBjbGVhbiBVUkxzICgjNDI5NikKICAqIEZpeCBncmFtbWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBwb3N0cy4gKCM0MzMwKQoKIyMgMy4wLjEgLyAyMDE1LTExLTE3CgojIyMgQnVnIEZpeGVzCgogICogRG9jdW1lbnQ6IG9ubHkgc3VwZXJkaXJlY3RvcmllcyBvZiB0aGUgY29sbGVjdGlvbiBhcmUgY2F0ZWdvcmllcyAoIzQxMTApCiAgKiBgQ29udmVydGlibGUjcmVuZGVyX2xpcXVpZGAgc2hvdWxkIHVzZSBgcmVuZGVyIWAgdG8gY2F1c2UgZmFpbHVyZSBvbiBiYWQgTGlxdWlkICgjNDA3NykKICAqIERvbid0IGdlbmVyYXRlIGAuamVreWxsLW1ldGFkYXRhYCBpbiBub24taW5jcmVtZW50YWwgYnVpbGQgKCM0MDc5KQogICogU2V0IGBoaWdobGlnaHRlcmAgY29uZmlnIHZhbCB0byBga3JhbWRvd24uc3ludGF4X2hpZ2hsaWdodGVyYCAoIzQwOTApCiAgKiBBbGlnbiBob29rcyBpbXBsZW1lbnRhdGlvbiB3aXRoIGRvY3VtZW50YXRpb24gKCM0MTA0KQogICogRml4IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nIGluIHRoZSBkb2N0b3IgY29tbWFuZCAoIzQxMTQpCiAgKiBGaXggY2FzZSBpbiBgOnRpdGxlYCBhbmQgYWRkIGA6c2x1Z2Agd2hpY2ggaXMgZG93bmNhc2VkICgjNDEwMCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEZpeCB0ZXN0IHdhcm5pbmdzIHdoZW4gZG9pbmcgcmFrZSB7dGVzdCxzcGVjfSBvciBzY3JpcHQvdGVzdCAoIzQwNzgpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byB2My4wLjMuICgjNDA4NSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuNC4wLiAoIzQwODYpCiAgKiBBZGRzIGEgbm90ZSBhYm91dCBpbnN0YWxsaW5nIHRoZSBqZWt5bGwtZ2lzdCBnZW0gdG8gbWFrZSBnaXN0IHRhZyB3b3JrICgjNDEwMSkKICAqIEFsaWduIGhvb2tzIGRvY3VtZW50YXRpb24gd2l0aCBpbXBsZW1lbnRhdGlvbiAoIzQxMDQpCiAgKiBBZGQgSmVreWxsIEZsaWNrciBQbHVnaW4gdG8gdGhlIGxpc3Qgb2YgdGhpcmQgcGFydHkgcGx1Z2lucyAoIzQxMTEpCiAgKiBSZW1vdmUgbGluayB0byBub3ctZGVsZXRlZCBibG9nIHBvc3QgKCM0MTI1KQogICogVXBkYXRlIHRoZSBsaXF1aWQgc3ludGF4IGluIHRoZSBwYWdpbmF0aW9uIGRvY3MgKCM0MTMwKQogICogQWRkIGpla3lsbC1sYW5ndWFnZS1wbHVnaW4gdG8gcGx1Z2lucy5tZCAoIzQxMzQpCiAgKiBVcGRhdGVkIHRvIHJlZmxlY3QgZmVlZGJhY2sgaW4gIzQxMjkgKCM0MTM3KQogICogQ2xhcmlmeSBhc3NldHMubWQgYmFzZWQgb24gZmVlZGJhY2sgb2YgIzQxMjkgKCM0MTQyKQogICogUmUtY29ycmVjdCB0aGUgbGlxdWlkIHN5bnRheCBpbiB0aGUgcGFnaW5hdGlvbiBkb2NzICgjNDE0MCkKCiMjIDMuMC4wIC8gMjAxNS0xMC0yNgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIExpcXVpZCBwcm9maWxlciAoaS5lLiBrbm93IGhvdyBmYXN0IG9yIHNsb3cgeW91ciB0ZW1wbGF0ZXMgcmVuZGVyKSAoIzM3NjIpCiAgKiBJbmNyZW1lbnRhbCByZWdlbmVyYXRpb24gKCMzMTE2KQogICogQWRkIEhvb2tzOiBhIG5ldyBraW5kIG9mIHBsdWdpbiAoIzM1NTMpCiAgKiBVcGdyYWRlIHRvIExpcXVpZCAzLjAuMCAoIzMwMDIpCiAgKiBgc2l0ZS5wb3N0c2AgaXMgbm93IGEgQ29sbGVjdGlvbiBpbnN0ZWFkIG9mIGFuIEFycmF5ICgjNDA1NSkKICAqIEFkZCBiYXNpYyBzdXBwb3J0IGZvciBKUnVieSAoY29tbWl0OiAwZjQ0NzcpCiAgKiBEcm9wIHN1cHBvcnQgZm9yIFJ1YnkgMS45LjMuICgjMzIzNSkKICAqIFN1cHBvcnQgUnVieSB2Mi4yICgjMzIzNCkKICAqIFN1cHBvcnQgUkRpc2NvdW50IDIgKCMyNzY3KQogICogUmVtb3ZlIG1vc3QgcnVudGltZSBkZXBzICgjMzMyMykKICAqIE1vdmUgdG8gUm91Z2UgYXMgZGVmYXVsdCBoaWdobGlnaHRlciAoIzMzMjMpCiAgKiBNaW1pYyBHaXRIdWIgUGFnZXMgYC5odG1sYCBleHRlbnNpb24gc3RyaXBwaW5nIGJlaGF2aW9yIGluIFdFQnJpY2sgKCMzNDUyKQogICogQWx3YXlzIGluY2x1ZGUgZmlsZSBleHRlbnNpb24gb24gb3V0cHV0IGZpbGVzICgjMzQ5MCkKICAqIEltcHJvdmVkIHBlcm1hbGlua3MgZm9yIHBhZ2VzIGFuZCBjb2xsZWN0aW9ucyAoIzM1MzgpCiAgKiBTdW5zZXQgKGkuZS4gcmVtb3ZlKSBNYXJ1a3UgKCMzNjU1KQogICogUmVtb3ZlIHN1cHBvcnQgZm9yIHJlbGF0aXZlIHBlcm1hbGlua3MgKCMzNjc5KQogICogSXRlcmF0ZSBvdmVyIGBzaXRlLmNvbGxlY3Rpb25zYCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIGEgaGFzaC4gKCMzNjcwKQogICogQWRhcHQgU3RhdGljRmlsZSBmb3IgY29sbGVjdGlvbnMsIGNvbmZpZyBkZWZhdWx0cyAoIzM4MjMpCiAgKiBBZGQgYSBDb2RlIG9mIENvbmR1Y3QgZm9yIHRoZSBKZWt5bGwgcHJvamVjdCAoIzM5MjUpCiAgKiBBZGRlZCBwZXJtYWxpbmsgdGltZSB2YXJpYWJsZXMgKCMzOTkwKQogICogQWRkIGAtLWluY3JlbWVudGFsYCBmbGFnIHRvIGVuYWJsZSBpbmNyZW1lbnRhbCByZWdlbiAoZGlzYWJsZWQgYnkgZGVmYXVsdCkgKCM0MDU5KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERlcHJlY2F0ZSBhY2Nlc3MgdG8gRG9jdW1lbnQjZGF0YSBwcm9wZXJ0aWVzIGFuZCBDb2xsZWN0aW9uI2RvY3MgbWV0aG9kcyAoIzQwNTgpCiAgKiBTb3J0IHN0YXRpYyBmaWxlcyBqdXN0IG9uY2UsIGFuZCBjYWxsIGBzaXRlX3BheWxvYWRgIG9uY2UgZm9yIGFsbCBjb2xsZWN0aW9ucyAoIzMyMDQpCiAgKiBTZXBhcmF0ZSBgamVreWxsIGRvY3NgIGFuZCBvcHRpbWl6ZSBleHRlcm5hbCBnZW0gaGFuZGxpbmcgKCMzMjQxKQogICogSW1wcm92ZSBgU2l0ZSNnZXRDb252ZXJ0ZXJJbXBsYCBhbmQgY2FsbCBpdCBgU2l0ZSNmaW5kX2NvbnZlcnRlcl9pbnN0YW5jZWAgKCMzMjQwKQogICogVXNlIHJlbGF0aXZlIHBhdGggZm9yIGBwYXRoYCBMaXF1aWQgdmFyaWFibGUgaW4gRG9jdW1lbnRzIGZvciBjb25zaXN0ZW5jeSAoIzI5MDgpCiAgKiBHZW5lcmFsaXplIGBVdGlscyNzbHVnaWZ5YCBmb3IgYW55IHNjcmlwdHMgKCMzMDQ3KQogICogQWRkZWQgYmFzaWMgbWljcm9kYXRhIHRvIHBvc3QgdGVtcGxhdGUgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzMxODkpCiAgKiBTdG9yZSBsb2cgbWVzc2FnZXMgaW4gYW4gYXJyYXkgb2YgbWVzc2FnZXMuICgjMzI0NCkKICAqIEFsbG93IGNvbGxlY3Rpb24gZG9jdW1lbnRzIHRvIG92ZXJyaWRlIGBvdXRwdXRgIHByb3BlcnR5IGluIGZyb250IG1hdHRlciAoIzMxNzIpCiAgKiBLZWVwIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVzIGJldHdlZW4gYnVpbGRzIGZvciBzdGF0aWMgZmlsZXMgKCMzMjIwKQogICogT25seSBkb3duY2FzZSBtaXhlZC1jYXNlIGNhdGVnb3JpZXMgZm9yIHRoZSBVUkwgKCMyNTcxKQogICogQWRkZWQgcGVyIHBvc3QgYGV4Y2VycHRfc2VwYXJhdG9yYCBmdW5jdGlvbmFsaXR5ICgjMzI3NCkKICAqIEFsbG93IGNvbGxlY3Rpb25zIFlBTUwgdG8gZW5kIHdpdGggdGhyZWUgZG90cyAoIzMxMzQpCiAgKiBBZGQgbW9kZSBwYXJhbWV0ZXIgdG8gYHNsdWdpZnlgIExpcXVpZCBmaWx0ZXIgKCMyOTE4KQogICogUGVyZjogYE1hcmtkb3duI21hdGNoZXNgIHNob3VsZCBhdm9pZCByZWdleHAgKCMzMzIxKQogICogUGVyZjogVXNlIGZyb3plbiByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBgVXRpbHMjc2x1Z2lmeWAgKCMzMzIxKQogICogU3BsaXQgb2ZmIFRleHRpbGUgc3VwcG9ydCBpbnRvIGpla3lsbC10ZXh0aWxlLWNvbnZlcnRlciAoIzMzMTkpCiAgKiBJbXByb3ZlIHRoZSBuYXZpZ2F0aW9uIG1lbnUgYWxpZ25tZW50IGluIHRoZSBzaXRlIHRlbXBsYXRlIG9uIHNtYWxsIHNjcmVlbnMgKCMzMzMxKQogICogU2hvdyB0aGUgcmVnZW5lcmF0aW9uIHRpbWUgYWZ0ZXIgdGhlIGluaXRpYWwgZ2VuZXJhdGlvbiAoIzMzNzgpCiAgKiBTaXRlIHRlbXBsYXRlOiBTd2l0Y2ggZGVmYXVsdCBmb250IHRvIEhlbHZldGljYSBOZXVlICgjMzM3NikKICAqIE1ha2UgdGhlIGBpbmNsdWRlYCB0YWcgYSB0ZWVuc3kgYml0IGZhc3Rlci4gKCMzMzkxKQogICogQWRkIGBwa2lsbCAtZiBqZWt5bGxgIHRvIHdheXMgdG8ga2lsbC4gKCMzMzk3KQogICogU2l0ZSB0ZW1wbGF0ZTogY29sbGFwc2VkLCB2YXJpYWJsZS1kcml2ZW4gZm9udCBkZWNsYXJhdGlvbiAoIzMzNjApCiAgKiBTaXRlIHRlbXBsYXRlOiBEb24ndCBhbHdheXMgc2hvdyB0aGUgc2Nyb2xsYmFyIGluIGNvZGUgYmxvY2tzICgjMzQxOSkKICAqIFNpdGUgdGVtcGxhdGU6IFJlbW92ZSB1bmRlZmluZWQgYHRleHRgIGNsYXNzIGZyb20gYHBgIGVsZW1lbnQgKCMzNDQwKQogICogU2l0ZSB0ZW1wbGF0ZTogT3B0aW1pemUgdGV4dCByZW5kZXJpbmcgZm9yIGxlZ2liaWxpdHkgKCMzMzgyKQogICogQWRkIGBkcmFmdD9gIG1ldGhvZCB0byBpZGVudGlmeSBpZiBQb3N0IGlzIGEgRHJhZnQgJiBleHBvc2UgdG8gTGlxdWlkICgjMzQ1NikKICAqIFdyaXRlIHJlZ2VuZXJhdGlvbiBtZXRhZGF0YSBldmVuIG9uIGZ1bGwgcmVidWlsZCAoIzM0NjQpCiAgKiBQZXJmOiBVc2UgYFN0cmluZyNlbmRfd2l0aD8oIi8iKWAgaW5zdGVhZCBvZiByZWdleHAgd2hlbiBjaGVja2luZyBwYXRocyAoIzM1MTYpCiAgKiBEb2NzOiBkb2N1bWVudCAnb3JkaW5hbCcgYnVpbHQtaW4gcGVybWFsaW5rIHN0eWxlICgjMzUzMikKICAqIFVwZ3JhZGUgbGlxdWlkLWMgdG8gMy54ICgjMzUzMSkKICAqIFVzZSBjb25zaXN0ZW50IHN5bnRheCBmb3IgZGVwcmVjYXRpb24gd2FybmluZyAoIzM1MzUpCiAgKiBBZGRlZCBidWlsZCAtLWRlc3RpbmF0aW9uIGFuZCAtLXNvdXJjZSBmbGFncyAoIzM0MTgpCiAgKiBTaXRlIHRlbXBsYXRlOiByZW1vdmUgdW51c2VkIGBwYWdlLm1ldGFgIGF0dHJpYnV0ZSAoIzM1MzcpCiAgKiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gc29ydGluZyBudWxsIG9iamVjdHMgKCMzNTIwKQogICogQWRkZWQgbGlxdWlkLW1kNSBwbHVnaW4gKCMzNTk4KQogICogRG9jdW1lbnRhdGlvbjogUlIgcmVwbGFjZWQgd2l0aCBSU3BlYyBNb2NrcyAoIzM2MDApCiAgKiBEb2N1bWVudGF0aW9uOiBGaXggc3VicGF0aC4gKCMzNTk5KQogICogQ3JlYXRlICd0bXAnIGRpciBmb3IgdGVzdF90YWdzIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKCMzNjA5KQogICogRXh0cmFjdCByZWFkaW5nIG9mIGRhdGEgZnJvbSBgU2l0ZWAgdG8gcmVkdWNlIHJlc3BvbnNpYmlsaXRpZXMuICgjMzU0NSkKICAqIFJlbW92ZWQgdGhlIHdvcmQgJ0pla3lsbCcgYSBmZXcgdGltZXMgZnJvbSB0aGUgY29tbWVudHMgKCMzNjE3KQogICogYGJpbi9qZWt5bGxgOiB3aXRoIG5vIGFyZ3MsIGV4aXQgd2l0aCBleGl0IGNvZGUgMSAoIzM2MTkpCiAgKiBJbmNyZW1lbnRhbCBidWlsZCBpZiBkZXN0aW5hdGlvbiBmaWxlIG1pc3NpbmcgKCMzNjE0KQogICogU3RhdGljIGZpbGVzIGBtdGltZWAgbGlxdWlkIHNob3VsZCByZXR1cm4gYSBgVGltZWAgb2JqICgjMzU5NikKICAqIFVzZSBgSmVreWxsOjpQb3N0YHMgZm9yIGJvdGggTFNJIGluZGV4aW5nIGFuZCBsb29rdXAuICgjMzYyOSkKICAqIEFkZCBgY2hhcnNldD11dGYtOGAgZm9yIEhUTUwgYW5kIFhNTCBwYWdlcyBpbiBXRUJyaWNrICgjMzY0OSkKICAqIFNldCBsb2cgbGV2ZWwgdG8gZGVidWcgd2hlbiB2ZXJib3NlIGZsYWcgaXMgc2V0ICgjMzY2NSkKICAqIEFkZGVkIGEgbWVudGlvbiBvbiB0aGUgR2VtZmlsZSB0byBjb21wbGV0ZSB0aGUgaW5zdHJ1Y3Rpb25zICgjMzY3MSkKICAqIFBlcmY6IENhY2hlIGBEb2N1bWVudCN0b19saXF1aWRgIGFuZCBpbnZhbGlkYXRlIHdoZXJlIG5lY2Vzc2FyeSAoIzM2OTMpCiAgKiBQZXJmOiBgSmVreWxsOjpDbGVhbmVyI2V4aXN0aW5nX2ZpbGVzYDogQ2FsbCBga2VlcF9maWxlX3JlZ2V4YCBhbmQgYGtlZXBfZGlyc2Agb25seSBvbmNlLCBub3Qgb25jZSBwZXIgaXRlcmF0aW9uICgjMzY5NikKICAqIE9taXQgamVreWxsL2pla3lsbC1oZWxwIGZyb20gbGlzdCBvZiByZXNvdXJjZXMuICgjMzY5OCkKICAqIEFkZCBiYXNpYyBgamVreWxsIGRvY3RvcmAgdGVzdCB0byBkZXRlY3QgZnNub3RpZnkgKE9TWCkgYW5vbWFsaWVzLiAoIzM3MDQpCiAgKiBBZGRlZCB0YWxrLmpla3lsbHJiLmNvbSB0byAiSGF2ZSBxdWVzdGlvbnM/IiAoIzM2OTQpCiAgKiBQZXJmb3JtYW5jZTogU29ydCBmaWxlcyBvbmx5IG9uY2UgKCMzNzA3KQogICogUGVyZm9ybWFuY2U6IE1hcnNoYWwgbWV0YWRhdGEgKCMzNzA2KQogICogVXBncmFkZSBoaWdobGlnaHQgd3JhcHBlciBmcm9tIGBkaXZgIHRvIGBmaWd1cmVgICgjMzc3OSkKICAqIFVwZ3JhZGUgbWltZS10eXBlcyB0byBgfj4gMi42YCAoIzM3OTUpCiAgKiBVcGRhdGUgd2luZG93cy5tZCB3aXRoIFJ1YnkgdmVyc2lvbiBpbmZvICgjMzgxOCkKICAqIE1ha2UgdGhlIGRpcmVjdG9yeSBmb3IgaW5jbHVkZXMgY29uZmlndXJhYmxlICgjMzc4MikKICAqIFJlbmFtZSBkaXJlY3RvcnkgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggYCpfZGlyYCBjb252ZW50aW9uIGZvciBjb25zaXN0ZW5jeSAoIzM3ODIpCiAgKiBJbnRlcm5hbDogdHJpZ2dlciBob29rcyBieSBvd25lciBzeW1ib2wgKCMzODcxKQogICogVXBkYXRlIE1JTUUgdHlwZXMgZnJvbSBtaW1lLWRiICgjMzkzMykKICAqIEFkZCBoZWFkZXIgdG8gc2l0ZSB0ZW1wbGF0ZSBgX2NvbmZpZy55bWxgIGZvciBjbGFyaXR5ICYgZGlyZWN0aW9uICgjMzk5NykKICAqIFNpdGUgdGVtcGxhdGU6IGFkZCB0aW1lem9uZSBvZmZzZXQgdG8gcG9zdCBkYXRlIGZyb250bWF0dGVyICgjNDAwMSkKICAqIE1ha2UgYSBjb25zdGFudCBmb3IgdGhlIHJlZ2V4IHRvIGZpbmQgaGlkZGVuIGZpbGVzICgjNDAzMikKICAqIFNpdGUgdGVtcGxhdGU6IHJlZmFjdG9yIGdpdGh1YiAmIHR3aXR0ZXIgaWNvbnMgaW50byBpbmNsdWRlcyAoIzQwNDkpCiAgKiBTaXRlIHRlbXBsYXRlOiBhZGQgYmFja2dyb3VuZCB0byBLcmFtZG93biBSb3VnZS1pZmllZCBiYWNrdGljayBjb2RlIGJsb2NrcyAoIzQwNTMpCgojIyMgQnVnIEZpeGVzCgogICogYHBvc3RfdXJsYDogZml4IGFjY2VzcyBkZXByZWNhdGlvbiB3YXJuaW5nICYgZml4IGRlcHJlY2F0aW9uIG1zZyAoIzQwNjApCiAgKiBQZXJmb3JtIGpla3lsbC1wYWdpbmF0ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGNvcnJlY3RseS4gKCMzNTgwKQogICogTWFrZSBwZXJtYWxpbmsgcGFyc2luZyBjb25zaXN0ZW50IHdpdGggcGFnZXMgKCMzMDE0KQogICogYHRpbWUoKWBwcmUtZmlsdGVyIG1ldGhvZCBzaG91bGQgYWNjZXB0IGEgYERhdGVgIG9iamVjdCAoIzMyOTkpCiAgKiBSZW1vdmUgdW5uZWVkZWQgZW5kIHRhZyBmb3IgYGxpbmtgIGluIHNpdGUgdGVtcGxhdGUgKCMzMjM2KQogICogS3JhbWRvd246IFVzZSBgZW5hYmxlX2NvZGVyYXlgIGtleSBpbnN0ZWFkIG9mIGB1c2VfY29kZXJheWAgKCMzMjM3KQogICogVW5lc2NhcGUgYERvY3VtZW50YCBvdXRwdXQgcGF0aCAoIzI5MjQpCiAgKiBGaXggbmF2IGl0ZW1zIGFsaWdubWVudCB3aGVuIG9uIG11bHRpcGxlIHJvd3MgKCMzMjY0KQogICogSGlnaGxpZ2h0OiBPbmx5IFN0cmlwIE5ld2xpbmVzL0NhcnJpYWdlIFJldHVybnMsIG5vdCBTcGFjZXMgKCMzMjc4KQogICogRmluZCB2YXJpYWJsZXMgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzIGJ5IHNlYXJjaGluZyB3aXRoIHJlbGF0aXZlIGZpbGUgcGF0aC4gKCMyNzc0KQogICogQWxsb3cgdmFyaWFibGVzIChlLmcgYDpjYXRlZ29yaWVzYCkgaW4gWUFNTCBmcm9udCBtYXR0ZXIgcGVybWFsaW5rcyAoIzMzMjApCiAgKiBIYW5kbGUgbmlsIFVSTCBwbGFjZWhvbGRlcnMgaW4gcGVybWFsaW5rcyAoIzMzMjUpCiAgKiBUZW1wbGF0ZTogRml4IG5hdiBpdGVtcyBhbGlnbm1lbnQgd2hlbiBpbiAiYnVyZ2VyIiBtb2RlICgjMzMyOSkKICAqIFRlbXBsYXRlOiBSZW1vdmUgYCFpbXBvcnRhbnRgIGZyb20gbmF2IFNDU1MgaW50cm9kdWNlZCBpbiAjMzMyOSAoIzMzNzUpCiAgKiBUaGUgYDp0aXRsZWAgVVJMIHBsYWNlaG9sZGVyIGZvciBjb2xsZWN0aW9ucyBzaG91bGQgYmUgdGhlIGZpbGVuYW1lIHNsdWcuICgjMzM4MykKICAqIFRyaW0gdGhlIGdlbmVyYXRlIHRpbWUgZGlmZiB0byBqdXN0IDMgcGxhY2VzIHBhc3QgdGhlIGRlY2ltYWwgcGxhY2UgKCMzNDE1KQogICogVGhlIGhpZ2hsaWdodCB0YWcgc2hvdWxkIG9ubHkgY2xpcCB0aGUgbmV3bGluZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgKmVudGlyZSogYmxvY2ssIG5vdCBpbiBiZXR3ZWVuICgjMzQwMSkKICAqIGhpZ2hsaWdodDogZml4IHByb2JsZW0gd2l0aCBsaW5lbm9zIGFuZCByb3VnZS4gKCMzNDM2KQogICogYFNpdGUjcmVhZF9kYXRhX2ZpbGVgOiByZWFkIENTVidzIHdpdGggcHJvcGVyIGZpbGUgZW5jb2RpbmcgKCMzNDU1KQogICogSWdub3JlIGAuamVreWxsLW1ldGFkYXRhYCBpbiBzaXRlIHRlbXBsYXRlICgjMzQ5NikKICAqIFRlbXBsYXRlOiBQb2ludCBkb2N1bWVudGF0aW9uIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24gcGFnZXMgKCMzNTAyKQogICogUmVtb3ZlZCB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZXhhbXBsZSBgL2Jsb2dgIGJhc2V1cmwgY29tbWVudCAoIzM0ODUpCiAgKiBDbGVhciB0aGUgcmVnZW5lcmF0b3IgY2FjaGUgZXZlcnkgdGltZSB3ZSBwcm9jZXNzICgjMzU5MikKICAqIFJlYWRkIChicmluZyBiYWNrKSBtaW5pdGVzdC1wcm9maWxlICgjMzYyOCkKICAqIEFkZCBXT0ZGMiBmb250IE1JTUUgdHlwZSB0byBKZWt5bGwgc2VydmVyIE1JTUUgdHlwZXMgKCMzNjQ3KQogICogQmUgc21hcnRlciBhYm91dCBleHRyYWN0aW5nIHRoZSBleHRuYW1lIGluIGBTdGF0aWNGaWxlYCAoIzM2MzIpCiAgKiBQcm9jZXNzIG1ldGFkYXRhIGZvciBhbGwgZGVwZW5kZW5jaWVzICgjMzYwOCkKICAqIFNob3cgZXJyb3IgbWVzc2FnZSBpZiB0aGUgWUFNTCBmcm9udCBtYXR0ZXIgb24gYSBwYWdlL3Bvc3QgaXMgaW52YWxpZC4gKCMzNjQzKQogICogVXBncmFkZSByZWRjYXJwZXQgdG8gMy4yIChTZWN1cml0eSBmaXg6IE9TVkRCLTEyMDQxNSkgKCMzNjUyKQogICogQ3JlYXRlICNtb2NrX2V4cGVjdHMgdGhhdCBnb2VzIGRpcmVjdGx5IHRvIFJTcGVjIE1vY2tzLiAoIzM2NTgpCiAgKiBPcGVuIGAuamVreWxsLW1ldGFkYXRhYCBpbiBiaW5hcnkgbW9kZSB0byByZWFkIGJpbmFyeSBNYXJzaGFsIGRhdGEgKCMzNzEzKQogICogSW5jcmVtZW50YWwgcmVnZW5lcmF0aW9uOiBoYW5kbGUgZGVsZXRlZCwgcmVuYW1lZCwgYW5kIG1vdmVkIGRlcGVuZGVuY2llcyAoIzM3MTcpCiAgKiBGaXggdHlwbyBvbiBsaW5lIDE5IG9mIHBhZ2luYXRpb24ubWQgKCMzNzYwKQogICogRml4IGl0IHNvIHRoYXQgJ2Jsb2cuaHRtbCcgbWF0Y2hlcyAnYmxvZy5odG1sJyAoIzM3MzIpCiAgKiBSZW1vdmUgb2NjYXNpb25hbGx5LXByb2JsZW1hdGljIGBlbnN1cmVgIGluIGBMaXF1aWRSZW5kZXJlcmAgKCMzODExKQogICogRml4ZWQgYW4gdW5jbGVhciBjb2RlIGNvbW1lbnQgaW4gc2l0ZSB0ZW1wbGF0ZSBTQ1NTICgjMzgzNykKICAqIEZpeCByZWFkaW5nIG9mIGJpbmFyeSBtZXRhZGF0YSBmaWxlICgjMzg0NSkKICAqIFJlbW92ZSB2YXIgY29sbGlzaW9uIHdpdGggc2l0ZSB0ZW1wbGF0ZSBoZWFkZXIgbWVudSBpdGVyYXRpb24gdmFyaWFibGUgKCMzODM4KQogICogQ2hhbmdlIG5vbi1leGlzdGVudCBgaGxfbGluZW5vc2AgdG8gYGhsX2xpbmVzYCB0byBhbGxvdyBwYXNzdGhyb3VnaCBpbiBzYWZlIG1vZGUgKCMzNzg3KQogICogQWRkIG1pc3NpbmcgZmxhZyB0byBkaXNhYmxlIHRoZSB3YXRjaGVyICgjMzgyMCkKICAqIFVwZGF0ZSBDSSBndWlkZSB0byBpbmNsdWRlIG1vcmUgZGlyZWN0IGV4cGxhbmF0aW9ucyBvZiB0aGUgZmxvdyAoIzM4OTEpCiAgKiBTZXQgYGZ1dHVyZWAgdG8gYGZhbHNlYCBpbiB0aGUgZGVmYXVsdCBjb25maWcgKCMzODkyKQogICogZmlsdGVyczogYHdoZXJlYCBzaG91bGQgY29tcGFyZSBzdHJpbmdpZmllZCB2ZXJzaW9ucyBvZiBpbnB1dCAmIGNvbXBhcmF0b3IgKCMzOTM1KQogICogUmVhZCBidWlsZCBvcHRpb25zIGZvciBgamVreWxsIGNsZWFuYCBjb21tYW5kICgjMzgyOCkKICAqIEZpeCAjMzk3MDogVXNlIEdlbTo6VmVyc2lvbiB0byBjb21wYXJlIHZlcnNpb25zLCBub3QgYD5gLgogICogQWJvcnQgaWYgbm8gc3ViY29tbWFuZC4gRml4ZXMgY29uZnVzaW5nIG1lc3NhZ2UuICgjMzk5MikKICAqIFdob2xlLXBvc3QgZXhjZXJwdHMgc2hvdWxkIG1hdGNoIHRoZSBwb3N0IGNvbnRlbnQgKCM0MDA0KQogICogQ2hhbmdlIGRlZmF1bHQgZm9udCB3ZWlnaHQgdG8gNDAwIHRvIGZpeCBib2xkL3N0cm9uZyB0ZXh0IGlzc3VlcyAoIzQwNTApCiAgKiBEb2N1bWVudDogT25seSBhdXRvLWdlbmVyYXRlIHRoZSBleGNlcnB0IGlmIGl0J3Mgbm90IG92ZXJyaWRkZW4gKCM0MDYyKQogICogVXRpbHM6IGBkZWVwX21lcmdlX2hhc2hlc2Agc2hvdWxkIGFsc28gbWVyZ2UgYGRlZmF1bHRfcHJvY2AgKDQ1ZjY5YmIpCiAgKiBEZWZhdWx0czogY29tcGFyZSBwYXRocyBpbiBgYXBwbGllc19wYXRoP2AgYXMgYFN0cmluZ2BzIHRvIGF2b2lkIGNvbmZ1c2lvbiAoN2I4MWYwMCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIFJlbW92ZSBsb2FkZXIucmIgYW5kICJtb2Rlcm5pemUiIGBzY3JpcHQvdGVzdGAuICgjMzU3NCkKICAqIEltcHJvdmUgdGhlIGdyYW1tYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gKCMzMjMzKQogICogVXBkYXRlIHRoZSBMSUNFTlNFIHRleHQgdG8gbWF0Y2ggdGhlIE1JVCBsaWNlbnNlIGV4YWN0bHkgKCMzMjUzKQogICogVXBkYXRlIHJha2UgdGFzayBgc2l0ZTpwdWJsaXNoYCB0byBmaXggbWlub3IgYnVncy4gKCMzMjU0KQogICogU3dpdGNoIHRvIHNoaWVsZHMuaW8gZm9yIHRoZSBSRUFETUUgYmFkZ2VzLiAoIzMyNTUpCiAgKiBVc2UgYEZpbGVMaXN0YCBpbnN0ZWFkIG9mIGBEaXIuZ2xvYmAgaW4gYHNpdGU6cHVibGlzaGAgcmFrZSB0YXNrICgjMzI2MSkKICAqIEZpeCB0ZXN0IHNjcmlwdCB0byBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCAoIzMyNzkpCiAgKiBJbnN0ZWFkIG9mIHN5bWxpbmtpbmcgYC90bXBgLCBjcmVhdGUgYW5kIHN5bWxpbmsgYSBsb2NhbCBgdG1wYCBpbiB0aGUgdGVzdHMgKCMzMjU4KQogICogRml4IHNvbWUgc3BhY2luZyAoIzMzMTIpCiAgKiBGaXggY29tbWVudCB0eXBvIGluIGBsaWIvamVreWxsL2Zyb250bWF0dGVyX2RlZmF1bHRzLnJiYCAoIzMzMjIpCiAgKiBNb3ZlIGFsbCBgcmVnZW5lcmF0ZT9gIGNoZWNraW5nIHRvIGBSZWdlbmVyYXRvcmAgKCMzMzI2KQogICogRmFjdG9yIG91dCBhIGByZWFkX2RhdGFfZmlsZWAgY2FsbCB0byBrZWVwIHRoaW5ncyBjbGVhbiAoIzMzODApCiAgKiBQcm9vZiB0aGUgc2l0ZSB3aXRoIENpcmNsZUNJLiAoIzM0MjcpCiAgKiBVcGRhdGUgTElDRU5TRSB0byAyMDE1LiAoIzM0NzcpCiAgKiBVcGdyYWRlIHRlc3RzIHRvIHVzZSBNaW5pdGVzdCAoIzM0OTIpCiAgKiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSAoIzM0OTcpCiAgKiBVc2UgYGZpeHR1cmVfc2l0ZWAgZm9yIERvY3VtZW50IHRlc3RzICgjMzUxMSkKICAqIFJlbW92ZSBhZGFwdGVycyBkZXByZWNhdGlvbiB3YXJuaW5nICgjMzUyOSkKICAqIE1pbm9yIGZpeGVzIHRvIGB1cmwucmJgIHRvIGZvbGxvdyBHaXRIdWIgc3R5bGUgZ3VpZGUgKCMzNTQ0KQogICogTWlub3IgY2hhbmdlcyB0byByZXNvbHZlIGRlcHJlY2F0aW9uIHdhcm5pbmdzICgjMzU0NykKICAqIENvbnZlcnQgcmVtYWluaW5nIHRleHRpbGUgdGVzdCBkb2N1bWVudHMgdG8gbWFya2Rvd24gKCMzNTI4KQogICogTWlncmF0ZSB0aGUgdGVzdHMgdG8gdXNlIHJzcGVjLW1vY2tzICgjMzU1MikKICAqIFJlbW92ZSBgYWN0aXZlc3VwcG9ydGAgKCMzNjEyKQogICogQWRkZWQgdGVzdHMgZm9yIGBKZWt5bGw6U3RhdGljRmlsZWAgKCMzNjMzKQogICogRm9yY2UgbWluaXRlc3QgdmVyc2lvbiB0byA1LjUuMSAoIzM2NTcpCiAgKiBVcGRhdGUgdGhlIHdheSBjdWN1bWJlciBhY2Nlc3NlcyBNaW5pdGVzdCBhc3NlcnRpb25zICgjMzY3OCkKICAqIEFkZCBgc2NyaXB0L3J1Ynlwcm9mYCB0byBnZW5lcmF0ZSBjYWNoZWdyaW5kIGNhbGxncmFwaHMgKCMzNjkyKQogICogVXBncmFkZSBjdWN1bWJlciB0byAyLnggKCMzNzk1KQogICogVXBkYXRlIEtyYW1kb3duLiAoIzM4NTMpCiAgKiBVcGRhdGVkIHRoZSBzY3JpcHRzIHNoZWJhbmcgZm9yIHBvcnRhYmlsaXR5ICgjMzg1OCkKICAqIFVwZGF0ZSBKUnVieSB0ZXN0aW5nIHRvIDlLIChbM2FiMzg2Zl0oaHR0cHM6Ly9naXRodWIuY29tL2pla3lsbC9qZWt5bGwvY29tbWl0LzNhYjM4NmYxYjA5NmJlMjVhMjRmZTAzOGZjNzBmZDBmYjA4ZDU0NWQpKQogICogT3JnYW5pemUgZGVwZW5kZW5jaWVzIGludG8gZGV2IGFuZCB0ZXN0IGdyb3Vwcy4gKCMzODUyKQogICogQ29udHJpYnV0aW5nLm1kIHNob3VsZCByZWZlciB0byBgc2NyaXB0L2N1Y3VtYmVyYCAoIzM4OTQpCiAgKiBVcGRhdGUgY29udHJpYnV0aW5nIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB3b3JrZmxvdyB1cGRhdGVzICgjMzg5NSkKICAqIEFkZCBzY3JpcHQgdG8gdmVuZG9yIG1pbWUgdHlwZXMgKCMzOTMzKQogICogSWdub3JlIC5idW5kbGUgZGlyIGluIFNpbXBsZUNvdiAoIzQwMzMpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgJ2luZm8nIGxhYmVscyB0byBjZXJ0YWluIG5vdGVzIGluIGNvbGxlY3Rpb25zIGRvY3MgKCMzNjAxKQogICogUmVtb3ZlIGV4dHJhIHNwYWNlcywgbWFrZSB0aGUgbGFzdCBzZW50ZW5jZSBsZXNzIGF3a3dhcmQgaW4gcGVybWFsaW5rIGRvY3MgKCMzNjAzKQogICogVXBkYXRlIHRoZSBwZXJtYWxpbmtzIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB0aGUgdXBkYXRlcyBmb3IgMy4wICgjMzU1NikKICAqIEFkZCBibG9nIHBvc3QgYW5ub3VuY2luZyBKZWt5bGwgSGVscCAoIzM1MjMpCiAgKiBBZGQgSmVreWxsIFRhbGsgdG8gSGVscCBwYWdlIG9uIHNpdGUgKCMzNTE4KQogICogQ2hhbmdlIEFqYXggcGFnaW5hdGlvbiByZXNvdXJjZSBsaW5rIHRvIHVzZSBIVFRQUyAoIzM1NzApCiAgKiBGaXhpbmcgdGhlIGRlZmF1bHQgaG9zdCBvbiBkb2NzICgjMzIyOSkKICAqIEFkZCBgamVreWxsLXRodW1ibmFpbC1maWx0ZXJgIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI3OTApCiAgKiBBZGQgbGluayB0byAnQWRkaW5nIEFqYXggcGFnaW5hdGlvbiB0byBKZWt5bGwnIHRvIFJlc291cmNlcyBwYWdlICgjMzE4NikKICAqIEFkZCBhIFJlc291cmNlcyBsaW5rIHRvIHR1dG9yaWFsIG9uIGJ1aWxkaW5nIGR5bmFtaWMgbmF2YmFycyAoIzMxODUpCiAgKiBTZW1hbnRpYyBzdHJ1Y3R1cmUgaW1wcm92ZW1lbnRzIHRvIHRoZSBwb3N0IGFuZCBwYWdlIGxheW91dHMgKCMzMjUxKQogICogQWRkIG5ldyBBc2NpaURvYyBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zLiAoIzMyNzcpCiAgKiBTcGVjaWZ5IHRoYXQgYWxsIHRyYW5zZm9ybWFibGUgY29sbGVjdGlvbiBkb2N1bWVudHMgbXVzdCBjb250YWluIFlBTUwgZnJvbnQgbWF0dGVyICgjMzI3MSkKICAqIEFzc29ydGVkIGFjY2Vzc2liaWxpdHkgZml4ZXMgKCMzMjU2KQogICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZG9jcyB0byBtZW50aW9uIGBrZWVwX2ZpbGVzYCBmb3IgYGRlc3RpbmF0aW9uYCAoIzMyODgsICMzMjk2KQogICogQnJlYWsgd2hlbiB3ZSBzdWNjZXNzZnVsbHkgZ2VuZXJhdGUgbmF2IGxpbmsgdG8gc2F2ZSBDUFUgY3ljbGVzLiAoIzMyOTEpCiAgKiBVcGRhdGUgdXNhZ2UgZG9jcyB0byBtZW50aW9uIGBrZWVwX2ZpbGVzYCBhbmQgYSB3YXJuaW5nIGFib3V0IGBkZXN0aW5hdGlvbmAgY2xlYW5pbmcgKCMzMjk1KQogICogQWRkIGxvZ2ljIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIGBuZXh0X3NlY3Rpb25gIGFuZCBgcHJldl9zZWN0aW9uYCBuYXZpZ2F0aW9uIGl0ZW1zICgjMzI5MikKICAqIFNvbWUgc21hbGwgZml4ZXMgZm9yIHRoZSBQbHVnaW5zIFRPQy4gKCMzMzA2KQogICogQWRkZWQgdmVyc2lvbmluZyBjb21tZW50IHRvIGNvbmZpZ3VyYXRpb24gZmlsZSAoIzMzMTQpCiAgKiBBZGQgYGpla3lsbC1taW5pZmllcmAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzMzMykKICAqIEFkZCBibG9nIHBvc3QgYWJvdXQgdGhlIEpla3lsbCBtZWV0LXVwICgjMzMzMikKICAqIFVzZSBgaGlnaGxpZ2h0YCBMaXF1aWQgdGFnIGluc3RlYWQgb2YgdGhlIGZvdXItc3BhY2UgdGFicyBmb3IgY29kZSAoIzMzMzYpCiAgKiAzLjAuMC5iZXRhMSByZWxlYXNlIHBvc3QgKCMzMzQ2KQogICogQWRkIGB0d2FgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMzg0KQogICogUmVtb3ZlIGV4dHJhIHNwYWNlcyAoIzMzODgpCiAgKiBGaXggc21hbGwgZ3JhbW1hciBlcnJvcnMgb24gYSBjb3VwbGUgcGFnZXMgKCMzMzk2KQogICogRml4IHR5cG8gb24gVGVtcGxhdGVzIGRvY3MgcGFnZSAoIzM0MjApCiAgKiBzL3RocmVlL2ZvdXIgZm9yIHBsdWdpbiB0eXBlIGxpc3QgKCMzNDI0KQogICogUmVsZWFzZSBqZWt5bGxyYi5jb20gYXMgYSBsb2NhbGx5LWNvbXBpbGVkIHNpdGUuICgjMzQyNikKICAqIEFkZCBhIGpla3lsbHJiLmNvbS9oZWxwIHBhZ2Ugd2hpY2ggZWx1Y2lkYXRlcyBwbGFjZXMgZnJvbSB3aGljaCB0byBnZXQgaGVscCAoIzM0MjgpCiAgKiBSZW1vdmUgZXh0cmFuZW91cyBkYXNoIG9uIFBsdWdpbnMgZG9jIHBhZ2Ugd2hpY2ggY2F1c2VkIGEgZm9ybWF0dGluZyBlcnJvciAoIzM0MzEpCiAgKiBGaXggYnJva2VuIGxpbmsgdG8gSm9yZGFuIFRob3JucXVlc3QncyB3ZWJzaXRlLiAoIzM0MzgpCiAgKiBDaGFuZ2UgdGhlIGxpbmsgdG8gYW4gZXh0ZW5zaW9uICgjMzQ1NykKICAqIEZpeCBUd2l0dGVyIGxpbmsgb24gdGhlIGhlbHAgcGFnZSAoIzM0NjYpCiAgKiBGaXggd29yZGluZyBpbiBjb2RlIHNuaXBwZXQgaGlnaGxpZ2h0aW5nIHNlY3Rpb24gKCMzNDc1KQogICogQWRkIGEgYC9gIHRvIGBwYWdpbmF0ZV9wYXRoYCBpbiB0aGUgUGFnaW5hdGlvbiBkb2N1bWVudGF0aW9uICgjMzQ3OSkKICAqIEFkZCBhIGxpbmsgb24gYWxsIHRoZSBkb2NzIHBhZ2VzIHRvICJJbXByb3ZlIHRoaXMgcGFnZSIuICgjMzUxMCkKICAqIEFkZCBqZWt5bGwtYXV0by1pbWFnZSBnZW5lcmF0b3IgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzM0ODkpCiAgKiBSZXBsYWNlIGxpbmsgdG8gdGhlIHByb3Bvc2VkIGBwaWN0dXJlYCBlbGVtZW50IHNwZWMgKCMzNTMwKQogICogQWRkIGZyb250bWF0dGVyIGRhdGUgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoIzM0NjkpCiAgKiBJbXByb3ZlIGNvbnNpc3RlbmN5IGFuZCBjbGFyaXR5IG9mIHBsdWdpbnMgb3B0aW9ucyBub3RlICgjMzU0NikKICAqIEFkZCBwZXJtYWxpbmsgd2FybmluZyB0byBwYWdpbmF0aW9uIGRvY3MgKCMzNTUxKQogICogRml4IGdyYW1tYXIgaW4gQ29sbGVjdGlvbnMgZG9jcyBBUEkgc3RhYmlsaXR5IHdhcm5pbmcgKCMzNTYwKQogICogUmVzdHJ1Y3R1cmUgYGV4Y2VycHRfc2VwYXJhdG9yYCBkb2N1bWVudGF0aW9uIGZvciBjbGFyaXR5ICgjMzU1MCkKICAqIEZpeCBhY2NpZGVudGFsIGxpbmUgYnJlYWsgaW4gY29sbGVjdGlvbnMgZG9jcyAoIzM1ODUpCiAgKiBBZGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGAuamVreWxsLW1ldGFkYXRhYCBmaWxlICgjMzU5NykKICAqIERvY3VtZW50IGFkZGl0aW9uIG9mIHZhcmlhYmxlIHBhcmFtZXRlcnMgdG8gYW4gaW5jbHVkZSAoIzM1ODEpCiAgKiBBZGQgYGpla3lsbC1maWxlc2AgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucy4gKCMzNTg2KQogICogRGVmaW5lIHRoZSBgaW5zdGFsbGAgc3RlcCBpbiB0aGUgQ0kgZXhhbXBsZSBgLnRyYXZpcy55bWxgICgjMzYyMikKICAqIEV4cGFuZCBjb2xsZWN0aW9ucyBkb2N1bWVudGF0aW9uLiAoIzM2MzgpCiAgKiBBZGQgdGhlICJ3YXJuaW5nIiBub3RlIGxhYmVsIHRvIGV4Y2x1ZGluZyBgdmVuZG9yYCBpbiB0aGUgQ0kgZG9jcyBwYWdlICgjMzYyMykKICAqIFVwZ3JhZGUgcGllY2VzIG9mIHRoZSBVZ3JhZGluZyBndWlkZSBmb3IgSmVreWxsIDMgKCMzNjA3KQogICogU2hvd2luZyBob3cgdG8gYWNjZXNzIHNwZWNpZmljIGRhdGEgaXRlbXMgKCMzNDY4KQogICogQ2xhcmlmeSBwYWdpbmF0aW9uIHdvcmtzIGZyb20gd2l0aGluIEhUTUwgZmlsZXMgKCMzNDY3KQogICogQWRkIG5vdGUgdG8gYGV4Y2VycHRfc2VwYXJhdG9yYCBkb2N1bWVudGF0aW9uIHRoYXQgaXQgY2FuIGJlIHNldCBnbG9iYWxseSAoIzM2NjcpCiAgKiBGaXggc29tZSBuYW1lcyBvbiBUcm91Ymxlc2hvb3RpbmcgcGFnZSAoIzM2ODMpCiAgKiBBZGQgYHJlbW90ZV9maWxlX2NvbnRlbnRgIHRhZyBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzY5MSkKICAqIFVwZGF0ZSB0aGUgUmVkY2FycGV0IHZlcnNpb24gb24gdGhlIENvbmZpZ3VyYXRpb24gcGFnZS4gKCMzNzQzKQogICogVXBkYXRlIHRoZSBsaW5rIGluIHRoZSB3ZWxjb21lIHBvc3QgdG8gcG9pbnQgdG8gSmVreWxsIFRhbGsgKCMzNzQ1KQogICogVXBkYXRlIGxpbmsgZm9yIG5hdmJhcnMgd2l0aCBkYXRhIGF0dHJpYnV0ZXMgdHV0b3JpYWwgKCMzNzI4KQogICogQWRkIGBqZWt5bGwtYXNjaWluZW1hYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzNzUwKQogICogVXBkYXRlIHBhZ2luYXRpb24gZXhhbXBsZSB0byBiZSBhZ25vc3RpYyB0byBmaXJzdCBwYWdpbmF0aW9uIGRpciAoIzM3NjMpCiAgKiBEZXRhaWxlZCBpbnN0cnVjdGlvbnMgZm9yIHJzeW5jIGRlcGxveW1lbnQgbWV0aG9kICgjMzg0OCkKICAqIEFkZCBKZWt5bGwgUG9ydGZvbGlvIEdlbmVyYXRvciB0byBsaXN0IG9mIHBsdWdpbnMgKCMzODgzKQogICogQWRkIGBzaXRlLmh0bWxfZmlsZXNgIHRvIHZhcmlhYmxlcyBkb2NzICgjMzg4MCkKICAqIEFkZCBTdGF0aWMgUHVibGlzaGVyIHRvb2wgdG8gbGlzdCBvZiBkZXBsb3ltZW50IG1ldGhvZHMgKCMzODY1KQogICogRml4IGEgZmV3IHR5cG9zLiAoIzM4OTcpCiAgKiBBZGQgYGpla3lsbC15b3V0dWJlYCB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzkzMSkKICAqIEFkZCBWaWV3cyBSb3V0ZXIgcGx1Z2luICgjMzk1MCkKICAqIFVwZGF0ZSBpbnN0YWxsIGRvY3MgKENvcmUgZGVwZW5kZW5jaWVzLCBXaW5kb3dzIHJlcXMsIGV0YykgKCMzNzY5KQogICogVXNlIEpla3lsbCBGZWVkIGZvciBqZWt5bGxyYi5jb20gKCMzNzM2KQogICogQWRkIGpla3lsbC11bWxhdXRzIHRvIHBsdWdpbnMubWQgKCQzOTY2KQogICogVHJvdWJsZXNob290aW5nOiBmaXggYnJva2VuIGxpbmssIGFkZCBvdGhlciBtYWMtc3BlY2lmaWMgaW5mbyAoIzM5NjgpCiAgKiBBZGQgYSBuZXcgc2l0ZSBmb3IgbGVhcm5pbmcgcHVycG9zZXMgKCMzOTE3KQogICogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgSmVreWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyAoIzM5ODkpCiAgKiBGaXggYnJva2VuIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiBwYWdlICgjMzk5NCkKICAqIEFkZCB0cm91Ymxlc2hvb3RpbmcgZG9jcyBmb3IgaW5zdGFsbGluZyBvbiBFbCBDYXBpdGFuICgjMzk5OSkKICAqIEFkZCBMYXp5IFR3ZWV0IEVtYmVkZGluZyB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjNDAxNSkKICAqIEFkZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciAyIG9mIDMgb3B0aW9ucyBmb3IgcGx1Z2lucyAoIzQwMTMpCiAgKiBBZGQgYWx0ZXJuYXRpdmUgamVreWxsIGdlbSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zICgjNDAxOCkKICAqIEZpeCBhIGZldyB0eXBvcyBhbmQgZm9ybWF0dGluZyBwcm9ibGVtcy4gKCM0MDIyKQogICogRml4IHByZXR0eSBwZXJtYWxpbmsgZXhhbXBsZSAoIzQwMjkpCiAgKiBOb3RlIHRoYXQgYF9jb25maWcueW1sYCBpcyBub3QgcmVsb2FkZWQgZHVyaW5nIHJlZ2VuZXJhdGlvbiAoIzQwMzQpCiAgKiBBcHBseSBjb2RlIGJsb2NrIGZpZ3VyZSBzeW50YXggdG8gYmxvY2tzIGluIENPTlRSSUJVVElORyAoIzQwNDYpCiAgKiBBZGQgamVreWxsLXNtYXJ0aWZ5IHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzNTcyKQoKIyMgMi41LjMgLyAyMDE0LTEyLTIyCgojIyMgQnVnIEZpeGVzCgogICogV2hlbiBjaGVja2luZyBhIE1hcmtkb3duIGV4dG5hbWUsIGluY2x1ZGUgcG9zaXRpb24gb2YgdGhlIGAuYCAoIzMxNDcpCiAgKiBGaXggYGpzb25pZnlgIExpcXVpZCBmaWx0ZXIgaGFuZGxpbmcgb2YgYm9vbGVhbiB2YWx1ZXMgKCMzMTU0KQogICogQWRkIGNvbW1hIHRvIHZhbHVlIG9mIGB2aWV3cG9ydGAgbWV0YSB0YWcgKCMzMTcwKQogICogU2V0IHRoZSBsaW5rIHR5cGUgZm9yIHRoZSBSU1MgZmVlZCB0byBgYXBwbGljYXRpb24vcnNzK3htbGAgKCMzMTc2KQogICogUmVmYWN0b3IgYCNhc19saXF1aWRgICgjMzE1OCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4Y2x1ZGUgYnVpbHQtaW4gYnVuZGxlcyBmcm9tIGJlaW5nIGFkZGVkIHRvIGNvdmVyYWdlIHJlcG9ydCAoIzMxODApCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYEBhbGZyZWR4aW5nYCB0byB0aGUgYEBqZWt5bGwvY29yZWAgdGVhbS4gOnRhZGE6ICgjMzIxOCkKICAqIERvY3VtZW50IHRoZSBgLXFgIG9wdGlvbiBmb3IgdGhlIGBidWlsZGAgYW5kIGBzZXJ2ZWAgY29tbWFuZHMgKCMzMTQ5KQogICogRml4IHNvbWUgbWlub3IgdHlwb3MvZmxvdyBmaXhlcyBpbiBkb2N1bWVudGF0aW9uIHdlYnNpdGUgY29udGVudCAoIzMxNjUpCiAgKiBBZGQgYGtlZXBfZmlsZXNgIHRvIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiAoIzMxNjIpCiAgKiBSZXBlYXQgd2FybmluZyBhYm91dCBjbGVhbmluZyBvZiB0aGUgYGRlc3RpbmF0aW9uYCBkaXJlY3RvcnkgKCMzMTYxKQogICogQWRkIGpla3lsbC01MDBweC1lbWJlZCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMTYzKQogICogU2ltcGxpZmllZCBwbGF0Zm9ybSBkZXRlY3Rpb24gaW4gR2VtZmlsZSBleGFtcGxlIGZvciBXaW5kb3dzICgjMzE3NykKICAqIEFkZCB0aGUgYGpla3lsbC1qYWxhbGlgIHBsdWdpbiBhZGRlZCB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zLiAoIzMxOTgpCiAgKiBBZGQgVGFibGUgb2YgQ29udGVudHMgdG8gVHJvdWJsZXNob290aW5nIHBhZ2UgKCMzMTk2KQogICogQWRkIGBpbmxpbmVfaGlnaGxpZ2h0YCBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzIxMikKICAqIEFkZCBgamVreWxsLW1lcm1haWRgIHBsdWdpbiB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMjIyKQoKIyMgMi41LjIgLyAyMDE0LTExLTE3CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogYHBvc3RfdXJsYCBzaG91bGQgbWF0Y2ggYHBvc3QubmFtZWAgaW5zdGVhZCBvZiBzbHVncyBhbmQgZGF0ZXMgKCMzMDU4KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBidW5kbGUgcmVxdWlyZSBmb3IgYDpqZWt5bGxfcGx1Z2luc2AgKCMzMTE5KQogICogUmVtb3ZlIGR1cGxpY2F0ZSByZWdleHAgcGhyYXNlOiBgXlxBYCAoIzMwODkpCiAgKiBSZW1vdmUgZHVwbGljYXRlIGBDb252ZXJzaW9uIGVycm9yOmAgbWVzc2FnZSBpbiBgQ29udmVydGlibGVgICgjMzA4OCkKICAqIFByaW50IGZ1bGwgY29udmVyc2lvbiBlcnJvciBtZXNzYWdlIGluIGBSZW5kZXJlciNjb252ZXJ0YCAoIzMwOTApCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2UgdmFyaWFibGUgbmFtZXMgaW4gR29vZ2xlIEFuYWx5dGljcyBzY3JpcHQgKCMzMDkzKQogICogTWVudGlvbiBDU1YgZmlsZXMgaW4gdGhlIGRvY3MgZm9yIGRhdGEgZmlsZXMgKCMzMTAxKQogICogQWRkIHRyYWlsaW5nIHNsYXNoIHRvIGBwYWdpbmF0ZV9wYXRoYCBleGFtcGxlLiAoIzMwOTEpCiAgKiBHZXQgcmlkIG9mIG5vaWZuaW9mIChgZXhjZXJwdF9zZXBhcmF0b3JgKSAoIzMwOTQpCiAgKiBTYXNzIGltcHJvdmVtZW50cywgYXJvdW5kIG5lc3RpbmcgbW9zdGx5LiAoIzMxMjMpCiAgKiBBZGQgd2VibWVudGlvbnMuaW8gcGx1Z2luIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMTI3KQogICogQWRkIFNhc3MgbWl4aW5zIGFuZCB1c2UgdGhlbS4gKCMyOTA0KQogICogU2xpZ2h0bHkgY29tcHJlc3MgamVreWxsLXN0aWNrZXIuanBnLiAoIzMxMzMpCiAgKiBVcGRhdGUgZ3JpZGlzbSBhbmQgc2VwYXJhdGUgb3V0IHJlbGF0ZWQgYnV0IGN1c3RvbSBzdHlsZXMuICgjMzEzMikKICAqIEFkZCByZW1vdGUtaW5jbHVkZSBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzEzNikKCiMjIDIuNS4xIC8gMjAxNC0xMS0wOQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBwYXRoIHNhbml0YXRpb24gYnVnIHJlbGF0ZWQgdG8gV2luZG93cyBkcml2ZSBuYW1lcyAoIzMwNzcpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBBZGQgZGV2ZWxvcG1lbnQgdGltZSBkZXBlbmRlbmNpZXMgb24gbWluaXRlc3QgYW5kIHRlc3QtdW5pdCB0byBnZW1zcGVjIGZvciBjeWd3aW4gKCMzMDY0KQogICogVXNlIFRyYXZpcydzIGJ1aWx0LWluIGNhY2hpbmcuICgjMzA3NSkKCiMjIDIuNS4wIC8gMjAxNC0xMS0wNgoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFJlcXVpcmUgZ2VtcyBpbiBgOmpla3lsbF9wbHVnaW5zYCBHZW1maWxlIGdyb3VwIHVubGVzcyBgSkVLWUxMX05PX0JVTkRMRVJfUkVRVUlSRWAgaXMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudC4gKCMyODY1KQogICogQ2VudHJhbGl6ZSBwYXRoIHNhbml0YXRpb24gaW4gdGhlIGBTaXRlYCBvYmplY3QgKCMyODgyKQogICogQWxsb3cgcGxhY2Vob2xkZXJzIGluIHBlcm1hbGlua3MgKCMzMDMxKQogICogQWxsb3cgdXNlcnMgdG8gc3BlY2lmeSB0aGUgbG9nIGxldmVsIHZpYSBgSkVLWUxMX0xPR19MRVZFTGAuICgjMzA2NykKICAqIEZhbmN5IEluZGV4aW5nIHdpdGggV0VCcmljayAoIzMwMTgpCiAgKiBBbGxvdyBFbnVtZXJhYmxlcyB0byBiZSB1c2VkIHdpdGggYHdoZXJlYCBmaWx0ZXIuICgjMjk4NikKICAqIE1ldGEgZGVzY3JpcHRpb25zIGluIHRoZSBzaXRlIHRlbXBsYXRlIG5vdyB1c2UgYHBhZ2UuZXhjZXJwdGAgaWYgaXQncyBhdmFpbGFibGUgKCMyOTY0KQogICogQ2hhbmdlIGluZGVudGF0aW9uIGluIGBoZWFkLmh0bWxgIG9mIHNpdGUgdGVtcGxhdGUgdG8gMiBzcGFjZXMgZnJvbSA0ICgjMjk3MykKICAqIFVzZSBhIGAkY29udGVudC13aWR0aGAgdmFyaWFibGUgaW5zdGVhZCBvZiBhIGZpeGVkIHZhbHVlIGluIHRoZSBzaXRlIHRlbXBsYXRlIENTUyAoIzI5NzIpCiAgKiBTdHJpcCBuZXdsaW5lcyBpbiBzaXRlIHRlbXBsYXRlIGA8bWV0YT5gIGRlc2NyaXB0aW9uLiAoIzI5ODIpCiAgKiBBZGQgbGluayB0byBhdG9tIGZlZWQgaW4gYGhlYWRgIG9mIHNpdGUgdGVtcGxhdGUgZmlsZXMgKCMyOTk2KQogICogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyAoIzI5OTQpCiAgKiBVc2UgYEhhc2gjZWFjaF9rZXlgIGluc3RlYWQgb2YgYEhhc2gja2V5cy5lYWNoYCB0byBzcGVlZCB1cCBpdGVyYXRpb24gb3ZlciBoYXNoIGtleXMuICgjMzAxNykKICAqIEZ1cnRoZXIgbWlub3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLiAoIzMwMjIpCiAgKiBBZGQgJ2InIGFuZCAncycgYWxpYXNlcyBmb3IgYnVpbGQgYW5kIHNlcnZlLCByZXNwZWN0aXZlbHkgKCMzMDY1KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBSb3VnZSdzIFJlZENhcnBldCBwbHVnaW4gaW50ZXJmYWNlIGludGVncmF0aW9uICgjMjk1MSkKICAqIFJlbW92ZSBgLS13YXRjaGAgZnJvbSB0aGUgc2l0ZSB0ZW1wbGF0ZSBibG9nIHBvc3Qgc2luY2UgaXQgZGVmYXVsdHMgdG8gd2F0Y2hpbmcgaW4gaW4gMi40LjAgKCMyOTIyKQogICogRml4IGNvZGUgZm9yIG1lZGlhIHF1ZXJ5IG1peGluIGluIHNpdGUgdGVtcGxhdGUgKCMyOTQ2KQogICogQWxsb3cgcG9zdCBVUkwncyB0byBoYXZlIGAuaHRtYCBleHRlbnNpb25zICgjMjkyNSkKICAqIGBVdGlscy5zbHVnaWZ5YDogRG9uJ3QgY3JlYXRlIG5ldyBvYmplY3RzIHdoZW4gZ3N1YmJpbmcgKCMyOTk3KQogICogVGhlIGpzb25pZnkgZmlsdGVyIHNob3VsZCBkZWVwLWNvbnZlcnQgdG8gTGlxdWlkIHdoZW4gZ2l2ZW4gYW4gQXJyYXkuICgjMzAzMikKICAqIEFwcGx5IGBqc29uaWZ5YCBmaWx0ZXIgdG8gSGFzaGVzIGRlZXBseSBhbmQgZWZmZWN0aXZlbHkgKCMzMDYzKQogICogVXNlIGAxMjcuMC4wLjFgIGFzIGRlZmF1bHQgaG9zdCBpbnN0ZWFkIG9mIGAwLjAuMC4wYCAoIzMwNTMpCiAgKiBJbiB0aGUgY2FzZSB0aGF0IGEgR2VtZmlsZSBkb2VzIG5vdCBleGlzdCwgZW5zdXJlIEpla3lsbCBkb2Vzbid0IGZhaWwgb24gcmVxdWlyaW5nIHRoZSBHZW1maWxlIGdyb3VwICgjMzA2NikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEZpeCBhIHR5cG8gaW4gdGhlIGRvYyBibG9jayBmb3IgYEpla3lsbDo6VVJMLmVzY2FwZV9wYXRoYCAoIzMwNTIpCiAgKiBBZGQgaW50ZWdyYXRpb24gdGVzdCBmb3IgYGpla3lsbCBuZXcgLS1ibGFua2AgaW4gVGVzdFVuaXQgKCMyOTEzKQogICogQWRkIHVuaXQgdGVzdCBmb3IgYGpla3lsbCBuZXcgLS1mb3JjZWAgbG9naWMgKCMyOTI5KQogICogVXBkYXRlIG91dGRhdGVkIGNvbW1lbnQgZm9yIGBDb252ZXJ0aWJsZSN0cmFuc2Zvcm1gICgjMjk1NykKICAqIEFkZCBIYWtpcmkgYmFkZ2UgdG8gUkVBRE1FLiAoIzI5NTMpCiAgKiBBZGQgc29tZSBzaW1wbGUgYmVuY2htYXJraW5nIHRvb2xzLiAoIzI5OTMpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBgTk9LT0dJUklfVVNFX1NZU1RFTV9MSUJSQVJJRVM9dHJ1ZWAgKipkZWNyZWFzZXMqKiBpbnN0YWxsYXRpb24gdGltZS4gKCMzMDQwKQogICogQWRkIEZvcm1LZWVwIHRvIHJlc291cmNlcyBhcyBKZWt5bGwgZm9ybSBiYWNrZW5kICgjMzAxMCkKICAqIEZpeGluZyBhIG1pc3Rha2UgaW4gdGhlIG5hbWUgb2YgdGhlIG5ldyBMaXF1aWQgdGFnICgjMjk2OSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuMi4wLiAoIzI4OTgpCiAgKiBGaXggbGluayB0byAjMjg5NSBpbiAyLjQuMCByZWxlYXNlIHBvc3QuICgjMjg5OSkKICAqIEFkZCBCaWcgRm9vdG5vdGVzIGZvciBLcmFtZG93biBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjkxNikKICAqIFJlbW92ZSB3YXJuaW5nIHJlZ2FyZGluZyBHSFAgdXNlIG9mIHNpbmd1bGFyIHR5cGVzIGZvciBmcm9udCBtYXR0ZXIgZGVmYXVsdHMgKCMyOTE5KQogICogRml4IHF1b3RlIGNoYXJhY3RlciB0eXBvIGluIHNpdGUgZG9jdW1lbnRhdGlvbiBmb3IgdGVtcGxhdGVzICgjMjkxNykKICAqIFBvaW50IExpcXVpZCBsaW5rcyB0byBMaXF1aWTigJlzIEdpdEh1YiB3aWtpICgjMjg4NykKICAqIEFkZCBIVFRQIEJhc2ljIEF1dGggKC5odGFjY2VzcykgcGx1Z2luIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI5MzEpCiAgKiAoTWlub3IpIEdyYW1tYXIgJiBgX2NvbmZpZy55bWxgIGZpbGVuYW1lIGZpeGVzICgjMjkxMSkKICAqIEFkZGVkIGBtYXRobWwucmJgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMjkzNykKICAqIEFkZCBgLS1mb3JjZV9wb2xsaW5nYCB0byB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKCMyOTQzKQogICogRXNjYXBlIHVuaWNvZGUgY2hhcmFjdGVycyBpbiBzaXRlIENTUyAoIzI5MDYpCiAgKiBBZGQgbm90ZSBhYm91dCB1c2luZyB0aGUgZ2l0aHViLXBhZ2VzIGdlbSB2aWEgcGFnZXMuZ2l0aHViLmNvbS92ZXJzaW9ucy5qc29uICgjMjkzOSkKICAqIFVwZGF0ZSB1c2FnZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgMi40IGF1dG8tZW5hYmxpbmcgb2YgYC0td2F0Y2hgLiAoIzI5NTQpCiAgKiBBZGQgYC0tc2tpcC1pbml0aWFsLWJ1aWxkYCB0byBjb25maWd1cmF0aW9uIGRvY3MgKCMyOTQ5KQogICogRml4IGEgbWlub3IgdHlwbyBpbiBUZW1wbGF0ZXMgZG9jcyBwYWdlICgjMjk1OSkKICAqIEFkZCBhIGRpdGFhLWRpdGFhIHBsdWdpbiB1bmRlciBPdGhlciBzZWN0aW9uIG9uIHRoZSBQbHVnaW5zIHBhZ2UgKCMyOTY3KQogICogQWRkIGBidWlsZC9zZXJ2ZSAtVmAgb3B0aW9uIHRvIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiAoIzI5NDgpCiAgKiBBZGQgJ0pla3lsbCBUd2l0dGVyIFBsdWdpbicgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjk3OSkKICAqIERvY3M6IFVwZGF0ZSBub3JtYWxpemUuY3NzIHRvIHYzLjAuMi4gKCMyOTgxKQogICogRml4IHR5cG8gaW4gQ29udGludW91cyBJbnRlZ3JhdGlvbiBkb2N1bWVudGF0aW9uICgjMjk4NCkKICAqIENsYXJpZnkgYmVoYXZpb3Igb2YgYDpjYXRlZ29yaWVzYCBpbiBwZXJtYWxpbmtzICgjMzAxMSkKCiMjIDIuNC4wIC8gMjAxNC0wOS0wOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFN1cHBvcnQgYSBuZXcgYHJlbGF0aXZlX2luY2x1ZGVgIHRhZyAoIzI4NzApCiAgKiBBdXRvLWVuYWJsZSB3YXRjaCBvbiAnc2VydmUnICgjMjg1OCkKICAqIFJlbmRlciBMaXF1aWQgaW4gQ29mZmVlU2NyaXB0IGZpbGVzICgjMjgzMCkKICAqIEFycmF5IExpcXVpZCBmaWx0ZXJzOiBgcHVzaGAsIGBwb3BgLCBgdW5zaGlmdGAsIGBzaGlmdGAgKCMyODk1KQogICogQWRkIGA6dGl0bGVgIHRvIGNvbGxlY3Rpb24gVVJMIHRlbXBsYXRlIGZpbGxlcnMgKCMyODY0KQogICogQWRkIHN1cHBvcnQgZm9yIENTViBmaWxlcyBpbiB0aGUgYF9kYXRhYCBkaXJlY3RvcnkgKCMyNzYxKQogICogQWRkIHRoZSBgbmFtZWAgdmFyaWFibGUgdG8gY29sbGVjdGlvbiBwZXJtYWxpbmtzICgjMjc5OSkKICAqIEFkZCBgaW5zcGVjdGAgbGlxdWlkIGZpbHRlci4gKCMyODY3KQogICogQWRkIGEgYHNsdWdpZnlgIExpcXVpZCBmaWx0ZXIgKCMyODgwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIFVzZSBgSmVreWxsLnNhbml0aXplZF9wYXRoYCB3aGVuIGFkZGluZyBzdGF0aWMgZmlsZXMgdG8gQ29sbGVjdGlvbnMgKCMyODQ5KQogICogRml4IGVuY29kaW5nIG9mIGBtYWluLnNjc3NgIGluIHNpdGUgdGVtcGxhdGUgKCMyNzcxKQogICogRml4IG9yaWVudGF0aW9uIGJ1Z3MgaW4gZGVmYXVsdCBzaXRlIHRlbXBsYXRlICgjMjg2MikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIFVwZGF0ZSBzaW1wbGVjb3YgZ2VtIHRvIDAuOSAoIzI3NDgpCiAgKiBSZW1vdmUgYGRvY3MvYCBkaXIgKCMyNzY4KQogICogYWRkIGNsYXNzIGA8PCBzZWxmYCBpZGlvbSB0byBgTmV3YCBjb21tYW5kICgjMjgxNykKICAqIEFsbG93IFRyYXZpcyB0byAncGFyYWxsZWxpemUnIG91ciB0ZXN0cyAoIzI4NTkpCiAgKiBGaXggdGVzdCBmb3IgTGlxdWlkIHJlbmRlcmluZyBpbiBTYXNzICgjMjg1NikKICAqIEZpeGluZyAidmVydHljYWwiIHR5cG8gaW4gc2l0ZSB0ZW1wbGF0ZSdzIGBfYmFzZS5zY3NzYCAoIzI4ODkpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBEb2N1bWVudCB0aGUgYG5hbWVgIHZhcmlhYmxlIGZvciBjb2xsZWN0aW9uIHBlcm1hbGlua3MgKCMyODI5KQogICogQWRkcyBpbmZvIGFib3V0IGluc3RhbGxpbmcgamVreWxsIGluIGN1cnJlbnQgZGlyICgjMjgzOSkKICAqIFJlbW92ZSBkZXByZWNhdGVkIGBqZWt5bGwtcHJvamVjdGxpc3RgIHBsdWdpbiBmcm9tIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI3NDIpCiAgKiBSZW1vdmUgdGFnIHBsdWdpbnMgdGhhdCBhcmUgYnVpbHQgaW4gdG8gSmVreWxsICgjMjc1MSkKICAqIEFkZCBgbWFya2Rvd24td3JpdGVyYCBwYWNrYWdlIGZvciBBdG9tIEVkaXRvciB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNzYzKQogICogRml4IHR5cG8gaW4gc2l0ZSBkb2N1bWVudGF0aW9uIGZvciBjb2xsZWN0aW9ucyAoIzI3NjQpCiAgKiBGaXggbWlub3IgdHlwbyBvbiBwbHVnaW5zIGRvY3MgcGFnZSAoIzI3NjUpCiAgKiBSZXBsYWNlIG1hcmtkb3duIHdpdGggSFRNTCBpbiBgc2Fzc19kaXJgIG5vdGUgb24gYXNzZXRzIHBhZ2UgKCMyNzkxKQogICogRml4ZWQgImJlbGxvdyIgdHlwbyBpbiBkYXRhZmlsZXMgZG9jcyAoIzI4NzkpCiAgKiBGaXggY29kZS9tYXJrZG93biBpc3N1ZSBpbiBkb2N1bWVudGF0aW9uIGZvciB2YXJpYWJsZXMgKCMyODc3KQogICogUmVtb3ZlIEdvb2QgSW5jbHVkZSB0aGlyZC1wYXJ0eSBwbHVnaW4gZnJvbSBwbHVnaW5zIHBhZ2UgKCMyODgxKQogICogQWRkIHNvbWUgbW9yZSBkb2NzIG9uIGBpbmNsdWRlX3JlbGF0aXZlYCAoIzI4ODQpCgojIyAyLjMuMCAvIDIwMTQtMDgtMTAKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBbGxvdyBDb252ZXJ0aWJsZXMgdG8gYmUgY29udmVydGVkIGJ5ID49IDEgY29udmVydGVycyAoIzI3MDQpCiAgKiBBbGxvdyBTYXNzIGZpbGVzIHRvIGJlIHJlbmRlcmVkIGluIExpcXVpZCwgYnV0IG5ldmVyIHBsYWNlIHRoZW0gaW4gbGF5b3V0cy4gKCMyNzMzKQogICogQWRkIGBqZWt5bGwgaGVscGAgY29tbWFuZCAoIzI3MDcpCiAgKiBVc2UgYC5zY3NzYCBmb3IgYHNpdGVfdGVtcGxhdGVgIHN0eWxlcy4gKCMyNjY3KQogICogRG9uJ3QgcmVxdWlyZSB0aGUgYHNjb3BlYCBrZXkgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjMjY1OSkKICAqIE5vIGxvbmdlciBzZXQgYHBlcm1hbGluazogcHJldHR5YCBpbiB0aGUgYF9jb25maWcueW1sYCBmb3IgdGhlIHNpdGUgdGVtcGxhdGUgKCMyNjgwKQogICogUmV3b3JrIHNpdGUgdGVtcGxhdGUgdG8gdXRpbGl6ZSBTYXNzICgjMjY4NykKICAqIE5vdGlmeSB0aGUgdXNlciB3aGVuIGF1dG8tcmVnZW5lcmF0aW9uIGlzIGRpc2FibGVkLiAoIzI2OTYpCiAgKiBBbGxvdyBwYXJ0aWFsIHZhcmlhYmxlcyBpbiBpbmNsdWRlIHRhZyBmaWxlbmFtZSBhcmd1bWVudCAoIzI2OTMpCiAgKiBNb3ZlIGluc3RhbmNlcyBvZiBgVGltZS5wYXJzZWAgaW50byBhIFV0aWxzIG1ldGhvZCAoIzI2ODIpCiAgKiBJZ25vcmUgc3ViZm9sZGVycyBpbiB0aGUgYF9wb3N0c2AgZm9sZGVyICgjMjcwNSkgUkVWRVJUUyAoIzI2MzMpCiAgKiBGcm9udCBNYXR0ZXIgZGVmYXVsdCB0eXBlcyBzaG91bGQgYWx3YXlzIGJlIHBsdXJhbGl6ZWQgKCMyNzMyKQogICogUmVhZCBpbiBzdGF0aWMgZmlsZXMgaW50byBgY29sbGVjdGlvbi5maWxlc2AgYXMgYFN0YXRpY0ZpbGVgcyAoIzI3MzcpCiAgKiBBZGQgYHNhc3NpZnlgIGFuZCBgc2Nzc2lmeWAgTGlxdWlkIGZpbHRlcnMgKCMyNzM5KQogICogUmVwbGFjZSBgY2xhc3NpZmllcmAgZ2VtIHdpdGggYGNsYXNzaWZpZXItcmVib3JuYCAoIzI3MjEpCgojIyMgQnVnIEZpeGVzCgogICogVXNlIG9ubHkgdGhlIGxhc3QgZXh0bmFtZSB3aGVuIG11bHRpcGxlIGNvbnZlcnRlcnMgZXhpc3QgKCMyNzIyKQogICogQ2FsbCBgI3RvX2xpcXVpZGAgYmVmb3JlIGNhbGxpbmcgYCN0b19qc29uYCBpbiBqc29uaWZ5IGZpbHRlciAoIzI3MjkpCiAgKiBVc2Ugbm9uIHBhZGRlZCBjb25maWcgaW4gYHN0cmZ0aW1lYCB0byBhdm9pZCBwYXJzZSBzdHJpbmcgdHdpY2UgKCMyNjczKQogICogUmVwbGFjZSBkZXByZWNhdGVkIFJ1YnkgbWV0aG9kcyB3aXRoIHVuZGVwcmVjYXRlZCBvbmVzICgjMjY2NCkKICAqIENhdGNoIGVycm9ycyB3aGVuIHBhcnNpbmcgUG9zdCBgZGF0ZWAgZnJvbnQgbWF0dGVyIHZhbHVlICYgcHJvZHVjZSBuaWNlIGVycm9yIG1lc3NhZ2UgKCMyNjQ5KQogICogQWxsb3cgc3RhdGljIGZpbGVzIGluIENvbGxlY3Rpb25zICgjMjYxNSkKICAqIEZpeGVkIHR5cG8gaW4gYERlcHJlY2F0b3IjZ3JhY2VmdWxseV9yZXF1aXJlYCBlcnJvciBtZXNzYWdlICgjMjY5NCkKICAqIFJlbW92ZSBwcmVlbXB0aXZlIGxvYWRpbmcgb2YgdGhlICdjbGFzc2lmaWVyJyBnZW0uICgjMjY5NykKICAqIFVzZSBjYXNlLWluc2Vuc2l0aXZlIGNoZWNraW5nIGZvciB0aGUgZmlsZSBleHRlbnNpb25zIHdoZW4gbG9hZGluZyBjb25maWcgZmlsZXMgKCMyNzE4KQogICogV2hlbiBSZWFkaW5nIERvY3VtZW50cywgUmVzcGVjdCBgZW5jb2RpbmdgIE9wdGlvbiAoIzI3MjApCiAgKiBSZWZhY3RvciBiYXNlZCBvbiBqZWt5bGwtd2F0Y2ggY2xlYW4tdXAuICgjMjcxNikKICAqIGBEb2N1bWVudCN0b19zYCBzaG91bGQgcHJvZHVjZSBqdXN0IHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudCAoIzI3MzEpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBPbmx5IGluY2x1ZGUgbGliIGZpbGVzIGluIHRoZSBnZW0gKCMyNjcxKQogICogRml4IGBnaXQgZGlmZmAgY29tbWFuZCBpbiBgcHJvb2ZgIHNjcmlwdCAoIzI2NzIpCiAgKiBNYWtlIGRlZmF1bHQgcmFrZSB0YXNrIGEgbXVsdGl0YXNrIHNvIHRlc3RzIHJ1biBpbiBwYXJhbGxlbCAoIzI3MzUpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBVc2UgU2FzcyBhbmQgYSBEb2NzIENvbGxlY3Rpb24gKCMyNjUxKQogICogQWRkIGBsYXRlc3RfdmVyc2lvbi50eHRgIGZpbGUgdG8gdGhlIHNpdGUgKCMyNzQwKQogICogQmUgbW9yZSBhbWJpZ3VvdXMgYWJvdXQgYHBhZ2UuY29udGVudGAuIEJ1dCBtb3JlIHRyYW5zcGFyZW50LiAoIzI1MjIpCiAgKiBTdHJlYW1saW5pbmcgZnJvbnQgbWF0dGVyIHdvcmRpbmcgKGluc3RlYWQgb2YgZnJvbnQtbWF0dGVyL2Zyb250bWF0dGVyKSAoIzI2NzQpCiAgKiBBZGQgbm90ZSB0aGF0IHNvdXJjZSBkaXJlY3RvcnkgY2Fubm90IGJlIG1vZGlmaWVkIGluIEdpdEh1YiBQYWdlcyAoIzI2NjkpCiAgKiBGaXggbGlua3MgZnJvbSAjMjY2OSB0byBiZSBhY3R1YWwgSFRNTC4gV2hvb3BzLiAoIzI2NzkpCiAgKiBBZGQgbGluayB0byBgamVreWxsLXNsaW1gIGluIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI2ODkpCiAgKiBBZGQgQmFycnkgQ2xhcmsncyBTbWFzaGluZyBNYWdhemluZSB0dXRvcmlhbCB0byByZXNvdXJjZXMgcGFnZSAoIzI2ODgpCiAgKiBSZW9yZ2FuaXplIGFuZCB1cGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHNldHRpbmdzICgjMjQ1NikKICAqIEZpeGluZyBpbmRlbnRhdGlvbiBpbiB0aGUgY29uZmlndXJhdGlvbiBkb2NzIGFib3V0IFJlZGNhcnBldCBleHRzICgjMjcxNykKICAqIFVzZSBgbnVsbGAgaW4gWUFNTCBpbnN0ZWFkIG9mIGBuaWxgIGluIGRlZmF1bHQgY29uZmlnIGxpc3QgKCMyNzE5KQogICogRml4IHR5cG8gaW4gQ29udGludW91cyBJbnRlZ3JhdGlvbiBkb2NzICgjMjcwOCkKCiMjIDIuMi4wIC8gMjAxNC0wNy0yOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFRocm93IGEgd2FybmluZyBpZiB0aGUgc3BlY2lmaWVkIGxheW91dCBkb2VzIG5vdCBleGlzdCAoIzI2MjApCiAgKiBXaGl0ZWxpc3QgUHlnbWVudHMgb3B0aW9ucyBpbiBzYWZlIG1vZGUgKCMyNjQyKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIFJlbW92ZSB1bm5lY2Vzc2FyeSBgSmVreWxsOjpUYWdzOjpJbmNsdWRlVGFnI2JsYW5rP2AgbWV0aG9kICgjMjYyNSkKICAqIENhdGVnb3JpZXMgaW4gdGhlIHBhdGggYXJlIGlnbm9yZWQgKCMyNjMzKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVmYWN0b3JpbmcgRXJyb3JzICYgUmVxdWlyZXMgb2YgVGhpcmQtUGFydHkgc3R1ZmYgKCMyNTkxKQogICogQWRkIGZ1cnRoZXIgdGVzdHMgZm9yIGNhdGVnb3JpZXMgKCMyNTg0KQogICogUHJvb2Ygc2l0ZSB3aXRoIGh0bWwtcHJvb2ZlciBvbiBjaGFuZ2UgKCMyNjA1KQogICogRml4IHVwIGJ1ZyBpbiAjMjYwNSB3aGljaCBjYXVzZWQgcHJvb2ZpbmcgdGhlIHNpdGUgbm90IHRvIGZ1bmN0aW9uICgjMjYwOCkKICAqIFVzZSBgYnVuZGxlIGV4ZWNgIGluIGBzY3JpcHQvcHJvb2ZgICgjMjYxMCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBLcmFtZG93biB1cmxzICgjMjU4OCkKICAqIEFkZCBgSmVreWxsOjpBdXRvbGlua0VtYWlsYCBhbmQgYEpla3lsbDo6R2l0TWV0YWRhdGFgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNTk2KQogICogRml4IGEgYnVuY2ggb2YgYnJva2VuIGxpbmtzIGluIHRoZSBzaXRlICgjMjYwMSkKICAqIFJlcGxhY2UgZGVhZCBsaW5rcyB3aXRoIHdvcmtpbmcgbGlua3MgKCMyNjExKQogICogQWRkIGpla3lsbC1ob29rIHRvIGRlcGxveW1lbnQgbWV0aG9kcyAoIzI2MTcpCiAgKiBBZGRlZCBrcmFtZG93bi13aXRoLXB5Z21lbnRzIHBsdWdpbiB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjYyMykKICAqIFVwZGF0ZSBvdXRkYXRlZCAiRXh0cmFzIiBwYWdlIGFuZCByZW1vdmUgZHVwbGljYXRlIGRvY3VtZW50YXRpb24gKCMyNjIyKQogICogQWRkIGNvMiBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjYzOSkKICAqIEF0dGVtcHQgdG8gY2xhcmlmeSB0aGUgd2F5IFNhc3MgaW1wb3J0cyBoYXBwZW4gKCMyNjQyKQoKIyMgMi4xLjEgLyAyMDE0LTA3LTAxCgojIyMgQnVnIEZpeGVzCgogICogUGF0Y2ggcmVhZCB2dWxuZXJhYmlsaXRpZXMgZm9yIGRhdGEgJiBjb25maXJtIG5vbmUgZm9yIGxheW91dHMgKCMyNTYzKQogICogVXBkYXRlIE1hcnVrdSBkZXBlbmRlbmN5IHRvIGFsbG93IHVzZSBvZiB0aGUgbGF0ZXN0IHZlcnNpb24gKCMyNTc2KQogICogUmVtb3ZlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgZnJvbSBkb2N1bWVudCBVUkwgdG8gcHJldmVudCBzdGFsZSB1cmxzICgjMjU3NSkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEFkZCB2ZXJ0aWNhbCBtYXJnaW4gdG8gYGhpZ2hsaWdodGAgdG8gc2VwYXJhdGUgY29kZSBibG9ja3MgKCMyNTU4KQogICogQWRkIGBodG1sX3BhZ2VzYCB0byBWYXJpYWJsZXMgZG9jcyAoIzI1NjcpCiAgKiBGaXhlZCBicm9rZW4gbGluayB0byBQZXJtYWxpbmtzIHBhZ2UgKCMyNTcyKQogICogVXBkYXRlIGxpbmsgdG8gV2luZG93cyBpbnN0YWxsYXRpb24gZ3VpZGUgKCMyNTc4KQoKIyMgMi4xLjAgLyAyMDE0LTA2LTI4CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQnVtcCB0byB0aGUgbGF0ZXN0IExpcXVpZCB2ZXJzaW9uLCAyLjYuMSAoIzI0OTUpCiAgKiBBZGQgc3VwcG9ydCBmb3IgSlNPTiBmaWxlcyBpbiB0aGUgYF9kYXRhYCBkaXJlY3RvcnkgKCMyMzY5KQogICogQWxsb3cgc3ViY2xhc3NlcyB0byBvdmVycmlkZSBgRVhDRVJQVF9BVFRSSUJVVEVTX0ZPUl9MSVFVSURgICgjMjQwOCkKICAqIEFkZCBgSmVreWxsLmVudmAgYW5kIGBqZWt5bGwuZW52aXJvbm1lbnRgICh0aGUgTGlxdWlkIHZhcikgKCMyNDE3KQogICogVXNlIGBfY29uZmlnLnlhbWxgIG9yIGBfY29uZmlnLnltbGAgKGAueW1sYCB0YWtlcyBwcmVjZWRlbmNlKSAoIzI0MDYpCiAgKiBPdmVycmlkZSBjb2xsZWN0aW9uIHVybCB0ZW1wbGF0ZSAoIzI0MTgpCiAgKiBBbGxvdyBzdWJkaXJlY3RvcmllcyBpbiBgX2RhdGFgICgjMjM5NSkKICAqIEV4dHJhY3QgUGFnaW5hdGlvbiBHZW5lcmF0b3IgaW50byBnZW06IGBqZWt5bGwtcGFnaW5hdGVgICgjMjQ1NSkKICAqIFV0aWxpemUgYGRhdGVfdG9fcmZjODIyYCBmaWx0ZXIgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzI0MzcpCiAgKiBBZGQgY2F0ZWdvcmllcywgbGFzdCBidWlsZCBkYXRldGltZSwgYW5kIGdlbmVyYXRvciB0byBzaXRlIHRlbXBsYXRlIGZlZWQgKCMyNDM4KQogICogQ29uZmlndXJhYmxlLCByZXBsYWNlYWJsZSBMb2dnZXItY29tcGxpYW50IGxvZ2dlciAoIzI0NDQpCiAgKiBFeHRyYWN0IGBnaXN0YCB0YWcgaW50byBhIHNlcGFyYXRlIGdlbSAoIzI0NjkpCiAgKiBBZGQgYGNvbGxlY3Rpb25gIGF0dHJpYnV0ZSB0byBgRG9jdW1lbnQjdG9fbGlxdWlkYCB0byBhY2Nlc3MgdGhlIGRvY3VtZW50J3MgY29sbGVjdGlvbiBsYWJlbC4gKCMyNDM2KQogICogVXBncmFkZSBsaXN0ZW4gdG8gYDIuNy42IDw9IHggPCAzLjAuMGAgKCMyNDkyKQogICogQWxsb3cgY29uZmlndXJhdGlvbiBvZiBkaWZmZXJlbnQgVHdpdHRlciBhbmQgR2l0SHViIHVzZXJuYW1lcyBpbiBzaXRlIHRlbXBsYXRlICgjMjQ4NSkKICAqIEJ1bXAgUHlnbWVudHMgdG8gdjAuNi4wICgjMjUwNCkKICAqIEZyb250IG1hdHRlciBkZWZhdWx0cyBmb3IgZG9jdW1lbnRzIGluIGNvbGxlY3Rpb25zICgjMjQxOSkKICAqIEluY2x1ZGUgZmlsZXMgd2l0aCBhIHVybCB3aGljaCBlbmRzIGluIGAvYCBpbiB0aGUgYHNpdGUuaHRtbF9wYWdlc2AgbGlzdCAoIzI1MjQpCiAgKiBNYWtlIGBoaWdobGlnaHRgIHRhZyB1c2UgYGxhbmd1YWdlLWAgcHJlZml4IGluIENTUyBjbGFzcyAoIzI1MTEpCiAgKiBMb29rdXAgaXRlbSBwcm9wZXJ0eSB2aWEgYGl0ZW0jdG9fbGlxdWlkYCBiZWZvcmUgYCNkYXRhYCBvciBgI1tdYCBpbiBmaWx0ZXJzICgjMjQ5MykKICAqIFNraXAgaW5pdGlhbCBidWlsZCBvZiBzaXRlIG9uIHNlcnZlIHdpdGggZmxhZyAoIzI0NzcpCiAgKiBBZGQgc3VwcG9ydCBmb3IgYGhsX2xpbmVzYCBpbiBgaGlnaGxpZ2h0YCB0YWcgKCMyNTMyKQogICogU3Bpa2Ugb3V0IGAtLXdhdGNoYCBmbGFnIGludG8gYSBzZXBhcmF0ZSBnZW0gKCMyNTUwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIExpcXVpZCBgc29ydGAgZmlsdGVyIHNob3VsZCBzb3J0IGV2ZW4gaWYgb25lIG9mIHRoZSB2YWx1ZXMgaXMgYG5pbGAgKCMyMzQ1KQogICogUmVtb3ZlIHBhZGRpbmcgb24gYHByZSBjb2RlYCBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBDU1MgKCMyMzgzKQogICogU2V0IGBsb2dfbGV2ZWxgIGVhcmxpZXIgdG8gc2lsZW5jZSBpbmZvIGxldmVsIGNvbmZpZ3VyYXRpb24gb3V0cHV0ICgjMjM5MykKICAqIE9ubHkgbGlzdCBwYWdlcyB3aGljaCBoYXZlIGB0aXRsZWAgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzI0MTEpCiAgKiBBY2NlcHQgYE51bWVyaWNgIHZhbHVlcyBmb3IgZGF0ZXMsIG5vdCBgTnVtYmVyYCB2YWx1ZXMgKCMyMzc3KQogICogUHJldmVudCBjb2RlIGZyb20gb3ZlcmZsb3dpbmcgY29udGFpbmVyIGluIHNpdGUgdGVtcGxhdGUgKCMyNDI5KQogICogRW5jb2RlIFVSTHMgaW4gVVRGLTggd2hlbiBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyAoIzI0MjApCiAgKiBObyBMYXlvdXRzIG9yIExpcXVpZCBmb3IgQXNzZXQgRmlsZXMgKCMyNDMxKQogICogQWxsb3cgZnJvbnQgbWF0dGVyIGRlZmF1bHRzIHRvIHNldCBwb3N0IGNhdGVnb3JpZXMgKCMyMzczKQogICogRml4IGNvbW1hbmQgaW4gc3ViY29tbWFuZCBkZXByZWNhdGlvbiB3YXJuaW5nICgjMjQ1NykKICAqIEtlZXAgYWxsIHBhcmVudCBkaXJlY3RvcmllcyBvZiBmaWxlcy9kaXJzIGluIGBrZWVwX2ZpbGVzYCAoIzI0NTgpCiAgKiBXaGVuIHVzaW5nIFJlZENhcnBldCBhbmQgUm91Z2Ugd2l0aG91dCBSb3VnZSBpbnN0YWxsZWQsIGZpeGVkIGVycm9uZW91cyBlcnJvciB3aGljaCBzdGF0ZWQgdGhhdCByZWRjYXJwZXQgd2FzIG1pc3NpbmcsIG5vdCByb3VnZS4gKCMyNDY0KQogICogSWdub3JlICphbGwqIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0aGF0IG1lcml0IGl0IG9uIGF1dG8tZ2VuZXJhdGlvbiAoIzI0NTkpCiAgKiBCZWZvcmUgY29weWluZyBmaWxlLCBleHBsaWNpdGx5IHJlbW92ZSB0aGUgb2xkIG9uZSAoIzI1MzUpCiAgKiBNZXJnZSBmaWxlIHN5c3RlbSBjYXRlZ29yaWVzIHdpdGggY2F0ZWdvcmllcyBmcm9tIFlBTUwuICgjMjUzMSkKICAqIERlZXAgbWVyZ2UgZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjMjQ5MCkKICAqIEVuc3VyZSBleGNsdWRlIGFuZCBpbmNsdWRlIGFycmF5cyBhcmUgYXJyYXlzIG9mIHN0cmluZ3MgKCMyNTQyKQogICogQWxsb3cgY29sbGVjdGlvbnMgdG8gaGF2ZSBkb3RzIGluIHRoZWlyIGZpbGVuYW1lcyAoIzI1NTIpCiAgKiBDb2xsZWN0aW9ucyBzaG91bGRuJ3QgdHJ5IHRvIHJlYWQgaW4gZGlyZWN0b3JpZXMgYXMgZmlsZXMgKCMyNTUyKQogICogQmUgcXVpZXQgdmVyeSBxdWlja2x5LiAoIzI1MjApCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBUZXN0IFJ1YnkgMi4xLjIgaW5zdGVhZCBvZiAyLjEuMSAoIzIzNzQpCiAgKiBBZGQgdGVzdCBmb3Igc29ydGluZyBVVEYtOCBjaGFyYWN0ZXJzICgjMjM4NCkKICAqIFVzZSBgaHR0cHNgIGZvciBHaXRIdWIgbGlua3MgaW4gZG9jdW1lbnRhdGlvbiAoIzI0NzApCiAgKiBSZW1vdmUgY292ZXJhZ2UgcmVwb3J0aW5nIHdpdGggQ292ZXJhbGxzICgjMjQ5NCkKICAqIEZpeCBhIGJpdCBvZiBtaXNzaW5nIFRvbURvYyB0byBgSmVreWxsOjpDb21tYW5kczo6QnVpbGQjYnVpbGRgICgjMjU1NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFNldCBgdGltZXpvbmVgIHRvIGBBbWVyaWNhL0xvc19BbmdlbGVzYCAoIzIzOTQpCiAgKiBJbXByb3ZlIEphdmFTY3JpcHQgaW4gYGFuY2hvcl9saW5rcy5odG1sYCAoIzIzNjgpCiAgKiBSZW1vdmUgbm90ZSBvbiBRdWlja3N0YXJ0IHBhZ2UgYWJvdXQgZGVmYXVsdCBtYXJrZG93biBjb252ZXJ0ZXIgKCMyMzg3KQogICogUmVtb3ZlIGJyb2tlbiBsaW5rIGluIGV4dHJhcy5tZCB0byBhIE1hcnVrdSBmb3JrICgjMjQwMSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuMS4wLiAoIzI0MTApCiAgKiBGaXggYnJva2VuIGxpbmsgb24gSW5zdGFsbGF0aW9uIHBhZ2UgdG8gVGVtcGxhdGVzIHBhZ2UgKCMyNDIxKQogICogUHJldmVudCB0YWJsZSBmcm9tIGV4dGVuZGluZyBwYXJlbnQgd2lkdGggaW4gcGVybWFsaW5rIHN0eWxlIHRhYmxlICgjMjQyNCkKICAqIEFkZCBjb2xsZWN0aW9ucyB0byBpbmZvIGFib3V0IHBhZ2luYXRpb24gc3VwcG9ydCAoIzIzODkpCiAgKiBBZGQgYGpla3lsbF9naXRodWJfc2FtcGxlYCBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjQ2MykKICAqIENsYXJpZnkgZG9jdW1lbnRhdGlvbiBhcm91bmQgZnJvbnQgbWF0dGVyIGRlZmF1bHRzIGFuZCBhZGQgZGV0YWlscyBhYm91dCBkZWZhdWx0cyBmb3IgY29sbGVjdGlvbnMuICgjMjQzOSkKICAqIEFkZCBKZWt5bGwgUHJvamVjdCBWZXJzaW9uIFRhZyB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNDY4KQogICogVXNlIGBodHRwc2AgZm9yIEdpdEh1YiBsaW5rcyBhY3Jvc3Mgd2hvbGUgc2l0ZSAoIzI0NzApCiAgKiBBZGQgU3RpY2tlck11bGUgKyBKZWt5bGwgcG9zdCAoIzI0NzYpCiAgKiBBZGQgSmVreWxsIEFzc2V0IFBpcGVsaW5lIFJlYm9ybiB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNDc5KQogICogQWRkIGxpbmsgdG8gamVreWxsLWNvbXByZXNzLWh0bWwgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjUxNCkKICAqIEFkZCBQaXdpZ28gR2FsbGVyeSB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNTI2KQogICogU2V0IGBzaG93X2RyYWZ0c2AgdG8gYGZhbHNlYCBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gbGlzdGluZyAoIzI1MzYpCiAgKiBQcm92aWRlIGFuIHVwZGF0ZWQgbGluayBmb3IgV2luZG93cyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zICgjMjU0NCkKICAqIFJlbW92ZSBgdXJsYCBmcm9tIGNvbmZpZ3VyYXRpb24gZG9jcyAoIzI1NDcpCiAgKiBEb2N1bWVudGF0aW9uIGZvciBDb250aW51b3VzIEludGVncmF0aW9uIGZvciB5b3VyIEpla3lsbCBTaXRlICgjMjQzMikKCiMjIDIuMC4zIC8gMjAxNC0wNS0wOAoKIyMjIEJ1ZyBGaXhlcwoKICAqIFByb3Blcmx5IHByZWZpeCBsaW5rcyBpbiBzaXRlIHRlbXBsYXRlIHdpdGggVVJMIG9yIGJhc2V1cmwgZGVwZW5kaW5nIHVwb24gbmVlZC4gKCMyMzE5KQogICogVXBkYXRlIGdpc3QgdGFnIGNvbW1lbnRzIGFuZCBlcnJvciBtZXNzYWdlIHRvIHJlcXVpcmUgdXNlcm5hbWUgKCMyMzI2KQogICogRml4IGBwZXJtYWxpbmtgIHNldHRpbmcgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzIzMzEpCiAgKiBEb24ndCBmYWlsIGlmIGFueSBvZiB0aGUgcGF0aCBvYmplY3RzIGFyZSBuaWwgKCMyMzI1KQogICogSW5zdGFudGlhdGUgYWxsIGRlc2NlbmRhbnRzIGZvciBjb252ZXJ0ZXJzIGFuZCBnZW5lcmF0b3JzLCBub3QganVzdCBkaXJlY3Qgc3ViY2xhc3NlcyAoIzIzMzQpCiAgKiBSZXBsYWNlIGFsbCBpbnN0YW5jZXMgb2YgYHNpdGUubmFtZWAgd2l0aCBgc2l0ZS50aXRsZWAgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzIzMjQpCiAgKiBgSmVreWxsOjpGaWx0ZXJzI3RpbWVgIG5vdyBhY2NlcHRzIFVOSVggdGltZXN0YW1wcyBpbiBzdHJpbmcgb3IgbnVtYmVyIGZvcm0gKCMyMzM5KQogICogVXNlIGBpdGVtX3Byb3BlcnR5YCBmb3IgYHdoZXJlYCBmaWx0ZXIgc28gaXQgZG9lc24ndCBicmVhayBvbiBjb2xsZWN0aW9ucyAoIzIzNTkpCiAgKiBSZXNjdWUgZXJyb3JzIHRocm93biBzbyBgLS13YXRjaGAgZG9lc24ndCBmYWlsICgjMjM2NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEFkZCBtaXNzaW5nICJhcyIgdG8gYXNzZXRzIGRvY3MgcGFnZSAoIzIzMzcpCiAgKiBVcGRhdGUgZG9jcyB0byByZWZsZWN0IG5ldyBgYmFzZXVybGAgZGVmYXVsdCAoIzIzNDEpCiAgKiBBZGQgbGlua3MgdG8gaGVhZGVycyB3aG8gaGF2ZSBhbiBJRC4gKCMyMzQyKQogICogVXNlIHN5bWJvbCBpbnN0ZWFkIG9mIEhUTUwgbnVtYmVyIGluIGB1cGdyYWRpbmcubWRgICgjMjM1MSkKICAqIEZpeCBsaW5rIHRvIGZyb250IG1hdHRlciBkZWZhdWx0cyBkb2NzICgjMjM1MykKICAqIEZpeCBmb3IgYEhpc3RvcnkubWFya2Rvd25gIGluIG9yZGVyIHRvIGZpeCBoaXN0b3J5IHBhZ2UgaW4gZG9jcyAoIzIzNjMpCgojIyAyLjAuMiAvIDIwMTQtMDUtMDcKCiMjIyBCdWcgRml4ZXMKCiAgKiBDb3JyZWN0IHVzZSBvZiBgdXJsYCBhbmQgYGJhc2V1cmxgIGluIHRoZSBzaXRlIHRlbXBsYXRlLiAoIzIzMTcpCiAgKiBEZWZhdWx0IGBiYXNldXJsYCB0byBgIiJgICgjMjMxNykKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIENvcnJlY3QgZG9jcyBmb3IgdGhlIGBnaXN0YCBwbHVnaW4gc28gaXQgYWx3YXlzIGluY2x1ZGVzIHRoZSB1c2VybmFtZS4gKCMyMzE0KQogICogQ2xhcmlmeSBuZXcgKGRlZmF1bHRzLCBgd2hlcmVgIGZpbHRlcikgZmVhdHVyZXMgaW4gZG9jcyAoIzIzMTYpCgojIyAyLjAuMSAvIDIwMTQtMDUtMDYKCiMjIyBCdWcgRml4ZXMKCiAgKiBSZXF1aXJlIGBrcmFtZG93bmAgZ2VtIGluc3RlYWQgb2YgYG1hcnVrdWAgZ2VtCgojIyAyLjAuMCAvIDIwMTQtMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgIkNvbGxlY3Rpb25zIiBmZWF0dXJlICgjMjE5OSkKICAqIEFkZCBnZW0tYmFzZWQgcGx1Z2luIHdoaXRlbGlzdCB0byBzYWZlIG1vZGUgKCMxNjU3KQogICogUmVwbGFjZSB0aGUgY29tbWFuZGVyIGNvbW1hbmQgbGluZSBwYXJzZXIgd2l0aCBhIG1vcmUgcm9idXN0IHNvbHV0aW9uIGZvciBvdXIgbmVlZHMgY2FsbGVkIGBtZXJjZW5hcnlgICgjMTcwNikKICAqIFJlbW92ZSBzdXBwb3J0IGZvciBSdWJ5IDEuOC54ICgjMTc4MCkKICAqIE1vdmUgdG8gamVreWxsL2pla3lsbCBmcm9tIG1vam9tYm8vamVreWxsICgjMTgxNykKICAqIEFsbG93IGN1c3RvbSBtYXJrZG93biBwcm9jZXNzb3JzICgjMTg3MikKICAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIFJvdWdlIHN5bnRheCBoaWdobGlnaHRlciAoIzE4NTkpCiAgKiBQcm92aWRlIHN1cHBvcnQgZm9yIFNhc3MgKCMxOTMyKQogICogUHJvdmlkZSBhIDMwMCUgaW1wcm92ZW1lbnQgd2hlbiBnZW5lcmF0aW5nIHNpdGVzIHRoYXQgdXNlIGBQb3N0I25leHRgIG9yIGBQb3N0I3ByZXZpb3VzYCAoIzE5ODMpCiAgKiBQcm92aWRlIHN1cHBvcnQgZm9yIENvZmZlZVNjcmlwdCAoIzE5OTEpCiAgKiBSZXBsYWNlIE1hcnVrdSB3aXRoIEtyYW1kb3duIGFzIERlZmF1bHQgTWFya2Rvd24gUHJvY2Vzc29yICgjMTk4OCkKICAqIEV4cG9zZSBgc2l0ZS5zdGF0aWNfZmlsZXNgIHRvIExpcXVpZCAoIzIwNzUpCiAgKiBDb21wbGV0ZSByZWRlc2lnbiBvZiB0aGUgdGVtcGxhdGUgc2l0ZSBnZW5lcmF0ZWQgYnkgYGpla3lsbCBuZXdgICgjMjA1MCkKICAqIFVwZGF0ZSBMaXN0ZW4gZnJvbSAxLnggdG8gMi54ICgjMjA5NykKICAqIEZyb250IG1hdHRlciBkZWZhdWx0cyAoIzIyMDUpCiAgKiBEZXByZWNhdGUgYHJlbGF0aXZlX3Blcm1hbGlua3NgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChkZWZhdWx0IHRvIGBmYWxzZWApICgjMjMwNykKICAqIEV4Y2x1ZGUgZmlsZXMgYmFzZWQgb24gcHJlZml4IGFzIHdlbGwgYXMgYGZubWF0Y2g/YCAoIzIzMDMpCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogTW92ZSB0aGUgRW50cnlGaWx0ZXIgY2xhc3MgaW50byB0aGUgSmVreWxsIG1vZHVsZSB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UgKCMxODAwKQogICogQWRkIGBncm91cF9ieWAgTGlxdWlkIGZpbHRlciBjcmVhdGUgbGlzdHMgb2YgaXRlbXMgZ3JvdXBlZCBieSBhIGNvbW1vbiBwcm9wZXJ0eSdzIHZhbHVlICgjMTc4OCkKICAqIEFkZCBzdXBwb3J0IGZvciBNYXJ1a3UncyBgZmVuY2VkX2NvZGVfYmxvY2tzYCBvcHRpb24gKCMxNzk5KQogICogVXBkYXRlIFJlZGNhcnBldCBkZXBlbmRlbmN5IHRvIH4+IDMuMCAoIzE4MTUpCiAgKiBBdXRvbWF0aWNhbGx5IHNvcnQgYWxsIHBhZ2VzIGJ5IG5hbWUgKCMxODQ4KQogICogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aW1lIGlzIG5vdCBwYXJzZWFibGUgKCMxODQ3KQogICogQWxsb3cgYGluY2x1ZGVgIHRhZyB2YXJpYWJsZSBhcmd1bWVudHMgdG8gdXNlIGZpbHRlcnMgKCMxODQxKQogICogYHBvc3RfdXJsYCB0YWcgc2hvdWxkIHJhaXNlIGBBcmd1bWVudEVycm9yYCBmb3IgaW52YWxpZCBuYW1lICgjMTgyNSkKICAqIEJ1bXAgZGVwZW5kZW5jeSBgbWVyY2VuYXJ5YCB0byBgfj4gMC4yLjBgICgjMTg3OSkKICAqIEJ1bXAgZGVwZW5kZW5jeSBgc2FmZV95YW1sYCB0byBgfj4gMS4wYCAoIzE4ODYpCiAgKiBBbGxvdyBzb3J0aW5nIG9mIGNvbnRlbnQgYnkgY3VzdG9tIHByb3BlcnRpZXMgKCMxODQ5KQogICogQWRkIGAtLXF1aWV0YCBmbGFnIHRvIHNpbGVuY2Ugb3V0cHV0IGR1cmluZyBidWlsZCBhbmQgc2VydmUgKCMxODk4KQogICogQWRkIGEgYHdoZXJlYCBmaWx0ZXIgdG8gZmlsdGVyIGFycmF5cyBiYXNlZCBvbiBhIGtleS92YWx1ZSBwYWlyICgjMTg3NSkKICAqIFJvdXRlIDQwNCBlcnJvcnMgdG8gYSBjdXN0b20gNDA0IHBhZ2UgaW4gZGV2ZWxvcG1lbnQgKCMxODk5KQogICogRXhjbHVkZXMgYXJlIG5vdyByZWxhdGl2ZSB0byB0aGUgc2l0ZSBzb3VyY2UgKCMxOTE2KQogICogQnJpbmcgTUlNRSBUeXBlcyBmaWxlIGZvciBgamVreWxsIHNlcnZlYCB0byBjb21wbGV0ZSBwYXJpdHkgd2l0aCBHSCBQYWdlcyBzZXJ2ZXJzICgjMTk5MykKICAqIEFkZGluZyBCcmVha3BvaW50IHRvIG1ha2UgbmV3IHNpdGUgdGVtcGxhdGUgbW9yZSByZXNwb25zaXZlICgjMjAzOCkKICAqIERlZmF1bHQgdG8gdXNpbmcgdGhlIFVURi04IGVuY29kaW5nIHdoZW4gcmVhZGluZyBmaWxlcy4gKCMyMDMxKQogICogVXBkYXRlIFJlZGNhcnBldCBkZXBlbmRlbmN5IHRvIH4+IDMuMSAoIzIwNDQpCiAgKiBSZW1vdmUgc3VwcG9ydCBmb3IgUnVieSAxLjkuMiAoIzIwNDUpCiAgKiBBZGQgYC5ta2Rvd25gIGFzIHZhbGlkIE1hcmtkb3duIGV4dGVuc2lvbiAoIzIwNDgpCiAgKiBBZGQgYGluZGV4LnhtbGAgdG8gdGhlIGxpc3Qgb2YgV0VCcmljayBkaXJlY3RvcnkgaW5kZXggZmlsZXMgKCMyMDQxKQogICogTWFrZSB0aGUgYGxheW91dHNgIGNvbmZpZyBrZXkgcmVsYXRpdmUgdG8gQ1dEIG9yIHRvIHNvdXJjZSAoIzIwNTgpCiAgKiBVcGRhdGUgS3JhbWRvd24gdG8gYH4+IDEuM2AgKCMxODk0KQogICogUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gYHNlbGZgICgjMjA5MCkKICAqIFVwZGF0ZSB0byBNZXJjZW5hcnkgdjAuMy54ICgjMjA4NSkKICAqIFNoaXAgU2FzcyBzdXBwb3J0IGFzIGEgc2VwYXJhdGUgZ2VtICgjMjA5OCkKICAqIEV4dHJhY3QgY29yZSBleHRlbnNpb25zIGludG8gYSBVdGlscyBtb2R1bGUgKCMyMTEyKQogICogUmVmYWN0b3IgQ0xJICYgQ29tbWFuZHMgRm9yIEdyZWF0ZXIgSGFwcGluZXNzICgjMjE0MykKICAqIFByb3ZpZGUgdXNlZnVsIGVycm9yIHdoZW4gUHlnbWVudHMgcmV0dXJucyBgbmlsYCBhbmQgZXJyb3Igb3V0ICgjMjE0OCkKICAqIEFkZCBzdXBwb3J0IGZvciB1bnB1Ymxpc2hlZCBkcmFmdHMgKCMyMTY0KQogICogQWRkIGBmb3JjZV9wb2xsaW5nYCBvcHRpb24gdG8gdGhlIGBzZXJ2ZWAgY29tbWFuZCAoIzIxNjUpCiAgKiBDbGVhbiB1cCB0aGUgYDxoZWFkPmAgaW4gdGhlIHNpdGUgdGVtcGxhdGUgKCMyMTg2KQogICogUGVybWl0IFlBTUwgYmxvY2tzIHRvIGVuZCB3aXRoIHRocmVlIGRvdHMgdG8gYmV0dGVyIGNvbmZvcm0gd2l0aCB0aGUgWUFNTCBzcGVjICgjMjExMCkKICAqIFVzZSBgRmlsZS5leGlzdD9gIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBgRmlsZS5leGlzdHM/YCAoIzIyMTQpCiAgKiBSZXF1aXJlIG5ld2xpbmUgYWZ0ZXIgc3RhcnQgb2YgWUFNTCBGcm9udCBNYXR0ZXIgaGVhZGVyICgjMjIxMSkKICAqIEFkZCB0aGUgYWJpbGl0eSBmb3IgcGFnZXMgdG8gYmUgbWFya2VkIGFzIGBwdWJsaXNoZWQ6IGZhbHNlYCAoIzE0OTIpCiAgKiBBZGQgYEpla3lsbDo6TGlxdWlkRXh0ZW5zaW9uc2Agd2l0aCBgLmxvb2t1cF92YXJpYWJsZWAgbWV0aG9kIGZvciBlYXN5IGxvb2tpbmcgdXAgb2YgdmFyaWFibGUgdmFsdWVzIGluIGEgTGlxdWlkIGNvbnRleHQuICgjMjI1MykKICAqIFJlbW92ZSBsaXRlcmFsIGxhbmcgbmFtZSBmcm9tIGNsYXNzICgjMjI5MikKICAqIFJldHVybiBgdXRmLThgIGVuY29kaW5nIGluIGhlYWRlciBmb3Igd2VicmljayBlcnJvciBwYWdlIHJlc3BvbnNlICgjMjI4OSkKICAqIE1ha2UgdGVtcGxhdGUgc2l0ZSBlYXNpZXIgdG8gY3VzdG9taXplICgjMjI2OCkKICAqIEFkZCB0d28tZGlnaXQgeWVhciB0byBwZXJtYWxpbmsgdGVtcGxhdGUgb3B0aW9uICgjMjMwMSkKICAqIEFkZCBgc2l0ZS5kb2N1bWVudHNgIHRvIExpcXVpZCBwYXlsb2FkIChsaXN0IG9mIGFsbCBkb2NzKSAoIzIyOTUpCiAgKiBUYWtlIGludG8gYWNjb3VudCBtaXNzaW5nIHZhbHVlcyBpbiB0aGUgTGlxdWlkIHNvcnQgZmlsdGVyICgjMjI5OSkKCiMjIyBCdWcgRml4ZXMKCiAgKiBEb24ndCBhbGxvdyBuaWwgZW50cmllcyB3aGVuIGxvYWRpbmcgcG9zdHMgKCMxNzk2KQogICogUmVtb3ZlIHRoZSBzY3JvbGxiYXIgdGhhdCdzIGFsd2F5cyBkaXNwbGF5ZWQgaW4gbmV3IHNpdGVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzaXRlIHRlbXBsYXRlICgjMTgwNSkKICAqIEFkZCBgI3BhdGhgIHRvIHJlcXVpcmVkIG1ldGhvZHMgaW4gYEpla3lsbDo6Q29udmVydGlibGVgICgjMTg2NikKICAqIERlZmF1bHQgTWFydWt1IGZlbmNlZCBjb2RlIGJsb2NrcyB0byBPTiBmb3IgMi4wLjAtZGV2ICgjMTgzMSkKICAqIENoYW5nZSBzaG9ydCBvcHRzIGZvciBob3N0IGFuZCBwb3J0IGZvciBgamVreWxsIGRvY3NgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzdWJjb21tYW5kcyAoIzE4NzcpCiAgKiBGaXggdHlwb3MgKCMxOTEwKQogICogTG9jayBNYXJ1a3UgYXQgMC43LjAgdG8gcHJldmVudCBidWdzIGNhdXNlZCBieSBNYXJ1a3UgMC43LjEgKCMxOTU4KQogICogRml4ZXMgZnVsbCBwYXRoIGxlYWsgdG8gc291cmNlIGRpcmVjdG9yeSB3aGVuIHVzaW5nIGluY2x1ZGUgdGFnICgjMTk1MSkKICAqIERvbid0IGdlbmVyYXRlIHBhZ2VzIHRoYXQgYXJlbid0IGJlaW5nIHB1Ymxpc2hlZCAoIzE5MzEpCiAgKiBVc2UgYFNhZmVZQU1MLmxvYWRgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIHByb2plY3RzICgjMTk4MikKICAqIFJlbGF0aXZlIHBvc3RzIHNob3VsZCBuZXZlciBmYWlsIHRvIGJ1aWxkICgjMTk3NikKICAqIFJlbW92ZSBleGVjdXRhYmxlIGJpdHMgb2Ygbm9uIGV4ZWN1dGFibGUgZmlsZXMgKCMyMDU2KQogICogYCNwYXRoYCBmb3IgYSBkcmFmdCBpcyBub3cgYF9kcmFmdHNgIGluc3RlYWQgb2YgYF9wb3N0c2AgKCMyMDQyKQogICogUGF0Y2ggYSBjb3VwbGUgc2hvdy1zdG9wcGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgKCMxOTQ2KQogICogU2FuaXRpemUgcGF0aHMgdW5pZm9ybWx5LCBpbiBhIFdpbmRvd3MtZnJpZW5kbHkgd2F5ICgjMjA2NSwgIzIxMDkpCiAgKiBVcGRhdGUgZ2VtIGJ1aWxkIHN0ZXBzIHRvIHdvcmsgY29ycmVjdGx5IG9uIFdpbmRvd3MgKCMyMTE4KQogICogUmVtb3ZlIG9ic29sZXRlIGBub3JtYWxpemVfb3B0aW9uc2AgbWV0aG9kIGNhbGwgZnJvbSBgYmluL2pla3lsbGAgKCMyMTIxKS4KICAqIFJlbW92ZSBgK2AgY2hhcmFjdGVycyBmcm9tIFB5Z21lbnRzIGxleGVyIG5hbWVzIHdoZW4gYWRkaW5nIGFzIGEgQ1NTIGNsYXNzICgjOTk0KQogICogUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGNhdXNlZCBSdWJ5IGludGVycHJldGVyIHdhcm5pbmdzICgjMjE3OCkKICAqIE9ubHkgc3RyaXAgdGhlIGRyaXZlIG5hbWUgaWYgaXQgYmVnaW5zIHRoZSBzdHJpbmcgKCMyMTc1KQogICogUmVtb3ZlIGRlZmF1bHQgcG9zdCB3aXRoIGludmFsaWQgZGF0ZSBmcm9tIHNpdGUgdGVtcGxhdGUgKCMyMjAwKQogICogRml4IGBQb3N0I3VybGAgYW5kIGBQYWdlI3VybGAgZXNjYXBlICgjMTU2OCkKICAqIFN0cmlwIG5ld2xpbmVzIGZyb20gdGhlIGB7JSBoaWdobGlnaHQgJX1gIGJsb2NrIGNvbnRlbnQgKCMxODIzKQogICogTG9hZCBpbiBgcm91Z2VgIG9ubHkgd2hlbiBpdCdzIGJlZW4gcmVxdWVzdGVkIGFzIHRoZSBoaWdobGlnaHRlciAoIzIxODkpCiAgKiBDb252ZXJ0IGlucHV0IHRvIHN0cmluZyBiZWZvcmUgWE1MIGVzY2FwaW5nIChgeG1sX2VzY2FwZWAgbGlxdWlkIGZpbHRlcikgKCMyMjQ0KQogICogTW9kaWZ5IGNvbmZpZ3VyYXRpb24ga2V5IGZvciBDb2xsZWN0aW9ucyBhbmQgcmVzZXQgcHJvcGVybHkuICgjMjIzOCkKICAqIEF2b2lkIGR1cGxpY2F0ZWQgb3V0cHV0IHVzaW5nIGBoaWdobGlnaHRgIHRhZyAoIzIyNjQpCiAgKiBPbmx5IHVzZSBKZWt5bGwubG9nZ2VyIGZvciBvdXRwdXQgKCMyMzA3KQogICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBgaGFzX3lhbWxfaGVhZGVyP2AgKCMyMzEwKQogICogQWRkIGBvdXRwdXRgIHRvIGBEb2N1bWVudGAgbGlxdWlkIG91dHB1dCBoYXNoICgjMjMwOSkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEFkZCBhIGxpbmsgdG8gdGhlIHNpdGUgaW4gdGhlIFJFQURNRS5tZCBmaWxlICgjMTc5NSkKICAqIEFkZCBpbiBIaXN0b3J5IGFuZCBzaXRlIGNoYW5nZXMgZnJvbSBgdjEtc3RhYmxlYCBicmFuY2ggKCMxODM2KQogICogVGVzdGluZyBhZGRpdGlvbnMgb24gdGhlIEV4Y2VycHQgY2xhc3MgKCMxODkzKQogICogRml4IHRoZSBgaGlnaGxpZ2h0YCB0YWcgZmVhdHVyZSAoIzE4NTkpCiAgKiBUZXN0IEpla3lsbCB1bmRlciBSdWJ5IDIuMS4wICgjMTkwMCkKICAqIEFkZCBzY3JpcHQvY2lidWlsZCBmb3IgZnVuIGFuZCBwcm9maXQgKCMxOTEyKQogICogVXNlIGBGb3J3YXJkYWJsZWAgZm9yIGRlbGVnYXRpb24gYmV0d2VlbiBgRXhjZXJwdGAgYW5kIGBQb3N0YCAoIzE5MjcpCiAgKiBSZW5hbWUgYHJlYWRfdGhpbmdzYCB0byBgcmVhZF9jb250ZW50YCAoIzE5MjgpCiAgKiBBZGQgYHNjcmlwdC9icmFuZGluZ2Agc2NyaXB0IGZvciBBU0NJSSBhcnQgbG92aW4nICgjMTkzNikKICAqIFVwZGF0ZSB0aGUgUkVBRE1FIHRvIHJlZmxlY3QgdGhlIHJlcG8gbW92ZSAoIzE5NDMpCiAgKiBBZGQgdGhlIHByb2plY3QgdmlzaW9uIHRvIHRoZSBSRUFETUUgKCMxOTM1KQogICogU3BlZWQgdXAgVHJhdmlzIENJIGJ1aWxkcyBieSB1c2luZyBSZWJ1bmQgKCMxOTg1KQogICogVXNlIFlhcnAgYXMgYSBHZW0gcHJveHkgZm9yIFRyYXZpcyBDSSAoIzE5ODQpCiAgKiBSZW1vdmUgWWFycCBhcyBhIEdlbSBwcm94eSBmb3IgVHJhdmlzIENJICgjMjAwNCkKICAqIE1vdmUgdGhlIHJlYWRpbmcgb2YgbGF5b3V0cyBpbnRvIGl0cyBvd24gY2xhc3MgKCMyMDIwKQogICogVGVzdCBTYXNzIGltcG9ydCAoIzIwMDkpCiAgKiBTd2l0Y2ggTWFydWt1IGFuZCBLcmFtZG93biBpbiBsaXN0cyBvZiBSdW50aW1lIHZzLiBEZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgKCMyMDQ5KQogICogQ2xlYW4gdXAgdGhlIGdlbXNwZWMgZm9yIHRoZSBwcm9qZWN0ICgjMjA5NSkKICAqIEFkZCBKYXBhbmVzZSB0cmFuc2xhdGlvbiBvZiBSRUFETUUgYW5kIENPTlRSSUJVVElORyBkb2NzLiAoIzIwODEpCiAgKiBSZS1hbGlnbiB0aGUgdGFibGVzIGluIEN1Y3VtYmVyICgjMjEwOCkKICAqIFRyaW0gdHJhaWxpbmcgc3BhY2VzIGFuZCBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzICgjMjEyMikKICAqIEZpeCB0aGUgZmFpbGluZyBUcmF2aXMgc2NlbmFyaW9zIGR1ZSB0byBDdWN1bWJlciBpc3N1ZXMgKCMyMTU1KQogICogV3JhcCBgYnVuZGxlIGluc3RhbGxgIGluIGB0cmF2aXNfcmV0cnlgIHRvIHJldHJ5IHdoZW4gUnVieUdlbXMgZmFpbHMgKCMyMTYwKQogICogUmVmYWN0b3IgdGFncyBhbmQgY2F0ZWdvcmllcyAoIzE2MzkpCiAgKiBFeHRyYWN0IHBsdWdpbiBtYW5hZ2VtZW50IGludG8gaXRzIG93biBjbGFzcyAoIzIxOTcpCiAgKiBBZGQgbWlzc2luZyB0ZXN0cyBmb3IgYENvbW1hbmRgICgjMjIxNikKICAqIFVwZGF0ZSBgcnJgIGxpbmsgaW4gQ09OVFJJQlVUSU5HIGRvYyAoIzIyNDcpCiAgKiBTdHJlYW1saW5lIEN1Y3VtYmVyIGV4ZWN1dGlvbiBvZiBgamVreWxsYCBzdWJjb21tYW5kcyAoIzIyNTgpCiAgKiBSZWZhY3RvciBgQ29tbWFuZHM6OlNlcnZlYC4gKCMyMjY5KQogICogUmVmYWN0b3IgYGhpZ2hsaWdodGAgdGFnICgjMjE1NCkKICAqIFVwZGF0ZSBgVXRpbGAgaGFzaCBmdW5jdGlvbnMgd2l0aCBsYXRlc3QgZnJvbSBSYWlscyAoIzIyNzMpCiAgKiBXb3JrYXJvdW5kIGZvciBUcmF2aXMgYnVnICgjMjI5MCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIERvY3VtZW50IEtyYW1kb3duJ3MgR0ZNIHBhcnNlciBvcHRpb24gKCMxNzkxKQogICogTW92ZSBDU1MgdG8gaW5jbHVkZXMgJiB1cGRhdGUgbm9ybWFsaXplLmNzcyB0byB2Mi4xLjMgKCMxNzg3KQogICogTWluaWZ5IENTUyBvbmx5IGluIHByb2R1Y3Rpb24gKCMxODAzKQogICogRml4IGJyb2tlbiBsaW5rIHRvIGluc3RhbGxhdGlvbiBvZiBSdWJ5IG9uIE1vdW50YWluIExpb24gYmxvZyBwb3N0IG9uIFRyb3VibGVzaG9vdGluZyBkb2NzIHBhZ2UgKCMxNzk3KQogICogRml4IGlzc3VlcyB3aXRoIDEuNC4xIHJlbGVhc2UgYmxvZyBwb3N0ICgjMTgwNCkKICAqIEFkZCBub3RlIGFib3V0IGRlcGxveWluZyB0byBPcGVuU2hpZnQgKCMxODEyKQogICogQ29sbGVjdCBhbGwgV2luZG93cy1yZWxhdGVkIGRvY3Mgb250byBvbmUgcGFnZSAoIzE4MTgpCiAgKiBGaXhlZCB0eXBvIGluIGRhdGFmaWxlcyBkb2MgcGFnZSAoIzE4NTQpCiAgKiBDbGFyaWZ5IGhvdyB0byBhY2Nlc3MgYHNpdGVgIGluIGRvY3MgKCMxODY0KQogICogQWRkIGNsb3NpbmcgYDxjb2RlPmAgdGFnIHRvIGBjb250ZXh0LnJlZ2lzdGVyc1s6c2l0ZV1gIG5vdGUgKCMxODY3KQogICogRml4IGxpbmsgdG8gQG1vam9tYm8ncyBzaXRlIHNvdXJjZSAoIzE4OTcpCiAgKiBBZGQgYHBhZ2luYXRlOiBuaWxgIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiBkb2NzICgjMTg5NikKICAqIEFkZCBsaW5rIHRvIG91ciBMaWNlbnNlIGluIHRoZSBzaXRlIGZvb3RlciAoIzE4ODkpCiAgKiBBZGQgYSBjaGFyc2V0IG5vdGUgaW4gIldyaXRpbmcgUG9zdHMiIGRvYyBwYWdlICgjMTkwMikKICAqIERpc2FsbG93IHNlbGVjdGlvbiBvZiBwYXRoIGFuZCBwcm9tcHQgaW4gYmFzaCBleGFtcGxlcwogICogQWRkIGpla3lsbC1jb21wYXNzIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzE5MjMpCiAgKiBBZGQgbm90ZSBpbiBQb3N0cyBkb2NzIGFib3V0IHN0cmlwcGluZyBgPHA+YCB0YWdzIGZyb20gZXhjZXJwdCAoIzE5MzMpCiAgKiBBZGQgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBuZXcgZXhjbHVkZSBiZWhhdmlvciAoIzE5MzgpCiAgKiBMaW5raWZ5ICdhd2Vzb21lIGNvbnRyaWJ1dG9ycycgdG8gcG9pbnQgdG8gdGhlIGNvbnRyaWJ1dG9ycyBncmFwaCBvbiBHaXRIdWIgKCMxOTQwKQogICogVXBkYXRlIGBkb2NzL3NpdGVzLm1kYCBsaW5rIHRvIEdpdEh1YiBUcmFpbmluZyBtYXRlcmlhbHMgKCMxOTQ5KQogICogVXBkYXRlIGBtYXN0ZXJgIHdpdGggdGhlIHJlbGVhc2UgaW5mbyBmcm9tIDEuNC4zICgjMTk0NykKICAqIERlZmluZSBkb2NzIG5hdiBpbiBkYXRhZmlsZSAoIzE5NTMpCiAgKiBDbGFyaWZ5IHRoZSBkb2NzIGFyb3VuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHBvc3RzICgjMTk3MSkKICAqIEFkZCBtaXNzaW5nIGBuZXh0YCBhbmQgYHByZXZpb3VzYCBkb2NzIGZvciBwb3N0IGxheW91dHMgYW5kIHRlbXBsYXRlcyAoIzE5NzApCiAgKiBBZGQgbm90ZSB0byBgV3JpdGluZyBwb3N0c2AgcGFnZSBhYm91dCBob3cgdG8gc3RyaXAgaHRtbCBmcm9tIGV4Y2VycHQgKCMxOTYyKQogICogQWRkIGBqZWt5bGwtaHVtYW5pemVgIHBsdWdpbiB0byBwbHVnaW4gbGlzdCAoIzE5OTgpCiAgKiBBZGQgYGpla3lsbC1mb250LWF3ZXNvbWVgIHBsdWdpbiB0byBwbHVnaW4gbGlzdCAoIzE5OTkpCiAgKiBBZGQgYHN1YmxpbWUtamVreWxsYCB0byBsaXN0IG9mIEVkaXRvciBwbHVnaW5zICgjMjAwMSkKICAqIEFkZCBgdmltLWpla3lsbGAgdG8gdGhlIGxpc3Qgb2YgRWRpdG9yIHBsdWdpbnMgKCMyMDA1KQogICogRml4IG5vbi1zZW1hbnRpYyBuZXN0aW5nIG9mIGBwYCB0YWdzIGluIGBuZXdzX2l0ZW1gIGxheW91dCAoIzIwMTMpCiAgKiBEb2N1bWVudCBkZXN0aW5hdGlvbiBmb2xkZXIgY2xlYW5pbmcgKCMyMDE2KQogICogVXBkYXRlZCBpbnN0cnVjdGlvbnMgZm9yIE5lYXJseUZyZWVTcGVlY2guTkVUIGluc3RhbGxhdGlvbiAoIzIwMTUpCiAgKiBVcGRhdGUgbGluayB0byByYWNrLWpla3lsbCBvbiAiRGVwbG95bWVudCBNZXRob2RzIiBwYWdlICgjMjA0NykKICAqIEZpeCB0eXBvIGluIC9kb2NzL2NvbmZpZ3VyYXRpb24gKCMyMDczKQogICogRml4IGNvdW50IGluIGRvY3MgZm9yIGBzaXRlLnN0YXRpY19maWxlc2AgKCMyMDc3KQogICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZG9jcyB0byBpbmRpY2F0ZSB1dGYtOCBpcyB0aGUgZGVmYXVsdCBmb3IgMi4wLjAgYW5kIEFTQ0lJIGZvciAxLjkuMyAoIzIwNzQpCiAgKiBBZGQgaW5mbyBhYm91dCB1bnJlbGVhc2VkIGZlYXR1cmUgdG8gdGhlIHNpdGUgKCMyMDYxKQogICogQWRkIHdoaXRlc3BhY2UgdG8gbGlxdWlkIGV4YW1wbGUgaW4gR2l0SHViIFBhZ2VzIGRvY3MgKCMyMDg0KQogICogQ2xhcmlmeSB0aGUgd2F5IFNhc3MgYW5kIENvZmZlZVNjcmlwdCBmaWxlcyBhcmUgcmVhZCBpbiBhbmQgb3V0cHV0ICgjMjA2NykKICAqIEFkZCBseWNoZSBnYWxsZXJ5IHRhZyBwbHVnaW4gbGluayB0byBsaXN0IG9mIHBsdWdpbnMgKCMyMDk0KQogICogQWRkIEpla3lsbCBQYWdlcyBEaXJlY3RvcnkgcGx1Z2luIHRvIGxpc3Qgb2YgcGx1Z2lucyAoIzIwOTYpCiAgKiBVcGRhdGUgQ29uZmlndXJhdGlvbiBkb2NzIHBhZ2Ugd2l0aCBuZXcgbWFya2Rvd24gZXh0ZW5zaW9uICgjMjEwMikKICAqIEFkZCBgamVreWxsLWltYWdlLXNldGAgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzIxMDUpCiAgKiBMb3NzbGVzc2x5IGNvbXByZXNzIGltYWdlcyAoIzIxMjgpCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byAzLjAuMCAoIzIxMjYpCiAgKiBVcGRhdGUgbW9kZXJuaXpyIHRvIHYyLjcuMSAoIzIxMjkpCiAgKiBBZGQgYGpla3lsbC1vcmRpbmFsYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyMTUwKQogICogQWRkIGBqZWt5bGxfZmlndXJlYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyMTU4KQogICogQ2xhcmlmeSB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc2FmZSBtb2RlICgjMjE2MykKICAqIFNvbWUgSFRNTCB0aWR5aW5nICgjMjEzMCkKICAqIFJlbW92ZSBtb2Rlcm5penIgYW5kIHVzZSBodG1sNXNoaXYuanMgZGlyZWN0bHkgZm9yIElFIGxlc3MgdGhhbiB2OSAoIzIxMzEpCiAgKiBSZW1vdmUgdW51c2VkIGltYWdlcyAoIzIxODcpCiAgKiBVc2UgYGFycmF5X3RvX3NlbnRlbmNlX3N0cmluZ2AgZmlsdGVyIHdoZW4gb3V0cHV0dGluZyBuZXdzIGl0ZW0gY2F0ZWdvcmllcyAoIzIxOTEpCiAgKiBBZGQgbGluayB0byBIZWxwIHJlcG8gaW4gcHJpbWFyeSBuYXZpZ2F0aW9uIGJhciAoIzIxNzcpCiAgKiBTd2l0Y2ggdG8gdXNpbmcgYW4gaWNvIGZpbGUgZm9yIHRoZSBzaG9ydGN1dCBpY29uICgjMjE5MykKICAqIFVzZSBudW1iZXJzIHRvIHNwZWNpZnkgZm9udCB3ZWlnaHRzIGFuZCBvbmx5IGJyaW5nIGluIGZvbnQgd2VpZ2h0cyB1c2VkICgjMjE4NSkKICAqIEFkZCBhIGxpbmsgdG8gdGhlIGxpc3Qgb2YgYWxsIHR6IGRhdGFiYXNlIHRpbWUgem9uZXMgKCMxODI0KQogICogQ2xlYW4tdXAgYW5kIGltcHJvdmUgZG9jdW1lbnRhdGlvbiBgZmVlZC54bWxgICgjMjE5MikKICAqIFJlbW92ZSBkdXBsaWNhdGUgZW50cnkgaW4gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjIwNikKICAqIFJlZHVjZSB0aGUgd2hpdGVzcGFjZSBpbiB0aGUgZmF2aWNvbi4gKCMyMjEzKQogICogQWRkIGBqZWt5bGwtcGFnZS1jb2xsZWN0aW9uc2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjIxNSkKICAqIEFkZCBhIGNyb3NzLXJlZmVyZW5jZSBhYm91dCBgcG9zdF91cmxgICgjMjI0MykKICAqIEFkZCBgamVreWxsLWxpdmUtdGlsZXNgIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzIyNTApCiAgKiBGaXhlZCBicm9rZW4gbGluayB0byBHaXRIdWIgdHJhaW5pbmcgbWF0ZXJpYWwgc2l0ZSBzb3VyY2UgKCMyMjU3KQogICogVXBkYXRlIGxpbmsgdG8gaGVscCByZXBvLCBub3cgY2FsbGVkIGBqZWt5bGwtaGVscGAgKCMyMjc3KQogICogRml4IGNhcGl0YWxpemF0aW9uIG9mICdKZWt5bGwnIG9uIERlcGxveW1lbnQgTWV0aG9kcyBwYWdlICgjMjI5MSkKICAqIEluY2x1ZGUgcGx1Z2lucyBieSBzb25ueW0gaW4gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjI5NykKICAqIEFkZCBkZXByZWNhdGVkIGFydGljbGVzIGtlZXBlciBmaWx0ZXIgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjMwMCkKICAqIFNpbXBsaWZ5IGFuZCBpbXByb3ZlIG91ciBDU1MuICgjMjEyNykKICAqIFVzZSBibGFjayB0ZXh0IGNvbG9yIGZvciB0aGUgbW9iaWxlIG5hdmJhciAoIzIzMDYpCiAgKiBVc2UgdGhlIGJ1aWx0IGluIGRhdGUgZmlsdGVyIGFuZCBgc2l0ZS50aW1lYCBmb3IgdGhlIGNvcHlyaWdodCB5ZWFyLiAoIzIzMDUpCiAgKiBVcGRhdGUgaHRtbDVzaGl2IHRvIHYzLjcuMiAoIzIzMDQpCiAgKiBBZGQgMi4wLjAgcmVsZWFzZSBwb3N0ICgjMjI5OCkKICAqIEFkZCBkb2NzIGZvciBjdXN0b20gbWFya2Rvd24gcHJvY2Vzc29ycyAoIzIyOTgpCiAgKiBBZGQgZG9jcyBmb3IgYHdoZXJlYCBhbmQgYGdyb3VwX2J5YCBMaXF1aWQgZmlsdGVycyAoIzIyOTgpCiAgKiBSZW1vdmUgbm90ZXMgaW4gZG9jcyBmb3IgdW5yZWxlYXNlZCBmZWF0dXJlcyAoIzIzMDkpCgojIyAxLjUuMSAvIDIwMTQtMDMtMjcKCiMjIyBCdWcgRml4ZXMKCiAgKiBPbmx5IHN0cmlwIHRoZSBkcml2ZSBuYW1lIGlmIGl0IGJlZ2lucyB0aGUgc3RyaW5nICgjMjE3NikKCiMjIDEuNS4wIC8gMjAxNC0wMy0yNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIExvb3NlbiBgc2FmZV95YW1sYCBkZXBlbmRlbmN5IHRvIGB+PiAxLjBgICgjMjE2NykKICAqIEJ1bXAgYHNhZmVfeWFtbGAgZGVwZW5kZW5jeSB0byBgfj4gMS4wLjBgICgjMTk0MikKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggaXNzdWUgd2hlcmUgZmlsZXN5c3RlbSB0cmF2ZXJzYWwgcmVzdHJpY3Rpb24gYnJva2UgV2luZG93cyAoIzIxNjcpCiAgKiBMb2NrIGBtYXJ1a3VgIGF0IGAwLjcuMGAgKCMyMTY3KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTG9jayBgY3VjdW1iZXJgIGF0IGAxLjMuMTFgICgjMjE2NykKCiMjIDEuNC4zIC8gMjAxNC0wMS0xMwoKIyMjIEJ1ZyBGaXhlcwoKICAqIFBhdGNoIHNob3ctc3RvcHBpbmcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzICgjMTk0NCkKCiMjIDEuNC4yIC8gMjAxMy0xMi0xNgoKIyMjIEJ1ZyBGaXhlcwoKICAqIFR1cm4gb24gTWFydWt1IGZlbmNlZCBjb2RlIGJsb2NrcyBieSBkZWZhdWx0ICgjMTgzMCkKCiMjIDEuNC4xIC8gMjAxMy0xMi0wOQoKIyMjIEJ1ZyBGaXhlcwoKICAqIERvbid0IGFsbG93IG5pbCBlbnRyaWVzIHdoZW4gbG9hZGluZyBwb3N0cyAoIzE3OTYpCgojIyAxLjQuMCAvIDIwMTMtMTItMDcKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgc3VwcG9ydCBmb3IgVE9NTCBjb25maWcgZmlsZXMgKCMxNzY1KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFNvcnQgcGx1Z2lucyBhcyBhIHdheSB0byBlc3RhYmxpc2ggYSBsb2FkIG9yZGVyICgjMTY4MikKICAqIFVwZGF0ZSBNYXJ1a3UgdG8gMC43LjAgKCMxNzc1KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEFkZCBhIHNwYWNlIGJldHdlZW4gdHdvIHdvcmRzIGluIGEgUGFnaW5hdGlvbiB3YXJuaW5nIG1lc3NhZ2UgKCMxNzY5KQogICogVXBncmFkZSBgdG9tbGAgZ2VtIHRvIGB2MC4xLjBgIHRvIG1haW50YWluIGNvbXBhdCB3aXRoIFJ1YnkgMS44LjcgKCMxNzc4KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVtb3ZlIHNvbWUgd2hpdGVzcGFjZSBpbiB0aGUgY29kZSAoIzE3NTUpCiAgKiBSZW1vdmUgc29tZSBkdXBsaWNhdGlvbiBpbiB0aGUgcmVhZGluZyBvZiBwb3N0cyBhbmQgZHJhZnRzICgjMTc3OSkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEZpeGVkIGNhc2Ugb2YgYSB3b3JkIGluIHRoZSBKZWt5bGwgdjEuMy4wIHJlbGVhc2UgcG9zdCAoIzE3NjIpCiAgKiBGaXhlZCB0aGUgbWltZSB0eXBlIGZvciB0aGUgZmF2aWNvbiAoIzE3NzIpCgojIyAxLjMuMSAvIDIwMTMtMTEtMjYKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYSBgLS1wcmVmaXhgIG9wdGlvbiB0byBwYXNzdGhyb3VnaCBmb3IgdGhlIGltcG9ydGVycyAoIzE2NjkpCiAgKiBQdXNoIHRoZSBwYWdpbmF0b3IgcGx1Z2luIGxvd2VyIGluIHRoZSBwbHVnaW4gcHJpb3JpdHkgb3JkZXIgc28gb3RoZXIgcGx1Z2lucyBydW4gYmVmb3JlIGl0ICgjMTc1OSkKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggdGhlIGluY2x1ZGUgdGFnIHdoZW4gcmFuIGluIGEgbG9vcCAoIzE3MjYpCiAgKiBGaXggZXJyb3JzIHdoZW4gdXNpbmcgYC0td2F0Y2hgIG9uIDEuOC43ICgjMTczMCkKICAqIFNwZWNpZnkgd2hlcmUgdGhlIGluY2x1ZGUgaXMgY2FsbGVkIGZyb20gaWYgYW4gaW5jbHVkZWQgZmlsZSBpcyBtaXNzaW5nICgjMTc0NikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4dHJhY3QgYFNpdGUjZmlsdGVyX2VudHJpZXNgIGludG8gaXRzIG93biBvYmplY3QgKCMxNjk3KQogICogRW5hYmxlIFRyYXZpcycgYnVuZGxlIGNhY2hpbmcgKCMxNzM0KQogICogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gc29tZSBmaWxlcyAoIzE3MzYpCiAgKiBGaXggYSBkdXBsaWNhdGUgdGVzdCBuYW1lICgjMTc1NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBsaW5rIHRvIGV4YW1wbGUgUmFrZWZpbGUgdG8gcG9pbnQgdG8gc3BlY2lmaWMgY29tbWl0ICgjMTc0MSkKICAqIEZpeCBkcmFmdHMgZG9jcyB0byBpbmRpY2F0ZSB0aGF0IGRyYWZ0IHRpbWUgaXMgYmFzZWQgb24gZmlsZSBtb2RpZmljYXRpb24gdGltZSwgbm90IGBUaW1lLm5vd2AgKCMxNjk1KQogICogQWRkIGBqZWt5bGwtbW9udGhseS1hcmNoaXZlLXBsdWdpbmAgYW5kIGBqZWt5bGwtY2F0ZWdvcnktYXJjaGl2ZS1wbHVnaW5gIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzE2OTMpCiAgKiBBZGQgYGpla3lsbC1hc3NldC1wYXRoLXBsdWdpbmAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTY3MCkKICAqIEFkZCBgZW1vamktZm9yLWpla3lsbGAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0IHBsdWdpbnMgKCMxNzA4KQogICogRml4IHByZXZpb3VzIHNlY3Rpb24gbGluayBvbiBwbHVnaW5zIHBhZ2UgdG8gcG9pbnQgdG8gcGFnaW5hdGlvbiBwYWdlICgjMTcwNykKICAqIEFkZCBgb3JnLW1vZGVgIGNvbnZlcnRlciBwbHVnaW4gdG8gdGhpcmQtcGFydHkgcGx1Z2lucyAoIzE3MTEpCiAgKiBQb2ludCAiQmxvZyBtaWdyYXRpb25zIiBwYWdlIHRvIGh0dHA6Ly9pbXBvcnQuamVreWxscmIuY29tICgjMTczMikKICAqIEFkZCBkb2NzIGZvciBgcG9zdF91cmxgIHdoZW4gcG9zdHMgYXJlIGluIHN1YmRpcmVjdG9yaWVzICgjMTcxOCkKICAqIFVwZGF0ZSB0aGUgZG9jcyB0byBwb2ludCB0byBgZXhhbXBsZS5jb21gICgjMTQ0OCkKCiMjIDEuMy4wIC8gMjAxMy0xMS0wNAoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBzdXBwb3J0IGZvciBhZGRpbmcgZGF0YSBhcyBZQU1MIGZpbGVzIHVuZGVyIGEgc2l0ZSdzIGBfZGF0YWAgZGlyZWN0b3J5ICgjMTAwMykKICAqIEFsbG93IHZhcmlhYmxlcyB0byBiZSB1c2VkIHdpdGggYGluY2x1ZGVgIHRhZ3MgKCMxNDk1KQogICogQWxsb3cgdXNpbmcgZ2VtcyBmb3IgcGx1Z2luIG1hbmFnZW1lbnQgKCMxNTU3KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERlY3JlYXNlIHRoZSBzcGVjaWZpY2l0eSBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBDU1MgKCMxNTc0KQogICogQWRkIGBlbmNvZGluZ2AgY29uZmlndXJhdGlvbiBvcHRpb24gKCMxNDQ5KQogICogUHJvdmlkZSBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgZm9yIEpla3lsbCdzIGN1c3RvbSBMaXF1aWQgdGFncyAoIzE1MTQpCiAgKiBJZiBhbiBpbmNsdWRlZCBmaWxlIGNhdXNlcyBhIExpcXVpZCBlcnJvciwgYWRkIHRoZSBwYXRoIHRvIHRoZSBpbmNsdWRlIGZpbGUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlICgjMTU5NikKICAqIElmIGEgbGF5b3V0IGNhdXNlcyBhIExpcXVpZCBlcnJvciwgY2hhbmdlIHRoZSBlcnJvciBtZXNzYWdlIHNvIHRoYXQgd2Uga25vdyBpdCBjb21lcyBmcm9tIHRoZSBsYXlvdXQgKCMxNjAxKQogICogVXBkYXRlIEtyYW1kb3duIGRlcGVuZGVuY3kgdG8gYH4+IDEuMmAgKCMxNjEwKQogICogVXBkYXRlIGBzYWZlX3lhbWxgIGRlcGVuZGVuY3kgdG8gYH4+IDAuOS43YCAoIzE2MDIpCiAgKiBBbGxvdyBsYXlvdXRzIHRvIGJlIGluIHN1YmZvbGRlcnMgbGlrZSBpbmNsdWRlcyAoIzE2MjIpCiAgKiBTd2l0Y2ggdG8gbGlzdGVuIGZvciBzaXRlIHdhdGNoaW5nIHdoaWxlIHNlcnZpbmcgKCMxNTg5KQogICogQWRkIGEgYGpzb25gIGxpcXVpZCBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBzaXRlcyAoIzE2NTEpCiAgKiBQb2ludCBwZW9wbGUgdG8gdGhlIG1pZ3JhdGlvbiBkb2NzIHdoZW4gdGhlIGBqZWt5bGwtaW1wb3J0YCBnZW0gaXMgbWlzc2luZyAoIzE2NjIpCgojIyMgQnVnIEZpeGVzCgogICogRml4IHVwIG1hdGNoaW5nIGFnYWluc3Qgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB3aGVuIHRoZSB0d28gbG9jYXRpb25zIGFyZSBzaW1pbGFyICgjMTU1NikKICAqIEZpeCB0aGUgbWlzc2luZyBgcGF0aG5hbWVgIHJlcXVpcmUgaW4gY2VydGFpbiBjYXNlcyAoIzEyNTUpCiAgKiBVc2UgYCtgIGluc3RlYWQgb2YgYEFycmF5I2NvbmNhdGAgd2hlbiBidWlsZGluZyBgUG9zdGAgYXR0cmlidXRlIGxpc3QgKCMxNTcxKQogICogUHJpbnQgc2VydmVyIGFkZHJlc3Mgd2hlbiBsYXVuY2hpbmcgYSBzZXJ2ZXIgKCMxNTg2KQogICogRG93bmdyYWRlIHRvIE1hcnVrdSBgfj4gMC42LjBgIGluIG9yZGVyIHRvIGF2b2lkIGNoYW5nZXMgaW4gcmVuZGVyaW5nICgjMTU5OCkKICAqIEZpeCBlcnJvciB3aXRoIGZhaWxpbmcgaW5jbHVkZSB0YWcgd2hlbiB2YXJpYWJsZSB3YXMgZmlsZSBuYW1lICgjMTYxMykKICAqIERvd25jYXNlIGxleGVycyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHB5Z21lbnRzICgjMTYxNSkKICAqIENhcGl0YWxpemUgdGhlIHNob3J0IHZlcmJvc2Ugc3dpdGNoIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggdGhlIGJ1aWx0LWluIENvbW1hbmRlciBzd2l0Y2ggKCMxNjYwKQogICogRml4IGNvbXBhdGliaWxpdHkgd2l0aCAxLjgueCAoIzE2NjUpCiAgKiBGaXggYW4gZXJyb3Igd2l0aCB0aGUgbmV3IGZpbGUgd2F0Y2hpbmcgY29kZSBkdWUgdG8gbGlicmFyeSB2ZXJzaW9uIGluY29tcGF0aWJpbGl0aWVzICgjMTY4NykKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEFkZCBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBDb3ZlcmFsbHMgKCMxNTM5KQogICogUmVmYWN0b3IgdGhlIExpcXVpZCBgaW5jbHVkZWAgdGFnICgjMTQ5MCkKICAqIFVwZGF0ZSBsYXVuY2h5IGRlcGVuZGVuY3kgdG8gYH4+IDIuM2AgKCMxNjA4KQogICogVXBkYXRlIHJyIGRlcGVuZGVuY3kgdG8gYH4+IDEuMWAgKCMxNjA0KQogICogVXBkYXRlIGN1Y3VtYmVyIGRlcGVuZGVuY3kgdG8gYH4+IDEuM2AgKCMxNjA3KQogICogVXBkYXRlIGNvdmVyYWxscyBkZXBlbmRlbmN5IHRvIGB+PiAwLjcuMGAgKCMxNjA2KQogICogVXBkYXRlIHJha2UgZGVwZW5kZW5jeSB0byBgfj4gMTAuMWAgKCMxNjAzKQogICogQ2xlYW4gdXAgYHNpdGUucmJgIGNvbW1lbnRzIHRvIGJlIG1vcmUgY29uY2lzZS91bmlmb3JtICgjMTYxNikKICAqIFVzZSB0aGUgbWFzdGVyIGJyYW5jaCBmb3IgdGhlIGJ1aWxkIGJhZGdlIGluIHRoZSByZWFkbWUgKCMxNjM2KQogICogUmVmYWN0b3IgU2l0ZSNyZW5kZXIgKCMxNjM4KQogICogUmVtb3ZlIGR1cGxpY2F0aW9uIGluIGNvbW1hbmQgbGluZSBvcHRpb25zICgjMTYzNykKICAqIEFkZCB0ZXN0cyBmb3IgYWxsIHRoZSBjb2RlcmF5IG9wdGlvbnMgKCMxNTQzKQogICogSW1wcm92ZSBzb21lIG9mIHRoZSBDdWN1bWJlciB0ZXN0IGNvZGUgKCMxNDkzKQogICogSW1wcm92ZSBjb21wYXJpc29ucyBvZiB0aW1lc3RhbXBzIGJ5IGlnbm9yaW5nIHRoZSBzZWNvbmRzICgjMTU4MikKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEZpeCBwYXJhbXMgZm9yIGBKZWt5bGxJbXBvcnQ6OldvcmRQcmVzcy5wcm9jZXNzYCBhcmd1bWVudHMgKCMxNTU0KQogICogQWRkIGBqZWt5bGwtc3VnZ2VzdGVkLXR3ZWV0YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxNTU1KQogICogTGluayB0byBMaXF1aWQncyBkb2NzIGZvciB0YWdzIGFuZCBmaWx0ZXJzICgjMTU1MykKICAqIEFkZCBub3RlIGFib3V0IGluc3RhbGxpbmcgWGNvZGUgb24gdGhlIE1hYyBpbiB0aGUgSW5zdGFsbGF0aW9uIGRvY3MgKCMxNTYxKQogICogU2ltcGxpZnkvZ2VuZXJhbGl6ZSBwYWdpbmF0aW9uIGRvY3MgKCMxNTc3KQogICogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBuZXcgZGF0YSBzb3VyY2VzIGZlYXR1cmUgKCMxNTAzKQogICogQWRkIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBnZW5lcmF0b3JzICgjMTU5MCwgIzE1OTIpCiAgKiBJbXByb3ZlIHRoZSBpbnN0cnVjdGlvbnMgZm9yIG1pbWlja2luZyBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gKCMxNjE0KQogICogQWRkIGBqZWt5bGwtaW1wb3J0YCB3YXJuaW5nIG5vdGUgb2YgbWlzc2luZyBkZXBlbmRlbmNpZXMgKCMxNjI2KQogICogRml4IGdyYW1tYXIgaW4gdGhlIFVzYWdlIHNlY3Rpb24gKCMxNjM1KQogICogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSB1c2Ugb2YgZ2VtcyBhcyBwbHVnaW5zICgjMTY1NikKICAqIERvY3VtZW50IHRoZSBleGlzdGVuY2Ugb2YgYSBmZXcgYWRkaXRpb25hbCBwbHVnaW5zICgjMTQwNSkKICAqIERvY3VtZW50IHRoYXQgdGhlIGBkYXRlX3RvX3N0cmluZ2AgYWx3YXlzIHJldHVybnMgYSB0d28gZGlnaXQgZGF5ICgjMTY2MykKICAqIEZpeCBuYXZpZ2F0aW9uIGluIHRoZSAiV29ya2luZyB3aXRoIERyYWZ0cyIgcGFnZSAoIzE2NjcpCiAgKiBGaXggYW4gZXJyb3Igd2l0aCB0aGUgZGF0YSBkb2N1bWVudGF0aW9uICgjMTY5MSkKCiMjIDEuMi4xIC8gMjAxMy0wOS0xNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFByaW50IGJldHRlciBtZXNzYWdlcyBmb3IgZGV0YWNoZWQgc2VydmVyLiBNdXRlIG91dHB1dCBvbiBkZXRhY2guICgjMTUxOCkKICAqIERpc2FibGUgcmV2ZXJzZSBsb29rdXAgd2hlbiBydW5uaW5nIGBqZWt5bGwgc2VydmVgICgjMTM2MykKICAqIFVwZ3JhZGUgUmVkQ2FycGV0IGRlcGVuZGVuY3kgdG8gYH4+IDIuMy4wYCAoIzE1MTUpCiAgKiBVcGdyYWRlIHRvIExpcXVpZCBgPj0gMi41LjIsIDwgMi42YCAoIzE1MzYpCgojIyMgQnVnIEZpeGVzCgogICogRml4IGZpbGUgZGlzY3JlcGFuY3kgaW4gZ2Vtc3BlYyAoIzE1MjIpCiAgKiBGb3JjZSByZW5kZXJpbmcgb2YgSW5jbHVkZSB0YWcgKCMxNTI1KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogQWRkIGEgcmFrZSB0YXNrIHRvIGdlbmVyYXRlIGEgbmV3IHJlbGVhc2UgcG9zdCAoIzE0MDQpCiAgKiBNdXRlIExTSSBvdXRwdXQgaW4gdGVzdHMgKCMxNTMxKQogICogVXBkYXRlIGNvbnRyaWJ1dG9yIGRvY3VtZW50YXRpb24gKCMxNTM3KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogRml4IGEgY291cGxlIG9mIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBzaXRlICgjMTUxMSkKICAqIE1ha2UgbmF2aWdhdGlvbiBtZW51cyByZXVzYWJsZSAoIzE1MDcpCiAgKiBGaXggbGluayB0byBIaXN0b3J5IHBhZ2UgZnJvbSBSZWxlYXNlIHYxLjIuMCBub3RlcyBwb3N0LgogICogRml4IG1hcmt1cCBpbiBIaXN0b3J5IGZpbGUgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zICgjMTUxMikKICAqIEV4cGFuZCAxLjIgcmVsZWFzZSBwb3N0IHRpdGxlIHRvIDEuMi4wICgjMTUxNikKCiMjIDEuMi4wIC8gMjAxMy0wOS0wNgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIERpc2FibGUgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgZXhjZXJwdHMgd2hlbiBgZXhjZXJwdF9zZXBhcmF0b3JgIGlzIGAiImAuICgjMTM4NikKICAqIEFkZCBjaGVja2luZyBmb3IgVVJMIGNvbmZsaWN0cyB3aGVuIHJ1bm5pbmcgYGpla3lsbCBkb2N0b3JgICgjMTM4OSkKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBDYXRjaCBhbmQgZml4IGludmFsaWQgYHBhZ2luYXRlYCB2YWx1ZXMgKCMxMzkwKQogICogUmVtb3ZlIHN1cGVyZmx1b3VzIGBkaXYuY29udGFpbmVyYCBmcm9tIHRoZSBkZWZhdWx0IGh0bWwgdGVtcGxhdGUgZm9yIGBqZWt5bGwgbmV3YCAoIzEzMTUpCiAgKiBBZGQgYC1EYCBzaG9ydC1mb3JtIHN3aXRjaCBmb3IgdGhlIGRyYWZ0cyBvcHRpb24gKCMxMzk0KQogICogVXBkYXRlIHRoZSBsaW5rcyBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBmb3IgVHdpdHRlciBhbmQgR2l0SHViICgjMTQwMCkKICAqIFVwZGF0ZSBkdW1teSBlbWFpbCBhZGRyZXNzIHRvIGV4YW1wbGUuY29tIGRvbWFpbiAoIzE0MDgpCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byB2Mi4xLjIgYW5kIG1pbmlmeTsgYWRkIHJha2UgdGFzayB0byB1cGRhdGUgbm9ybWFsaXplLmNzcyB3aXRoIGdyZWF0ZXIgZWFzZS4gKCMxNDMwKQogICogQWRkIHRoZSBhYmlsaXR5IHRvIGRldGFjaCB0aGUgc2VydmVyIHJhbiBieSBgamVreWxsIHNlcnZlYCBmcm9tIGl0J3MgY29udHJvbGxpbmcgdGVybWluYWwgKCMxNDQzKQogICogSW1wcm92ZSBwZXJtYWxpbmsgZ2VuZXJhdGlvbiBmb3IgVVJMcyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycyAoIzk0NCkKICAqIEV4cG9zZSB0aGUgY3VycmVudCBKZWt5bGwgdmVyc2lvbiB0byBwb3N0cyBhbmQgcGFnZXMgdmlhIGEgbmV3IGBqZWt5bGwudmVyc2lvbmAgdmFyaWFibGUgKCMxNDgxKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIE1hcmtkb3duIGV4dGVuc2lvbiBtYXRjaGluZyBtYXRjaGVzIG9ubHkgZXhhY3QgbWF0Y2hlcyAoIzEzODIpCiAgKiBGaXhlZCBOb01ldGhvZEVycm9yIHdoZW4gbWVzc2FnZSBwYXNzZWQgdG8gYFN0ZXZlbnNvbiNtZXNzYWdlYCBpcyBuaWwgKCMxMzg4KQogICogVXNlIGJpbmFyeSBtb2RlIHdoZW4gd3JpdGluZyBmaWxlICgjMTM2NCkKICAqIEZpeCAndW5kZWZpbmVkIG1ldGhvZCBgZW5jb2RpbmdgIGZvciAibWFpbHRvIicgZXJyb3JzIHcvIFJ1YnkgMS44IGFuZCBLcmFtZG93biA+IDAuMTQuMCAoIzEzOTcpCiAgKiBEbyBub3QgZm9yY2UgdGhlIHBlcm1hbGluayB0byBiZSBhIGRpciBpZiBpdCBlbmRzIG9uIC5odG1sICgjOTYzKQogICogV2hlbiBhIExpcXVpZCBFeGNlcHRpb24gaXMgY2F1Z2h0LCBzaG93IHRoZSBmdWxsIHBhdGggcmVsLiB0byBzaXRlIHNvdXJjZSAoIzE0MTUpCiAgKiBQcm9wZXJseSByZWFkIGluIHRoZSBjb25maWcgb3B0aW9ucyB3aGVuIHNlcnZpbmcgdGhlIGRvY3MgbG9jYWxseSAoIzE0NDQpCiAgKiBGaXhlZCBgLS1sYXlvdXRzYCBvcHRpb24gZm9yIGBidWlsZGAgYW5kIGBzZXJ2ZWAgY29tbWFuZHMgKCMxNDU4KQogICogUmVtb3ZlIGtyYW1kb3duIGFzIGEgcnVudGltZSBkZXBlbmRlbmN5IHNpbmNlIGl0J3Mgb3B0aW9uYWwgKCMxNDk4KQogICogUHJvdmlkZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgZm9yIGludmFsaWQgZmlsZSBuYW1lcyBpbiB0aGUgaW5jbHVkZSB0YWcgKCMxNDk0KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVtb3ZlIHJlZHVuZGFudCBhcmd1bWVudCB0byBKZWt5bGw6OkNvbW1hbmRzOjpOZXcjc2NhZmZvbGRfcG9zdF9jb250ZW50ICgjMTM1NikKICAqIEFkZCBuZXcgZGVwZW5kZW5jaWVzIHRvIHRoZSBSRUFETUUgKCMxMzYwKQogICogRml4IGxpbmsgdG8gY29udHJpYnV0aW5nIHBhZ2UgaW4gUkVBRE1FICgjMTQyNCkKICAqIFVwZGF0ZSBUb21Eb2MgaW4gUGFnZXIjaW5pdGlhbGl6ZSB0byBtYXRjaCBwYXJhbXMgKCMxNDQxKQogICogUmVmYWN0b3IgYFNpdGUjY2xlYW51cGAgaW50byBgSmVreWxsOjpTaXRlOjpDbGVhbmVyYCBjbGFzcyAoIzE0MjkpCiAgKiBTZXZlcmFsIG90aGVyIHNtYWxsIG1pbm9yIHJlZmFjdG9yaW5ncyAoIzEzNDEpCiAgKiBJZ25vcmUgYF9zaXRlYCBpbiBqZWt5bGxyYi5jb20gZGVwbG95ICgjMTQ4MCkKICAqIEFkZCBHZW0gdmVyc2lvbiBhbmQgZGVwZW5kZW5jeSBiYWRnZSB0byBSRUFETUUgKCMxNDk3KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGluZm8gYWJvdXQgbmV3IHJlbGVhc2VzICgjMTM1MykKICAqIFVwZGF0ZSBwbHVnaW4gbGlzdCB3aXRoIGpla3lsbC1yc3MgcGx1Z2luICgjMTM1NCkKICAqIFVwZGF0ZSB0aGUgc2l0ZSBsaXN0IHBhZ2Ugd2l0aCBSdWJ5J3Mgb2ZmaWNpYWwgc2l0ZSAoIzEzNTgpCiAgKiBBZGQgYGpla3lsbC1kaXRhYWAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTM3MCkKICAqIEFkZCBgcG9zdGZpbGVzYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxMzczKQogICogRm9yIGludGVybmFsIGxpbmtzLCB1c2UgZnVsbCBwYXRoIGluY2x1ZGluZyB0cmFpbGluZyBgL2AgKCMxNDExKQogICogVXNlIGN1cmx5IGFwb3N0cm9waGVzIGluIHRoZSBkb2NzICgjMTQxOSkKICAqIFVwZGF0ZSB0aGUgZG9jcyBmb3IgUmVkY2FycGV0IGluIEpla3lsbCAoIzE0MTgpCiAgKiBBZGQgYHBsdXJhbGl6ZWAgYW5kIGByZWFkaW5nX3RpbWVgIGZpbHRlcnMgdG8gZG9jcyAoIzE0MzkpCiAgKiBGaXggbWFya3VwIGZvciB0aGUgS3JhbWRvd24gb3B0aW9ucyAoIzE0NDUpCiAgKiBGaXggdHlwb3MgaW4gdGhlIEhpc3RvcnkgZmlsZSAoIzE0NTQpCiAgKiBBZGQgdHJhaWxpbmcgc2xhc2ggdG8gc2l0ZSdzIHBvc3QgVVJMICgjMTQ2MikKICAqIENsYXJpZnkgdGhhdCBgLS1jb25maWdgIHdpbGwgdGFrZSBtdWx0aXBsZSBmaWxlcyAoIzE0NzQpCiAgKiBGaXggZG9jcy90ZW1wbGF0ZXMubWQgcHJpdmF0ZSBnaXN0IGV4YW1wbGUgKCMxNDc3KQogICogVXNlIGBzaXRlLnJlcG9zaXRvcnlgIGZvciBKZWt5bGwncyBHaXRIdWIgVVJMICgjMTQ2MykKICAqIEFkZCBgamVreWxsLXBhZ2VsZXNzLXJlZGlyZWN0c2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTQ4NikKICAqIENsYXJpZnkgdGhhdCBgZGF0ZV90b194bWxzY2hlbWFgIHJldHVybnMgYW4gSVNPIDg2MDEgc3RyaW5nICgjMTQ4OCkKICAqIEFkZCBgamVreWxsLWdvb2QtaW5jbHVkZWAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTQ5MSkKICAqIFhNTCBlc2NhcGUgdGhlIGJsb2cgcG9zdCB0aXRsZSBpbiBvdXIgZmVlZCAoIzE1MDEpCiAgKiBBZGQgYGpla3lsbC10b2MtZ2VuZXJhdG9yYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxNTA2KQoKIyMgMS4xLjIgLyAyMDEzLTA3LTI1CgojIyMgQnVnIEZpeGVzCgogICogUmVxdWlyZSBMaXF1aWQgMi41LjEgKCMxMzQ5KQoKIyMgMS4xLjEgLyAyMDEzLTA3LTI0CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogUmVtb3ZlIHN1cGVyZmx1b3VzIGB0YWJsZWAgc2VsZWN0b3IgZnJvbSBtYWluLmNzcyBpbiBgamVreWxsIG5ld2AgdGVtcGxhdGUgKCMxMzI4KQogICogQWJvcnQgd2l0aCBub24temVybyBleGl0IGNvZGVzICgjMTMzOCkKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggdXAgdGhlIHJlbmRlcmluZyBvZiBleGNlcnB0cyAoIzEzMzkpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgSmVreWxsIEltYWdlIFRhZyB0byB0aGUgcGx1Z2lucyBsaXN0ICgjMTMwNikKICAqIFJlbW92ZSBlcnJvbmVvdXMgc3RhdGVtZW50IHRoYXQgYHNpdGUucGFnZXNgIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCiAgKiBBZGQgaW5mbyBhYm91dCB0aGUgYF9kcmFmdHNgIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBkb2NzICgjMTMyMCkKICAqIEltcHJvdmUgdGhlIGxheW91dCBvZiB0aGUgcGx1Z2luIGxpc3RpbmcgYnkgb3JnYW5pemluZyBpdCBpbnRvIGNhdGVnb3JpZXMgKCMxMzEwKQogICogQWRkIGdlbmVyYXRvci1qZWt5bGxyYiBhbmQgZ3J1bnQtamVreWxsIHRvIHBsdWdpbnMgcGFnZSAoIzEzMzApCiAgKiBNZW50aW9uIEtyYW1kb3duIGFzIG9wdGlvbiBmb3IgbWFya2Rvd24gcGFyc2VyIG9uIEV4dHJhcyBwYWdlICgjMTMxOCkKICAqIFVwZGF0ZSBRdWljay1TdGFydCBwYWdlIHRvIGluY2x1ZGUgcmVtaW5kZXIgdGhhdCBhbGwgcmVxdWlyZW1lbnRzIG11c3QgYmUgaW5zdGFsbGVkICgjMTMyNykKICAqIENoYW5nZSBmaWxlbmFtZSBpbiBgaW5jbHVkZWAgZXhhbXBsZSB0byBhbiBIVE1MIGZpbGUgc28gYXMgbm90IHRvIGluZGljYXRlIHRoYXQgSmVreWxsIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRoZW0uICgjMTMwMykKICAqIEFkZCBhbiBSU1MgZmVlZCBmb3IgY29tbWl0cyB0byBKZWt5bGwgKCMxMzQzKQoKIyMgMS4xLjAgLyAyMDEzLTA3LTE0CgojIyMgTWFqb3IgRW5oYW5jZW1lbnRzCgogICogQWRkIGBkb2NzYCBzdWJjb21tYW5kIHRvIHJlYWQgSmVreWxsJ3MgZG9jcyB3aGVuIG9mZmxpbmUuICgjMTA0NikKICAqIFN1cHBvcnQgcGFzc2luZyBwYXJhbWV0ZXJzIHRvIHRlbXBsYXRlcyBpbiBgaW5jbHVkZWAgdGFnICgjMTIwNCkKICAqIEFkZCBzdXBwb3J0IGZvciBMaXF1aWQgdGFncyB0byBwb3N0IGV4Y2VycHRzICgjMTMwMikKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBTZWFyY2ggdGhlIGhpZXJhcmNoeSBvZiBwYWdpbmF0aW9uIHBhdGggdXAgdG8gc2l0ZSByb290IHRvIGRldGVybWluZSB0ZW1wbGF0ZSBwYWdlIGZvciBwYWdpbmF0aW9uLiAoIzExOTgpCiAgKiBBZGQgdGhlIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBuZXcgSmVreWxsIHNpdGUgd2l0aG91dCBhIHRlbXBsYXRlICgjMTE3MSkKICAqIFVzZSByZWRjYXJwZXQgYXMgdGhlIGRlZmF1bHQgbWFya2Rvd24gZW5naW5lIGluIG5ld2x5IGdlbmVyYXRlZCBzaXRlcyAoIzEyNDUsICMxMjQ3KQogICogQWRkIGByZWRjYXJwZXRgIGFzIGEgcnVudGltZSBkZXBlbmRlbmN5IHNvIGBqZWt5bGwgYnVpbGRgIHdvcmtzIG91dC1vZi10aGUtYm94IGZvciBuZXcgc2l0ZXMuICgjMTI0NykKICAqIEluIHRoZSBnZW5lcmF0ZWQgc2l0ZSwgcmVtb3ZlIGZpbGVzIHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSBhIGRpcmVjdG9yeSAoIzExMTgpCiAgKiBGYWlsIGxvdWRseSBpZiBhIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2Vzbid0IGV4aXN0ICgjMTA5OCkKICAqIEFsbG93IGZvciBhbGwgb3B0aW9ucyBmb3IgS3JhbWRvd24gSFRNTCBDb252ZXJ0ZXIgKCMxMjAxKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBwYWdpbmF0aW9uIGluIHN1YmRpcmVjdG9yaWVzLiAoIzExOTgpCiAgKiBGaXggYW4gaXNzdWUgd2l0aCBkaXJlY3RvcmllcyBhbmQgcGVybWFsaW5rcyB0aGF0IGhhdmUgYSBwbHVzIHNpZ24gKCspIGluIHRoZW0gKCMxMjE1KQogICogUHJvdmlkZSBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHdoZW4gZ2VuZXJhdGluZyBzaXRlcyAoIzEyNTMpCiAgKiBMYXRlc3QgcG9zdHMgZmlyc3QgaW4gbm9uLUxTSSBgcmVsYXRlZF9wb3N0c2AgKCMxMjcxKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTWVyZ2UgdGhlIHRoZW1lIGFuZCBsYXlvdXQgQ3VjdW1iZXIgc3RlcHMgaW50byBvbmUgc3RlcCAoIzExNTEpCiAgKiBSZXN0cmljdCBhY3RpdmVzdXBwb3J0IGRlcGVuZGVuY3kgdG8gcHJlLTQuMC4wIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBgPD0gMS45LjJgCiAgKiBJbmNsdWRlL2V4Y2x1ZGUgZGVwcmVjYXRpb24gaGFuZGxpbmcgc2ltcGxpZmljYXRpb24gKCMxMjg0KQogICogQ29udmVydCBSRUFETUUgdG8gTWFya2Rvd24uICgjMTI2NykKICAqIFJlZmFjdG9yIEpla3lsbDo6U2l0ZSAoIzExNDQpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgIk5ld3MiIHNlY3Rpb24gZm9yIHJlbGVhc2Ugbm90ZXMsIGFsb25nIHdpdGggYW4gUlNTIGZlZWQgKCMxMDkzLCAjMTI4NSwgIzEyODYpCiAgKiBBZGQgIkhpc3RvcnkiIHBhZ2UuCiAgKiBSZXN0cnVjdHVyZWQgZG9jcyBzZWN0aW9ucyB0byBpbmNsdWRlICJNZXRhIiBzZWN0aW9uLgogICogQWRkIG1lc3NhZ2UgdG8gIlRlbXBsYXRlcyIgcGFnZSB0aGF0IHNwZWNpZmllcyB0aGF0IFB5dGhvbiBtdXN0IGJlIGluc3RhbGxlZCBpbiBvcmRlciB0byB1c2UgUHlnbWVudHMuICgjMTE4MikKICAqIFVwZGF0ZSBsaW5rIHRvIHRoZSBvZmZpY2lhbCBNYXJ1a3UgcmVwbyAoIzExNzUpCiAgKiBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBgcGFnaW5hdGVfcGF0aGAgdG8gIlRlbXBsYXRlcyIgcGFnZSBpbiBkb2NzICgjMTEyOSkKICAqIEdpdmUgdGhlIHF1aWNrLXN0YXJ0IGd1aWRlIGl0cyBvd24gcGFnZSAoIzExOTEpCiAgKiBVcGRhdGUgUHJvVGlwIG9uIEluc3RhbGxhdGlvbiBwYWdlIGluIGRvY3MgdG8gcG9pbnQgdG8gYWxsIHRoZSBpbmZvIGFib3V0IFB5Z21lbnRzIGFuZCB0aGUgJ2hpZ2hsaWdodCcgdGFnLiAoIzExOTYpCiAgKiBSdW4gYHNpdGUvaW1nYCB0aHJvdWdoIEltYWdlT3B0aW0gKHRoYW5rcyBAcXJ1c2ghKSAoIzEyMDgpCiAgKiBBZGRlZCBKYWRlIENvbnZlcnRlciB0byBgc2l0ZS9kb2NzL3BsdWdpbnNgICgjMTIxMCkKICAqIEZpeCBsb2NhdGlvbiBvZiBkb2NzIHBhZ2VzIGluIENvbnRyaWJ1dGluZyBwYWdlcyAoIzEyMTQpCiAgKiBBZGQgUmVhZEluWE1pbnV0ZXMgcGx1Z2luIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzEyMjIpCiAgKiBSZW1vdmUgcGx1Z2lucyBmcm9tIHRoZSBwbHVnaW4gbGlzdCB0aGF0IGhhdmUgZXF1aXZhbGVudHMgaW4gSmVreWxsIHByb3BlciAoIzEyMjMpCiAgKiBBZGQgamVreWxsLWFzc2V0cyB0byB0aGUgcGx1Z2luIGxpc3QgKCMxMjI1KQogICogQWRkIGpla3lsbC1wYW5kb2MtbXVsaXRwbGUtZm9ybWF0cyB0byB0aGUgcGx1Z2luIGxpc3QgKCMxMjI5KQogICogUmVtb3ZlIGRlYWQgbGluayB0byAiVXNpbmcgR2l0IHRvIG1haW50YWluIHlvdXIgYmxvZyIgKCMxMjI3KQogICogVGlkeSB1cCB0aGUgdGhpcmQtcGFydHkgcGx1Z2lucyBsaXN0aW5nICgjMTIyOCkKICAqIFVwZGF0ZSBjb250cmlidXRvciBpbmZvcm1hdGlvbiAoIzExOTIpCiAgKiBVcGRhdGUgVVJMIG9mIGFydGljbGUgYWJvdXQgQmxvZ2dlciBtaWdyYXRpb24gKCMxMjQyKQogICogU3BlY2lmeSB0aGF0IFJlZENhcnBldCBpcyB0aGUgZGVmYXVsdCBmb3IgbmV3IEpla3lsbCBzaXRlcyBvbiBRdWlja3N0YXJ0IHBhZ2UgKCMxMjQ3KQogICogQWRkZWQgYHNpdGUucGFnZXNgIHRvIFZhcmlhYmxlcyBwYWdlIGluIGRvY3MgKCMxMjUxKQogICogQWRkIFlvdWt1IGFuZCBUdWRvdSBFbWJlZCBsaW5rIG9uIFBsdWdpbnMgcGFnZS4gKCMxMjUwKQogICogQWRkIG5vdGUgdGhhdCBgZ2lzdGAgdGFnIHN1cHBvcnRzIHByaXZhdGUgZ2lzdHMuICgjMTI0OCkKICAqIEFkZCBgamVreWxsLXRpbWVhZ29gIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucy4gKCMxMjYwKQogICogQWRkIGBqZWt5bGwtc3dmb2JqZWN0YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMTI2MykKICAqIEFkZCBgamVreWxsLXBpY3R1cmUtdGFnYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMTI4MCkKICAqIFVwZGF0ZSB0aGUgR2l0SHViIFBhZ2VzIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHJlbGF0aXZlIFVSTHMgKCMxMjkxKQogICogVXBkYXRlIHRoZSBTMyBkZXBsb3ltZW50IGRvY3VtZW50YXRpb24gKCMxMjk0KQogICogQWRkIHN1Z2dlc3Rpb24gZm9yIFhjb2RlIENMVCBpbnN0YWxsIHRvIHRyb3VibGVzaG9vdGluZyBwYWdlIGluIGRvY3MgKCMxMjk2KQogICogQWRkICdXb3JraW5nIHdpdGggZHJhZnRzJyBwYWdlIHRvIGRvY3MgKCMxMjg5KQogICogQWRkIGluZm9ybWF0aW9uIGFib3V0IHRpbWUgem9uZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIGEgcGFnZSdzIGRhdGUgKCMxMzA0KQoKIyMgMS4wLjMgLyAyMDEzLTA2LTA3CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIHN1cHBvcnQgdG8gZ2lzdCB0YWcgZm9yIHByaXZhdGUgZ2lzdHMuICgjMTE4OSkKICAqIEZhaWwgbG91ZGx5IHdoZW4gTWFydWt1IGVycm9ycyBvdXQgKCMxMTkwKQogICogTW92ZSB0aGUgYnVpbGRpbmcgb2YgcmVsYXRlZCBwb3N0cyBpbnRvIHRoZWlyIG93biBjbGFzcyAoIzEwNTcpCiAgKiBSZW1vdmVkIHRyYWlsaW5nIHNwYWNlcyBpbiBzZXZlcmFsIHBsYWNlcyB0aHJvdWdob3V0IHRoZSBjb2RlICgjMTExNikKICAqIEFkZCBhIGAtLWZvcmNlYCBvcHRpb24gdG8gYGpla3lsbCBuZXdgICgjMTExNSkKICAqIENvbnZlcnQgSURzIGluIHRoZSBzaXRlIHRlbXBsYXRlIHRvIGNsYXNzZXMgKCMxMTcwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCB0eXBvIGluIFN0ZXZlbnNvbiBjb25zdGFudCAiRVJST1IiLiAoIzExNjYpCiAgKiBSZW5hbWUgSmVreWxsOjpMb2dnZXIgdG8gSmVreWxsOjpTdGV2ZW5zb24gdG8gZml4IGluaGVyaXRhbmNlIGlzc3VlICgjMTEwNikKICAqIEV4aXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSB3aGVuIGRlYWxpbmcgd2l0aCBhIExpcXVpZCBlcnJvciAoIzExMjEpCiAgKiBNYWtlIHRoZSBgZXhjbHVkZWAgYW5kIGBpbmNsdWRlYCBvcHRpb25zIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdmVyc2lvbnMgb2YgSmVreWxsIHByaW9yIHRvIDEuMCAoIzExMTQpCiAgKiBGaXggcGFnaW5hdGlvbiBvbiBXaW5kb3dzICgjMTA2MykKICAqIEZpeCB0aGUgYXBwbGljYXRpb24gb2YgUHlnbWVudHMnIEdlbmVyaWMgT3V0cHV0IHN0eWxlIHRvIEdvIGNvZGUgKCMxMTU2KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGEgUHJvIFRpcCB0byBkb2NzIGFib3V0IGZyb250IG1hdHRlciB2YXJpYWJsZXMgYmVpbmcgb3B0aW9uYWwgKCMxMTQ3KQogICogQWRkIGNoYW5nZWxvZyB0byBzaXRlIGFzIEhpc3RvcnkgcGFnZSBpbiAvZG9jcy8gKCMxMDY1KQogICogQWRkIG5vdGUgdG8gVXBncmFkaW5nIHBhZ2UgYWJvdXQgbmV3IGNvbmZpZyBvcHRpb25zIGluIDEuMC54ICgjMTE0NikKICAqIERvY3VtZW50YXRpb24gZm9yIGBkYXRlX3RvX3JmYzgyMmAgYW5kIGB1cmlfZXNjYXBlYCAoIzExNDIpCiAgKiBEb2N1bWVudGF0aW9uIGhpZ2hsaWdodCBib3hlcyBzaG91bGRuJ3Qgc2hvdyBzY3JvbGxiYXJzIGlmIG5vdCBuZWNlc3NhcnkgKCMxMTIzKQogICogQWRkIGxpbmsgdG8gamVreWxsLW1pbmlidW5kbGUgaW4gdGhlIGRvYydzIHBsdWdpbnMgbGlzdCAoIzEwMzUpCiAgKiBRdWljayBwYXRjaCBmb3IgaW1wb3J0ZXJzIGRvY3VtZW50YXRpb24KICAqIEZpeCBwcmVmaXggZm9yIFdvcmRwcmVzc0RvdENvbSBpbXBvcnRlciBpbiBkb2NzICgjMTEwNykKICAqIEFkZCBqZWt5bGwtY29udGVudGJsb2NrcyBwbHVnaW4gdG8gZG9jcyAoIzEwNjgpCiAgKiBNYWtlIGNvZGUgYml0cyBpbiBub3RlcyBsb29rIG1vcmUgbmF0dXJhbCwgbW9yZSByZWFkYWJsZSAoIzEwODkpCiAgKiBGaXggbG9naWMgZm9yIGByZWxhdGl2ZV9wZXJtYWxpbmtzYCBpbnN0cnVjdGlvbnMgb24gVXBncmFkaW5nIHBhZ2UgKCMxMTAxKQogICogQWRkIGRvY3MgZm9yIHBvc3QgZXhjZXJwdCAoIzEwNzIpCiAgKiBBZGQgZG9jcyBmb3IgZ2lzdCB0YWcgKCMxMDcyKQogICogQWRkIGRvY3MgaW5kaWNhdGluZyB0aGF0IFB5Z21lbnRzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFsbGVkIHNlcGFyYXRlbHkgKCMxMDk5LCAjMTExOSkKICAqIFVwZGF0ZSB0aGUgbWlncmF0b3IgZG9jcyB0byBiZSBjdXJyZW50ICgjMTEzNikKICAqIEFkZCB0aGUgSmVreWxsIEdhbGxlcnkgUGx1Z2luIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzExNDMpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBVc2UgSmVreWxsLmxvZ2dlciBpbnN0ZWFkIG9mIEpla3lsbDo6U3RldmVuc29uIHRvIGxvZyB0aGluZ3MgKCMxMTQ5KQogICogRml4IHBlc2t5IEN1Y3VtYmVyIGluZmluaXRlIGxvb3AgKCMxMTM5KQogICogRG8gbm90IHdyaXRlIHBvc3RzIHdpdGggdGltZXpvbmVzIGluIEN1Y3VtYmVyIHRlc3RzICgjMTEyNCkKICAqIFVzZSBJU08gZm9ybWF0dGVkIGRhdGVzIGluIEN1Y3VtYmVyIGZlYXR1cmVzICgjMTE1MCkKCiMjIDEuMC4yIC8gMjAxMy0wNS0xMgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBgamVreWxsIGRvY3RvcmAgY29tbWFuZCB0byBjaGVjayBzaXRlIGZvciBhbnkga25vd24gY29tcGF0aWJpbGl0eSBwcm9ibGVtcyAoIzEwODEpCiAgKiBCYWNrd2FyZHMtY29tcGF0aWJpbGl6ZSByZWxhdGl2ZSBwZXJtYWxpbmtzICgjMTA4MSkKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYSBgZGF0YS1sYW5nPSI8bGFuZz4iYCBhdHRyaWJ1dGUgdG8gUmVkY2FycGV0IGNvZGUgYmxvY2tzICgjMTA2NikKICAqIERlcHJlY2F0ZSBvbGQgY29uZmlnIGBzZXJ2ZXJfcG9ydGAsIG1hdGNoIHRvIGBwb3J0YCBpZiBgcG9ydGAgaXNuJ3Qgc2V0ICgjMTA4NCkKICAqIFVwZGF0ZSBweWdtZW50cy5yYiB2ZXJzaW9uIHRvIDAuNS4wICgjMTA2MSkKICAqIFVwZGF0ZSBLcmFtZG93biB2ZXJzaW9uIHRvIDEuMC4yICgjMTA2NykKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggaXNzdWUgd2hlbiBjYXRlZ29yaWVzIGFyZSBudW1iZXJzICgjMTA3OCkKICAqIENhdGNoaW5nIHRoYXQgUmVkY2FycGV0IGdlbSBpc24ndCBpbnN0YWxsZWQgKCMxMDU5KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgYHJlbGF0aXZlX3Blcm1hbGlua3NgICgjMTA4MSkKICAqIFJlbW92ZSBweWdtZW50cy1pbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLCBhcyBweWdtZW50cy5yYiBpcyBidW5kbGVkIHdpdGggaXQgKCMxMDc5KQogICogTW92ZSBwYWdlcyB0byBiZSBQYWdlcyBmb3IgcmVhbHogKCM5ODUpCiAgKiBVcGRhdGVkIGxpbmtzIHRvIExpcXVpZCBkb2N1bWVudGF0aW9uICgjMTA3MykKCiMjIDEuMC4xIC8gMjAxMy0wNS0wOAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERvIG5vdCBmb3JjZSB1c2Ugb2YgYHRvY190b2tlbmAgd2hlbiB1c2luZyBgZ2VuZXJhdGVfdG9rYCBpbiBSRGlzY291bnQgKCMxMDQ4KQogICogQWRkIG5ld2VyIGBsYW5ndWFnZS1gIGNsYXNzIG5hbWUgcHJlZml4IHRvIGNvZGUgYmxvY2tzICgjMTAzNykKICAqIENvbW1hbmRlciBlcnJvciBtZXNzYWdlIG5vdyBwcmVmZXJyZWQgb3ZlciBwcm9jZXNzIGFib3J0IHdpdGggaW5jb3JyZWN0IGFyZ3MgKCMxMDQwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIE1ha2UgUmVkY2FycGV0IHJlc3BlY3QgdGhlIHB5Z21lbnRzIGNvbmZpZ3VyYXRpb24gb3B0aW9uICgjMTA1MykKICAqIEZpeCB0aGUgaW5kZXggYnVpbGQgd2l0aCBMU0kgKCMxMDQ1KQogICogRG9uJ3QgcHJpbnQgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5vIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLiAoIzEwNDEpCiAgKiBBZGQgbWlzc2luZyBgPC9kaXY+YCB0byBzaXRlIHRlbXBsYXRlIHVzZWQgYnkgYG5ld2Agc3ViY29tbWFuZCwgZml4ZWQgdHlwb3MgaW4gY29kZSAoIzEwMzIpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2VkIGh0dHBzIHRvIGh0dHAgaW4gdGhlIEdpdEh1YiBQYWdlcyBsaW5rICgjMTA1MSkKICAqIFJlbW92ZSBDU1MgY3J1ZnQsIGZpeCB0eXBvcywgZml4IEhUTUwgZXJyb3JzICgjMTAyOCkKICAqIFJlbW92aW5nIG1hbnVhbCBpbnN0YWxsIG9mIFBpcCBhbmQgRGlzdHJpYnV0ZSAoIzEwMjUpCiAgKiBVcGRhdGVkIFVSTCBmb3IgTWFya2Rvd24gcmVmZXJlbmNlcyBwbHVnaW4gKCMxMDIyKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTWFya2Rvd25pZnkgaGlzdG9yeSBmaWxlICgjMTAyNykKICAqIFVwZGF0ZSBsaW5rcyBvbiBSRUFETUUgdG8gcG9pbnQgdG8gbmV3IGpla3lsbHJiLmNvbSAoIzEwMTgpCgojIyAxLjAuMCAvIDIwMTMtMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYGpla3lsbCBuZXdgIHN1YmNvbW1hbmQ6IGdlbmVyYXRlIGEgSmVreWxsIHNjYWZmb2xkICgjNzY0KQogICogUmVmYWN0b3JlZCBKZWt5bGwgY29tbWFuZHMgaW50byBzdWJjb21tYW5kczogYnVpbGQsIHNlcnZlLCBhbmQgbWlncmF0ZS4gKCM2OTApCiAgKiBSZW1vdmVkIGltcG9ydGVycy9taWdyYXRvcnMgZnJvbSBtYWluIHByb2plY3QsIG1pZ3JhdGVkIHRvIGpla3lsbC1pbXBvcnQgc3ViLWdlbSAoIzc5MykKICAqIEFkZGVkIGFiaWxpdHkgdG8gcmVuZGVyIGRyYWZ0cyBpbiBgX2RyYWZ0c2AgZm9sZGVyIHZpYSBjb21tYW5kIGxpbmUgKCM4MzMpCiAgKiBBZGQgb3JkaW5hbCBkYXRlIHBlcm1hbGluayBzdHlsZSAoLzpjYXRlZ29yaWVzLzp5ZWFyLzp5X2RheS86dGl0bGUuaHRtbCkgKCM5MjgpCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogU2l0ZSB0ZW1wbGF0ZSBIVE1MNS1pZmllZCAoIzk2NCkKICAqIFVzZSBwb3N0J3MgZGlyZWN0b3J5IHBhdGggd2hlbiBtYXRjaGluZyBmb3IgdGhlIGBwb3N0X3VybGAgdGFnICgjOTk4KQogICogTG9vc2VuIGRlcGVuZGVuY3kgb24gUHlnbWVudHMgc28gaXQncyBvbmx5IHJlcXVpcmVkIHdoZW4gaXQncyBuZWVkZWQgKCMxMDE1KQogICogUGFyc2Ugc3RyaW5ncyBpbnRvIFRpbWUgb2JqZWN0cyBmb3IgZGF0ZS1yZWxhdGVkIExpcXVpZCBmaWx0ZXJzICgjMTAxNCkKICAqIFRlbGwgdGhlIHVzZXIgaWYgdGhlcmUgaXMgbm8gc3ViY29tbWFuZCBzcGVjaWZpZWQgKCMxMDA4KQogICogRnJlYWsgb3V0IGlmIHRoZSBkZXN0aW5hdGlvbiBvZiBgamVreWxsIG5ld2AgZXhpc3RzIGFuZCBpcyBub24tZW1wdHkgKCM5ODEpCiAgKiBBZGQgYHRpbWV6b25lYCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgY29tcGlsYXRpb24gKCM5NTcpCiAgKiBBZGQgZGVwcmVjYXRpb24gbWVzc2FnZXMgZm9yIHByZS0xLjAgQ0xJIG9wdGlvbnMgKCM5NTkpCiAgKiBSZWZhY3RvciBhbmQgY29sb3JpemUgbG9nZ2luZyAoIzk1OSkKICAqIFJlZmFjdG9yIE1hcmtkb3duIHBhcnNpbmcgKCM5NTUpCiAgKiBBZGRlZCBhcHBsaWNhdGlvbi92bmQuYXBwbGUucGtwYXNzIHRvIG1pbWUudHlwZXMgc2VydmVkIGJ5IFdFQnJpY2sgKCM5MDcpCiAgKiBNb3ZlIHRlbXBsYXRlIHNpdGUgdG8gZGVmYXVsdCBtYXJrZG93biByZW5kZXJlciAoIzk2MSkKICAqIEV4cG9zZSBuZXcgYXR0cmlidXRlIHRvIExpcXVpZCB2aWEgYHBhZ2VgOiBgcGFnZS5wYXRoYCAoIzk1MSkKICAqIEFjY2VwdCBtdWx0aXBsZSBjb25maWcgZmlsZXMgZnJvbSBjb21tYW5kIGxpbmUgKCM5NDUpCiAgKiBBZGQgcGFnZSB2YXJpYWJsZSB0byBsaXF1aWQgY3VzdG9tIHRhZ3MgYW5kIGJsb2NrcyAoIzQxMykKICAqIEFkZCBgcGFnaW5hdG9yLnByZXZpb3VzX3BhZ2VfcGF0aGAgYW5kIGBwYWdpbmF0b3IubmV4dF9wYWdlX3BhdGhgICgjOTQyKQogICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yICdhdXRvJyAoIzgyMSwgIzkzNCkKICAqIEFkZGVkIGRhdGVfdG9fcmZjODIyIHVzZWQgb24gUlNTIGZlZWRzICgjODkyKQogICogVXBncmFkZSB2ZXJzaW9uIG9mIHB5Z21lbnRzLnJiIHRvIDAuNC4yICgjOTI3KQogICogQWRkZWQgc2hvcnQgbW9udGggKGUuZy4gIlNlcCIpIHRvIHBlcm1hbGluayBzdHlsZSBvcHRpb25zIGZvciBwb3N0cyAoIzg5MCkKICAqIEV4cG9zZSBzaXRlLmJhc2V1cmwgdG8gTGlxdWlkIHRlbXBsYXRlcyAoIzg2OSkKICAqIEFkZHMgZXhjZXJwdCBhdHRyaWJ1dGUgdG8gcG9zdHMgd2hpY2ggY29udGFpbnMgZmlyc3QgcGFyYWdyYXBoIG9mIGNvbnRlbnQgKCM4MzcpCiAgKiBBY2NlcHQgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZSB2aWEgQ0xJICgjODYzKQogICogTG9hZCBpbiBHaXRIdWIgUGFnZXMgTUlNRSBUeXBlcyBvbiBgamVreWxsIHNlcnZlYCAoIzg0NywgIzg3MSkKICAqIEltcHJvdmUgZGVidWdhYmlsaXR5IG9mIGVycm9yIG1lc3NhZ2UgZm9yIGEgbWFsZm9ybWVkIGhpZ2hsaWdodCB0YWcgKCM3ODUpCiAgKiBBbGxvdyBzeW1saW5rZWQgZmlsZXMgaW4gdW5zYWZlIG1vZGUgKCM4MjQpCiAgKiBBZGQgJ2dpc3QnIExpcXVpZCB0YWcgdG8gY29yZSAoIzgyMiwgIzg2MSkKICAqIE5ldyBmb3JtYXQgb2YgSmVreWxsIG91dHB1dCAoIzc5NSkKICAqIFJlaW5zdGF0ZSBgLS1saW1pdF9wb3N0c2AgYW5kIGAtLWZ1dHVyZWAgc3dpdGNoZXMgKCM3ODgpCiAgKiBSZW1vdmUgYW1iaWd1aXR5IGZyb20gY29tbWFuZCBkZXNjcmlwdGlvbnMgKCM4MTUpCiAgKiBGaXggU2FmZVlBTUwgV2FybmluZ3MgKCM4MDcpCiAgKiBSZWxheGVkIEtyYW1kb3duIHZlcnNpb24gdG8gMC4xNCAoIzgwOCkKICAqIEFsaWFzZWQgYGpla3lsbCBzZXJ2ZXJgIHRvIGBqZWt5bGwgc2VydmVgLiAoIzc5MikKICAqIFVwZGF0ZWQgZ2VtIHZlcnNpb25zIGZvciBLcmFtZG93biwgUmFrZSwgU2hvdWxkYSwgQ3VjdW1iZXIsIGFuZCBSZWRDYXJwZXQuICgjNzQ0KQogICogUmVmYWN0b3JlZCBKZWt5bGwgc3ViY29tbWFuZHMgaW50byBKZWt5bGw6OkNvbW1hbmRzIHN1Ym1vZHVsZSwgd2hpY2ggbm93IGNvbnRhaW5zIHRoZW0gKCM3NjgpCiAgKiBSZXNjdWUgZnJvbSBpbXBvcnQgZXJyb3JzIGluIFdvcmRwcmVzcy5jb20gbWlncmF0b3IgKCM2NzEpCiAgKiBNYXNzaXZlbHkgYWNjZWxlcmF0ZSBMU0kgcGVyZm9ybWFuY2UgKCM2NjQpCiAgKiBUcnVuY2F0ZSBwb3N0IHNsdWdzIHdoZW4gaW1wb3J0aW5nIGZyb20gVHVtYmxyICgjNDk2KQogICogQWRkIGdsb2Igc3VwcG9ydCB0byBpbmNsdWRlLCBleGNsdWRlIG9wdGlvbiAoIzc0MykKICAqIExheW91dCBvZiBQYWdlIG9yIFBvc3QgZGVmYXVsdHMgdG8gJ3BhZ2UnIG9yICdwb3N0JywgcmVzcGVjdGl2ZWx5ICgjNTgwKSBSRVBFQUxFRCBieSAoIzk3NykKICAqICJLZWVwIGZpbGVzIiBmZWF0dXJlICgjNjg1KQogICogT3V0cHV0IGZ1bGwgcGF0aCAmIG5hbWUgZm9yIGZpbGVzIHRoYXQgZG9uJ3QgcGFyc2UgKCM3NDUpCiAgKiBBZGQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcHJvdGVjdGlvbiAoIzUzNSkKICAqIEJldHRlciBZQU1MIGVycm9yIG1lc3NhZ2UgKCM3MTgpCiAgKiBCdWcgRml4ZXMKICAqIFBhZ2luYXRlIGluIHN1YmRpcmVjdG9yaWVzIHByb3Blcmx5ICgjMTAxNikKICAqIEVuc3VyZSBwb3N0IGFuZCBwYWdlIFVSTHMgaGF2ZSBhIGxlYWRpbmcgc2xhc2ggKCM5OTIpCiAgKiBDYXRjaCBhbGwgZXhjZXB0aW9ucywgbm90IGp1c3QgU3RhbmRhcmRFcnJvciBkZXNjZW5kZW50cyAoIzEwMDcpCiAgKiBCdWxsZXQtcHJvb2YgYGxpbWl0X3Bvc3RzYCBvcHRpb24gKCMxMDA0KQogICogUmVhZCBpbiBZQU1MIGFzIFVURi04IHRvIGFjY2VwdCBub24tQVNDSUkgY2hhcnMgKCM4MzYpCiAgKiBGaXggdGhlIENMSSBvcHRpb24gYC0tcGx1Z2luc2AgdG8gYWN0dWFsbHkgYWNjZXB0IGRpcnMgYW5kIGZpbGVzICgjOTkzKQogICogQWxsb3cgJ2V4Y2VycHQnIGluIFlBTUwgZnJvbnQgbWF0dGVyIHRvIG92ZXJyaWRlIHRoZSBleHRyYWN0ZWQgZXhjZXJwdCAoIzk0NikKICAqIEZpeCBjYXNjYWRlIHByb2JsZW0gd2l0aCBzaXRlLmJhc2V1cmwsIHNpdGUucG9ydCBhbmQgc2l0ZS5ob3N0LiAoIzkzNSkKICAqIEZpbHRlciBvdXQgZGlyZWN0b3JpZXMgd2l0aCB2YWxpZCBwb3N0IG5hbWVzICgjODc1KQogICogRml4IHN5bWxpbmtlZCBzdGF0aWMgZmlsZXMgbm90IGJlaW5nIGNvcnJlY3RseSBidWlsdCBpbiB1bnNhZmUgbW9kZSAoIzkwOSkKICAqIEZpeCBpbnRlZ3JhdGlvbiB3aXRoIGRpcmVjdG9yeV93YXRjaGVyIDEuNC54ICgjOTE2KQogICogQWNjZXB0aW5nIHN0cmluZ3MgYXMgYXJndW1lbnRzIHRvIGpla3lsbC1pbXBvcnQgY29tbWFuZCAoIzkxMCkKICAqIEZvcmNlIHVzYWdlIG9mIG9sZGVyIGRpcmVjdG9yeV93YXRjaGVyIGdlbSBhcyAxLjUgaXMgYnJva2VuICgjODgzKQogICogRW5zdXJlIGFsbCBQb3N0IGNhdGVnb3JpZXMgYXJlIGRvd25jYXNlICgjODQyLCAjODcyKQogICogRm9yY2UgZW5jb2Rpbmcgb2YgdGhlIHJkaXNjb3VudCBUT0MgdG8gVVRGOCB0byBhdm9pZCBjb252ZXJzaW9uIGVycm9ycyAoIzU1NSkKICAqIFBhdGNoIGZvciBtdWx0aWJ5dGUgVVJJIHByb2JsZW0gd2l0aCBgamVreWxsIHNlcnZlYCAoIzcyMykKICAqIE9yZGVyIHBsdWdpbiBleGVjdXRpb24gYnkgcHJpb3JpdHkgKCM4NjQpCiAgKiBGaXhlZCBQYWdlI2RpciBhbmQgUGFnZSN1cmwgZm9yIGVkZ2UgY2FzZXMgKCM1MzYpCiAgKiBGaXggYnJva2VuIGBwb3N0X3VybGAgd2l0aCBwb3N0cyB3aXRoIGEgdGltZSBpbiB0aGVpciBZQU1MIGZyb250IG1hdHRlciAoIzgzMSkKICAqIExvb2sgZm9yIHBsdWdpbnMgdW5kZXIgdGhlIHNvdXJjZSBkaXJlY3RvcnkgKCM2NTQpCiAgKiBUdW1ibHIgTWlncmF0b3I6IGZpbmRzIGBfcG9zdHNgIGRpciBjb3JyZWN0bHksIGZpeGVzIHRydW5jYXRpb24gb2YgbG9uZyBwb3N0IG5hbWVzICgjNzc1KQogICogRm9yY2UgQ2F0ZWdvcmllcyB0byBiZSBTdHJpbmdzICgjNzY3KQogICogU2FmZSBZQU1MIHBsdWdpbiB0byBwcmV2ZW50IHZ1bG5lcmFiaWxpdHkgKCM3NzcpCiAgKiBBZGQgU1ZHIHN1cHBvcnQgdG8gSmVreWxsL1dFQnJpY2suICgjNDA3LCAjNDA2KQogICogUHJldmVudCBjdXN0b20gZGVzdGluYXRpb24gZnJvbSBjYXVzaW5nIGNvbnRpbnVvdXMgcmVnZW4gb24gd2F0Y2ggKCM1MjgsICM4MjAsICM4NjIpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBSZXNwb25zaWZ5ICgjODYwKQogICogRml4IHNwZWxsaW5nLCBwdW5jdHVhdGlvbiBhbmQgcGhyYXNhbCBlcnJvcnMgKCM5ODkpCiAgKiBVcGRhdGUgcXVpY2tzdGFydCBpbnN0cnVjdGlvbnMgd2l0aCBgbmV3YCBjb21tYW5kICgjOTY2KQogICogQWRkIGRvY3MgZm9yIHBhZ2UuZXhjZXJwdCAoIzk1NikKICAqIEFkZCBkb2NzIGZvciBwYWdlLnBhdGggKCM5NTEpCiAgKiBDbGVhbiB1cCBzaXRlIGRvY3MgdG8gcHJlcGFyZSBmb3IgMS4wIHJlbGVhc2UgKCM5MTgpCiAgKiBCcmluZyBzaXRlIGludG8gbWFzdGVyIGJyYW5jaCB3aXRoIGJldHRlciBwcmV2aWV3L2RlcGxveSAoIzcwOSkKICAqIFJlZGVzaWduZWQgc2l0ZSAoIzU4MykKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4Y2x1ZGUgQ3VjdW1iZXIgMS4yLjQsIHdoaWNoIGNhdXNlcyB0ZXN0cyB0byBmYWlsIGluIDEuOS4yICgjOTM4KQogICogQWRkZWQgImZlYXR1cmVzOmh0bWwiIHJha2UgdGFzayBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBjbGVhbmVkIHVwIEN1Y3VtYmVyIHByb2ZpbGVzICgjODMyKQogICogRXhwbGljaXRseSByZXF1aXJlIEhUVFBTIHJ1YnlnZW1zIHNvdXJjZSBpbiBHZW1maWxlICgjODI2KQogICogQ2hhbmdlZCBSdWJ5IHZlcnNpb24gZm9yIGRldmVsb3BtZW50IHRvIDEuOS4zLXAzNzQgZnJvbSBwMzYyICgjODAxKQogICogSW5jbHVkaW5nIGEgbGluayB0byB0aGUgR2l0SHViIFJ1Ynkgc3R5bGUgZ3VpZGUgaW4gQ09OVFJJQlVUSU5HLm1kICgjODA2KQogICogQWRkZWQgc2NyaXB0L2Jvb3RzdHJhcCAoIzc3NikKICAqIFJ1bm5pbmcgU2ltcGxlY292IHVuZGVyIDIgY29uZGl0aW9uczogRU5WKENPVkVSQUdFKT10cnVlIGFuZCB3aXRoIFJ1YnkgdmVyc2lvbiBvZiBncmVhdGVyIHRoYW4gMS45ICgjNzcxKQogICogU3dpdGNoIHRvIFNpbXBsZWNvdiBmb3IgY292ZXJhZ2UgcmVwb3J0ICgjNzY1KQoKIyMgMC4xMi4xIC8gMjAxMy0wMi0xOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBLcmFtZG93biB2ZXJzaW9uIHRvIDAuMTQuMSAoIzc0NCkKICAqIFRlc3QgRW5oYW5jZW1lbnRzCiAgKiBVcGRhdGUgUmFrZSB2ZXJzaW9uIHRvIDEwLjAuMyAoIzc0NCkKICAqIFVwZGF0ZSBTaG91bGRhIHZlcnNpb24gdG8gMy4zLjIgKCM3NDQpCiAgKiBVcGRhdGUgUmVkY2FycGV0IHZlcnNpb24gdG8gMi4yLjIgKCM3NDQpCgojIyAwLjEyLjAgLyAyMDEyLTEyLTIyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIGFiaWxpdHkgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGluY2x1ZGVkIGZpbGVzICgjMjYxKQogICogQWRkIGAtLWRlZmF1bHQtbWltZXR5cGVgIG9wdGlvbiAoIzI3OSkKICAqIEFsbG93IHNldHRpbmcgb2YgUmVkQ2xvdGggb3B0aW9ucyAoIzI4NCkKICAqIEFkZCBgcG9zdF91cmxgIExpcXVpZCB0YWcgZm9yIGludGVybmFsIHBvc3QgbGlua2luZyAoIzM2OSkKICAqIEFsbG93IG11bHRpcGxlIHBsdWdpbiBkaXJzIHRvIGJlIHNwZWNpZmllZCAoIzQzOCkKICAqIElubGluZSBUT0MgdG9rZW4gc3VwcG9ydCBmb3IgUkRpc2NvdW50ICgjMzMzKQogICogQWRkIHRoZSBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcGFnaW5hdGVkIHVybCBmb3JtYXQgKCMzNDIpCiAgKiBTd2FwIG91dCBhbGJpbm8gZm9yIHB5Z21lbnRzLnJiICgjNTY5KQogICogU3VwcG9ydCBSZWRjYXJwZXQgMiBhbmQgZmVuY2VkIGNvZGUgYmxvY2tzICgjNjE5KQogICogQmV0dGVyIHJlcG9ydGluZyBvZiBMaXF1aWQgZXJyb3JzICgjNjI0KQogICogQnVnIEZpeGVzCiAgKiBBbGxvdyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBoaWdobGlnaHQgbmFtZXMKICAqIFVSTCBlc2NhcGUgY2F0ZWdvcnkgbmFtZXMgaW4gVVJMIGdlbmVyYXRpb24gKCMzNjApCiAgKiBGaXggZXJyb3Igd2l0aCBgbGltaXRfcG9zdHNgICgjNDQyKQogICogUHJvcGVybHkgc2VsZWN0IGRvdGZpbGUgZHVyaW5nIGRpcmVjdG9yeSBzY2FuICgjMzYzLCAjNDMxLCAjMzc3KQogICogQWxsb3cgc2V0dGluZyBvZiBLcmFtZG93biBgc21hcnRfcXVvdGVzYCAoIzQ4MikKICAqIEVuc3VyZSBmcm9udCBtYXR0ZXIgaXMgYXQgc3RhcnQgb2YgZmlsZSAoIzU2MikKCiMjIDAuMTEuMiAvIDIwMTEtMTItMjcKCiAgKiBCdWcgRml4ZXMKICAqIEZpeCBnZW1zcGVjCgojIyAwLjExLjEgLyAyMDExLTEyLTI3CgogICogQnVnIEZpeGVzCiAgKiBGaXggZXh0cmEgYmxhbmsgbGluZSBpbiBoaWdobGlnaHQgYmxvY2tzICgjNDA5KQogICogVXBkYXRlIGRlcGVuZGVuY2llcwoKIyMgMC4xMS4wIC8gMjAxMS0wNy0xMAoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBjb21tYW5kIGxpbmUgaW1wb3J0ZXIgZnVuY3Rpb25hbGl0eSAoIzI1MykKICAqIEFkZCBSZWRjYXJwZXQgTWFya2Rvd24gc3VwcG9ydCAoIzMxOCkKICAqIE1ha2UgbWFya2Rvd24vdGV4dGlsZSBleHRlbnNpb25zIGNvbmZpZ3VyYWJsZSAoIzMxMikKICAqIEFkZCBgbWFya2Rvd25pZnlgIGZpbHRlcgoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFN3aXRjaCB0byBBbGJpbm8gZ2VtCiAgKiBCdW5kbGVyIHN1cHBvcnQKICAqIFVzZSBFbmdsaXNoIGxpYnJhcnkgdG8gYXZvaWQgaG9vcHMgKCMyOTIpCiAgKiBBZGQgUG9zdGVyb3VzIGltcG9ydGVyICgjMjU0KQogICogRml4ZXMgZm9yIFdvcmRwcmVzcyBpbXBvcnRlciAoIzI3NCwgIzI1MiwgIzI3MSkKICAqIEJldHRlciBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIHBvc3QgZGF0ZSAoIzI5MSkKICAqIFByaW50IGZvcm1hdHRlZCBmYXRhbCBleGNlcHRpb25zIHRvIHN0ZG91dCBvbiBidWlsZCBmYWlsdXJlCiAgKiBBZGQgVHVtYmxyIGltcG9ydGVyICgjMzIzKQogICogQWRkIEVua2kgaW1wb3J0ZXIgKCMzMjApCiAgKiBCdWcgRml4ZXMKICAqIFNlY3VyZSBhZGRpdGlvbmFsIHBhdGggZXhwbG9pdHMKCiMjIDAuMTAuMCAvIDIwMTAtMTItMTYKCiAgKiBCdWcgRml4ZXMKICAqIEFkZCBgLS1uby1zZXJ2ZXJgIG9wdGlvbi4KCiMjIDAuOS4wIC8gMjAxMC0xMi0xNQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVzZSBPcHRpb25QYXJzZXIncyBgW25vLV1gIGZ1bmN0aW9uYWxpdHkgZm9yIGJldHRlciBib29sZWFuIHBhcnNpbmcuCiAgKiBBZGQgRHJ1cGFsIG1pZ3JhdG9yICgjMjQ1KQogICogQ29tcGxhaW4gYWJvdXQgWUFNTCBhbmQgTGlxdWlkIGVycm9ycyAoIzI0OSkKICAqIFJlbW92ZSBvcnBoYW5lZCBmaWxlcyBkdXJpbmcgcmVnZW5lcmF0aW9uICgjMjQ3KQogICogQWRkIE1hcmxleSBtaWdyYXRvciAoIzI4KQoKIyMgMC44LjAgLyAyMDEwLTExLTIyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIHdvcmRwcmVzcy5jb20gaW1wb3J0ZXIgKCMyMDcpCiAgKiBBZGQgYC0tbGltaXQtcG9zdHNgIGNsaSBvcHRpb24gKCMyMTIpCiAgKiBBZGQgYHVyaV9lc2NhcGVgIGZpbHRlciAoIzIzNCkKICAqIEFkZCBgLS1iYXNlLXVybGAgY2xpIG9wdGlvbiAoIzIzNSkKICAqIEltcHJvdmUgTVQgbWlncmF0b3IgKCMyMzgpCiAgKiBBZGQga3JhbWRvd24gc3VwcG9ydCAoIzIzOSkKICAqIEJ1ZyBGaXhlcwogICogRml4ZWQgZmlsZW5hbWUgYmFzZW5hbWUgZ2VuZXJhdGlvbiAoIzIwOCkKICAqIFNldCBtb2RlIHRvIFVURjggb24gU2VxdWVsIGNvbm5lY3Rpb25zICgjMjM3KQogICogUHJldmVudCBgX2luY2x1ZGVzYCBkaXIgZnJvbSBiZWluZyBhIHN5bWxpbmsKCiMjIDAuNy4wIC8gMjAxMC0wOC0yNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBzdXBwb3J0IGZvciByZGlzY291bnQgZXh0ZW5zaW9ucyAoIzE3MykKICAqIEJ1ZyBGaXhlcwogICogSGlnaGxpZ2h0IHNob3VsZCBub3QgYmUgYWJsZSB0byByZW5kZXIgbG9jYWwgZmlsZXMKICAqIFRoZSBzaXRlIGNvbmZpZ3VyYXRpb24gbWF5IG5vdCBhbHdheXMgcHJvdmlkZSBhICd0aW1lJyBzZXR0aW5nICgjMTg0KQoKIyMgMC42LjIgLyAyMDEwLTA2LTI1CgogICogQnVnIEZpeGVzCiAgKiBGaXggUmFrZWZpbGUgJ3JlbGVhc2UnIHRhc2sgKHRhZyBwdXNoaW5nIHdhcyBtaXNzaW5nIG9yaWdpbikKICAqIEVuc3VyZSB0aGF0IFJlZENsb3RoIGlzIGxvYWRlZCB3aGVuIHRleHRpbGl6ZSBmaWx0ZXIgaXMgdXNlZCAoIzE4MykKICAqIEV4cGFuZCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBhbmQgcGx1Z2luIHBhdGhzICgjMTgwKQogICogRml4IGBwYWdlLnVybGAgdG8gaW5jbHVkZSBmdWxsIHJlbGF0aXZlIHBhdGggKCMxODEpCgojIyAwLjYuMSAvIDIwMTAtMDYtMjQKCiAgKiBCdWcgRml4ZXMKICAqIEZpeCBNYXJrZG93biBQeWdtZW50cyBwcmVmaXggYW5kIHN1ZmZpeCAoIzE3OCkKCiMjIDAuNi4wIC8gMjAxMC0wNi0yMwoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIFByb3BlciBwbHVnaW4gc3lzdGVtICgjMTksICMxMDApCiAgKiBBZGQgc2FmZSBtb2RlIHNvIHVuc2FmZSBjb252ZXJ0ZXJzL2dlbmVyYXRvcnMgY2FuIGJlIGFkZGVkCiAgKiBNYXJ1a3UgaXMgbm93IHRoZSBvbmx5IHByb2Nlc3NvciBkZXBlbmRlbmN5IGluc3RhbGxlZCBieSBkZWZhdWx0LiBPdGhlciBwcm9jZXNzb3JzIHdpbGwgYmUgbGF6eS1sb2FkZWQgd2hlbiBuZWNlc3NhcnkgKGFuZCBwcm9tcHQgdGhlIHVzZXIgdG8gaW5zdGFsbCB0aGVtIHdoZW4gbmVjZXNzYXJ5KSAoIzU3KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEluY2x1c2lvbi9leGNsdXNpb24gb2YgZnV0dXJlIGRhdGVkIHBvc3RzICgjNTkpCiAgKiBHZW5lcmF0aW9uIGZvciBhIHNwZWNpZmljIHRpbWUgKCM1OSkKICAqIEFsbG9jYXRlIGBzaXRlLnRpbWVgIG9uIHJlbmRlciBub3QgcGVyIHNpdGVfcGF5bG9hZCBpbnZvY2F0aW9uICgjNTkpCiAgKiBQYWdlcyBub3cgcHJlc2VudCBpbiB0aGUgc2l0ZSBwYXlsb2FkIGFuZCBjYW4gYmUgdXNlZCB0aHJvdWdoIHRoZSBgc2l0ZS5wYWdlc2AgYW5kIGBzaXRlLmh0bWxfcGFnZXNgIHZhcmlhYmxlcwogICogR2VuZXJhdGUgcGhhc2UgYWRkZWQgdG8gc2l0ZSNwcm9jZXNzIGFuZCBwYWdpbmF0aW9uIGlzIG5vdyBhIGdlbmVyYXRvcgogICogU3dpdGNoIHRvIFJha2VHZW0gZm9yIGJ1aWxkL3Rlc3QgcHJvY2VzcwogICogT25seSByZWdlbmVyYXRlIHN0YXRpYyBmaWxlcyB3aGVuIHRoZXkgaGF2ZSBjaGFuZ2VkICgjMTQyKQogICogQWxsb3cgYXJiaXRyYXJ5IG9wdGlvbnMgdG8gUHlnbWVudHMgKCMzMSkKICAqIEFsbG93IFVSTCB0byBiZSBzZXQgdmlhIGNvbW1hbmQgbGluZSBvcHRpb24gKCMxNDcpCiAgKiBCdWcgRml4ZXMKICAqIFJlbmRlciBoaWdobGlnaHRlZCBjb2RlIGZvciBub24gbWFya2Rvd24vdGV4dGlsZSBwYWdlcyAoIzExNikKICAqIEZpeCBoaWdobGlnaHRpbmcgb24gUnVieSAxLjkgKCM2NSkKICAqIEZpeCBleHRlbnNpb24gbXVuZ2luZyB3aGVuIHByZXR0eSBwZXJtYWxpbmtzIGFyZSBlbmFibGVkICgjNjQpCiAgKiBTdG9wIHNvcnRpbmcgY2F0ZWdvcmllcyAoIzMzKQogICogUHJlc2VydmUgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMgb3ZlciBmcm9udCBtYXR0ZXIgKCMxMTkpCiAgKiBGaXggc291cmNlIGRpcmVjdG9yeSBiaW5kaW5nIHVzaW5nIGBEaXIucHdkYCAoIzc1KQoKIyMgMC41LjcgLyAyMDEwLTAxLTEyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWxsb3cgb3ZlcnJpZGluZyBvZiBwb3N0IGRhdGUgaW4gdGhlIGZyb250IG1hdHRlciAoIzYyLCAjMzgpCiAgKiBCdWcgRml4ZXMKICAqIENhdGVnb3JpZXMgaXNuJ3QgYWx3YXlzIGFuIGFycmF5ICgjNzMpCiAgKiBFbXB0eSB0YWdzIGNhdXNlcyBlcnJvciBpbiByZWFkX3Bvc3RzICgjODQpCiAgKiBGaXggcGFnaW5hdGlvbiB0byBhZGhlcmUgdG8gcmVhZC9yZW5kZXIvd3JpdGUgcGFyYWRpZ20KICAqIFRlc3QgRW5oYW5jZW1lbnQKICAqIEN1Y3VtYmVyIGZlYXR1cmVzIG5vIGxvbmdlciB1c2Ugc2l0ZS5wb3N0cy5maXJzdCB3aGVyZSBhIGJldHRlciBhbHRlcm5hdGl2ZSBpcyBhdmFpbGFibGUKCiMjIDAuNS42IC8gMjAxMC0wMS0wOAoKICAqIEJ1ZyBGaXhlcwogICogUmVxdWlyZSByZWRjbG90aCA+PSA0LjIuMSBpbiB0ZXN0cyAoIzkyKQogICogRG9uJ3QgYnJlYWsgb24gdHJpcGxlIGRhc2hlcyBpbiB5YW1sIGZyb250IG1hdHRlciAoIzkzKQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFsbG93IC5ta2QgYXMgbWFya2Rvd24gZXh0ZW5zaW9uCiAgKiBVc2UgJHN0ZG91dC9lcnIgaW5zdGVhZCBvZiBjb25zdGFudHMgKCM5OSkKICAqIFByb3Blcmx5IHdyYXAgY29kZSBibG9ja3MgKCM5MSkKICAqIEFkZCBqYXZhc2NyaXB0IG1pbWUgdHlwZSBmb3Igd2VicmljayAoIzk4KQoKIyMgMC41LjUgLyAyMDEwLTAxLTA4CgogICogQnVnIEZpeGVzCiAgKiBGaXggcGFnaW5hdGlvbiAlIDAgYnVnICgjNzgpCiAgKiBFbnN1cmUgYWxsIHBvc3RzIGFyZSBwcm9jZXNzZWQgZmlyc3QgKCM3MSkgIyMgTk9URQogICogQWZ0ZXIgdGhpcyBwb2ludCBJIHdpbGwgbm8gbG9uZ2VyIGJlIGdpdmluZyBjcmVkaXQgaW4gdGhlIGhpc3Rvcnk7IHRoYXQgaXMgd2hhdCB0aGUgY29tbWl0IGxvZyBpcyBmb3IuCgojIyAwLjUuNCAvIDIwMDktMDgtMjMKCiAgKiBCdWcgRml4ZXMKICAqIERvIG5vdCBhbGxvdyBzeW1saW5rcyAoc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSkKCiMjIDAuNS4zIC8gMjAwOS0wNy0xNAoKICAqIEJ1ZyBGaXhlcwogICogU29sdmluZyB0aGUgcGVybWFsaW5rIGJ1ZyB3aGVyZSBub24taHRtbCBmaWxlcyB3b3VsZG4ndCB3b3JrIChAamVmZnJ5ZGVncmFuZGUpCgojIyAwLjUuMiAvIDIwMDktMDYtMjQKCiAgKiBFbmhhbmNlbWVudHMKICAqIEFkZGVkIC0tcGFnaW5hdGUgb3B0aW9uIHRvIHRoZSBleGVjdXRhYmxlIGFsb25nIHdpdGggYSBwYWdpbmF0b3Igb2JqZWN0IGZvciB0aGUgcGF5bG9hZCAoQGNhbGF2ZXJhKQogICogVXBncmFkZWQgUmVkQ2xvdGggdG8gNC4yLjEsIHdoaWNoIG1ha2VzIGA8bm90ZXh0aWxlPmAgdGFncyB3b3JrIG9uY2UgYWdhaW4uCiAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IGluIGNvbmZpZy55bWwgYXJlIG5vdyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc2l0ZSBwYXlsb2FkIChAdmlsY2FucykKICAqIFBvc3RzIGNhbiBub3cgaGF2ZSBhbiBlbXB0eSBZQU1MIGZyb250IG1hdHRlciBvciBub25lIGF0IGFsbCAoQCBiYWh1dnJpaGkpCiAgKiBCdWcgRml4ZXMKICAqIEZpeGluZyBSdWJ5IDEuOSBpc3N1ZSB0aGF0IHJlcXVpcmVzIGAjdG9fc2Agb24gdGhlIGVyciBvYmplY3QgKEBDaHJvbm9uYXV0KQogICogRml4ZXMgZm9yIHBhZ2luYXRpb24gYW5kIG9yZGVyaW5nIHBvc3RzIG9uIHRoZSBzYW1lIGRheSAoQHVqaCkKICAqIE1hZGUgcGFnZXMgcmVzcGVjdCBwZXJtYWxpbmtzIHN0eWxlIGFuZCBwZXJtYWxpbmtzIGluIHltbCBmcm9udCBtYXR0ZXIgKEBldWdlbmVib2xzaGFrb3YpCiAgKiBJbmRleC5odG1sIGZpbGUgc2hvdWxkIGFsd2F5cyBoYXZlIGluZGV4Lmh0bWwgcGVybWFsaW5rIChAZXVnZW5lYm9sc2hha292KQogICogQWRkZWQgdHJhaWxpbmcgc2xhc2ggdG8gcHJldHR5IHBlcm1hbGluayBzdHlsZSBzbyBBcGFjaGUgaXMgaGFwcHkgKEBldWdlbmVib2xzaGFrb3YpCiAgKiBCYWQgbWFya2Rvd24gcHJvY2Vzc29yIGluIGNvbmZpZyBmYWlscyBzb29uZXIgYW5kIHdpdGggYmV0dGVyIG1lc3NhZ2UgKEAgZ2Nub3Z1cykKICAqIEFsbG93IENSTEZzIGluIHlhbWwgZnJvbnQgbWF0dGVyIChAanVyZXR0YSkKICAqIEFkZGVkIERhdGUjeG1sc2NoZW1hIGZvciBSdWJ5IHZlcnNpb25zIDwgMS45CgojIyAwLjUuMSAvIDIwMDktMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBOZXh0L3ByZXZpb3VzIHBvc3RzIGluIHNpdGUgcGF5bG9hZCAoQHBhbnR1bGlzLCBAdG9tbykKICAqIFBlcm1hbGluayB0ZW1wbGF0aW5nIHN5c3RlbQogICogTW92ZWQgbW9zdCBvZiB0aGUgUkVBRE1FIG91dCB0byB0aGUgR2l0SHViIHdpa2kKICAqIEV4Y2x1ZGUgb3B0aW9uIGluIGNvbmZpZ3VyYXRpb24gc28gc3BlY2lmaWVkIGZpbGVzIHdvbid0IGJlIGJyb3VnaHQgb3ZlciB3aXRoIGdlbmVyYXRlZCBzaXRlIChAZHVyaXRvbmcpCiAgKiBCdWcgRml4ZXMKICAqIE1ha2luZyBzdXJlIGNvbmZpZy55YW1sIHJlZmVyZW5jZXMgYXJlIGFsbCBnb25lLCB1c2luZyBvbmx5IGNvbmZpZy55bWwKICAqIEZpeGVkIHN5bnRheCBoaWdobGlnaHRpbmcgYnJlYWtpbmcgZm9yIFVURi04IGNvZGUgKEBoZW5yaWspCiAgKiBXb3JrZWQgYXJvdW5kIFJEaXNjb3VudCBidWcgdGhhdCBwcmV2ZW50cyBNYXJrZG93biBmcm9tIGdldHRpbmcgcGFyc2VkIGFmdGVyIGhpZ2hsaWdodCAoQGhlbnJpaykKICAqIENHSSBlc2NhcGVkIHBvc3QgdGl0bGVzIChAQ2hyb25vbmF1dCkKCiMjIDAuNS4wIC8gMjAwOS0wNC0wNwoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFiaWxpdHkgdG8gc2V0IHBvc3QgY2F0ZWdvcmllcyB2aWEgWUFNTCAoQHFydXNoKQogICogQWJpbGl0eSB0byBzZXQgcHJldmVudCBhIHBvc3QgZnJvbSBwdWJsaXNoaW5nIHZpYSBZQU1MIChAcXJ1c2gpCiAgKiBBZGQgdGV4dGlsaXplIGZpbHRlciAoQHdpbGxjb2RlZm9yZm9vKQogICogQWRkICdwcmV0dHknIHBlcm1hbGluayBzdHlsZSBmb3Igd29yZHByZXNzLWxpa2UgdXJscyAoQGR5c2luZ2VyKQogICogTWFkZSBpdCBwb3NzaWJsZSB0byBlbnRlciBjYXRlZ29yaWVzIGZyb20gWUFNTCBhcyBhbiBhcnJheSAoQENocm9ub25hdXQpCiAgKiBJZ25vcmUgRW1hY3MgYXV0b3NhdmUgZmlsZXMgKEBDaHJvbm9uYXV0KQogICogQnVnIEZpeGVzCiAgKiBVc2UgYmxvY2sgc3ludGF4IG9mIHBvcGVuNCB0byBlbnN1cmUgdGhhdCBzdWJwcm9jZXNzZXMgYXJlIHByb3Blcmx5IGRpc3Bvc2VkIChAanFyKQogICogQ2xvc2Ugb3BlbjQgc3RyZWFtcyB0byBwcmV2ZW50IHpvbWJpZXMgKEBydG9tYXlrbykKICAqIE9ubHkgcXVlcnkgcmVxdWlyZWQgZmllbGRzIGZyb20gdGhlIFdQIERhdGFiYXNlIChAYXJpZWphbikKICAqIFByZXZlbnQgYF9wb3N0c2AgZnJvbSBiZWluZyBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSAoQGJkaW1jaGVmZikKICAqIFJlZmFjdG9ycwogICogRmFjdG9yZWQgdGhlIGZpbHRlcmluZyBjb2RlIGludG8gYSBtZXRob2QgKEBDaHJvbm9uYXV0KQogICogRml4IHRlc3RzIGFuZCBjb252ZXJ0IHRvIFNob3VsZGEgKEBxcnVzaCwgQHRlY2huaWNhbHBpY2tsZXMpCiAgKiBBZGQgQ3VjdW1iZXIgYWNjZXB0YW5jZSB0ZXN0IHN1aXRlIChAcXJ1c2gsIEB0ZWNobmljYWxwaWNrbGVzKQoKIyMgMC40LjEKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2VkIGRhdGUgZm9ybWF0IG9uIHdvcmRwcmVzcyBjb252ZXJ0ZXIgKHplcm9wYWRkaW5nKSAoQGR5c2luZ2VyKQogICogQnVnIEZpeGVzCiAgKiBBZGQgSmVreWxsIGJpbmFyeSBhcyBleGVjdXRhYmxlIHRvIGdlbXNwZWMgKEBkeXNpbmdlcikKCiMjIDAuNC4wIC8gMjAwOS0wMi0wMwoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIFN3aXRjaCB0byBKZXdlbGVyIGZvciBwYWNrYWdpbmcgdGFza3MKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBUeXBlIGltcG9ydGVyIChAY29kZXNsaW5nZXIpCiAgKiBgc2l0ZS50b3BpY3NgIGFjY2Vzc29yIChAYmF6KQogICogQWRkIGBhcnJheV90b19zZW50ZW5jZV9zdHJpbmdgIGZpbHRlciAoQG1jaHVuZykKICAqIEFkZCBhIGNvbnZlcnRlciBmb3IgdGV4dHBhdHRlcm4gKEBQZXJmZWN0bHlOb3JtYWwpCiAgKiBBZGQgYSB3b3JraW5nIE1lcGhpc3RvIC8gTXlTUUwgY29udmVydGVyIChAaXZleSkKICAqIEFsbG93aW5nIC5odGFjY2VzcyBmaWxlcyB0byBiZSBjb3BpZWQgb3ZlciBpbnRvIHRoZSBnZW5lcmF0ZWQgc2l0ZSAoQGJyaWFuZG9sbCkKICAqIEFkZCBvcHRpb24gdG8gbm90IHB1dCBmaWxlIGRhdGUgaW4gcGVybWFsaW5rIFVSTCAoQG1yZWlkKQogICogQWRkIGxpbmUgbnVtYmVyIGNhcGFiaWxpdGllcyB0byBoaWdobGlnaHQgYmxvY2tzIChAamNvbikKICAqIEJ1ZyBGaXhlcwogICogRml4IHBlcm1hbGluayBiZWhhdmlvciAoQGNhdmFsbGUpCiAgKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHB5Z21lbnRzLCBtYXJrZG93biwgYW5kIG5ld2xpbmVzIChAenBpbnRlcikKICAqIEFtcGVyc2FuZHMgbmVlZCB0byBiZSBlc2NhcGVkIChAcHVmdXdvenUsIEBhcCkKICAqIFRlc3QgYW5kIGZpeCB0aGUgc2l0ZS5jYXRlZ29yaWVzIGhhc2ggKEB6em90KQogICogRml4IHNpdGUgcGF5bG9hZCBhdmFpbGFibGUgdG8gZmlsZXMgKEBtYXRyaXg5MTgwKQoKIyMgMC4zLjAgLyAyMDA4LTEyLTI0CgojIyMgTWFqb3IgRW5oYW5jZW1lbnRzCgogICogQWRkZWQgYC0tc2VydmVyYCBvcHRpb24gdG8gc3RhcnQgYSBzaW1wbGUgV0VCcmljayBzZXJ2ZXIgb24gZGVzdGluYXRpb24gZGlyZWN0b3J5IChAam9obnJlaWxseSBhbmQgQG1jaHVuZykKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGRlZCBwb3N0IGNhdGVnb3JpZXMgYmFzZWQgb24gZGlyZWN0b3JpZXMgY29udGFpbmluZyBgX3Bvc3RzYCAoQG1yZWlkKQogICogQWRkZWQgcG9zdCB0b3BpY3MgYmFzZWQgb24gZGlyZWN0b3JpZXMgdW5kZXJuZWF0aCBgX3Bvc3RzYAogICogQWRkZWQgbmV3IGRhdGUgZmlsdGVyIHRoYXQgc2hvd3MgdGhlIGZ1bGwgbW9udGggbmFtZSAoQG1yZWlkKQogICogTWVyZ2UgUG9zdCdzIFlBTUwgZnJvbnQgbWF0dGVyIGludG8gaXRzIHRvX2xpcXVpZCBwYXlsb2FkIChAcmVtaSkKICAqIFJlc3RyaWN0IGluY2x1ZGVzIHRvIHJlZ3VsYXIgZmlsZXMgdW5kZXJuZWF0aCBgX2luY2x1ZGVzYAogICogQnVnIEZpeGVzCiAgKiBDaGFuZ2UgWUFNTCBkZWxpbWl0ZXIgbWF0Y2hlciBzbyBhcyB0byBub3QgY2hldyB1cCAybmQgbGV2ZWwgbWFya2Rvd24gaGVhZGVycyAoQG1yZWlkKQogICogRml4IGJ1ZyB0aGF0IG1lYW50IHBhZ2UgZGF0YSAoc3VjaCBhcyB0aGUgZGF0ZSkgd2FzIG5vdCBhdmFpbGFibGUgaW4gdGVtcGxhdGVzIChAbXJlaWQpCiAgKiBQcm9wZXJseSByZWplY3QgZGlyZWN0b3JpZXMgaW4gYF9sYXlvdXRzYAoKIyMgMC4yLjEgLyAyMDA4LTEyLTE1CgogICogTWFqb3IgQ2hhbmdlcwogICogVXNlIE1hcnVrdSAocHVyZSBSdWJ5KSBmb3IgTWFya2Rvd24gYnkgZGVmYXVsdCAoQG1yZWlkKQogICogQWxsb3cgdXNlIG9mIFJEaXNjb3VudCB3aXRoIGAtLXJkaXNjb3VudGAgZmxhZwoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERvbid0IGxvYWQgZGlyZWN0b3J5X3dhdGNoZXIgdW5sZXNzIGl0J3MgbmVlZGVkIChAcGpoeWV0dCkKCiMjIDAuMi4wIC8gMjAwOC0xMi0xNAoKICAqIE1ham9yIENoYW5nZXMKICAqIHJlbGF0ZWRfcG9zdHMgaXMgbm93IGZvdW5kIGluIGBzaXRlLnJlbGF0ZWRfcG9zdHNgCgojIyAwLjEuNiAvIDIwMDgtMTItMTMKCiAgKiBNYWpvciBGZWF0dXJlcwogICogSW5jbHVkZSBmaWxlcyBpbiBgX2luY2x1ZGVzYCB3aXRoIGB7JSBpbmNsdWRlIHgudGV4dGlsZSAlfWAKCiMjIDAuMS41IC8gMjAwOC0xMi0xMgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIENvZGUgaGlnaGxpZ2h0aW5nIHdpdGggUHlnbWVudHMgaWYgYC0tcHlnbWVudHNgIGlzIHNwZWNpZmllZAogICogRGlzYWJsZSB0cnVlIExTSSBieSBkZWZhdWx0LCBlbmFibGUgd2l0aCBgLS1sc2lgCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogT3V0cHV0IGluZm9ybWF0aXZlIG1lc3NhZ2UgaWYgUkRpc2NvdW50IGlzIG5vdCBhdmFpbGFibGUgKEBKYWNrRGFuZ2VyKQogICogQnVnIEZpeGVzCiAgKiBQcmV2ZW50IEpla3lsbCBmcm9tIHBpY2tpbmcgdXAgdGhlIG91dHB1dCBkaXJlY3RvcnkgYXMgYSBzb3VyY2UgKEBKYWNrRGFuZ2VyKQogICogU2tpcCBgcmVsYXRlZF9wb3N0c2Agd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwb3N0IChASmFja0RhbmdlcikKCiMjIDAuMS40IC8gMjAwOC0xMi0wOAoKICAqIEJ1ZyBGaXhlcwogICogREFUQSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggcnVieWdlbXMKCiMjIDAuMS4zIC8gMjAwOC0xMi0wNgoKICAqIE1ham9yIEZlYXR1cmVzCiAgKiBNYXJrZG93biBzdXBwb3J0IChAdmFucGVsdCkKICAqIE1lcGhpc3RvIGFuZCBDU1YgY29udmVydGVycyAoQHZhbnBlbHQpCiAgKiBDb2RlIGhpbGlnaHRpbmcgKEB2YW5wZWx0KQogICogQXV0b2J1aWxkCiAgKiBCdWcgRml4ZXMKICAqIEFjY2VwdCBib3RoIGBcclxuYCBhbmQgYFxuYCBpbiBZQU1MIGhlYWRlciAoQHZhbnBlbHQpCgojIyAwLjEuMiAvIDIwMDgtMTEtMjIKCiAgKiBNYWpvciBGZWF0dXJlcwogICogQWRkIGEgcmVhbCAicmVsYXRlZCBwb3N0cyIgaW1wbGVtZW50YXRpb24gdXNpbmcgQ2xhc3NpZmllcgogICogQ29tbWFuZCBMaW5lIENoYW5nZXMKICAqIEFsbG93IGNsaSB0byBiZSBjYWxsZWQgd2l0aCAwLCAxLCBvciAyIGFyZ3MgaW50dWl0aW5nIGRpciBwYXRocyBpZiB0aGV5IGFyZSBvbWl0dGVkCgojIyAwLjEuMSAvIDIwMDgtMTEtMjIKCiAgKiBNaW5vciBBZGRpdGlvbnMKICAqIFBvc3RzIG5vdyBzdXBwb3J0IGludHJvc3BlY3Rpb25hbCBkYXRhIGUuZy4gYHt7IHBhZ2UudXJsIH19YAoKIyMgMC4xLjAgLyAyMDA4LTExLTA1CgogICogRmlyc3QgcmVsZWFzZQogICogQ29udmVydHMgcG9zdHMgd3JpdHRlbiBpbiBUZXh0aWxlCiAgKiBDb252ZXJ0cyByZWd1bGFyIHNpdGUgcGFnZXMKICAqIFNpbXBsZSBjb3B5IG9mIGJpbmFyeSBmaWxlcwoKIyMgMC4wLjAgLyAyMDA4LTEwLTE5CgogICogQmlydGhkYXkhCg== \ No newline at end of file +## HEAD + +### Minor Enhancements + + * Use `Liquid::Drop`s instead of `Hash`es in `#to_liquid` (#4277) + * Add 'sample' Liquid filter Equivalent to Array#sample functionality (#4223) + * Cache parsed include file to save liquid parsing time. (#4120) + * Slightly speed up url sanitization and handle multiples of ///. (#4168) + * Print debug message when a document is skipped from reading (#4180) + * Include tag should accept multiple variables in the include name (#4183) + * Add `-o` option to serve command which opens server URL (#4144) + * Add CodeClimate platform for better code quality. (#4220) + * General improvements for WEBrick via jekyll serve such as SSL & custom headers (#4224, #4228) + * Add a default charset to content-type on webrick. (#4231) + * Switch `PluginManager` to use `require_with_graceful_fail` for better UX (#4233) + * Allow quoted date in front matter defaults (#4184) + * Add a Jekyll doctor warning for URLs that only differ by case (#3171) + * drops: create one base Drop class which can be set as mutable or not (#4285) + * drops: provide `#to_h` to allow for hash introspection (#4281) + * Shim subcommands with indication of gem possibly required so users know how to use them (#4254) + +### Bug Fixes + + * Pass build options into `clean` command (#4177) + * Allow users to use .htm and .xhtml (XHTML5.) (#4160) + * Prevent Shell Injection. (#4200) + * Convertible should make layout data accessible via `layout` instead of `page` (#4205) + * Avoid using `Dir.glob` with absolute path to allow special characters in the path (#4150) + * Handle empty config files (#4052) + * Rename `@options` so that it does not impact Liquid. (#4173) + * utils/drops: update Drop to support `Utils.deep_merge_hashes` (#4289) + * Make sure jekyll/drops/drop is loaded first. (#4292) + * Convertible/Page/Renderer: use payload hash accessor & setter syntax for backwards-compatibility (#4311) + * Drop: fix hash setter precendence (#4312) + * utils: `has_yaml_header?` should accept files with extraneous spaces (#4290) + * Escape html from site.title and page.title in site template (#4307) + +### Development Fixes + + * `jekyll-docs` should be easily release-able (#4152) + * Allow use of Cucumber 2.1 or greater (#4181) + * Modernize Kramdown for Markdown converter. (#4109) + * Change TestDoctorCommand to JekyllUnitTest... (#4263) + * Create namespaced rake tasks in separate `.rake` files under `lib/tasks` (#4282) + * markdown: refactor for greater readability & efficiency (#3771) + * Fix many Rubocop style errors (#4301) + * Fix spelling of "GitHub" in docs and history (#4322) + * Reorganize and cleanup the Gemfile, shorten required depends. (#4318) + +### Site Enhancements + + * Add three plugins to directory (#4163) + * Add upgrading docs from 2.x to 3.x (#4157) + * Add `protect_email` to the plugins index. (#4169) + * Add `jekyll-deploy` to list of third-party plugins (#4179) + * Clarify plugin docs (#4154) + * Add Kickster to deployment methods in documentation (#4190) + * Add DavidBurela's tutorial for Windows to Windows docs page (#4210) + * Change GitHub code block to highlight tag to avoid it overlaps parent div (#4121) + * Update FormKeep link to be something more specific to Jekyll (#4243) + * Remove example Roger Chapman site, as the domain doesn't exist (#4249) + * Added configuration options for `draft_posts` to configuration docs (#4251) + * Fix checklist in `_assets.md` (#4259) + * Add Markdown examples to Pages docs (#4275) + * Add jekyll-paginate-category to list of third-party plugins (#4273) + * Add `jekyll-responsive_image` to list of third-party plugins (#4286) + * Add `jekyll-commonmark` to list of third-party plugins (#4299) + * Add documentation for incremental regeneration (#4293) + * Add note about removal of relative permalink support in upgrading docs (#4303) + * Add Pro Tip to use front matter variable to create clean URLs (#4296) + +## 3.0.1 / 2015-11-17 + +### Bug Fixes + + * Document: only superdirectories of the collection are categories (#4110) + * `Convertible#render_liquid` should use `render!` to cause failure on bad Liquid (#4077) + * Don't generate `.jekyll-metadata` in non-incremental build (#4079) + * Set `highlighter` config val to `kramdown.syntax_highlighter` (#4090) + * Align hooks implementation with documentation (#4104) + * Fix the deprecation warning in the doctor command (#4114) + * Fix case in `:title` and add `:slug` which is downcased (#4100) + +### Development Fixes + + * Fix test warnings when doing rake {test,spec} or script/test (#4078) + +### Site Enhancements + + * Update normalize.css to v3.0.3. (#4085) + * Update Font Awesome to v4.4.0. (#4086) + * Adds a note about installing the jekyll-gist gem to make gist tag work (#4101) + * Align hooks documentation with implementation (#4104) + * Add Jekyll Flickr Plugin to the list of third party plugins (#4111) + * Remove link to now-deleted blog post (#4125) + * Update the liquid syntax in the pagination docs (#4130) + * Add jekyll-language-plugin to plugins.md (#4134) + * Updated to reflect feedback in #4129 (#4137) + * Clarify assets.md based on feedback of #4129 (#4142) + * Re-correct the liquid syntax in the pagination docs (#4140) + +## 3.0.0 / 2015-10-26 + +### Major Enhancements + + * Liquid profiler (i.e. know how fast or slow your templates render) (#3762) + * Incremental regeneration (#3116) + * Add Hooks: a new kind of plugin (#3553) + * Upgrade to Liquid 3.0.0 (#3002) + * `site.posts` is now a Collection instead of an Array (#4055) + * Add basic support for JRuby (commit: 0f4477) + * Drop support for Ruby 1.9.3. (#3235) + * Support Ruby v2.2 (#3234) + * Support RDiscount 2 (#2767) + * Remove most runtime deps (#3323) + * Move to Rouge as default highlighter (#3323) + * Mimic GitHub Pages `.html` extension stripping behavior in WEBrick (#3452) + * Always include file extension on output files (#3490) + * Improved permalinks for pages and collections (#3538) + * Sunset (i.e. remove) Maruku (#3655) + * Remove support for relative permalinks (#3679) + * Iterate over `site.collections` as an array instead of a hash. (#3670) + * Adapt StaticFile for collections, config defaults (#3823) + * Add a Code of Conduct for the Jekyll project (#3925) + * Added permalink time variables (#3990) + * Add `--incremental` flag to enable incremental regen (disabled by default) (#4059) + +### Minor Enhancements + + * Deprecate access to Document#data properties and Collection#docs methods (#4058) + * Sort static files just once, and call `site_payload` once for all collections (#3204) + * Separate `jekyll docs` and optimize external gem handling (#3241) + * Improve `Site#getConverterImpl` and call it `Site#find_converter_instance` (#3240) + * Use relative path for `path` Liquid variable in Documents for consistency (#2908) + * Generalize `Utils#slugify` for any scripts (#3047) + * Added basic microdata to post template in site template (#3189) + * Store log messages in an array of messages. (#3244) + * Allow collection documents to override `output` property in front matter (#3172) + * Keep file modification times between builds for static files (#3220) + * Only downcase mixed-case categories for the URL (#2571) + * Added per post `excerpt_separator` functionality (#3274) + * Allow collections YAML to end with three dots (#3134) + * Add mode parameter to `slugify` Liquid filter (#2918) + * Perf: `Markdown#matches` should avoid regexp (#3321) + * Perf: Use frozen regular expressions for `Utils#slugify` (#3321) + * Split off Textile support into jekyll-textile-converter (#3319) + * Improve the navigation menu alignment in the site template on small + screens (#3331) + * Show the regeneration time after the initial generation (#3378) + * Site template: Switch default font to Helvetica Neue (#3376) + * Make the `include` tag a teensy bit faster. (#3391) + * Add `pkill -f jekyll` to ways to kill. (#3397) + * Site template: collapsed, variable-driven font declaration (#3360) + * Site template: Don't always show the scrollbar in code blocks (#3419) + * Site template: Remove undefined `text` class from `p` element (#3440) + * Site template: Optimize text rendering for legibility (#3382) + * Add `draft?` method to identify if Post is a Draft & expose to Liquid (#3456) + * Write regeneration metadata even on full rebuild (#3464) + * Perf: Use `String#end_with?("/")` instead of regexp when checking paths (#3516) + * Docs: document 'ordinal' built-in permalink style (#3532) + * Upgrade liquid-c to 3.x (#3531) + * Use consistent syntax for deprecation warning (#3535) + * Added build --destination and --source flags (#3418) + * Site template: remove unused `page.meta` attribute (#3537) + * Improve the error message when sorting null objects (#3520) + * Added liquid-md5 plugin (#3598) + * Documentation: RR replaced with RSpec Mocks (#3600) + * Documentation: Fix subpath. (#3599) + * Create 'tmp' dir for test_tags if it doesn't exist (#3609) + * Extract reading of data from `Site` to reduce responsibilities. (#3545) + * Removed the word 'Jekyll' a few times from the comments (#3617) + * `bin/jekyll`: with no args, exit with exit code 1 (#3619) + * Incremental build if destination file missing (#3614) + * Static files `mtime` liquid should return a `Time` obj (#3596) + * Use `Jekyll::Post`s for both LSI indexing and lookup. (#3629) + * Add `charset=utf-8` for HTML and XML pages in WEBrick (#3649) + * Set log level to debug when verbose flag is set (#3665) + * Added a mention on the Gemfile to complete the instructions (#3671) + * Perf: Cache `Document#to_liquid` and invalidate where necessary (#3693) + * Perf: `Jekyll::Cleaner#existing_files`: Call `keep_file_regex` and + `keep_dirs` only once, not once per iteration (#3696) + * Omit jekyll/jekyll-help from list of resources. (#3698) + * Add basic `jekyll doctor` test to detect fsnotify (OSX) anomalies. (#3704) + * Added talk.jekyllrb.com to "Have questions?" (#3694) + * Performance: Sort files only once (#3707) + * Performance: Marshal metadata (#3706) + * Upgrade highlight wrapper from `div` to `figure` (#3779) + * Upgrade mime-types to `~> 2.6` (#3795) + * Update windows.md with Ruby version info (#3818) + * Make the directory for includes configurable (#3782) + * Rename directory configurations to match `*_dir` convention for consistency (#3782) + * Internal: trigger hooks by owner symbol (#3871) + * Update MIME types from mime-db (#3933) + * Add header to site template `_config.yml` for clarity & direction (#3997) + * Site template: add timezone offset to post date frontmatter (#4001) + * Make a constant for the regex to find hidden files (#4032) + * Site template: refactor github & twitter icons into includes (#4049) + * Site template: add background to Kramdown Rouge-ified backtick code blocks (#4053) + +### Bug Fixes + + * `post_url`: fix access deprecation warning & fix deprecation msg (#4060) + * Perform jekyll-paginate deprecation warning correctly. (#3580) + * Make permalink parsing consistent with pages (#3014) + * `time()`pre-filter method should accept a `Date` object (#3299) + * Remove unneeded end tag for `link` in site template (#3236) + * Kramdown: Use `enable_coderay` key instead of `use_coderay` (#3237) + * Unescape `Document` output path (#2924) + * Fix nav items alignment when on multiple rows (#3264) + * Highlight: Only Strip Newlines/Carriage Returns, not Spaces (#3278) + * Find variables in front matter defaults by searching with relative file path. (#2774) + * Allow variables (e.g `:categories`) in YAML front matter permalinks (#3320) + * Handle nil URL placeholders in permalinks (#3325) + * Template: Fix nav items alignment when in "burger" mode (#3329) + * Template: Remove `!important` from nav SCSS introduced in #3329 (#3375) + * The `:title` URL placeholder for collections should be the filename slug. (#3383) + * Trim the generate time diff to just 3 places past the decimal place (#3415) + * The highlight tag should only clip the newlines before and after the *entire* block, not in between (#3401) + * highlight: fix problem with linenos and rouge. (#3436) + * `Site#read_data_file`: read CSV's with proper file encoding (#3455) + * Ignore `.jekyll-metadata` in site template (#3496) + * Template: Point documentation link to the documentation pages (#3502) + * Removed the trailing slash from the example `/blog` baseurl comment (#3485) + * Clear the regenerator cache every time we process (#3592) + * Readd (bring back) minitest-profile (#3628) + * Add WOFF2 font MIME type to Jekyll server MIME types (#3647) + * Be smarter about extracting the extname in `StaticFile` (#3632) + * Process metadata for all dependencies (#3608) + * Show error message if the YAML front matter on a page/post is invalid. (#3643) + * Upgrade redcarpet to 3.2 (Security fix: OSVDB-120415) (#3652) + * Create #mock_expects that goes directly to RSpec Mocks. (#3658) + * Open `.jekyll-metadata` in binary mode to read binary Marshal data (#3713) + * Incremental regeneration: handle deleted, renamed, and moved dependencies (#3717) + * Fix typo on line 19 of pagination.md (#3760) + * Fix it so that 'blog.html' matches 'blog.html' (#3732) + * Remove occasionally-problematic `ensure` in `LiquidRenderer` (#3811) + * Fixed an unclear code comment in site template SCSS (#3837) + * Fix reading of binary metadata file (#3845) + * Remove var collision with site template header menu iteration variable (#3838) + * Change non-existent `hl_linenos` to `hl_lines` to allow passthrough in safe mode (#3787) + * Add missing flag to disable the watcher (#3820) + * Update CI guide to include more direct explanations of the flow (#3891) + * Set `future` to `false` in the default config (#3892) + * filters: `where` should compare stringified versions of input & comparator (#3935) + * Read build options for `jekyll clean` command (#3828) + * Fix #3970: Use Gem::Version to compare versions, not `>`. + * Abort if no subcommand. Fixes confusing message. (#3992) + * Whole-post excerpts should match the post content (#4004) + * Change default font weight to 400 to fix bold/strong text issues (#4050) + * Document: Only auto-generate the excerpt if it's not overridden (#4062) + * Utils: `deep_merge_hashes` should also merge `default_proc` (45f69bb) + * Defaults: compare paths in `applies_path?` as `String`s to avoid confusion (7b81f00) + +### Development Fixes + + * Remove loader.rb and "modernize" `script/test`. (#3574) + * Improve the grammar in the documentation (#3233) + * Update the LICENSE text to match the MIT license exactly (#3253) + * Update rake task `site:publish` to fix minor bugs. (#3254) + * Switch to shields.io for the README badges. (#3255) + * Use `FileList` instead of `Dir.glob` in `site:publish` rake task (#3261) + * Fix test script to be platform-independent (#3279) + * Instead of symlinking `/tmp`, create and symlink a local `tmp` in the tests (#3258) + * Fix some spacing (#3312) + * Fix comment typo in `lib/jekyll/frontmatter_defaults.rb` (#3322) + * Move all `regenerate?` checking to `Regenerator` (#3326) + * Factor out a `read_data_file` call to keep things clean (#3380) + * Proof the site with CircleCI. (#3427) + * Update LICENSE to 2015. (#3477) + * Upgrade tests to use Minitest (#3492) + * Remove trailing whitespace (#3497) + * Use `fixture_site` for Document tests (#3511) + * Remove adapters deprecation warning (#3529) + * Minor fixes to `url.rb` to follow GitHub style guide (#3544) + * Minor changes to resolve deprecation warnings (#3547) + * Convert remaining textile test documents to markdown (#3528) + * Migrate the tests to use rspec-mocks (#3552) + * Remove `activesupport` (#3612) + * Added tests for `Jekyll:StaticFile` (#3633) + * Force minitest version to 5.5.1 (#3657) + * Update the way cucumber accesses Minitest assertions (#3678) + * Add `script/rubyprof` to generate cachegrind callgraphs (#3692) + * Upgrade cucumber to 2.x (#3795) + * Update Kramdown. (#3853) + * Updated the scripts shebang for portability (#3858) + * Update JRuby testing to 9K ([3ab386f](https://github.com/jekyll/jekyll/commit/3ab386f1b096be25a24fe038fc70fd0fb08d545d)) + * Organize dependencies into dev and test groups. (#3852) + * Contributing.md should refer to `script/cucumber` (#3894) + * Update contributing documentation to reflect workflow updates (#3895) + * Add script to vendor mime types (#3933) + * Ignore .bundle dir in SimpleCov (#4033) + +### Site Enhancements + + * Add 'info' labels to certain notes in collections docs (#3601) + * Remove extra spaces, make the last sentence less awkward in permalink docs (#3603) + * Update the permalinks documentation to reflect the updates for 3.0 (#3556) + * Add blog post announcing Jekyll Help (#3523) + * Add Jekyll Talk to Help page on site (#3518) + * Change Ajax pagination resource link to use HTTPS (#3570) + * Fixing the default host on docs (#3229) + * Add `jekyll-thumbnail-filter` to list of third-party plugins (#2790) + * Add link to 'Adding Ajax pagination to Jekyll' to Resources page (#3186) + * Add a Resources link to tutorial on building dynamic navbars (#3185) + * Semantic structure improvements to the post and page layouts (#3251) + * Add new AsciiDoc plugin to list of third-party plugins. (#3277) + * Specify that all transformable collection documents must contain YAML front matter (#3271) + * Assorted accessibility fixes (#3256) + * Update configuration docs to mention `keep_files` for `destination` (#3288, #3296) + * Break when we successfully generate nav link to save CPU cycles. (#3291) + * Update usage docs to mention `keep_files` and a warning about `destination` cleaning (#3295) + * Add logic to automatically generate the `next_section` and `prev_section` navigation items (#3292) + * Some small fixes for the Plugins TOC. (#3306) + * Added versioning comment to configuration file (#3314) + * Add `jekyll-minifier` to list of third-party plugins (#3333) + * Add blog post about the Jekyll meet-up (#3332) + * Use `highlight` Liquid tag instead of the four-space tabs for code (#3336) + * 3.0.0.beta1 release post (#3346) + * Add `twa` to the list of third-party plugins (#3384) + * Remove extra spaces (#3388) + * Fix small grammar errors on a couple pages (#3396) + * Fix typo on Templates docs page (#3420) + * s/three/four for plugin type list (#3424) + * Release jekyllrb.com as a locally-compiled site. (#3426) + * Add a jekyllrb.com/help page which elucidates places from which to get help (#3428) + * Remove extraneous dash on Plugins doc page which caused a formatting error (#3431) + * Fix broken link to Jordan Thornquest's website. (#3438) + * Change the link to an extension (#3457) + * Fix Twitter link on the help page (#3466) + * Fix wording in code snippet highlighting section (#3475) + * Add a `/` to `paginate_path` in the Pagination documentation (#3479) + * Add a link on all the docs pages to "Improve this page". (#3510) + * Add jekyll-auto-image generator to the list of third-party plugins (#3489) + * Replace link to the proposed `picture` element spec (#3530) + * Add frontmatter date formatting information (#3469) + * Improve consistency and clarity of plugins options note (#3546) + * Add permalink warning to pagination docs (#3551) + * Fix grammar in Collections docs API stability warning (#3560) + * Restructure `excerpt_separator` documentation for clarity (#3550) + * Fix accidental line break in collections docs (#3585) + * Add information about the `.jekyll-metadata` file (#3597) + * Document addition of variable parameters to an include (#3581) + * Add `jekyll-files` to the list of third-party plugins. (#3586) + * Define the `install` step in the CI example `.travis.yml` (#3622) + * Expand collections documentation. (#3638) + * Add the "warning" note label to excluding `vendor` in the CI docs page (#3623) + * Upgrade pieces of the Ugrading guide for Jekyll 3 (#3607) + * Showing how to access specific data items (#3468) + * Clarify pagination works from within HTML files (#3467) + * Add note to `excerpt_separator` documentation that it can be set globally (#3667) + * Fix some names on Troubleshooting page (#3683) + * Add `remote_file_content` tag plugin to list of third-party plugins (#3691) + * Update the Redcarpet version on the Configuration page. (#3743) + * Update the link in the welcome post to point to Jekyll Talk (#3745) + * Update link for navbars with data attributes tutorial (#3728) + * Add `jekyll-asciinema` to list of third-party plugins (#3750) + * Update pagination example to be agnostic to first pagination dir (#3763) + * Detailed instructions for rsync deployment method (#3848) + * Add Jekyll Portfolio Generator to list of plugins (#3883) + * Add `site.html_files` to variables docs (#3880) + * Add Static Publisher tool to list of deployment methods (#3865) + * Fix a few typos. (#3897) + * Add `jekyll-youtube` to the list of third-party plugins (#3931) + * Add Views Router plugin (#3950) + * Update install docs (Core dependencies, Windows reqs, etc) (#3769) + * Use Jekyll Feed for jekyllrb.com (#3736) + * Add jekyll-umlauts to plugins.md ($3966) + * Troubleshooting: fix broken link, add other mac-specific info (#3968) + * Add a new site for learning purposes (#3917) + * Added documentation for Jekyll environment variables (#3989) + * Fix broken configuration documentation page (#3994) + * Add troubleshooting docs for installing on El Capitan (#3999) + * Add Lazy Tweet Embedding to the list of third-party plugins (#4015) + * Add installation instructions for 2 of 3 options for plugins (#4013) + * Add alternative jekyll gem installation instructions (#4018) + * Fix a few typos and formatting problems. (#4022) + * Fix pretty permalink example (#4029) + * Note that `_config.yml` is not reloaded during regeneration (#4034) + * Apply code block figure syntax to blocks in CONTRIBUTING (#4046) + * Add jekyll-smartify to the list of third-party plugins (#3572) + +## 2.5.3 / 2014-12-22 + +### Bug Fixes + + * When checking a Markdown extname, include position of the `.` (#3147) + * Fix `jsonify` Liquid filter handling of boolean values (#3154) + * Add comma to value of `viewport` meta tag (#3170) + * Set the link type for the RSS feed to `application/rss+xml` (#3176) + * Refactor `#as_liquid` (#3158) + +### Development Fixes + + * Exclude built-in bundles from being added to coverage report (#3180) + +### Site Enhancements + + * Add `@alfredxing` to the `@jekyll/core` team. :tada: (#3218) + * Document the `-q` option for the `build` and `serve` commands (#3149) + * Fix some minor typos/flow fixes in documentation website content (#3165) + * Add `keep_files` to configuration documentation (#3162) + * Repeat warning about cleaning of the `destination` directory (#3161) + * Add jekyll-500px-embed to list of third-party plugins (#3163) + * Simplified platform detection in Gemfile example for Windows (#3177) + * Add the `jekyll-jalali` plugin added to the list of third-party plugins. (#3198) + * Add Table of Contents to Troubleshooting page (#3196) + * Add `inline_highlight` plugin to list of third-party plugins (#3212) + * Add `jekyll-mermaid` plugin to list of third-party plugins (#3222) + +## 2.5.2 / 2014-11-17 + +### Minor Enhancements + + * `post_url` should match `post.name` instead of slugs and dates (#3058) + +### Bug Fixes + + * Fix bundle require for `:jekyll_plugins` (#3119) + * Remove duplicate regexp phrase: `^\A` (#3089) + * Remove duplicate `Conversion error:` message in `Convertible` (#3088) + * Print full conversion error message in `Renderer#convert` (#3090) + +### Site Enhancements + + * Change variable names in Google Analytics script (#3093) + * Mention CSV files in the docs for data files (#3101) + * Add trailing slash to `paginate_path` example. (#3091) + * Get rid of noifniof (`excerpt_separator`) (#3094) + * Sass improvements, around nesting mostly. (#3123) + * Add webmentions.io plugin to the list of third-party plugins (#3127) + * Add Sass mixins and use them. (#2904) + * Slightly compress jekyll-sticker.jpg. (#3133) + * Update gridism and separate out related but custom styles. (#3132) + * Add remote-include plugin to list of third-party plugins (#3136) + +## 2.5.1 / 2014-11-09 + +### Bug Fixes + + * Fix path sanitation bug related to Windows drive names (#3077) + +### Development Fixes + + * Add development time dependencies on minitest and test-unit to gemspec for cygwin (#3064) + * Use Travis's built-in caching. (#3075) + +## 2.5.0 / 2014-11-06 + +### Minor Enhancements + + * Require gems in `:jekyll_plugins` Gemfile group unless `JEKYLL_NO_BUNDLER_REQUIRE` is specified in the environment. (#2865) + * Centralize path sanitation in the `Site` object (#2882) + * Allow placeholders in permalinks (#3031) + * Allow users to specify the log level via `JEKYLL_LOG_LEVEL`. (#3067) + * Fancy Indexing with WEBrick (#3018) + * Allow Enumerables to be used with `where` filter. (#2986) + * Meta descriptions in the site template now use `page.excerpt` if it's available (#2964) + * Change indentation in `head.html` of site template to 2 spaces from 4 (#2973) + * Use a `$content-width` variable instead of a fixed value in the site template CSS (#2972) + * Strip newlines in site template `` description. (#2982) + * Add link to atom feed in `head` of site template files (#2996) + * Performance optimizations (#2994) + * Use `Hash#each_key` instead of `Hash#keys.each` to speed up iteration + over hash keys. (#3017) + * Further minor performance enhancements. (#3022) + * Add 'b' and 's' aliases for build and serve, respectively (#3065) + +### Bug Fixes + + * Fix Rouge's RedCarpet plugin interface integration (#2951) + * Remove `--watch` from the site template blog post since it defaults + to watching in in 2.4.0 (#2922) + * Fix code for media query mixin in site template (#2946) + * Allow post URL's to have `.htm` extensions (#2925) + * `Utils.slugify`: Don't create new objects when gsubbing (#2997) + * The jsonify filter should deep-convert to Liquid when given an Array. (#3032) + * Apply `jsonify` filter to Hashes deeply and effectively (#3063) + * Use `127.0.0.1` as default host instead of `0.0.0.0` (#3053) + * In the case that a Gemfile does not exist, ensure Jekyll doesn't fail on requiring the Gemfile group (#3066) + +### Development Fixes + + * Fix a typo in the doc block for `Jekyll::URL.escape_path` (#3052) + * Add integration test for `jekyll new --blank` in TestUnit (#2913) + * Add unit test for `jekyll new --force` logic (#2929) + * Update outdated comment for `Convertible#transform` (#2957) + * Add Hakiri badge to README. (#2953) + * Add some simple benchmarking tools. (#2993) + +### Site Enhancements + + * `NOKOGIRI_USE_SYSTEM_LIBRARIES=true` **decreases** installation time. (#3040) + * Add FormKeep to resources as Jekyll form backend (#3010) + * Fixing a mistake in the name of the new Liquid tag (#2969) + * Update Font Awesome to v4.2.0. (#2898) + * Fix link to #2895 in 2.4.0 release post. (#2899) + * Add Big Footnotes for Kramdown plugin to list of third-party plugins (#2916) + * Remove warning regarding GHP use of singular types for front matter defaults (#2919) + * Fix quote character typo in site documentation for templates (#2917) + * Point Liquid links to Liquid’s GitHub wiki (#2887) + * Add HTTP Basic Auth (.htaccess) plugin to list of third-party plugins (#2931) + * (Minor) Grammar & `_config.yml` filename fixes (#2911) + * Added `mathml.rb` to the list of third-party plugins. (#2937) + * Add `--force_polling` to the list of configuration options (#2943) + * Escape unicode characters in site CSS (#2906) + * Add note about using the github-pages gem via pages.github.com/versions.json (#2939) + * Update usage documentation to reflect 2.4 auto-enabling of `--watch`. (#2954) + * Add `--skip-initial-build` to configuration docs (#2949) + * Fix a minor typo in Templates docs page (#2959) + * Add a ditaa-ditaa plugin under Other section on the Plugins page (#2967) + * Add `build/serve -V` option to configuration documentation (#2948) + * Add 'Jekyll Twitter Plugin' to list of third-party plugins (#2979) + * Docs: Update normalize.css to v3.0.2. (#2981) + * Fix typo in Continuous Integration documentation (#2984) + * Clarify behavior of `:categories` in permalinks (#3011) + +## 2.4.0 / 2014-09-09 + +### Minor Enhancements + + * Support a new `relative_include` tag (#2870) + * Auto-enable watch on 'serve' (#2858) + * Render Liquid in CoffeeScript files (#2830) + * Array Liquid filters: `push`, `pop`, `unshift`, `shift` (#2895) + * Add `:title` to collection URL template fillers (#2864) + * Add support for CSV files in the `_data` directory (#2761) + * Add the `name` variable to collection permalinks (#2799) + * Add `inspect` liquid filter. (#2867) + * Add a `slugify` Liquid filter (#2880) + +### Bug Fixes + + * Use `Jekyll.sanitized_path` when adding static files to Collections (#2849) + * Fix encoding of `main.scss` in site template (#2771) + * Fix orientation bugs in default site template (#2862) + +### Development Fixes + + * Update simplecov gem to 0.9 (#2748) + * Remove `docs/` dir (#2768) + * add class `<< self` idiom to `New` command (#2817) + * Allow Travis to 'parallelize' our tests (#2859) + * Fix test for Liquid rendering in Sass (#2856) + * Fixing "vertycal" typo in site template's `_base.scss` (#2889) + +### Site Enhancements + + * Document the `name` variable for collection permalinks (#2829) + * Adds info about installing jekyll in current dir (#2839) + * Remove deprecated `jekyll-projectlist` plugin from list of third-party + plugins (#2742) + * Remove tag plugins that are built in to Jekyll (#2751) + * Add `markdown-writer` package for Atom Editor to list of third-party + plugins (#2763) + * Fix typo in site documentation for collections (#2764) + * Fix minor typo on plugins docs page (#2765) + * Replace markdown with HTML in `sass_dir` note on assets page (#2791) + * Fixed "bellow" typo in datafiles docs (#2879) + * Fix code/markdown issue in documentation for variables (#2877) + * Remove Good Include third-party plugin from plugins page (#2881) + * Add some more docs on `include_relative` (#2884) + +## 2.3.0 / 2014-08-10 + +### Minor Enhancements + + * Allow Convertibles to be converted by >= 1 converters (#2704) + * Allow Sass files to be rendered in Liquid, but never place them in layouts. (#2733) + * Add `jekyll help` command (#2707) + * Use `.scss` for `site_template` styles. (#2667) + * Don't require the `scope` key in front matter defaults (#2659) + * No longer set `permalink: pretty` in the `_config.yml` for the site template (#2680) + * Rework site template to utilize Sass (#2687) + * Notify the user when auto-regeneration is disabled. (#2696) + * Allow partial variables in include tag filename argument (#2693) + * Move instances of `Time.parse` into a Utils method (#2682) + * Ignore subfolders in the `_posts` folder (#2705) REVERTS (#2633) + * Front Matter default types should always be pluralized (#2732) + * Read in static files into `collection.files` as `StaticFile`s (#2737) + * Add `sassify` and `scssify` Liquid filters (#2739) + * Replace `classifier` gem with `classifier-reborn` (#2721) + +### Bug Fixes + + * Use only the last extname when multiple converters exist (#2722) + * Call `#to_liquid` before calling `#to_json` in jsonify filter (#2729) + * Use non padded config in `strftime` to avoid parse string twice (#2673) + * Replace deprecated Ruby methods with undeprecated ones (#2664) + * Catch errors when parsing Post `date` front matter value & produce nice error message (#2649) + * Allow static files in Collections (#2615) + * Fixed typo in `Deprecator#gracefully_require` error message (#2694) + * Remove preemptive loading of the 'classifier' gem. (#2697) + * Use case-insensitive checking for the file extensions when loading config files (#2718) + * When Reading Documents, Respect `encoding` Option (#2720) + * Refactor based on jekyll-watch clean-up. (#2716) + * `Document#to_s` should produce just the content of the document (#2731) + +### Development Fixes + + * Only include lib files in the gem (#2671) + * Fix `git diff` command in `proof` script (#2672) + * Make default rake task a multitask so tests run in parallel (#2735) + +### Site Enhancements + + * Use Sass and a Docs Collection (#2651) + * Add `latest_version.txt` file to the site (#2740) + * Be more ambiguous about `page.content`. But more transparent. (#2522) + * Streamlining front matter wording (instead of front-matter/frontmatter) (#2674) + * Add note that source directory cannot be modified in GitHub Pages (#2669) + * Fix links from #2669 to be actual HTML. Whoops. (#2679) + * Add link to `jekyll-slim` in list of third-party plugins (#2689) + * Add Barry Clark's Smashing Magazine tutorial to resources page (#2688) + * Reorganize and update default configuration settings (#2456) + * Fixing indentation in the configuration docs about Redcarpet exts (#2717) + * Use `null` in YAML instead of `nil` in default config list (#2719) + * Fix typo in Continuous Integration docs (#2708) + +## 2.2.0 / 2014-07-29 + +### Minor Enhancements + + * Throw a warning if the specified layout does not exist (#2620) + * Whitelist Pygments options in safe mode (#2642) + +### Bug Fixes + + * Remove unnecessary `Jekyll::Tags::IncludeTag#blank?` method (#2625) + * Categories in the path are ignored (#2633) + +### Development Fixes + + * Refactoring Errors & Requires of Third-Party stuff (#2591) + * Add further tests for categories (#2584) + * Proof site with html-proofer on change (#2605) + * Fix up bug in #2605 which caused proofing the site not to function (#2608) + * Use `bundle exec` in `script/proof` (#2610) + +### Site Enhancements + + * Update Kramdown urls (#2588) + * Add `Jekyll::AutolinkEmail` and `Jekyll::GitMetadata` to the list of + third-party plugins (#2596) + * Fix a bunch of broken links in the site (#2601) + * Replace dead links with working links (#2611) + * Add jekyll-hook to deployment methods (#2617) + * Added kramdown-with-pygments plugin to the list of third-party plugins (#2623) + * Update outdated "Extras" page and remove duplicate documentation (#2622) + * Add co2 plugin to list of third-party plugins (#2639) + * Attempt to clarify the way Sass imports happen (#2642) + +## 2.1.1 / 2014-07-01 + +### Bug Fixes + + * Patch read vulnerabilities for data & confirm none for layouts (#2563) + * Update Maruku dependency to allow use of the latest version (#2576) + * Remove conditional assignment from document URL to prevent stale urls (#2575) + +### Site Enhancements + + * Add vertical margin to `highlight` to separate code blocks (#2558) + * Add `html_pages` to Variables docs (#2567) + * Fixed broken link to Permalinks page (#2572) + * Update link to Windows installation guide (#2578) + +## 2.1.0 / 2014-06-28 + +### Minor Enhancements + + * Bump to the latest Liquid version, 2.6.1 (#2495) + * Add support for JSON files in the `_data` directory (#2369) + * Allow subclasses to override `EXCERPT_ATTRIBUTES_FOR_LIQUID` (#2408) + * Add `Jekyll.env` and `jekyll.environment` (the Liquid var) (#2417) + * Use `_config.yaml` or `_config.yml` (`.yml` takes precedence) (#2406) + * Override collection url template (#2418) + * Allow subdirectories in `_data` (#2395) + * Extract Pagination Generator into gem: `jekyll-paginate` (#2455) + * Utilize `date_to_rfc822` filter in site template (#2437) + * Add categories, last build datetime, and generator to site template + feed (#2438) + * Configurable, replaceable Logger-compliant logger (#2444) + * Extract `gist` tag into a separate gem (#2469) + * Add `collection` attribute to `Document#to_liquid` to access the + document's collection label. (#2436) + * Upgrade listen to `2.7.6 <= x < 3.0.0` (#2492) + * Allow configuration of different Twitter and GitHub usernames in site template (#2485) + * Bump Pygments to v0.6.0 (#2504) + * Front matter defaults for documents in collections (#2419) + * Include files with a url which ends in `/` in the `site.html_pages` list (#2524) + * Make `highlight` tag use `language-` prefix in CSS class (#2511) + * Lookup item property via `item#to_liquid` before `#data` or `#[]` in filters (#2493) + * Skip initial build of site on serve with flag (#2477) + * Add support for `hl_lines` in `highlight` tag (#2532) + * Spike out `--watch` flag into a separate gem (#2550) + +### Bug Fixes + + * Liquid `sort` filter should sort even if one of the values is `nil` (#2345) + * Remove padding on `pre code` in the site template CSS (#2383) + * Set `log_level` earlier to silence info level configuration output (#2393) + * Only list pages which have `title` in site template (#2411) + * Accept `Numeric` values for dates, not `Number` values (#2377) + * Prevent code from overflowing container in site template (#2429) + * Encode URLs in UTF-8 when escaping and unescaping (#2420) + * No Layouts or Liquid for Asset Files (#2431) + * Allow front matter defaults to set post categories (#2373) + * Fix command in subcommand deprecation warning (#2457) + * Keep all parent directories of files/dirs in `keep_files` (#2458) + * When using RedCarpet and Rouge without Rouge installed, fixed erroneous + error which stated that redcarpet was missing, not rouge. (#2464) + * Ignore *all* directories and files that merit it on auto-generation (#2459) + * Before copying file, explicitly remove the old one (#2535) + * Merge file system categories with categories from YAML. (#2531) + * Deep merge front matter defaults (#2490) + * Ensure exclude and include arrays are arrays of strings (#2542) + * Allow collections to have dots in their filenames (#2552) + * Collections shouldn't try to read in directories as files (#2552) + * Be quiet very quickly. (#2520) + +### Development Fixes + + * Test Ruby 2.1.2 instead of 2.1.1 (#2374) + * Add test for sorting UTF-8 characters (#2384) + * Use `https` for GitHub links in documentation (#2470) + * Remove coverage reporting with Coveralls (#2494) + * Fix a bit of missing TomDoc to `Jekyll::Commands::Build#build` (#2554) + +### Site Enhancements + + * Set `timezone` to `America/Los_Angeles` (#2394) + * Improve JavaScript in `anchor_links.html` (#2368) + * Remove note on Quickstart page about default markdown converter (#2387) + * Remove broken link in extras.md to a Maruku fork (#2401) + * Update Font Awesome to v4.1.0. (#2410) + * Fix broken link on Installation page to Templates page (#2421) + * Prevent table from extending parent width in permalink style table (#2424) + * Add collections to info about pagination support (#2389) + * Add `jekyll_github_sample` plugin to list of third-party plugins (#2463) + * Clarify documentation around front matter defaults and add details + about defaults for collections. (#2439) + * Add Jekyll Project Version Tag to list of third-party plugins (#2468) + * Use `https` for GitHub links across whole site (#2470) + * Add StickerMule + Jekyll post (#2476) + * Add Jekyll Asset Pipeline Reborn to list of third-party plugins (#2479) + * Add link to jekyll-compress-html to list of third-party plugins (#2514) + * Add Piwigo Gallery to list of third-party plugins (#2526) + * Set `show_drafts` to `false` in default configuration listing (#2536) + * Provide an updated link for Windows installation instructions (#2544) + * Remove `url` from configuration docs (#2547) + * Documentation for Continuous Integration for your Jekyll Site (#2432) + +## 2.0.3 / 2014-05-08 + +### Bug Fixes + + * Properly prefix links in site template with URL or baseurl depending upon + need. (#2319) + * Update gist tag comments and error message to require username (#2326) + * Fix `permalink` setting in site template (#2331) + * Don't fail if any of the path objects are nil (#2325) + * Instantiate all descendants for converters and generators, not just + direct subclasses (#2334) + * Replace all instances of `site.name` with `site.title` in site template (#2324) + * `Jekyll::Filters#time` now accepts UNIX timestamps in string or number form (#2339) + * Use `item_property` for `where` filter so it doesn't break on collections (#2359) + * Rescue errors thrown so `--watch` doesn't fail (#2364) + +### Site Enhancements + + * Add missing "as" to assets docs page (#2337) + * Update docs to reflect new `baseurl` default (#2341) + * Add links to headers who have an ID. (#2342) + * Use symbol instead of HTML number in `upgrading.md` (#2351) + * Fix link to front matter defaults docs (#2353) + * Fix for `History.markdown` in order to fix history page in docs (#2363) + +## 2.0.2 / 2014-05-07 + +### Bug Fixes + + * Correct use of `url` and `baseurl` in the site template. (#2317) + * Default `baseurl` to `""` (#2317) + +### Site Enhancements + + * Correct docs for the `gist` plugin so it always includes the username. (#2314) + * Clarify new (defaults, `where` filter) features in docs (#2316) + +## 2.0.1 / 2014-05-06 + +### Bug Fixes + + * Require `kramdown` gem instead of `maruku` gem + +## 2.0.0 / 2014-05-06 + +### Major Enhancements + * Add "Collections" feature (#2199) + * Add gem-based plugin whitelist to safe mode (#1657) + * Replace the commander command line parser with a more robust + solution for our needs called `mercenary` (#1706) + * Remove support for Ruby 1.8.x (#1780) + * Move to jekyll/jekyll from mojombo/jekyll (#1817) + * Allow custom markdown processors (#1872) + * Provide support for the Rouge syntax highlighter (#1859) + * Provide support for Sass (#1932) + * Provide a 300% improvement when generating sites that use + `Post#next` or `Post#previous` (#1983) + * Provide support for CoffeeScript (#1991) + * Replace Maruku with Kramdown as Default Markdown Processor (#1988) + * Expose `site.static_files` to Liquid (#2075) + * Complete redesign of the template site generated by `jekyll new` (#2050) + * Update Listen from 1.x to 2.x (#2097) + * Front matter defaults (#2205) + * Deprecate `relative_permalinks` configuration option (default to `false`) (#2307) + * Exclude files based on prefix as well as `fnmatch?` (#2303) + +### Minor Enhancements + * Move the EntryFilter class into the Jekyll module to avoid polluting the + global namespace (#1800) + * Add `group_by` Liquid filter create lists of items grouped by a common + property's value (#1788) + * Add support for Maruku's `fenced_code_blocks` option (#1799) + * Update Redcarpet dependency to ~> 3.0 (#1815) + * Automatically sort all pages by name (#1848) + * Better error message when time is not parseable (#1847) + * Allow `include` tag variable arguments to use filters (#1841) + * `post_url` tag should raise `ArgumentError` for invalid name (#1825) + * Bump dependency `mercenary` to `~> 0.2.0` (#1879) + * Bump dependency `safe_yaml` to `~> 1.0` (#1886) + * Allow sorting of content by custom properties (#1849) + * Add `--quiet` flag to silence output during build and serve (#1898) + * Add a `where` filter to filter arrays based on a key/value pair + (#1875) + * Route 404 errors to a custom 404 page in development (#1899) + * Excludes are now relative to the site source (#1916) + * Bring MIME Types file for `jekyll serve` to complete parity with GH Pages + servers (#1993) + * Adding Breakpoint to make new site template more responsive (#2038) + * Default to using the UTF-8 encoding when reading files. (#2031) + * Update Redcarpet dependency to ~> 3.1 (#2044) + * Remove support for Ruby 1.9.2 (#2045) + * Add `.mkdown` as valid Markdown extension (#2048) + * Add `index.xml` to the list of WEBrick directory index files (#2041) + * Make the `layouts` config key relative to CWD or to source (#2058) + * Update Kramdown to `~> 1.3` (#1894) + * Remove unnecessary references to `self` (#2090) + * Update to Mercenary v0.3.x (#2085) + * Ship Sass support as a separate gem (#2098) + * Extract core extensions into a Utils module (#2112) + * Refactor CLI & Commands For Greater Happiness (#2143) + * Provide useful error when Pygments returns `nil` and error out (#2148) + * Add support for unpublished drafts (#2164) + * Add `force_polling` option to the `serve` command (#2165) + * Clean up the `
` in the site template (#2186) + * Permit YAML blocks to end with three dots to better conform with the + YAML spec (#2110) + * Use `File.exist?` instead of deprecated `File.exists?` (#2214) + * Require newline after start of YAML Front Matter header (#2211) + * Add the ability for pages to be marked as `published: false` (#1492) + * Add `Jekyll::LiquidExtensions` with `.lookup_variable` method for easy + looking up of variable values in a Liquid context. (#2253) + * Remove literal lang name from class (#2292) + * Return `utf-8` encoding in header for webrick error page response (#2289) + * Make template site easier to customize (#2268) + * Add two-digit year to permalink template option (#2301) + * Add `site.documents` to Liquid payload (list of all docs) (#2295) + * Take into account missing values in the Liquid sort filter (#2299) + +### Bug Fixes + * Don't allow nil entries when loading posts (#1796) + * Remove the scrollbar that's always displayed in new sites generated + from the site template (#1805) + * Add `#path` to required methods in `Jekyll::Convertible` (#1866) + * Default Maruku fenced code blocks to ON for 2.0.0-dev (#1831) + * Change short opts for host and port for `jekyll docs` to be consistent with + other subcommands (#1877) + * Fix typos (#1910) + * Lock Maruku at 0.7.0 to prevent bugs caused by Maruku 0.7.1 (#1958) + * Fixes full path leak to source directory when using include tag (#1951) + * Don't generate pages that aren't being published (#1931) + * Use `SafeYAML.load` to avoid conflicts with other projects (#1982) + * Relative posts should never fail to build (#1976) + * Remove executable bits of non executable files (#2056) + * `#path` for a draft is now `_drafts` instead of `_posts` (#2042) + * Patch a couple show-stopping security vulnerabilities (#1946) + * Sanitize paths uniformly, in a Windows-friendly way (#2065, #2109) + * Update gem build steps to work correctly on Windows (#2118) + * Remove obsolete `normalize_options` method call from `bin/jekyll` (#2121). + * Remove `+` characters from Pygments lexer names when adding as a CSS + class (#994) + * Remove some code that caused Ruby interpreter warnings (#2178) + * Only strip the drive name if it begins the string (#2175) + * Remove default post with invalid date from site template (#2200) + * Fix `Post#url` and `Page#url` escape (#1568) + * Strip newlines from the `{% highlight %}` block content (#1823) + * Load in `rouge` only when it's been requested as the highlighter (#2189) + * Convert input to string before XML escaping (`xml_escape` liquid filter) (#2244) + * Modify configuration key for Collections and reset properly. (#2238) + * Avoid duplicated output using `highlight` tag (#2264) + * Only use Jekyll.logger for output (#2307) + * Close the file descriptor in `has_yaml_header?` (#2310) + * Add `output` to `Document` liquid output hash (#2309) + +### Development Fixes + * Add a link to the site in the README.md file (#1795) + * Add in History and site changes from `v1-stable` branch (#1836) + * Testing additions on the Excerpt class (#1893) + * Fix the `highlight` tag feature (#1859) + * Test Jekyll under Ruby 2.1.0 (#1900) + * Add script/cibuild for fun and profit (#1912) + * Use `Forwardable` for delegation between `Excerpt` and `Post` + (#1927) + * Rename `read_things` to `read_content` (#1928) + * Add `script/branding` script for ASCII art lovin' (#1936) + * Update the README to reflect the repo move (#1943) + * Add the project vision to the README (#1935) + * Speed up Travis CI builds by using Rebund (#1985) + * Use Yarp as a Gem proxy for Travis CI (#1984) + * Remove Yarp as a Gem proxy for Travis CI (#2004) + * Move the reading of layouts into its own class (#2020) + * Test Sass import (#2009) + * Switch Maruku and Kramdown in lists of Runtime vs. Development dependencies (#2049) + * Clean up the gemspec for the project (#2095) + * Add Japanese translation of README and CONTRIBUTING docs. (#2081) + * Re-align the tables in Cucumber (#2108) + * Trim trailing spaces and convert tabs to spaces (#2122) + * Fix the failing Travis scenarios due to Cucumber issues (#2155) + * Wrap `bundle install` in `travis_retry` to retry when RubyGems fails (#2160) + * Refactor tags and categories (#1639) + * Extract plugin management into its own class (#2197) + * Add missing tests for `Command` (#2216) + * Update `rr` link in CONTRIBUTING doc (#2247) + * Streamline Cucumber execution of `jekyll` subcommands (#2258) + * Refactor `Commands::Serve`. (#2269) + * Refactor `highlight` tag (#2154) + * Update `Util` hash functions with latest from Rails (#2273) + * Workaround for Travis bug (#2290) + +### Site Enhancements + * Document Kramdown's GFM parser option (#1791) + * Move CSS to includes & update normalize.css to v2.1.3 (#1787) + * Minify CSS only in production (#1803) + * Fix broken link to installation of Ruby on Mountain Lion blog post on + Troubleshooting docs page (#1797) + * Fix issues with 1.4.1 release blog post (#1804) + * Add note about deploying to OpenShift (#1812) + * Collect all Windows-related docs onto one page (#1818) + * Fixed typo in datafiles doc page (#1854) + * Clarify how to access `site` in docs (#1864) + * Add closing `` tag to `context.registers[:site]` note (#1867)
+ * Fix link to @mojombo's site source (#1897)
+ * Add `paginate: nil` to default configuration in docs (#1896)
+ * Add link to our License in the site footer (#1889)
+ * Add a charset note in "Writing Posts" doc page (#1902)
+ * Disallow selection of path and prompt in bash examples
+ * Add jekyll-compass to the plugin list (#1923)
+ * Add note in Posts docs about stripping `` tags from excerpt (#1933)
+ * Add additional info about the new exclude behavior (#1938)
+ * Linkify 'awesome contributors' to point to the contributors graph on
+ GitHub (#1940)
+ * Update `docs/sites.md` link to GitHub Training materials (#1949)
+ * Update `master` with the release info from 1.4.3 (#1947)
+ * Define docs nav in datafile (#1953)
+ * Clarify the docs around the naming convention for posts (#1971)
+ * Add missing `next` and `previous` docs for post layouts and templates (#1970)
+ * Add note to `Writing posts` page about how to strip html from excerpt (#1962)
+ * Add `jekyll-humanize` plugin to plugin list (#1998)
+ * Add `jekyll-font-awesome` plugin to plugin list (#1999)
+ * Add `sublime-jekyll` to list of Editor plugins (#2001)
+ * Add `vim-jekyll` to the list of Editor plugins (#2005)
+ * Fix non-semantic nesting of `p` tags in `news_item` layout (#2013)
+ * Document destination folder cleaning (#2016)
+ * Updated instructions for NearlyFreeSpeech.NET installation (#2015)
+ * Update link to rack-jekyll on "Deployment Methods" page (#2047)
+ * Fix typo in /docs/configuration (#2073)
+ * Fix count in docs for `site.static_files` (#2077)
+ * Update configuration docs to indicate utf-8 is the default for 2.0.0
+ and ASCII for 1.9.3 (#2074)
+ * Add info about unreleased feature to the site (#2061)
+ * Add whitespace to liquid example in GitHub Pages docs (#2084)
+ * Clarify the way Sass and CoffeeScript files are read in and output (#2067)
+ * Add lyche gallery tag plugin link to list of plugins (#2094)
+ * Add Jekyll Pages Directory plugin to list of plugins (#2096)
+ * Update Configuration docs page with new markdown extension (#2102)
+ * Add `jekyll-image-set` to the list of third-party plugins (#2105)
+ * Losslessly compress images (#2128)
+ * Update normalize.css to 3.0.0 (#2126)
+ * Update modernizr to v2.7.1 (#2129)
+ * Add `jekyll-ordinal` to list of third-party plugins (#2150)
+ * Add `jekyll_figure` to list of third-party plugins (#2158)
+ * Clarify the documentation for safe mode (#2163)
+ * Some HTML tidying (#2130)
+ * Remove modernizr and use html5shiv.js directly for IE less than v9 (#2131)
+ * Remove unused images (#2187)
+ * Use `array_to_sentence_string` filter when outputting news item
+ categories (#2191)
+ * Add link to Help repo in primary navigation bar (#2177)
+ * Switch to using an ico file for the shortcut icon (#2193)
+ * Use numbers to specify font weights and only bring in font weights used (#2185)
+ * Add a link to the list of all tz database time zones (#1824)
+ * Clean-up and improve documentation `feed.xml` (#2192)
+ * Remove duplicate entry in list of third-party plugins (#2206)
+ * Reduce the whitespace in the favicon. (#2213)
+ * Add `jekyll-page-collections` to list of third-party plugins (#2215)
+ * Add a cross-reference about `post_url` (#2243)
+ * Add `jekyll-live-tiles` to list of third-party plugins (#2250)
+ * Fixed broken link to GitHub training material site source (#2257)
+ * Update link to help repo, now called `jekyll-help` (#2277)
+ * Fix capitalization of 'Jekyll' on Deployment Methods page (#2291)
+ * Include plugins by sonnym in list of third-party plugins (#2297)
+ * Add deprecated articles keeper filter to list of third-party plugins (#2300)
+ * Simplify and improve our CSS. (#2127)
+ * Use black text color for the mobile navbar (#2306)
+ * Use the built in date filter and `site.time` for the copyright year. (#2305)
+ * Update html5shiv to v3.7.2 (#2304)
+ * Add 2.0.0 release post (#2298)
+ * Add docs for custom markdown processors (#2298)
+ * Add docs for `where` and `group_by` Liquid filters (#2298)
+ * Remove notes in docs for unreleased features (#2309)
+
+## 1.5.1 / 2014-03-27
+
+### Bug Fixes
+
+ * Only strip the drive name if it begins the string (#2176)
+
+## 1.5.0 / 2014-03-24
+
+### Minor Enhancements
+
+ * Loosen `safe_yaml` dependency to `~> 1.0` (#2167)
+ * Bump `safe_yaml` dependency to `~> 1.0.0` (#1942)
+
+### Bug Fixes
+
+ * Fix issue where filesystem traversal restriction broke Windows (#2167)
+ * Lock `maruku` at `0.7.0` (#2167)
+
+### Development Fixes
+
+ * Lock `cucumber` at `1.3.11` (#2167)
+
+## 1.4.3 / 2014-01-13
+
+### Bug Fixes
+ * Patch show-stopping security vulnerabilities (#1944)
+
+## 1.4.2 / 2013-12-16
+
+### Bug Fixes
+ * Turn on Maruku fenced code blocks by default (#1830)
+
+## 1.4.1 / 2013-12-09
+
+### Bug Fixes
+ * Don't allow nil entries when loading posts (#1796)
+
+## 1.4.0 / 2013-12-07
+
+### Major Enhancements
+ * Add support for TOML config files (#1765)
+
+### Minor Enhancements
+ * Sort plugins as a way to establish a load order (#1682)
+ * Update Maruku to 0.7.0 (#1775)
+
+### Bug Fixes
+ * Add a space between two words in a Pagination warning message (#1769)
+ * Upgrade `toml` gem to `v0.1.0` to maintain compat with Ruby 1.8.7 (#1778)
+
+### Development Fixes
+ * Remove some whitespace in the code (#1755)
+ * Remove some duplication in the reading of posts and drafts (#1779)
+
+### Site Enhancements
+ * Fixed case of a word in the Jekyll v1.3.0 release post (#1762)
+ * Fixed the mime type for the favicon (#1772)
+
+## 1.3.1 / 2013-11-26
+
+### Minor Enhancements
+ * Add a `--prefix` option to passthrough for the importers (#1669)
+ * Push the paginator plugin lower in the plugin priority order so
+ other plugins run before it (#1759)
+
+### Bug Fixes
+ * Fix the include tag when ran in a loop (#1726)
+ * Fix errors when using `--watch` on 1.8.7 (#1730)
+ * Specify where the include is called from if an included file is
+ missing (#1746)
+
+### Development Fixes
+ * Extract `Site#filter_entries` into its own object (#1697)
+ * Enable Travis' bundle caching (#1734)
+ * Remove trailing whitespace in some files (#1736)
+ * Fix a duplicate test name (#1754)
+
+### Site Enhancements
+ * Update link to example Rakefile to point to specific commit (#1741)
+ * Fix drafts docs to indicate that draft time is based on file modification
+ time, not `Time.now` (#1695)
+ * Add `jekyll-monthly-archive-plugin` and `jekyll-category-archive-plugin` to
+ list of third-party plugins (#1693)
+ * Add `jekyll-asset-path-plugin` to list of third-party plugins (#1670)
+ * Add `emoji-for-jekyll` to list of third-part plugins (#1708)
+ * Fix previous section link on plugins page to point to pagination page (#1707)
+ * Add `org-mode` converter plugin to third-party plugins (#1711)
+ * Point "Blog migrations" page to http://import.jekyllrb.com (#1732)
+ * Add docs for `post_url` when posts are in subdirectories (#1718)
+ * Update the docs to point to `example.com` (#1448)
+
+## 1.3.0 / 2013-11-04
+
+### Major Enhancements
+ * Add support for adding data as YAML files under a site's `_data`
+ directory (#1003)
+ * Allow variables to be used with `include` tags (#1495)
+ * Allow using gems for plugin management (#1557)
+
+### Minor Enhancements
+ * Decrease the specificity in the site template CSS (#1574)
+ * Add `encoding` configuration option (#1449)
+ * Provide better error handling for Jekyll's custom Liquid tags
+ (#1514)
+ * If an included file causes a Liquid error, add the path to the
+ include file that caused the error to the error message (#1596)
+ * If a layout causes a Liquid error, change the error message so that
+ we know it comes from the layout (#1601)
+ * Update Kramdown dependency to `~> 1.2` (#1610)
+ * Update `safe_yaml` dependency to `~> 0.9.7` (#1602)
+ * Allow layouts to be in subfolders like includes (#1622)
+ * Switch to listen for site watching while serving (#1589)
+ * Add a `json` liquid filter to be used in sites (#1651)
+ * Point people to the migration docs when the `jekyll-import` gem is
+ missing (#1662)
+
+### Bug Fixes
+ * Fix up matching against source and destination when the two
+ locations are similar (#1556)
+ * Fix the missing `pathname` require in certain cases (#1255)
+ * Use `+` instead of `Array#concat` when building `Post` attribute list (#1571)
+ * Print server address when launching a server (#1586)
+ * Downgrade to Maruku `~> 0.6.0` in order to avoid changes in rendering (#1598)
+ * Fix error with failing include tag when variable was file name (#1613)
+ * Downcase lexers before passing them to pygments (#1615)
+ * Capitalize the short verbose switch because it conflicts with the
+ built-in Commander switch (#1660)
+ * Fix compatibility with 1.8.x (#1665)
+ * Fix an error with the new file watching code due to library version
+ incompatibilities (#1687)
+
+### Development Fixes
+ * Add coverage reporting with Coveralls (#1539)
+ * Refactor the Liquid `include` tag (#1490)
+ * Update launchy dependency to `~> 2.3` (#1608)
+ * Update rr dependency to `~> 1.1` (#1604)
+ * Update cucumber dependency to `~> 1.3` (#1607)
+ * Update coveralls dependency to `~> 0.7.0` (#1606)
+ * Update rake dependency to `~> 10.1` (#1603)
+ * Clean up `site.rb` comments to be more concise/uniform (#1616)
+ * Use the master branch for the build badge in the readme (#1636)
+ * Refactor Site#render (#1638)
+ * Remove duplication in command line options (#1637)
+ * Add tests for all the coderay options (#1543)
+ * Improve some of the Cucumber test code (#1493)
+ * Improve comparisons of timestamps by ignoring the seconds (#1582)
+
+### Site Enhancements
+ * Fix params for `JekyllImport::WordPress.process` arguments (#1554)
+ * Add `jekyll-suggested-tweet` to list of third-party plugins (#1555)
+ * Link to Liquid's docs for tags and filters (#1553)
+ * Add note about installing Xcode on the Mac in the Installation docs (#1561)
+ * Simplify/generalize pagination docs (#1577)
+ * Add documentation for the new data sources feature (#1503)
+ * Add more information on how to create generators (#1590, #1592)
+ * Improve the instructions for mimicking GitHub Flavored Markdown
+ (#1614)
+ * Add `jekyll-import` warning note of missing dependencies (#1626)
+ * Fix grammar in the Usage section (#1635)
+ * Add documentation for the use of gems as plugins (#1656)
+ * Document the existence of a few additional plugins (#1405)
+ * Document that the `date_to_string` always returns a two digit day (#1663)
+ * Fix navigation in the "Working with Drafts" page (#1667)
+ * Fix an error with the data documentation (#1691)
+
+## 1.2.1 / 2013-09-14
+
+### Minor Enhancements
+ * Print better messages for detached server. Mute output on detach. (#1518)
+ * Disable reverse lookup when running `jekyll serve` (#1363)
+ * Upgrade RedCarpet dependency to `~> 2.3.0` (#1515)
+ * Upgrade to Liquid `>= 2.5.2, < 2.6` (#1536)
+
+### Bug Fixes
+ * Fix file discrepancy in gemspec (#1522)
+ * Force rendering of Include tag (#1525)
+
+### Development Fixes
+ * Add a rake task to generate a new release post (#1404)
+ * Mute LSI output in tests (#1531)
+ * Update contributor documentation (#1537)
+
+### Site Enhancements
+ * Fix a couple of validation errors on the site (#1511)
+ * Make navigation menus reusable (#1507)
+ * Fix link to History page from Release v1.2.0 notes post.
+ * Fix markup in History file for command line options (#1512)
+ * Expand 1.2 release post title to 1.2.0 (#1516)
+
+## 1.2.0 / 2013-09-06
+
+### Major Enhancements
+ * Disable automatically-generated excerpts when `excerpt_separator` is `""`. (#1386)
+ * Add checking for URL conflicts when running `jekyll doctor` (#1389)
+
+### Minor Enhancements
+ * Catch and fix invalid `paginate` values (#1390)
+ * Remove superfluous `div.container` from the default html template for
+ `jekyll new` (#1315)
+ * Add `-D` short-form switch for the drafts option (#1394)
+ * Update the links in the site template for Twitter and GitHub (#1400)
+ * Update dummy email address to example.com domain (#1408)
+ * Update normalize.css to v2.1.2 and minify; add rake task to update
+ normalize.css with greater ease. (#1430)
+ * Add the ability to detach the server ran by `jekyll serve` from it's
+ controlling terminal (#1443)
+ * Improve permalink generation for URLs with special characters (#944)
+ * Expose the current Jekyll version to posts and pages via a new
+ `jekyll.version` variable (#1481)
+
+### Bug Fixes
+ * Markdown extension matching matches only exact matches (#1382)
+ * Fixed NoMethodError when message passed to `Stevenson#message` is nil (#1388)
+ * Use binary mode when writing file (#1364)
+ * Fix 'undefined method `encoding` for "mailto"' errors w/ Ruby 1.8 and
+ Kramdown > 0.14.0 (#1397)
+ * Do not force the permalink to be a dir if it ends on .html (#963)
+ * When a Liquid Exception is caught, show the full path rel. to site source (#1415)
+ * Properly read in the config options when serving the docs locally
+ (#1444)
+ * Fixed `--layouts` option for `build` and `serve` commands (#1458)
+ * Remove kramdown as a runtime dependency since it's optional (#1498)
+ * Provide proper error handling for invalid file names in the include
+ tag (#1494)
+
+### Development Fixes
+ * Remove redundant argument to
+ Jekyll::Commands::New#scaffold_post_content (#1356)
+ * Add new dependencies to the README (#1360)
+ * Fix link to contributing page in README (#1424)
+ * Update TomDoc in Pager#initialize to match params (#1441)
+ * Refactor `Site#cleanup` into `Jekyll::Site::Cleaner` class (#1429)
+ * Several other small minor refactorings (#1341)
+ * Ignore `_site` in jekyllrb.com deploy (#1480)
+ * Add Gem version and dependency badge to README (#1497)
+
+### Site Enhancements
+ * Add info about new releases (#1353)
+ * Update plugin list with jekyll-rss plugin (#1354)
+ * Update the site list page with Ruby's official site (#1358)
+ * Add `jekyll-ditaa` to list of third-party plugins (#1370)
+ * Add `postfiles` to list of third-party plugins (#1373)
+ * For internal links, use full path including trailing `/` (#1411)
+ * Use curly apostrophes in the docs (#1419)
+ * Update the docs for Redcarpet in Jekyll (#1418)
+ * Add `pluralize` and `reading_time` filters to docs (#1439)
+ * Fix markup for the Kramdown options (#1445)
+ * Fix typos in the History file (#1454)
+ * Add trailing slash to site's post URL (#1462)
+ * Clarify that `--config` will take multiple files (#1474)
+ * Fix docs/templates.md private gist example (#1477)
+ * Use `site.repository` for Jekyll's GitHub URL (#1463)
+ * Add `jekyll-pageless-redirects` to list of third-party plugins (#1486)
+ * Clarify that `date_to_xmlschema` returns an ISO 8601 string (#1488)
+ * Add `jekyll-good-include` to list of third-party plugins (#1491)
+ * XML escape the blog post title in our feed (#1501)
+ * Add `jekyll-toc-generator` to list of third-party plugins (#1506)
+
+## 1.1.2 / 2013-07-25
+
+### Bug Fixes
+ * Require Liquid 2.5.1 (#1349)
+
+## 1.1.1 / 2013-07-24
+
+### Minor Enhancements
+ * Remove superfluous `table` selector from main.css in `jekyll new` template (#1328)
+ * Abort with non-zero exit codes (#1338)
+
+### Bug Fixes
+ * Fix up the rendering of excerpts (#1339)
+
+### Site Enhancements
+ * Add Jekyll Image Tag to the plugins list (#1306)
+ * Remove erroneous statement that `site.pages` are sorted alphabetically.
+ * Add info about the `_drafts` directory to the directory structure
+ docs (#1320)
+ * Improve the layout of the plugin listing by organizing it into
+ categories (#1310)
+ * Add generator-jekyllrb and grunt-jekyll to plugins page (#1330)
+ * Mention Kramdown as option for markdown parser on Extras page (#1318)
+ * Update Quick-Start page to include reminder that all requirements must be installed (#1327)
+ * Change filename in `include` example to an HTML file so as not to indicate that Jekyll
+ will automatically convert them. (#1303)
+ * Add an RSS feed for commits to Jekyll (#1343)
+
+## 1.1.0 / 2013-07-14
+
+### Major Enhancements
+ * Add `docs` subcommand to read Jekyll's docs when offline. (#1046)
+ * Support passing parameters to templates in `include` tag (#1204)
+ * Add support for Liquid tags to post excerpts (#1302)
+
+### Minor Enhancements
+ * Search the hierarchy of pagination path up to site root to determine template page for
+ pagination. (#1198)
+ * Add the ability to generate a new Jekyll site without a template (#1171)
+ * Use redcarpet as the default markdown engine in newly generated
+ sites (#1245, #1247)
+ * Add `redcarpet` as a runtime dependency so `jekyll build` works out-of-the-box for new
+ sites. (#1247)
+ * In the generated site, remove files that will be replaced by a
+ directory (#1118)
+ * Fail loudly if a user-specified configuration file doesn't exist (#1098)
+ * Allow for all options for Kramdown HTML Converter (#1201)
+
+### Bug Fixes
+ * Fix pagination in subdirectories. (#1198)
+ * Fix an issue with directories and permalinks that have a plus sign
+ (+) in them (#1215)
+ * Provide better error reporting when generating sites (#1253)
+ * Latest posts first in non-LSI `related_posts` (#1271)
+
+### Development Fixes
+ * Merge the theme and layout Cucumber steps into one step (#1151)
+ * Restrict activesupport dependency to pre-4.0.0 to maintain compatibility with `<= 1.9.2`
+ * Include/exclude deprecation handling simplification (#1284)
+ * Convert README to Markdown. (#1267)
+ * Refactor Jekyll::Site (#1144)
+
+### Site Enhancements
+ * Add "News" section for release notes, along with an RSS feed (#1093, #1285, #1286)
+ * Add "History" page.
+ * Restructured docs sections to include "Meta" section.
+ * Add message to "Templates" page that specifies that Python must be installed in order
+ to use Pygments. (#1182)
+ * Update link to the official Maruku repo (#1175)
+ * Add documentation about `paginate_path` to "Templates" page in docs (#1129)
+ * Give the quick-start guide its own page (#1191)
+ * Update ProTip on Installation page in docs to point to all the info about Pygments and
+ the 'highlight' tag. (#1196)
+ * Run `site/img` through ImageOptim (thanks @qrush!) (#1208)
+ * Added Jade Converter to `site/docs/plugins` (#1210)
+ * Fix location of docs pages in Contributing pages (#1214)
+ * Add ReadInXMinutes plugin to the plugin list (#1222)
+ * Remove plugins from the plugin list that have equivalents in Jekyll
+ proper (#1223)
+ * Add jekyll-assets to the plugin list (#1225)
+ * Add jekyll-pandoc-mulitple-formats to the plugin list (#1229)
+ * Remove dead link to "Using Git to maintain your blog" (#1227)
+ * Tidy up the third-party plugins listing (#1228)
+ * Update contributor information (#1192)
+ * Update URL of article about Blogger migration (#1242)
+ * Specify that RedCarpet is the default for new Jekyll sites on Quickstart page (#1247)
+ * Added `site.pages` to Variables page in docs (#1251)
+ * Add Youku and Tudou Embed link on Plugins page. (#1250)
+ * Add note that `gist` tag supports private gists. (#1248)
+ * Add `jekyll-timeago` to list of third-party plugins. (#1260)
+ * Add `jekyll-swfobject` to list of third-party plugins. (#1263)
+ * Add `jekyll-picture-tag` to list of third-party plugins. (#1280)
+ * Update the GitHub Pages documentation regarding relative URLs
+ (#1291)
+ * Update the S3 deployment documentation (#1294)
+ * Add suggestion for Xcode CLT install to troubleshooting page in docs (#1296)
+ * Add 'Working with drafts' page to docs (#1289)
+ * Add information about time zones to the documentation for a page's
+ date (#1304)
+
+## 1.0.3 / 2013-06-07
+
+### Minor Enhancements
+ * Add support to gist tag for private gists. (#1189)
+ * Fail loudly when Maruku errors out (#1190)
+ * Move the building of related posts into their own class (#1057)
+ * Removed trailing spaces in several places throughout the code (#1116)
+ * Add a `--force` option to `jekyll new` (#1115)
+ * Convert IDs in the site template to classes (#1170)
+
+### Bug Fixes
+ * Fix typo in Stevenson constant "ERROR". (#1166)
+ * Rename Jekyll::Logger to Jekyll::Stevenson to fix inheritance issue (#1106)
+ * Exit with a non-zero exit code when dealing with a Liquid error (#1121)
+ * Make the `exclude` and `include` options backwards compatible with
+ versions of Jekyll prior to 1.0 (#1114)
+ * Fix pagination on Windows (#1063)
+ * Fix the application of Pygments' Generic Output style to Go code
+ (#1156)
+
+### Site Enhancements
+ * Add a Pro Tip to docs about front matter variables being optional (#1147)
+ * Add changelog to site as History page in /docs/ (#1065)
+ * Add note to Upgrading page about new config options in 1.0.x (#1146)
+ * Documentation for `date_to_rfc822` and `uri_escape` (#1142)
+ * Documentation highlight boxes shouldn't show scrollbars if not necessary (#1123)
+ * Add link to jekyll-minibundle in the doc's plugins list (#1035)
+ * Quick patch for importers documentation
+ * Fix prefix for WordpressDotCom importer in docs (#1107)
+ * Add jekyll-contentblocks plugin to docs (#1068)
+ * Make code bits in notes look more natural, more readable (#1089)
+ * Fix logic for `relative_permalinks` instructions on Upgrading page (#1101)
+ * Add docs for post excerpt (#1072)
+ * Add docs for gist tag (#1072)
+ * Add docs indicating that Pygments does not need to be installed
+ separately (#1099, #1119)
+ * Update the migrator docs to be current (#1136)
+ * Add the Jekyll Gallery Plugin to the plugin list (#1143)
+
+### Development Fixes
+ * Use Jekyll.logger instead of Jekyll::Stevenson to log things (#1149)
+ * Fix pesky Cucumber infinite loop (#1139)
+ * Do not write posts with timezones in Cucumber tests (#1124)
+ * Use ISO formatted dates in Cucumber features (#1150)
+
+## 1.0.2 / 2013-05-12
+
+### Major Enhancements
+ * Add `jekyll doctor` command to check site for any known compatibility problems (#1081)
+ * Backwards-compatibilize relative permalinks (#1081)
+
+### Minor Enhancements
+ * Add a `data-lang=""` attribute to Redcarpet code blocks (#1066)
+ * Deprecate old config `server_port`, match to `port` if `port` isn't set (#1084)
+ * Update pygments.rb version to 0.5.0 (#1061)
+ * Update Kramdown version to 1.0.2 (#1067)
+
+### Bug Fixes
+ * Fix issue when categories are numbers (#1078)
+ * Catching that Redcarpet gem isn't installed (#1059)
+
+### Site Enhancements
+ * Add documentation about `relative_permalinks` (#1081)
+ * Remove pygments-installation instructions, as pygments.rb is bundled with it (#1079)
+ * Move pages to be Pages for realz (#985)
+ * Updated links to Liquid documentation (#1073)
+
+## 1.0.1 / 2013-05-08
+
+### Minor Enhancements
+ * Do not force use of `toc_token` when using `generate_tok` in RDiscount (#1048)
+ * Add newer `language-` class name prefix to code blocks (#1037)
+ * Commander error message now preferred over process abort with incorrect args (#1040)
+
+### Bug Fixes
+ * Make Redcarpet respect the pygments configuration option (#1053)
+ * Fix the index build with LSI (#1045)
+ * Don't print deprecation warning when no arguments are specified. (#1041)
+ * Add missing `` to site template used by `new` subcommand, fixed typos in code (#1032)
+
+### Site Enhancements
+ * Changed https to http in the GitHub Pages link (#1051)
+ * Remove CSS cruft, fix typos, fix HTML errors (#1028)
+ * Removing manual install of Pip and Distribute (#1025)
+ * Updated URL for Markdown references plugin (#1022)
+
+### Development Fixes
+ * Markdownify history file (#1027)
+ * Update links on README to point to new jekyllrb.com (#1018)
+
+## 1.0.0 / 2013-05-06
+
+### Major Enhancements
+ * Add `jekyll new` subcommand: generate a Jekyll scaffold (#764)
+ * Refactored Jekyll commands into subcommands: build, serve, and migrate. (#690)
+ * Removed importers/migrators from main project, migrated to jekyll-import sub-gem (#793)
+ * Added ability to render drafts in `_drafts` folder via command line (#833)
+ * Add ordinal date permalink style (/:categories/:year/:y_day/:title.html) (#928)
+
+### Minor Enhancements
+ * Site template HTML5-ified (#964)
+ * Use post's directory path when matching for the `post_url` tag (#998)
+ * Loosen dependency on Pygments so it's only required when it's needed (#1015)
+ * Parse strings into Time objects for date-related Liquid filters (#1014)
+ * Tell the user if there is no subcommand specified (#1008)
+ * Freak out if the destination of `jekyll new` exists and is non-empty (#981)
+ * Add `timezone` configuration option for compilation (#957)
+ * Add deprecation messages for pre-1.0 CLI options (#959)
+ * Refactor and colorize logging (#959)
+ * Refactor Markdown parsing (#955)
+ * Added application/vnd.apple.pkpass to mime.types served by WEBrick (#907)
+ * Move template site to default markdown renderer (#961)
+ * Expose new attribute to Liquid via `page`: `page.path` (#951)
+ * Accept multiple config files from command line (#945)
+ * Add page variable to liquid custom tags and blocks (#413)
+ * Add `paginator.previous_page_path` and `paginator.next_page_path` (#942)
+ * Backwards compatibility for 'auto' (#821, #934)
+ * Added date_to_rfc822 used on RSS feeds (#892)
+ * Upgrade version of pygments.rb to 0.4.2 (#927)
+ * Added short month (e.g. "Sep") to permalink style options for posts (#890)
+ * Expose site.baseurl to Liquid templates (#869)
+ * Adds excerpt attribute to posts which contains first paragraph of content (#837)
+ * Accept custom configuration file via CLI (#863)
+ * Load in GitHub Pages MIME Types on `jekyll serve` (#847, #871)
+ * Improve debugability of error message for a malformed highlight tag (#785)
+ * Allow symlinked files in unsafe mode (#824)
+ * Add 'gist' Liquid tag to core (#822, #861)
+ * New format of Jekyll output (#795)
+ * Reinstate `--limit_posts` and `--future` switches (#788)
+ * Remove ambiguity from command descriptions (#815)
+ * Fix SafeYAML Warnings (#807)
+ * Relaxed Kramdown version to 0.14 (#808)
+ * Aliased `jekyll server` to `jekyll serve`. (#792)
+ * Updated gem versions for Kramdown, Rake, Shoulda, Cucumber, and RedCarpet. (#744)
+ * Refactored Jekyll subcommands into Jekyll::Commands submodule, which now contains them (#768)
+ * Rescue from import errors in Wordpress.com migrator (#671)
+ * Massively accelerate LSI performance (#664)
+ * Truncate post slugs when importing from Tumblr (#496)
+ * Add glob support to include, exclude option (#743)
+ * Layout of Page or Post defaults to 'page' or 'post', respectively (#580)
+ REPEALED by (#977)
+ * "Keep files" feature (#685)
+ * Output full path & name for files that don't parse (#745)
+ * Add source and destination directory protection (#535)
+ * Better YAML error message (#718)
+ * Bug Fixes
+ * Paginate in subdirectories properly (#1016)
+ * Ensure post and page URLs have a leading slash (#992)
+ * Catch all exceptions, not just StandardError descendents (#1007)
+ * Bullet-proof `limit_posts` option (#1004)
+ * Read in YAML as UTF-8 to accept non-ASCII chars (#836)
+ * Fix the CLI option `--plugins` to actually accept dirs and files (#993)
+ * Allow 'excerpt' in YAML front matter to override the extracted excerpt (#946)
+ * Fix cascade problem with site.baseurl, site.port and site.host. (#935)
+ * Filter out directories with valid post names (#875)
+ * Fix symlinked static files not being correctly built in unsafe mode (#909)
+ * Fix integration with directory_watcher 1.4.x (#916)
+ * Accepting strings as arguments to jekyll-import command (#910)
+ * Force usage of older directory_watcher gem as 1.5 is broken (#883)
+ * Ensure all Post categories are downcase (#842, #872)
+ * Force encoding of the rdiscount TOC to UTF8 to avoid conversion errors (#555)
+ * Patch for multibyte URI problem with `jekyll serve` (#723)
+ * Order plugin execution by priority (#864)
+ * Fixed Page#dir and Page#url for edge cases (#536)
+ * Fix broken `post_url` with posts with a time in their YAML front matter (#831)
+ * Look for plugins under the source directory (#654)
+ * Tumblr Migrator: finds `_posts` dir correctly, fixes truncation of long
+ post names (#775)
+ * Force Categories to be Strings (#767)
+ * Safe YAML plugin to prevent vulnerability (#777)
+ * Add SVG support to Jekyll/WEBrick. (#407, #406)
+ * Prevent custom destination from causing continuous regen on watch (#528, #820, #862)
+
+### Site Enhancements
+ * Responsify (#860)
+ * Fix spelling, punctuation and phrasal errors (#989)
+ * Update quickstart instructions with `new` command (#966)
+ * Add docs for page.excerpt (#956)
+ * Add docs for page.path (#951)
+ * Clean up site docs to prepare for 1.0 release (#918)
+ * Bring site into master branch with better preview/deploy (#709)
+ * Redesigned site (#583)
+
+### Development Fixes
+ * Exclude Cucumber 1.2.4, which causes tests to fail in 1.9.2 (#938)
+ * Added "features:html" rake task for debugging purposes, cleaned up
+ Cucumber profiles (#832)
+ * Explicitly require HTTPS rubygems source in Gemfile (#826)
+ * Changed Ruby version for development to 1.9.3-p374 from p362 (#801)
+ * Including a link to the GitHub Ruby style guide in CONTRIBUTING.md (#806)
+ * Added script/bootstrap (#776)
+ * Running Simplecov under 2 conditions: ENV(COVERAGE)=true and with Ruby version
+ of greater than 1.9 (#771)
+ * Switch to Simplecov for coverage report (#765)
+
+## 0.12.1 / 2013-02-19
+
+### Minor Enhancements
+ * Update Kramdown version to 0.14.1 (#744)
+ * Test Enhancements
+ * Update Rake version to 10.0.3 (#744)
+ * Update Shoulda version to 3.3.2 (#744)
+ * Update Redcarpet version to 2.2.2 (#744)
+
+## 0.12.0 / 2012-12-22
+
+### Minor Enhancements
+ * Add ability to explicitly specify included files (#261)
+ * Add `--default-mimetype` option (#279)
+ * Allow setting of RedCloth options (#284)
+ * Add `post_url` Liquid tag for internal post linking (#369)
+ * Allow multiple plugin dirs to be specified (#438)
+ * Inline TOC token support for RDiscount (#333)
+ * Add the option to specify the paginated url format (#342)
+ * Swap out albino for pygments.rb (#569)
+ * Support Redcarpet 2 and fenced code blocks (#619)
+ * Better reporting of Liquid errors (#624)
+ * Bug Fixes
+ * Allow some special characters in highlight names
+ * URL escape category names in URL generation (#360)
+ * Fix error with `limit_posts` (#442)
+ * Properly select dotfile during directory scan (#363, #431, #377)
+ * Allow setting of Kramdown `smart_quotes` (#482)
+ * Ensure front matter is at start of file (#562)
+
+## 0.11.2 / 2011-12-27
+ * Bug Fixes
+ * Fix gemspec
+
+## 0.11.1 / 2011-12-27
+ * Bug Fixes
+ * Fix extra blank line in highlight blocks (#409)
+ * Update dependencies
+
+## 0.11.0 / 2011-07-10
+
+### Major Enhancements
+ * Add command line importer functionality (#253)
+ * Add Redcarpet Markdown support (#318)
+ * Make markdown/textile extensions configurable (#312)
+ * Add `markdownify` filter
+
+### Minor Enhancements
+ * Switch to Albino gem
+ * Bundler support
+ * Use English library to avoid hoops (#292)
+ * Add Posterous importer (#254)
+ * Fixes for Wordpress importer (#274, #252, #271)
+ * Better error message for invalid post date (#291)
+ * Print formatted fatal exceptions to stdout on build failure
+ * Add Tumblr importer (#323)
+ * Add Enki importer (#320)
+ * Bug Fixes
+ * Secure additional path exploits
+
+## 0.10.0 / 2010-12-16
+ * Bug Fixes
+ * Add `--no-server` option.
+
+## 0.9.0 / 2010-12-15
+
+### Minor Enhancements
+ * Use OptionParser's `[no-]` functionality for better boolean parsing.
+ * Add Drupal migrator (#245)
+ * Complain about YAML and Liquid errors (#249)
+ * Remove orphaned files during regeneration (#247)
+ * Add Marley migrator (#28)
+
+## 0.8.0 / 2010-11-22
+
+### Minor Enhancements
+ * Add wordpress.com importer (#207)
+ * Add `--limit-posts` cli option (#212)
+ * Add `uri_escape` filter (#234)
+ * Add `--base-url` cli option (#235)
+ * Improve MT migrator (#238)
+ * Add kramdown support (#239)
+ * Bug Fixes
+ * Fixed filename basename generation (#208)
+ * Set mode to UTF8 on Sequel connections (#237)
+ * Prevent `_includes` dir from being a symlink
+
+## 0.7.0 / 2010-08-24
+
+### Minor Enhancements
+ * Add support for rdiscount extensions (#173)
+ * Bug Fixes
+ * Highlight should not be able to render local files
+ * The site configuration may not always provide a 'time' setting (#184)
+
+## 0.6.2 / 2010-06-25
+ * Bug Fixes
+ * Fix Rakefile 'release' task (tag pushing was missing origin)
+ * Ensure that RedCloth is loaded when textilize filter is used (#183)
+ * Expand source, destination, and plugin paths (#180)
+ * Fix `page.url` to include full relative path (#181)
+
+## 0.6.1 / 2010-06-24
+ * Bug Fixes
+ * Fix Markdown Pygments prefix and suffix (#178)
+
+## 0.6.0 / 2010-06-23
+
+### Major Enhancements
+ * Proper plugin system (#19, #100)
+ * Add safe mode so unsafe converters/generators can be added
+ * Maruku is now the only processor dependency installed by default.
+ Other processors will be lazy-loaded when necessary (and prompt the
+ user to install them when necessary) (#57)
+
+### Minor Enhancements
+ * Inclusion/exclusion of future dated posts (#59)
+ * Generation for a specific time (#59)
+ * Allocate `site.time` on render not per site_payload invocation (#59)
+ * Pages now present in the site payload and can be used through the
+ `site.pages` and `site.html_pages` variables
+ * Generate phase added to site#process and pagination is now a generator
+ * Switch to RakeGem for build/test process
+ * Only regenerate static files when they have changed (#142)
+ * Allow arbitrary options to Pygments (#31)
+ * Allow URL to be set via command line option (#147)
+ * Bug Fixes
+ * Render highlighted code for non markdown/textile pages (#116)
+ * Fix highlighting on Ruby 1.9 (#65)
+ * Fix extension munging when pretty permalinks are enabled (#64)
+ * Stop sorting categories (#33)
+ * Preserve generated attributes over front matter (#119)
+ * Fix source directory binding using `Dir.pwd` (#75)
+
+## 0.5.7 / 2010-01-12
+
+### Minor Enhancements
+ * Allow overriding of post date in the front matter (#62, #38)
+ * Bug Fixes
+ * Categories isn't always an array (#73)
+ * Empty tags causes error in read_posts (#84)
+ * Fix pagination to adhere to read/render/write paradigm
+ * Test Enhancement
+ * Cucumber features no longer use site.posts.first where a better
+ alternative is available
+
+## 0.5.6 / 2010-01-08
+ * Bug Fixes
+ * Require redcloth >= 4.2.1 in tests (#92)
+ * Don't break on triple dashes in yaml front matter (#93)
+
+### Minor Enhancements
+ * Allow .mkd as markdown extension
+ * Use $stdout/err instead of constants (#99)
+ * Properly wrap code blocks (#91)
+ * Add javascript mime type for webrick (#98)
+
+## 0.5.5 / 2010-01-08
+ * Bug Fixes
+ * Fix pagination % 0 bug (#78)
+ * Ensure all posts are processed first (#71)
+
+## NOTE
+ * After this point I will no longer be giving credit in the history;
+ that is what the commit log is for.
+
+## 0.5.4 / 2009-08-23
+ * Bug Fixes
+ * Do not allow symlinks (security vulnerability)
+
+## 0.5.3 / 2009-07-14
+ * Bug Fixes
+ * Solving the permalink bug where non-html files wouldn't work
+ (@jeffrydegrande)
+
+## 0.5.2 / 2009-06-24
+ * Enhancements
+ * Added --paginate option to the executable along with a paginator object
+ for the payload (@calavera)
+ * Upgraded RedCloth to 4.2.1, which makes `` tags work once
+ again.
+ * Configuration options set in config.yml are now available through the
+ site payload (@vilcans)
+ * Posts can now have an empty YAML front matter or none at all
+ (@ bahuvrihi)
+ * Bug Fixes
+ * Fixing Ruby 1.9 issue that requires `#to_s` on the err object
+ (@Chrononaut)
+ * Fixes for pagination and ordering posts on the same day (@ujh)
+ * Made pages respect permalinks style and permalinks in yml front matter
+ (@eugenebolshakov)
+ * Index.html file should always have index.html permalink
+ (@eugenebolshakov)
+ * Added trailing slash to pretty permalink style so Apache is happy
+ (@eugenebolshakov)
+ * Bad markdown processor in config fails sooner and with better message
+ (@ gcnovus)
+ * Allow CRLFs in yaml front matter (@juretta)
+ * Added Date#xmlschema for Ruby versions < 1.9
+
+## 0.5.1 / 2009-05-06
+
+### Major Enhancements
+ * Next/previous posts in site payload (@pantulis, @tomo)
+ * Permalink templating system
+ * Moved most of the README out to the GitHub wiki
+ * Exclude option in configuration so specified files won't be brought over
+ with generated site (@duritong)
+ * Bug Fixes
+ * Making sure config.yaml references are all gone, using only config.yml
+ * Fixed syntax highlighting breaking for UTF-8 code (@henrik)
+ * Worked around RDiscount bug that prevents Markdown from getting parsed
+ after highlight (@henrik)
+ * CGI escaped post titles (@Chrononaut)
+
+## 0.5.0 / 2009-04-07
+
+### Minor Enhancements
+ * Ability to set post categories via YAML (@qrush)
+ * Ability to set prevent a post from publishing via YAML (@qrush)
+ * Add textilize filter (@willcodeforfoo)
+ * Add 'pretty' permalink style for wordpress-like urls (@dysinger)
+ * Made it possible to enter categories from YAML as an array (@Chrononaut)
+ * Ignore Emacs autosave files (@Chrononaut)
+ * Bug Fixes
+ * Use block syntax of popen4 to ensure that subprocesses are properly disposed (@jqr)
+ * Close open4 streams to prevent zombies (@rtomayko)
+ * Only query required fields from the WP Database (@ariejan)
+ * Prevent `_posts` from being copied to the destination directory (@bdimcheff)
+ * Refactors
+ * Factored the filtering code into a method (@Chrononaut)
+ * Fix tests and convert to Shoulda (@qrush, @technicalpickles)
+ * Add Cucumber acceptance test suite (@qrush, @technicalpickles)
+
+## 0.4.1
+
+### Minor Enhancements
+ * Changed date format on wordpress converter (zeropadding) (@dysinger)
+ * Bug Fixes
+ * Add Jekyll binary as executable to gemspec (@dysinger)
+
+## 0.4.0 / 2009-02-03
+
+### Major Enhancements
+ * Switch to Jeweler for packaging tasks
+
+### Minor Enhancements
+ * Type importer (@codeslinger)
+ * `site.topics` accessor (@baz)
+ * Add `array_to_sentence_string` filter (@mchung)
+ * Add a converter for textpattern (@PerfectlyNormal)
+ * Add a working Mephisto / MySQL converter (@ivey)
+ * Allowing .htaccess files to be copied over into the generated site (@briandoll)
+ * Add option to not put file date in permalink URL (@mreid)
+ * Add line number capabilities to highlight blocks (@jcon)
+ * Bug Fixes
+ * Fix permalink behavior (@cavalle)
+ * Fixed an issue with pygments, markdown, and newlines (@zpinter)
+ * Ampersands need to be escaped (@pufuwozu, @ap)
+ * Test and fix the site.categories hash (@zzot)
+ * Fix site payload available to files (@matrix9180)
+
+## 0.3.0 / 2008-12-24
+
+### Major Enhancements
+ * Added `--server` option to start a simple WEBrick server on destination
+ directory (@johnreilly and @mchung)
+
+### Minor Enhancements
+ * Added post categories based on directories containing `_posts` (@mreid)
+ * Added post topics based on directories underneath `_posts`
+ * Added new date filter that shows the full month name (@mreid)
+ * Merge Post's YAML front matter into its to_liquid payload (@remi)
+ * Restrict includes to regular files underneath `_includes`
+ * Bug Fixes
+ * Change YAML delimiter matcher so as to not chew up 2nd level markdown
+ headers (@mreid)
+ * Fix bug that meant page data (such as the date) was not available in
+ templates (@mreid)
+ * Properly reject directories in `_layouts`
+
+## 0.2.1 / 2008-12-15
+ * Major Changes
+ * Use Maruku (pure Ruby) for Markdown by default (@mreid)
+ * Allow use of RDiscount with `--rdiscount` flag
+
+### Minor Enhancements
+ * Don't load directory_watcher unless it's needed (@pjhyett)
+
+## 0.2.0 / 2008-12-14
+ * Major Changes
+ * related_posts is now found in `site.related_posts`
+
+## 0.1.6 / 2008-12-13
+ * Major Features
+ * Include files in `_includes` with `{% include x.textile %}`
+
+## 0.1.5 / 2008-12-12
+
+### Major Enhancements
+ * Code highlighting with Pygments if `--pygments` is specified
+ * Disable true LSI by default, enable with `--lsi`
+
+### Minor Enhancements
+ * Output informative message if RDiscount is not available (@JackDanger)
+ * Bug Fixes
+ * Prevent Jekyll from picking up the output directory as a source (@JackDanger)
+ * Skip `related_posts` when there is only one post (@JackDanger)
+
+## 0.1.4 / 2008-12-08
+ * Bug Fixes
+ * DATA does not work properly with rubygems
+
+## 0.1.3 / 2008-12-06
+ * Major Features
+ * Markdown support (@vanpelt)
+ * Mephisto and CSV converters (@vanpelt)
+ * Code hilighting (@vanpelt)
+ * Autobuild
+ * Bug Fixes
+ * Accept both `\r\n` and `\n` in YAML header (@vanpelt)
+
+## 0.1.2 / 2008-11-22
+ * Major Features
+ * Add a real "related posts" implementation using Classifier
+ * Command Line Changes
+ * Allow cli to be called with 0, 1, or 2 args intuiting dir paths
+ if they are omitted
+
+## 0.1.1 / 2008-11-22
+ * Minor Additions
+ * Posts now support introspectional data e.g. `{{ page.url }}`
+
+## 0.1.0 / 2008-11-05
+ * First release
+ * Converts posts written in Textile
+ * Converts regular site pages
+ * Simple copy of binary files
+
+## 0.0.0 / 2008-10-19
+ * Birthday!