RlVUVVJFCgogICogVE9ETzogVGhlIGx3SVAgc291cmNlIGNvZGUgbWFrZXMgc29tZSBpbnZhbGlkIGFzc3VtcHRpb25zIG9uIHByb2Nlc3NvcgogICAgd29yZC1sZW5ndGgsIHN0b3JhZ2Ugc2l6ZXMgYW5kIGFsaWdubWVudC4gU2VlIHRoZSBtYWlsaW5nIGxpc3RzIGZvcgogICAgcHJvYmxlbXMgd2l0aCBleG90ZXJpYyAoL0RTUCkgYXJjaGl0ZWN0dXJlcyBzaG93aW5nIHRoZXNlIHByb2JsZW1zLgogICAgV2Ugc3RpbGwgaGF2ZSB0byBmaXggc29tZSBvZiB0aGVzZSBpc3N1ZXMgbmVhdGx5LgoKSElTVE9SWQoKKENWUyBIRUFEKQoKICAqIFtFbnRlciBuZXcgY2hhbmdlcyBqdXN0IGFmdGVyIHRoaXMgbGluZSAtIGRvIG5vdCByZW1vdmUgdGhpcyBsaW5lXQoKICArKyBOZXcgZmVhdHVyZXM6CgogIDIwMTAtMTEtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmMvLmg6IEFkZGVkIGEgZnVuY3Rpb24gdG8gZGVhbGxvY2F0ZSB0aGUgc3RydWN0IGRoY3AgZnJvbSBhIG5ldGlmCiAgICAoZml4ZXMgYnVnICMzMTUyNSkuCgogIDIwMTAtMDctMTI6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBTdGVwaGFuZSBMZXNhZ2UpCiAgKiBpcC5jLCB1ZHAuYy8uaCwgcGJ1Zi5oLCBzb2NrZXRzLmM6IHRhc2sgIzEwNDk1OiBBZGRlZCBzdXBwb3J0IGZvcgogICAgSVBfTVVMVElDQVNUX0xPT1AgYXQgc29ja2V0LSBhbmQgcmF3LUFQSSBsZXZlbC4KCiAgMjAxMC0wNi0xNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IEFkZGVkIGFuIG9wdGlvbmFsIGRlZmluZSAoTFdJUF9JUF9BQ0NFUFRfVURQX1BPUlQpIHRoYXQgY2FuIGFsbG93CiAgICBsaW5rLWxheWVyLWFkZHJlc3NlZCBVRFAgdHJhZmZpYyB0byBiZSByZWNlaXZlZCB3aGlsZSBhIG5ldGlmIGlzIGRvd24gKGp1c3QKICAgIGxpa2UgREhDUCBkdXJpbmcgY29uZmlndXJhdGlvbikKCiAgMjAxMC0wNS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgbWFueSBmaWxlczogYnVnICMyNzM1MjogcmVtb3ZlZCBwYWNraW5nIGZyb20gaXBfYWRkcl90LCB0aGUgcGFja2VkCiAgICB2ZXJzaW9uIGlzIG5vdyBvbmx5IHVzZWQgaW4gcHJvdG9jb2wgaGVhZGVycy4gQWRkZWQgZ2xvYmFsIHN0b3JhZ2UgZm9yCiAgICBjdXJyZW50IHNyYy9kZXN0IElQIGFkZHJlc3Mgd2hpbGUgaW4gaW5wdXQgZnVuY3Rpb25zLgoKICAyMDEwLTA1LTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGVmLmg6IHRhc2sgIzEwMzkxOiBBZGQgcHJlcHJvY2Vzc29yLW1hY3JvcyBmb3IgY29tcGlsZS10aW1lIGh0b25sCiAgICBjYWxjdWxhdGlvbiAoYW5kIHVzZSB0aGVtIHRocm91Z2hvdXQgdGhlIHN0YWNrIHdoZXJlIGFwcGxpY2FibGUpCgogIDIwMTAtMDUtMTY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtcF9zdGQuaCwgbWVtcC5jLCBwcHBfb2UuaC8uYzogUFBQb0Ugbm93IHVzZXMgaXRzIG93biBNRU1QIHBvb2wKICAgIGluc3RlYWQgb2YgdGhlIGhlYXAgKG1vdmVkIHN0cnVjdCBwcHBvZV9zb2Z0YyBmcm9tIHBwcF9vZS5jIHRvIHBwcF9vZS5oKQoKICAyMDEwLTA1LTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIG1lbXBfc3RkLmgsIGRucy5oLy5jOiBETlNfTE9DQUxfSE9TVExJU1RfSVNfRFlOQU1JQyB1c2VzIGl0cyBvd24KICAgIE1FTVAgcG9vbCBpbnN0ZWFkIG9mIHRoZSBoZWFwCgogIDIwMTAtMDUtMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYywgdWRwLmM6IHRhc2sgIzY5OTU6IEltcGxlbWVudCBTT19SRVVTRUFERFIgKGNvcnJlY3RseSksIGFkZGVkCiAgICBuZXcgb3B0aW9uIFNPX1JFVVNFX1JYVE9BTEwgdG8gcGFzcyByZWNlaXZlZCBVRFAgYnJvYWRjYXN0L211bHRpY2FzdAogICAgcGFja2V0cyB0byBtb3JlIHRoYW4gb25lIHBjYi4KCiAgMjAxMC0wNS0wMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGJ1Zi5oLy5jLCBzb2NrZXRzLmMsIGFwaV9tc2cuYzogdXNlIGNoZWNrc3VtLW9uLWNvcHkgZm9yIHNlbmRpbmcKICAgIFVEUCBkYXRhIGZvciBMV0lQX05FVElGX1RYX1NJTkdMRV9QQlVGPT0xCgogIDIwMTAtMDQtMzA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuaC8uYywgcGJ1Zi5oLy5jOiB0YXNrICM2ODQ5OiBhZGRlZCB1ZHBfc2VuZChfdG8vX2lmKSBmdW5jdGlvbnMgdGhhdAogICAgdGFrZSBhIHByZWNhbGN1bGF0ZWQgY2hlY2tzdW0sIGFkZGVkIHBidWZfZmlsbF9jaGtzdW0oKSB0byBjb3B5IGRhdGEKICAgIGludG8gYSBwYnVmIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGNhbGN1bGF0aW5nIHRoZSBjaGVja3N1bSBmb3IgdGhhdCBkYXRhCgogIDIwMTAtMDQtMjk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9hZGRyLmgsIGV0aGFycC5oLy5jLCBhdXRvaXAuYzogQ3JlYXRlIG92ZXJyaWRhYmxlIG1hY3JvcyBmb3IgY29weWluZwogICAgMi1ieXRlLWFsaWduZWQgSVAgYWRkcmVzc2VzIGFuZCBNQUMgYWRkcmVzc2VzCgogIDIwMTAtMDQtMjg6IFBhdGNoIGJ5IEJpbGwgQXVlcmJhY2gKICAqIGlwLmM6IElubGluZSBnZW5lcmF0aW5nIElQIGNoZWNrc3VtIHRvIHNhdmUgYSBmdW5jdGlvbiBjYWxsCgogIDIwMTAtMDQtMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5oLy5jLCB0aW1lcnMuYzogQWRkZWQgYW4gb3ZlcnJpZGFibGUgZGVmaW5lIHRvIGdldCBpbmZvcm1lZCB3aGVuIHRoZQogICAgdGNwaXBfdGhyZWFkIHByb2Nlc3NlcyBtZXNzYWdlcyBvciB0aW1lb3V0cyB0byBpbXBsZW1lbnQgYSB3YXRjaGRvZy4KCiAgMjAxMC0wMy0yODogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2ZyYWcuYzogY3JlYXRlIGEgbmV3IChjb250aWd1b3VzKSBQQlVGX1JBTSBmb3IgZXZlcnkgb3V0Z29pbmcKICAgIGZyYWdtZW50IGlmIExXSVBfTkVUSUZfVFhfU0lOR0xFX1BCVUY9PTEKCiAgMjAxMC0wMy0yNzogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBTcGVlZHVwIFRYIGJ5IG1vdmluZyBjb2RlIGZyb20gZmluZF9lbnRyeSB0byBldGhhcnBfb3V0cHV0LwogICAgZXRoYXJwX3F1ZXJ5IHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZnVuY3Rpb24gY2FsbHMgKGluc3BpcmVkIGJ5CiAgICBwYXRjaCAjNzEzNSkuCgogIDIwMTAtMDMtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwaXAuYy8uaDogQWRkZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgdGNwaXBfKHVuKXRpbWVvdXQgY29kZQogICAgc2luY2UgdGhlIGxpbmtlciBjYW5ub3QgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IHRvIHNhdmUgc3BhY2UuCgogIDIwMTAtMDMtMjA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgZXRoYXJwLmMvLmg6IEFkZGVkIHN1cHBvcnQgZm9yIHN0YXRpYyBBUlAgdGFibGUgZW50cmllcwoKICAyMDEwLTAzLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2ltcGwuaCwgdGNwX291dC5jLCBpbmV0X2Noa3N1bS5oLy5jOiB0YXNrICM2ODQ5OiBDYWxjdWxhdGUgY2hlY2tzdW0KICAgIHdoZW4gY3JlYXRpbmcgVENQIHNlZ21lbnRzLCBub3Qgd2hlbiAocmUtKXRyYW5zbWl0dGluZyB0aGVtLgoKICAyMDEwLTAzLTA3OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBidWcgIzI4Nzc1IChzZWxlY3QvZXZlbnRfY2FsbGJhY2s6IG9ubHkgY2hlY2sgc2VsZWN0X2NiX2xpc3QKICAgIG9uIGNoYW5nZSkgcGx1cyB1c2UgU1lTX0xJR0hUV0VJR0hUX1BST1QgdG8gcHJvdGVjdCB0aGUgc2VsZWN0IGNvZGUuCiAgICBUaGlzIHNob3VsZCBzcGVlZCB1cCByZWNlaXZpbmcgZGF0YSBvbiBzb2NrZXRzIGFzIHRoZSBzZWxlY3QgY29kZSBpbgogICAgZXZlbnRfY2FsbGJhY2sgaXMgb25seSBleGVjdXRlZCB3aGVuIHNlbGVjdCBpcyB3YWl0aW5nLgoKICAyMDEwLTAzLTA2OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiB0YXNrICM3MDEzIChDcmVhdGUgb3B0aW9uIHRvIGhhdmUgYWxsIHBhY2tldHMgZGVsaXZlcmVkIHRvCiAgICBuZXRpZi0+b3V0cHV0IGluIG9uZSBwaWVjZSk6IEFsd2F5cyBjb3B5IHRvIHRyeSB0byBjcmVhdGUgc2luZ2xlIHBidWZzCiAgICBpbiB0Y3Bfd3JpdGUuCgogIDIwMTAtMDMtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmM6IHRhc2sgIzEwMTY3IChzb2NrZXRzOiBzcGVlZCB1cCBUQ1AgcmVjdgogICAgYnkgbm90IGFsbG9jYXRpbmcgYSBuZXRidWYpOiBhZGRlZCBmdW5jdGlvbiBuZXRjb25uX3JlY3ZfdGNwX3BidWYoKQogICAgZm9yIHRjcCBuZXRjb25ucyB0byByZWNlaXZlIHBidWZzLCBub3QgbmV0YnVmczsgdXNlIHRoYXQgZnVuY3Rpb24KICAgIGZvciB0Y3Agc29ja2V0cy4KCiAgMjAxMC0wMy0wNTogSmFrb2IgT2xlIFN0b2tsdW5kc2VuIC8gU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCB0Y3AuaCwgdGNwX2ltcGwuaCwgdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmM6IHRhc2sgIzcwNDA6CiAgICBXb3JrIG9uIHRjcF9lbnF1ZXVlOiBEb24ndCB3YXN0ZSBtZW1vcnkgd2hlbiBjaGFpbmluZyBzZWdtZW50cywKICAgIGFkZGVkIG9wdGlvbiBUQ1BfT1ZFUlNJWkUgdG8gcHJldmVudCBjcmVhdGluZyBtYW55IHNtYWxsIHBidWZzIHdoZW4KICAgIGNhbGxpbmcgdGNwX3dyaXRlIHdpdGggbWFueSBzbWFsbCBibG9ja3Mgb2YgZGF0YS4gSW5zdGVhZCwgcGJ1ZnMgYXJlCiAgICBhbGxvY2F0ZWQgbGFyZ2VyIHRoYW4gbmVlZGVkIGFuZCB0aGUgc3BhY2UgaXMgdXNlZCBmb3IgbGF0ZXIgY2FsbHMgdG8KICAgIHRjcF93cml0ZS4KCiAgMjAxMC0wMi0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHN0YXRzLmMvLmg6IEFkZGVkIGNvbnN0IGNoYXIqIG5hbWUgdG8gbWVtLSBhbmQgbWVtcC1zdGF0cyBmb3IgZWFzaWVyCiAgICBkZWJ1Z2dpbmcuCgogIDIwMTAtMDItMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCAoYW5kIHVzYWdlcyksIGFkZGVkIHRjcF9pbXBsLmg6IFNwbGl0dGVkIEFQSSBhbmQgaW50ZXJuYWwKICAgIGltcGxlbWVudGF0aW9uIG9mIHRjcCB0byBtYWtlIEFQSSB1c2FnZSBjbGVhcmUgdG8gYXBwbGljYXRpb24gcHJvZ3JhbW1lcnMKCiAgMjAxMC0wMi0xNDogU2ltb24gR29sZHNjaG1pZHQvU3RlcGhhbmUgTGVzYWdlCiAgKiBpcF9hZGRyLmg6IEltcHJvdmVkIHNvbWUgZGVmaW5lcyB3b3JraW5nIG9uIGlwIGFkZHJlc3NlcywgYWRkZWQgZmFzdGVyCiAgICBtYWNybyB0byBjb3B5IGFkZHJlc3NlcyB0aGF0IGNhbm5vdCBiZSBOVUxMCgogIDIwMTAtMDItMTM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogdGFzayAjNzg2NSAoaW1wbGVtZW50IG5vbi0KICAgIGJsb2NraW5nIHNlbmQgb3BlcmF0aW9uKQoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLy5oOiBBZGRlZCBhIG1pbmltYWwgdmVyc2lvbiBvZiBwb3NpeCBmY3RsKCkgdG8gaGF2ZSBhCiAgICBzdGFuZGFyZGlzZWQgd2F5IHRvIHNldCBPX05PTkJMT0NLIGZvciBub25ibG9ja2luZyBzb2NrZXRzLgoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jLy5oLCBhdXRvaXAuYy8uaDogdGFzayAjMTAxMzkgKFByZWZlciBzdGF0aWNhbGx5IGFsbG9jYXRlZAogICAgbWVtb3J5KTogYWRkZWQgYXV0b2lwX3NldF9zdHJ1Y3QoKSBhbmQgZGhjcF9zZXRfc3RydWN0KCkgdG8gbGV0IGF1dG9pcAogICAgYW5kIGRoY3Agd29yayB3aXRoIHVzZXItYWxsb2NhdGVkIHN0cnVjdHMgaW5zdGVhZCBvZiBjYWxsaW4gbWVtX21hbGxvYwoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdC9KZWZmIEJhcmJlcgogICogdGNwLmMvaDogcGF0Y2ggIzY4NjUgKFNPX1JFVVNFQUREUiBmb3IgVENQKTogaWYgcGNiLnNvX29wdGlvbnMgaGFzCiAgICBTT0ZfUkVVU0VBRERSIHNldCwgYWxsb3cgYmluZGluZyB0byBlbmRwb2ludCBpbiBUSU1FX1dBSVQKCiAgMjAxMC0wMi0xMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHN5cyBsYXllcjogdGFzayAjMTAxMzkgKFByZWZlciBzdGF0aWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkpOiBjb252ZXJ0ZWQKICAgIG1ib3ggYW5kIHNlbWFwaG9yZSBmdW5jdGlvbnMgdG8gdGFrZSBwb2ludGVycyB0byBzeXNfbWJveF90L3N5c19zZW1fdDsKICAgIGNvbnZlcnRlZCBzeXNfbWJveF9uZXcvc3lzX3NlbV9uZXcgdG8gdGFrZSBwb2ludGVycyBhbmQgcmV0dXJuIGVycl90OwogICAgdGFzayAjNzIxMjogQWRkIE11dGV4IGNvbmNlcHQgaW4gc3lzX2FyY2ggKGRlZmluZSBMV0lQX0NPTVBBVF9NVVRFWAogICAgdG8gbGV0IHN5cy5oIHVzZSBiaW5hcnkgc2VtYXBob3JlcyBpbnN0ZWFkIG9mIG11dGV4ZXMgLSBhcyBiZWZvcmUpCgogIDIwMTAtMDItMDk6IFNpbW9uIEdvbGRzY2htaWR0IChTaW1vbiBLYWxsd2VpdCkKICAqIHRpbWVycy5jLy5oOiBBZGRlZCBmdW5jdGlvbiBzeXNfcmVzdGFydF90aW1lb3V0cygpIGZyb20gcGF0Y2ggIzcwODUKICAgIChSZXN0YXJ0IHN5c3RlbSB0aW1lb3V0IGhhbmRsaW5nKQoKICAyMDEwLTAyLTA5OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYy8uaCwgcmVtb3ZlZCBsb29waWYuYy8uaDogdGFzayAjMTAxNTMgKEludGVncmF0ZSBsb29waWYgaW50bwogICAgbmV0aWYuYykgLSBsb29waWYgZG9lcyBub3QgaGF2ZSB0byBiZSBjcmVhdGVkIGJ5IHRoZSBwb3J0IGFueSBtb3JlLAogICAganVzdCBkZWZpbmUgTFdJUF9IQVZFX0xPT1BJRiB0byAxLgoKICAyMDEwLTAyLTA4OiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldC5oLCBpcF9hZGRyLmMvLmg6IEFkZGVkIHJlZW50cmFudCB2ZXJzaW9ucyBvZiBpbmV0X250b2EvaXBhZGRyX250b2EKICAgIGluZXRfbnRvYV9yL2lwYWRkcl9udG9hX3IKCiAgMjAxMC0wMi0wODogU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmg6IEFkZGVkIG5ldGlmX3MvZ2V0X2lnbXBfbWFjX2ZpbHRlcigpIG1hY3JvcwoKICAyMDEwLTAyLTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuaDogQWRkZWQgZnVuY3Rpb24tbGlrZSBtYWNyb3MgdG8gZ2V0L3NldCB0aGUgaG9zdG5hbWUgb24gYSBuZXRpZgoKICAyMDEwLTAyLTA0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmVhcmx5IGV2ZXJ5IGZpbGU6IFJlcGxhY2VkIHN0cnVjdCBpcF9hZGRyIGJ5IHR5cGVkZWYgaXBfYWRkcl90IHRvCiAgICBtYWtlIGNoYW5naW5nIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYmVoaW5kIHRoZSB0eXBlZGVmIGVhc2llci4KCiAgMjAxMC0wMi0wMTogU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBtZW1wX3N0ZC5oLCBkbnMuaCwgbmV0ZGIuYywgbWVtcC5jOiBMZXQgbmV0ZGIgdXNlIGEgbWVtcCBwb29sCiAgICBmb3IgYWxsb2NhdGluZyBtZW1vcnkgd2hlbiBnZXRhZGRyaW5mbygpIGlzIGNhbGxlZC4KCiAgMjAxMC0wMS0zMTogU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuaCwgZGhjcC5jOiBSZXdvcmtlZCB0aGUgY29kZSB0aGF0IHBhcnNlcyBESENQIG9wdGlvbnM6IHBhcnNlCiAgICB0aGVtIG9uY2UgaW5zdGVhZCBvZiBwYXJzaW5nIGZvciBldmVyeSBvcHRpb24uIFRoaXMgYWxzbyByZW1vdmVzCiAgICB0aGUgbmVlZCBmb3IgbWVtX21hbGxvYyBmcm9tIGRoY3BfcmVjdiBhbmQgbWFrZXMgaXQgcG9zc2libGUgdG8KICAgIGNvcnJlY3RseSByZXRyaWV2ZSB0aGUgQk9PVFAgZmlsZS4KCiAgMjAxMC0wMS0zMDogc2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogVXNlIFNZU19MSUdIVFdFSUdIVF9QUk9UIGluc3RlYWQgb2YgYSBzZW1hcGhvcmUgdG8gcHJvdGVjdAogICAgdGhlIHNvY2tldHMgYXJyYXkuCgogIDIwMTAtMDEtMjk6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMYXVyYSBHYXJyZXR0KQogICogYXBpLmgsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBBZGRlZCBleGNlcHQgc2V0IHN1cHBvcnQgaW4gc2VsZWN0CiAgICAocGF0Y2ggIzY4NjApCgogIDIwMTAtMDEtMjk6IFNpbW9uIEdvbGRzY2htaWR0IChwYXRjaCBieSBMYXVyYSBHYXJyZXR0KQogICogYXBpLmgsIHNvY2tldHMuaCwgZXJyLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIGVyci5jOgogICAgQWRkIG5vbi1ibG9ja2luZyBzdXBwb3J0IGZvciBjb25uZWN0IChwYXJ0bHkgZnJvbSBwYXRjaCAjNjg2MCksCiAgICBwbHVzIG1hbnkgY2xlYW51cHMgaW4gc29ja2V0ICYgbmV0Y29ubiBBUEkuCgogIDIwMTAtMDEtMjc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwLmgsIGluaXQuYywgYXBpX21zZy5jOiBBZGRlZCBUQ1BfU05EUVVFVUVMT1dBVCBjb3JyZXNwb25kaW5nCiAgICB0byBUQ1BfU05ETE9XQVQgYW5kIGFkZGVkIHRjcF9zbmRxdWV1ZWxlbigpIC0gdGhpcyBmaXhlcyBidWcgIzI4NjA1CgogIDIwMTAtMDEtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbm1wOiBVc2UgbWVtcCBwb29scyBmb3Igc25tcCBpbnN0ZWFkIG9mIHRoZSBoZWFwOyBhZGRlZCA0IG5ldyBwb29scy4KCiAgMjAxMC0wMS0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jLy5oOiBGaXhlZCBidWcgIzI3ODU2OiBQUFA6IFNldCBuZXRpZiBsaW5rLSBhbmQgc3RhdHVzLWNhbGxiYWNrCiAgICBieSBhZGRpbmcgcHBwX3NldF9uZXRpZl9zdGF0dXNjYWxsYmFjaygpL3BwcF9zZXRfbmV0aWZfbGlua2NhbGxiYWNrKCkKCiAgMjAxMC0wMS0xMzogU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jOiBUaGUgaGVhcCBub3cgbWF5IGJlIG1vdmVkIHRvIHVzZXItZGVmaW5lZCBtZW1vcnkgYnkgZGVmaW5pbmcKICAgIExXSVBfUkFNX0hFQVBfUE9JTlRFUiBhcyBhIHZvaWQgcG9pbnRlciB0byB0aGF0IG1lbW9yeSdzIGFkZHJlc3MKICAgIChwYXRjaCAjNjk2NiBhbmQgYnVnICMyNjEzMykKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQgKEJpbGwgQXVlcmJhY2gpCiAgKiBvcHQuaCwgbWVtcC5jOiBwYXRjaCAjNjgyMiAoQWRkIG9wdGlvbiB0byBwbGFjZSBtZW1vcnkgcG9vbHMgaW4KICAgIHNlcGFyYXRlIGFycmF5cykKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuYywgaWdtcC5jOiBwYXRjaCAjNjQ2MyAoSUdNUCAtIEFkZGluZyBSYW5kb20gRGVsYXkpOiBhZGRlZCBkZWZpbmUKICAgIExXSVBfUkFORCgpIGZvciBsd2lwLXdpZGUgcmFuZG9taXphdGlvbiAodG8gYmUgZGVmaW5lZCBpbiBjYy5oKQoKICAyMDA5LTEyLTMxOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwaXAuYywgaW5pdC5jLCBtZW1wLmMsIHN5cy5jLCBtZW1wX3N0ZC5oLCBzeXMuaCwgdGNwaXAuaAogICAgYWRkZWQgdGltZXJzLmMvLmg6IFNlcGFyYXRlZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBmcm9tIHNlbWFwaG9yZS9tYm94CiAgICBpbXBsZW1lbnRhdGlvbiwgbW92ZWQgdGltZXIgaW1wbGVtZW50YXRpb24gdG8gdGltZXJzLmMvLmgsIHRpbWVycyBhcmUKICAgIG5vdyBvbmx5IGNhbGxlZCBmcm9tIHRjcGlwX3RocmVhZCBvciBieSBleHBsaWNpdGx5IGNoZWNraW5nIHRoZW0uCiAgICAoVEFTSyM3MjM1KQoKICAyMDA5LTEyLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGV0aGFycC5oLy5jLCBpbml0LmMsIHRjcGlwLmM6IEFkZGVkIGFuIGFkZGl0aW9uYWwgb3B0aW9uCiAgICBMV0lQX0VUSEVSTkVUIHRvIHN1cHBvcnQgZXRoZXJuZXQgd2l0aG91dCBBUlAgKG5lY2Vzc2FyeSBmb3IgcHVyZSBQUFBvRSkKCgogICsrIEJ1Z2ZpeGVzOgoKICAyMDExLTAxLTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzMxNzQxOiBsd2lwX3NlbGVjdCBzZWVtcyB0byBoYXZlIHRocmVhZGluZyBwcm9ibGVtcwoKICAyMDEwLTEyLTAyOiBTaW1vbiBHb2xkc2NobWlkdAogICogZXJyLmg6IEZpeGVkIEVSUl9JU19GQVRBTCBzbyB0aGF0IEVSUl9XT1VMREJMT0NLIGlzIG5vdCBmYXRhbC4KCiAgMjAxMC0xMS0yMzogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBuZXRjb25uLnJlY3ZfYXZhaWwgaXMgb25seSB1c2VkIGZvcgogICAgTFdJUF9TT19SQ1ZCVUYgYW5kIGlvY3RsL0ZJT05SRUFELgoKICAyMDEwLTExLTIzOiBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmM6IEZpeGVkIGJ1ZyAjMzE3MjA6IEFSUC1xdWV1ZWluZzogUkZDIDExMjIgcmVjb21tZW5kcyB0byBxdWV1ZSBhdAogICAgbGVhc3QgMSBwYWNrZXQgLT4gQVJQX1FVRVVFSU5HPT0wIG5vdyBxdWV1ZXMgdGhlIG1vc3QgcmVjZW50IHBhY2tldC4KCiAgMjAxMC0xMS0yMzogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzMwNTc3OiB0Y3BfaW5wdXQ6IGRvbid0IGRpc2NhcmQgQUNLLW9ubHkgcGFja2V0cyBhZnRlcgogICAgcmVmdXNpbmcgJ3JlZnVzZWRfZGF0YScgYWdhaW4uCiAgCiAgMjAxMC0xMS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMzMTU5MDogZ2V0c29ja29wdCguLi4gU09fRVJST1IgLi4uKSBnaXZlcyBFSU5QUk9HUkVTUwogICAgYWZ0ZXIgYSBzdWNjZXNzZnVsIG5vbmJsb2NraW5nIGNvbm5lY3Rpb24uCgogIDIwMTAtMTEtMjI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYzogRml4ZWQgYnVnICMzMTcyMjogSVAgcGFja2V0cyBzZW50IHdpdGggYW4gQXV0b0lQIHNvdXJjZSBhZGRyCiAgICBtdXN0IGJlIHNlbnQgbGluay1sb2NhbAoKICAyMDEwLTExLTIyOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGltZXJzLmM6IHBhdGNoICM3MzI5OiB0Y3BfdGltZXJfbmVlZGVkIHByb3RvdHlwZSB3YXMgaWZkZWYnZWQgb3V0IGZvcgogICAgTFdJUF9USU1FUlM9PTAKCiAgMjAxMC0xMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMzMTE3MDogbHdpcF9zZXRzb2Nrb3B0KCkgZG9lcyBub3Qgc2V0IHNvY2tldCBudW1iZXIKCiAgMjAxMC0xMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuaDogRml4ZWQgYnVnICMzMTMwNDogQ2hhbmdlZCBTSFVUX1JELCBTSFVUX1dSIGFuZCBTSFVUX1JEV1IgdG8KICAgIHJlc2VtYmxlIG90aGVyIHN0YWNrcy4KCiAgMjAxMC0xMS0yMDogU2ltb24gR29sZHNjaG1pZHQKICAqIGRucy5jOiBGaXhlZCBidWcgIzMxNTM1OiBUQ1BfU05EX1FVRVVFTEVOIG11c3QgYmUgYXQgbGVhc3QgMiBvciBlbHNlCiAgICBuby1jb3B5IFRDUCB3cml0ZXMgd2lsbCBuZXZlciBzdWNjZWVkLgoKICAyMDEwLTExLTIwOiBTaW1vbiBHb2xkc2NobWlkdAogICogZG5zLmM6IEZpeGVkIGJ1ZyAjMzE3MDE6IEVycm9yIHJldHVybiB2YWx1ZSBmcm9tIGRuc19nZXRob3N0YnluYW1lKCkgZG9lcwogICAgbm90IG1hdGNoIGRvY3VtZW50YXRpb246IHJldHVybiBFUlJfQVJHIGluc3RlYWQgb2YgRVJSX1ZBTCBpZiBub3QKICAgIGluaXRpYWxpemVkIG9yIHdyb25nIGFyZ3VtZW50LgoKICAyMDEwLTEwLTIwOiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5oOiBGaXhlZCBidWcgIzMxMzg1OiBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSBpcyAzMCBidXQgc2hvdWxkIGJlIDE2CgogIDIwMTAtMTAtMDU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IE9uY2UgYWdhaW4gZml4ZWQgIzMwMDM4OiBESENQL0F1dG9JUCBjb29wZXJhdGlvbiBmYWlsZWQgd2hlbgogICAgcmVwbHVnZ2luZyB0aGUgbmV0d29yayBjYWJsZSBhZnRlciBhbiBBdXRvSVAgYWRkcmVzcyB3YXMgYXNzaWduZWQuCgogIDIwMTAtMDgtMTA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogRml4ZWQgYnVnICMzMDcyODogdGNwX25ld19wb3J0KCkgZGlkIG5vdCBjaGVjayBsaXN0ZW4gcGNicwoKICAyMDEwLTA4LTAzOiBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmMsIHJhdy5jOiBEb24ndCBjaGFpbiBlbXB0eSBwYnVmcyB3aGVuIHNlbmRpbmcgdGhlbSAoZml4ZXMgYnVnICMzMDYyNSkKCiAgMjAxMC0wOC0wMTogU2ltb24gR29sZHNjaG1pZHQgKHBhdGNoIGJ5IEdyZWcgUmVuZGEpCiAgKiBwcHAuYzogQXBwbGllZCBwYXRjaCAjNzI2NCAoUFBQIHByb3RvY29scyBhcmUgcmVqZWN0ZWQgaW5jb3JyZWN0bHkgb24gYmlnCiAgICBlbmRpYW4gYXJjaGl0ZWN0dXJlcykKICAKICAyMDEwLTA3LTI4OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgbWliMi5jOiBGaXhlZCBjb21waWxhdGlvbiB3aXRoIFRDUCBvciBVRFAKICAgIGRpc2FibGVkLgogIAogIDIwMTAtMDctMjc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogRml4ZWQgYnVnICMzMDU2NSAodGNwX2Nvbm5lY3QoKSBjaGVjayBib3VuZCBsaXN0KTogdGhhdCBjaGVjayBkaWQgbm8KICAgIGhhcm0gYnV0IG5ldmVyIGRpZCBhbnl0aGluZwogIAogIDIwMTAtMDctMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBGaXhlZCBpbnZhbGlkIGZpeCBmb3IgYnVnICMzMDQwMiAoQ0hFQ0tTVU1fR0VOX0lQX0lOTElORSBkb2VzIG5vdAogICAgYWRkIElQIG9wdGlvbnMpCgogIDIwMTAtMDctMTY6IEtpZXJhbiBNYW5zbGV5CiAgKiBtc2dfaW4uYzogRml4ZWQgU05NUCBBU04gY29uc3RhbnQgZGVmaW5lcyB0byBub3QgdXNlICEgb3BlcmF0b3IgCgogIDIwMTAtMDctMTA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBGaXhlZCBidWcgIzMwNDAyOiBDSEVDS1NVTV9HRU5fSVBfSU5MSU5FIGRvZXMgbm90IGFkZCBJUCBvcHRpb25zCgogIDIwMTAtMDYtMzA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IGZpeGVkIGJ1ZyAjMzAzMDAgKHNodXRkb3duIHBhcmFtZXRlciB3YXMgbm90IGluaXRpYWxpemVkIGluCiAgICBuZXRjb25uX2RlbGV0ZSkKCiAgMjAxMC0wNi0yODogS2llcmFuIE1hbnNsZXkKICAqIHRpbWVycy5jIHJlbW92ZSB1bnBvcnRhYmxlIHByaW50aW5nIG9mIEMgZnVuY3Rpb24gcG9pbnRlcnMKCiAgMjAxMC0wNi0yNDogU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuYywgdGltZXJzLmMvLmgsIG9wdC5oLCBtZW1wX3N0ZC5oOiBGcm9tIHBhdGNoICM3MjIxOiBhZGRlZCBmbGFnCiAgICBOT19TWVNfTk9fVElNRVJTIHRvIGRyb3AgdGltZXIgc3VwcG9ydCBmb3IgTk9fU1lTPT0xIGZvciBlYXNpZXIgdXBncmFkaW5nCgogIDIwMTAtMDYtMjQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkoX2xpYikuYy8uaCwgYXBpX21zZy5jLy5oLCBzb2NrZXRzLmMvLmg6IEZpeGVkIGJ1ZyAjMTAwODg6IENvcnJlY3RseQogICAgaW1wbGVtZW50ZWQgc2h1dGRvd24gYXQgc29ja2V0IGxldmVsLgoKICAyMDEwLTA2LTIxOiBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jLy5oLCBpcF9mcmFnLmMvLmgsIG9wdC5oLCBtZW1wX3N0ZC5oOiBGaXhlZCBidWcgIzI5MzYxIChpcF9mcmFnIGhhcwogICAgcHJvYmxlbXMgd2l0aCB6ZXJvLWNvcHkgRE1BIE1BQ3MpIGJ5IGFkZGluZyBjdXN0b20gcGJ1ZnMgYW5kIGltcGxlbWVudGluZwogICAgY3VzdG9tIHBidWZzIHRoYXQgcmVmZXJlbmNlIG90aGVyIChvcmlnaW5hbCkgcGJ1ZnMuIEFkZGl0aW9uYWxseSBzZXQKICAgIElQX0ZSQUdfVVNFU19TVEFUSUNfQlVGPTAgYXMgZGVmYXVsdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgoKICAyMDEwLTA2LTE1OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBGaXhlZCBidWcgIzI5OTcwOiBESENQIGVuZGlhbiBpc3N1ZSBwYXJzaW5nIG9wdGlvbiByZXNwb25zZXMKCiAgMjAxMC0wNi0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIGF1dG9pcC5jOiBGaXhlZCBidWcgIzMwMDM5OiBBdXRvSVAgZG9lcyBub3QgcmV1c2UgcHJldmlvdXMgYWRkcmVzc2VzCgogIDIwMTAtMDYtMTI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IEZpeGVkIGJ1ZyAjMzAwMzg6IGRoY3BfbmV0d29ya19jaGFuZ2VkIGRvZXNuJ3QgcmVzZXQgQVVUT0lQIGNvb3AKICAgIHN0YXRlCgogIDIwMTAtMDUtMTc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRkYi5jOiBDb3JyZWN0bHkgTlVMTC10ZXJtaW5hdGUgaF9hZGRyX2xpc3QKCiAgMjAxMC0wNS0xNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGRlZi5oLy5jOiBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgTFdJUF9QUkVGSVhfQllURU9SREVSX0ZVTkNTIHRvIHByZXZlbnQKICAgICJzeW1ib2wgYWxyZWFkeSBkZWZpbmVkIiBpLmUuIHdoZW4gbGlua2luZyB0byB3aW5zb2NrCgogIDIwMTAtMDUtMDU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkZWYuaCwgdGltZXJzLmM6IEZpeGVkIGJ1ZyAjMjk3NjkgKHN5c19jaGVja190aW1lb3V0czogc3lzX25vdygpIG1heQogICAgb3ZlcmZsb3cpCgogIDIwMTAtMDQtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjk2MTcgKHNvbWV0aW1lIGNhdXNlIHN0YWxsIG9uIGRlbGV0ZSBsaXN0ZW5pbmcKICAgIGNvbm5lY3Rpb24pCgogIDIwMTAtMDMtMjg6IEx1Y2EgQ2VyZXNvbGkKICAqIGlwX2FkZHIuYy8uaDogcGF0Y2ggIzcxNDM6IEFkZCBhIGZldyBtaXNzaW5nIGNvbnN0IHF1YWxpZmllcnMKCiAgMjAxMC0wMy0yNzogTHVjYSBDZXJlc29saQogICogbWliMi5jOiBwYXRjaCAjNzEzMDogcmVtb3ZlIG1lYW5pbmdsZXNzIGNvbnN0IHF1YWxpZmllcnMKCiAgMjAxMC0wMy0yNjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogTWFrZSBMV0lQX05FVElGX1RYX1NJTkdMRV9QQlVGIHdvcmsgZm9yIFRDUCwgdG9vCgogIDIwMTAtMDMtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB2YXJpb3VzIGZpbGVzOiBGaXhlZCBjb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucyBkaXNhYmxlZCAoVENQL1VEUCksCiAgICB0cmlnZ2VyZWQgYnkgYnVnICMyOTM0NTsgZG9uJ3QgYWxsb2NhdGUgYWNjZXB0bWJveCBpZiBMV0lQX1RDUCBpcyBkaXNhYmxlZAoKICAyMDEwLTAzLTI1OiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzI5MzMyOiBsd2lwX3NlbGVjdCgpIHByb2Nlc3NlcyByZWFkc2V0IGluY29ycmVjdGx5CgogIDIwMTAtMDMtMjU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYywgdGVzdF90Y3Bfb29zLmM6IEZpeGVkIGJ1ZyAjMjkwODA6IENvcnJlY3RseSBoYW5kbGUgcmVtb3RlIHNpZGUKICAgIG92ZXJydW5uaW5nIG91ciByY3Zfd25kIGluIG9vc2VxIGNhc2UuCgogIDIwMTAtMDMtMjI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogdGNwX2xpc3RlbigpIGRpZCBub3QgY29weSB0aGUgcGNiJ3MgcHJpby4KCiAgMjAxMC0wMy0xOTogU2ltb24gR29sZHNjaG1pZHQKICAqIHNubXBfbXNnLmM6IEZpeGVkIGJ1ZyAjMjkyNTY6IFNOTVAgVHJhcCBhZGRyZXNzIHdhcyBub3QgY29ycmVjdGx5IHNldAoKICAyMDEwLTAzLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIGV0aGFycC5oOiBGaXhlZCBidWcgIzI5MTQ4IChJbmNvcnJlY3QgUEJVRl9QT09MX0JVRlNJWkUgZm9yIHBvcnRzCiAgICB3aGVyZSBFVEhfUEFEX1NJWkUgPiAwKSBieSBtb3ZpbmcgZGVmaW5pdGlvbiBvZiBFVEhfUEFEX1NJWkUgdG8gb3B0LmgKICAgIGFuZCBiYXNpbmcgUEJVRl9MSU5LX0hMRU4gb24gaXQuCgogIDIwMTAtMDMtMDg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jLCBpcHY0L2lwLmM6IHRhc2sgIzEwMjQxIChBdXRvSVA6IGRvbid0IGJyZWFrIGV4aXN0aW5nIGNvbm5lY3Rpb25zCiAgICB3aGVuIGFzc2lnaW5nIHJvdXRhYmxlIGFkZHJlc3MpOiB3aGVuIGNoZWNraW5nIGluY29taW5nIHBhY2tldHMgYW5kCiAgICBhYm9ydGluZyBleGlzdGluZyBjb25uZWN0aW9uIG9uIGFkZHJlc3MgY2hhbmdlLCBmaWx0ZXIgb3V0IGxpbmstbG9jYWwKICAgIGFkZHJlc3Nlcy4KCiAgMjAxMC0wMy0wNjogU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogRml4ZWQgTFdJUF9ORVRJRl9UWF9TSU5HTEVfUEJVRiBmb3IgTFdJUF9UQ1BJUF9DT1JFX0xPQ0tJTkcKCiAgMjAxMC0wMy0wNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwdjQvaXAuYzogRG9uJ3QgdHJ5IHRvIGZvcndhcmQgbGluay1sb2NhbCBhZGRyZXNzZXMKCiAgMjAxMC0wMy0wNjogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jOiBGaXhlZCBidWcgIzI5MDg3OiBldGhhcnA6IGRvbid0IHNlbmQgcGFja2V0cyBmb3IgTGlua0xvY2FsLQogICAgYWRkcmVzc2VzIHRvIGd3CgogIDIwMTAtMDMtMDU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IEZpeGVkIGJ1ZyAjMjkwNzI6IENvcnJlY3RseSBzZXQgY2lhZGRyIGJhc2VkIG9uIG1lc3NhZ2UtdHlwZQogICAgYW5kIHN0YXRlLgoKICAyMDEwLTAzLTA1OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBDb3JyZWN0bHkgc2V0IFRDUF9XUklURV9GTEFHX01PUkUgd2hlbiBuZXRjb25uX3dyaXRlIGlzIHNwbGl0CiAgICBpbnRvIG11bHRpcGxlIGNhbGxzIHRvIHRjcF93cml0ZS4gICAgCgogIDIwMTAtMDItMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtLmgsIGRucy5jOiB0YXNrICMxMDE0MDogUmVtb3ZlIEROU19VU0VTX1NUQVRJQ19CVUYgKGtlZXAKICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBETlNfVVNFU19TVEFUSUNfQlVGPT0xKQoKICAyMDEwLTAyLTIwOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jOiBUYXNrICMxMDA4ODogQ29ycmVjdGx5IGltcGxlbWVudAogICAgY2xvc2UoKSB2cy4gc2h1dGRvd24oKS4gTm93IHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBnZXQgYW55IG1vcmUKICAgIHJlY3YgY2FsbGJhY2tzIGFmdGVyIGNhbGxpbmcgdGNwX2Nsb3NlKCkuIEFkZGVkIHRjcF9zaHV0ZG93bigpLgoKICAyMDEwLTAyLTE5OiBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMvLmgsIHBidWYuYzogUmVuYW1lZCBtZW1fcmVhbGxvYygpIHRvIG1lbV90cmltKCkgdG8gcHJldmVudAogICAgY29uZnVzaW9uIHdpdGggcmVhbGxvYygpCgogIDIwMTAtMDItMTU6IFNpbW9uIEdvbGRzY2htaWR0L1N0ZXBoYW5lIExlc2FnZQogICogbmV0aWYuYy8uaDogTGluayBzdGF0dXMgZG9lcyBub3QgZGVwZW5kIG9uIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSwogICAgKGZpeGVzIGJ1ZyAjMjg4OTkpCgogIDIwMTAtMDItMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jOiBGaXhlZCBidWcgIzI4ODc3IChEdXBsaWNhdGUgQVJQIGdyYXR1aXRvdXMgcGFja2V0IHdpdGgKICAgIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBzZXQgb24pIGJ5IG9ubHkgc2VuZGluZyBpZiBib3RoIGxpbmstIGFuZAogICAgYWRtaW4tc3RhdHVzIG9mIGEgbmV0aWYgYXJlIHVwCgogIDIwMTAtMDItMTQ6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogRGlzYWJsZSBFVEhBUlBfVFJVU1RfSVBfTUFDIGJ5IGRlZmF1bHQgc2luY2UgaXQgc2xvd3MgZG93biBwYWNrZXQKICAgIHJlY2VwdGlvbiBhbmQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkKCiAgMjAxMC0wMi0xNDogU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5jLy5oOiBGaXhlZCBBUlAgaW5wdXQgcHJvY2Vzc2luZzogb25seSBhZGQgYSBuZXcgZW50cnkgaWYgYQogICAgcmVxdWVzdCB3YXMgZGlyZWN0ZWQgYXMgdXMgKFJGQyA4MjYsIFBhY2tldCBSZWNlcHRpb24pLCBvdGhlcndpc2UKICAgIG9ubHkgdXBkYXRlIGV4aXN0aW5nIGVudHJpZXM7IGludGVybmFsaXplZCBzb21lIGZ1bmN0aW9ucwoKICAyMDEwLTAyLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuaCwgZXRoYXJwLmMsIHRjcGlwLmM6IEZpeGVkIGJ1ZyAjMjgxODMgKEFSUCBhbmQgVENQL0lQIGNhbm5vdCBiZQogICAgZGlzYWJsZWQgb24gbmV0aWYgdXNlZCBmb3IgUFBQb0UpIGJ5IGFkZGluZyBhIG5ldyBuZXRpZiBmbGFnCiAgICAoTkVUSUZfRkxBR19FVEhFUk5FVCkgdGhhdCB0ZWxscyB0aGUgc3RhY2sgdGhlIGRldmljZSBpcyBhbiBldGhlcm5ldAogICAgZGV2aWNlIGJ1dCBwcmV2ZW50cyB1c2FnZSBvZiBBUlAgKHNvIHRoYXQgZXRoZXJuZXRfaW5wdXQgY2FuIGJlIHVzZWQKICAgIGZvciBQUFBvRSkuCgogIDIwMTAtMDItMTI6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jOiBuZXRpZl9zZXRfbGlua191cC9kb3duOiBvbmx5IGRvIHNvbWV0aGluZyBpZiB0aGUgbGluayBzdGF0ZQogICAgYWN0dWFsbHkgY2hhbmdlcwoKICAyMDEwLTAyLTEyOiBTaW1vbiBHb2xkc2NobWlkdC9TdGVwaGFuZSBMZXNhZ2UKICAqIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyODg2NSAoQ2Fubm90IGNsb3NlIHNvY2tldC9uZXRjb25uIGluIG5vbi1ibG9ja2luZwogICAgY29ubmVjdCkKCiAgMjAxMC0wMi0xMjogU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5oOiBGaXhlZCBidWcgIzI4ODY2IChtZW1fcmVhbGxvYyBmdW5jdGlvbiBkZWZpbmVkIGluIG1lbS5oKQoKICAyMDEwLTAyLTA5OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9tc2cuaDogRml4ZWQgYnVnICMyMjExMAogICAocmVjdigpIG1ha2VzIHJlY2VpdmUgd2luZG93IHVwZGF0ZSBmb3IgZGF0YSB0aGF0IHdhc24ndCByZWNlaXZlZCBieQogICAgYXBwbGljYXRpb24pCgogIDIwMTAtMDItMDk6IFNpbW9uIEdvbGRzY2htaWR0L1N0ZXBoYW5lIExlc2FnZQogICogc29ja2V0cy5jOiBGaXhlZCBidWcgIzI4ODUzIChsd2lwX3JlY3Zmcm9tKCkgcmV0dXJucyAwIG9uIHJlY2VpdmUgdGltZS1vdXQKICAgIG9yIGFueSBuZXRjb25uX3JlY3YoKSBlcnJvcikKCiAgMjAxMC0wMi0wOTogU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jOiB0YXNrICMxMDE1NCAoUFBQOiBVcGRhdGUgc25tcCBpbi9vdXQgY291bnRlcnMgZm9yIHR4L3J4IHBhY2tldHMpCgogIDIwMTAtMDItMDk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRpZi5jOiBGb3IgbG9vcGJhY2sgcGFja2V0cywgYWRqdXN0IHRoZSBzdGF0cy0gYW5kIHNubXAtY291bnRlcnMKICAgIGZvciB0aGUgbG9vcGJhY2sgbmV0aWYuCgogIDIwMTAtMDItMDg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpZ21wLmMvLmgsIGlwLmg6IE1vdmVkIG1vc3QgZGVmaW5lcyBmcm9tIGlnbXAuaCB0byBpZ21wLmMgZm9yIGNsYXJpdHkKICAgIHNpbmNlIHRoZXkgYXJlIG5vdCB1c2VkIGFueXdoZXJlIGVsc2UuCgogIDIwMTAtMDItMDg6IFNpbW9uIEdvbGRzY2htaWR0IChTdOlwaGFuZSBMZXNhZ2UpCiAgKiBpZ21wLmMsIGlnbXAuaCwgc3RhdHMuYywgc3RhdHMuaDogSW1wcm92ZWQgSUdNUCBzdGF0cwogICAgKHBhdGNoIGZyb20gYnVnICMyODc5OCkKCiAgMjAxMC0wMi0wODogU2ltb24gR29sZHNjaG1pZHQgKFN06XBoYW5lIExlc2FnZSkKICAqIGlnbXAuYzogRml4ZWQgYnVnICMyODc5OCAoRXJyb3IgaW4gIk1heCBSZXNwb25zZSBUaW1lIiBwcm9jZXNzaW5nKSBhbmQKICAgIGFub3RoZXIgYnVnIHdoZW4gTFdJUF9SQU5EKCkgcmV0dXJucyB6ZXJvLgoKICAyMDEwLTAyLTA0OiBTaW1vbiBHb2xkc2NobWlkdAogICogbmVhcmx5IGV2ZXJ5IGZpbGU6IFVzZSBtYWNyb3MgZGVmaW5lZCBpbiBpcF9hZGRyLmggKHNvbWUgb2YgdGhlbSBuZXcpCiAgICB0byB3b3JrIHdpdGggSVAgYWRkcmVzc2VzIChwcmVwYXJhdGlvbiBmb3IgYnVnICMyNzM1MiAtIENoYW5nZSBpcF9hZGRyCiAgICBmcm9tIHN0cnVjdCB0byB0eXBlZGVmICh1MzJfdCkgLSBhbmQgYmV0dGVyIGNvZGUpLgoKICAyMDEwLTAxLTMxOiBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0aWYuYzogRG9uJ3QgY2FsbCB0aGUgbGluay1jYWxsYmFjayBmcm9tIG5ldGlmX3NldF91cC9kb3duKCkgc2luY2UKICAgIHRoaXMgaW52YWxpZGx5IHJldHJpZ2dlcnMgREhDUC4KCiAgMjAxMC0wMS0yOTogU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2FkZHIuaCwgaW5ldC5oLCBkZWYuaCwgaW5ldC5jLCBkZWYuYywgbW9yZTogQ2xlYW5seSBzZXBhcmF0ZSB0aGUKICAgIHBvcnRhYmlsaXR5IGZpbGUgaW5ldC5oIGFuZCBpdHMgY29udGVudHMgZnJvbSB0aGUgc3RhY2s6IG1vdmVkIGh0b25YLQogICAgZnVuY3Rpb25zIHRvIGRlZi5oIChhbmQgdGhlIG5ldyBkZWYuYyAtIHRoZXkgYXJlIG5vdCBpcHY0IGRlcGVuZGVudCksCiAgICBsZXQgaW5ldC5oIGRlcGVuZCBvbiBpcF9hZGRyLmggYW5kIG5vdCB0aGUgb3RoZXIgd2F5IHJvdW5kLgogICAgVGhpcyBmaXhlcyBidWcgIzI4NzMyLgoKICAyMDEwLTAxLTI4OiBLaWVyYW4gTWFuc2xleQogICogdGNwLmM6IEVuc3VyZSBzc3RocmVzaCA+PSAyKk1TUwoKICAyMDEwLTAxLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYzogRml4ZWQgYnVnICMyNzg3MTogQ2FsbGluZyB0Y3BfYWJvcnQoKSBpbiByZWN2CiAgICBjYWxsYmFjayBjYW4gbGVhZCB0byBhY2Nlc3NpbmcgdW5hbGxvY2F0ZWQgbWVtb3J5LiBBcyBhIGNvbnNlcXVlbmNlLAogICAgRVJSX0FCUlQgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIGhhcyBjYWxsZWQgdGNwX2Fib3J0KCkhCgogIDIwMTAtMDEtMjU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzbm1wX3N0cnVjdHMuaCwgbXNnX2luLmM6IFBhcnRseSBmaXhlZCBidWcgIzIyMDcwIChNSUJfT0JKRUNUX1dSSVRFX09OTFkKICAgIG5vdCBpbXBsZW1lbnRlZCBpbiBTTk1QKTogd3JpdGUtb25seSBvciBub3QtYWNjZXNzaWJsZSBhcmUgc3RpbGwKICAgIHJldHVybmVkIGJ5IGdldG5leHQgKHRob3VnaCBub3QgYnkgZ2V0KQoKICAyMDEwLTAxLTI0OiBTaW1vbiBHb2xkc2NobWlkdAogICogc25tcDogUmVuYW1lZCB0aGUgcHJpdmF0ZSBtaWIgbm9kZSBmcm9tICdwcml2YXRlJyB0byAnbWliX3ByaXZhdGUnIHRvCiAgICBub3QgdXNlIHJlc2VydmVkIEMvQysrIGtleXdvcmRzCgogIDIwMTAtMDEtMjM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMjg3MTY6IHNlbGVjdCgpIHJldHVybnMgMCBhZnRlciB3YWl0aW5nIGZvciBsZXNzCiAgICB0aGFuIDEgbXMKCiAgMjAxMC0wMS0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jLCBhcGlfbXNnLmM6IEZpeGVkIGJ1ZyAjMjg2NTEgKHRjcF9jb25uZWN0OiBubyBjYWxsYmFja3MgY2FsbGVkCiAgICBpZiB0Y3BfZW5xdWV1ZSBmYWlscykgYm90aCBpbiByYXctIGFuZCBuZXRjb25uLUFQSQoKICAyMDEwLTAxLTE5OiBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBGaXhlZCBidWcgIzI3MzE2OiBuZXRjb25uOiBQb3NzaWJsZSBkZWFkbG9jayBpbiBlcnJfdGNwCgogIDIwMTAtMDEtMTg6IElvcmRhbiBOZXNoZXYvU2ltb24gR29sZHNjaG1pZHQKICAqIHNyYy9uZXRpZi9wcHA6IHJlb3JnYW5pc2VkIFBQUCBzb3VyY2Vjb2RlIHRvIDIuMy4xMSBpbmNsdWRpbmcgc29tZQogICAgYnVnZml4IGJhY2twb3J0cyBmcm9tIDIuNC54LgoKICAyMDEwLTAxLTE4OiBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmM6IEZpeGVkIGJ1ZyAjMjg2Nzk6IG1lbV9yZWFsbG9jIGNhbGN1bGF0ZXMgbWVtX3N0YXRzIHdyb25nCgogIDIwMTAtMDEtMTc6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmMsIGFwaV9tc2cuYywgKGFwaV9tc2cuaCwgYXBpLmgsIHNvY2tldHMuYywgdGNwaXAuYyk6CiAgICB0YXNrICMxMDEwMjogIm5ldGNvbm46IGNsZWFuIHVwIGNvbm4tPmVyciB0aHJlYWRpbmcgaXNzdWVzIiBieSBhZGRpbmcKICAgIGVycm9yIHJldHVybiB2YWx1ZSB0byBzdHJ1Y3QgYXBpX21zZ19tc2cKCiAgMjAxMC0wMS0xNzogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaS5oLCBhcGlfbGliLmMsIHNvY2tldHMuYzogQ2hhbmdlZCBuZXRjb25uX3JlY3YoKSBhbmQgbmV0Y29ubl9hY2NlcHQoKQogICAgdG8gcmV0dXJuIGVycl90IChidWdzICMyNzcwOSBhbmQgIzI4MDg3KQoKICAyMDEwLTAxLTE0OiBTaW1vbiBHb2xkc2NobWlkdAogICogLi4uOiBVc2UgdHlwZWRlZiBmb3IgZnVuY3Rpb24gcHJvdG90eXBlcyB0aHJvdWdob3V0IHRoZSBzdGFjay4KCiAgMjAxMC0wMS0xMzogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuaC8uYywgYXBpX2xpYi5jOiBGaXhlZCBidWcgIzI2NjcyIChjbG9zZSBjb25uZWN0aW9uIHdoZW4gcmVjZWl2ZQogICAgd2luZG93ID0gMCkgYnkgY29ycmVjdGx5IGRyYWluaW5nIHJlY3ZtYm94L2FjY2VwdG1ib3gKCiAgMjAxMC0wMS0xMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHBhcC5jOiBGaXhlZCBidWcgIzEzMzE1IChQUFAgUEFQIGF1dGhlbnRpY2F0aW9uIGNhbiByZXN1bHQgaW4KICAgIGVycm9uZW91cyBjYWxsYmFja3MpIGJ5IGNvcHlpbmcgdGhlIGNvZGUgZnJvbSByZWNlbnQgcHBwZAoKICAyMDEwLTAxLTEwOiBTaW1vbiBHb2xkc2NobWlkdAogICogcmF3LmM6IEZpeGVkIGJ1ZyAjMjg1MDYgKHJhd19iaW5kIHNob3VsZCBmaWx0ZXIgcmVjZWl2ZWQgcGFja2V0cykKCiAgMjAxMC0wMS0xMDogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLy5jOiBidWcgIzI4MTI3IChyZW1vdmUgY2FsbCB0byB0Y3Bfb3V0cHV0KCkgZnJvbSB0Y3BfYWNrKF9ub3cpKCkpCgogIDIwMTAtMDEtMDg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjMjg1MTkgKGx3aXBfcmVjdmZyb20gYnVnIHdpdGggbGVuID4gNjU1MzUpCgogIDIwMTAtMDEtMDg6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkbnMuYzogQ29weSBob3N0bmFtZSBmb3IgRE5TX0xPQ0FMX0hPU1RMSVNUX0lTX0RZTkFNSUM9PTEgc2luY2Ugc3RyaW5nCiAgICBwYXNzZWQgdG8gZG5zX2xvY2FsX2FkZGhvc3QoKSBtaWdodCBiZSB2b2xhdGlsZQoKICAyMDEwLTAxLTA3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGltZXJzLmMsIHRjcC5oOiBDYWxsIHRjcF90aW1lcl9uZWVkZWQoKSB3aXRoIE5PX1NZUz09MSwgdG9vCgogIDIwMTAtMDEtMDY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRkYi5oOiBGaXhlZCBidWcgIzI4NDk2OiBtaXNzaW5nIGluY2x1ZGUgZ3VhcmRzIGluIG5ldGRiLmgKCiAgMjAwOS0xMi0zMTogU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgcHBwIGZpbGVzOiBSZW9yZ2FuaXNlZCBQUFAgc291cmNlIGNvZGUgZnJvbSB1Y2lwIHN0cnVjdHVyZSB0byBwcHBkCiAgICBzdHJ1Y3R1cmUgdG8gZWFzaWx5IGNvbXBhcmUgb3VyIGNvZGUgYWdhaW5zdCB0aGUgcHBwZCBjb2RlIChhcm91bmQgdjIuMy4xKQoKICAyMDA5LTEyLTI3OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEFub3RoZXIgZml4IGZvciBidWcgIzI4MjQxIChvb3NlcSBwcm9jZXNzaW5nKSBhbmQgYWRhcHRlZAogICAgdW5pdCB0ZXN0CgoKKFNUQUJMRS0xLjMuMikKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAyMDA5LTEwLTI3IFNpbW9uIEdvbGRzY2htaWR0L1N0ZXBoYW4gTGVzYWdlCiAgKiBuZXRpZmFwaS5jLy5oOiBBZGRlZCBuZXRpZmFwaV9uZXRpZl9zZXRfYWRkcigpCgogIDIwMDktMTAtMDcgU2ltb24gR29sZHNjaG1pZHQvRmFiaWFuIEtvY2gKICAqIGFwaV9tc2cuYywgbmV0YnVmLmMvLmgsIG9wdC5oOiBwYXRjaCAjNjg4ODogUGF0Y2ggZm9yIFVEUCBOZXRidWZzIHRvCiAgICBzdXBwb3J0IGRlc3QtYWRkciBhbmQgZGVzdC1wb3J0IChvcHRpb25hbDogTFdJUF9ORVRCVUZfUkVDVklORk8pCgogIDIwMDktMDgtMjYgU2ltb24gR29sZHNjaG1pZHQvU2ltb24gS2FsbHdlaXQKICAqIHNsaXBpZi5jLy5oOiBidWcgIzI2Mzk3OiBTTElQIHBvbGxpbmcgc3VwcG9ydAoKICAyMDA5LTA4LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgZXRoYXJwLmgvLmM6IHRhc2sgIzkwMzM6IFN1cHBvcnQgSUVFRSA4MDIuMXEgdGFnZ2VkIGZyYW1lIChWTEFOKSwKICAgIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgRVRIQVJQX1NVUFBPUlRfVkxBTiBhbmQgRVRIQVJQX1ZMQU5fQ0hFQ0suCgogIDIwMDktMDgtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwX2FkZHIuaCwgbmV0ZGIuYzogcGF0Y2ggIzY5MDA6IGFkZGVkIGRlZmluZSBpcF9udG9hKHN0cnVjdCBpcF9hZGRyKikKCiAgMjAwOS0wOC0yNCBKYWtvYiBTdG9rbHVuZCBPbGVzZW4KICAqIGF1dG9pcC5jLCBkaGNwLmMsIG5ldGlmLmM6IHBhdGNoICM2NzI1OiBUZWFjaCBBdXRvSVAgYW5kIERIQ1AgdG8gcmVzcG9uZAogICAgdG8gbmV0aWZfc2V0X2xpbmtfdXAoKS4KCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgvLmM6IEFkZGVkIGZ1bmN0aW9uIHRjcF9kZWJ1Z19zdGF0ZV9zdHIoKSB0byBjb252ZXJ0IGEgdGNwIHN0YXRlCiAgICB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy4KCiAgKysgQnVnZml4ZXM6CgogIDIwMDktMTItMjQ6IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYyBBcHBseSBwYXRjaGVzIGZyb20gT2xlZyBUeXNoZXYgdG8gaW1wcm92ZSBPT1MgcHJvY2Vzc2luZwogICAgKEJVRyMyODI0MSkKCiAgMjAwOS0xMi0wNjogU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5oLy5jOiBGaXhlZCBidWcgIzI3MDc5IChZZXQgYW5vdGhlciBsZWFrIGluIFBQUCk6IG91dHBhY2tldF9idWYgY2FuCiAgICBiZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAobGlrZSBpbiB1Y2lwKQoKICAyMDA5LTEyLTA0OiBTaW1vbiBHb2xkc2NobWlkdCAocGF0Y2ggYnkgSW9hcmRhbiBOZXNoZXYpCiAgKiBwYXAuYzogcGF0Y2ggIzY5Njk6IFBQUDogbWlzc2luZyBQQVAgYXV0aGVudGljYXRpb24gVU5USU1FT1VUCgogIDIwMDktMTItMDM6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwX2luLmMsIHRjcF9vdXQuYzogRml4ZWQgYnVnICMyODEwNjogZHVwIGFjayBmb3IgZmFzdCByZXRyYW5zbWl0CiAgICBjb3VsZCBoYXZlIG5vbi16ZXJvIGxlbmd0aAoKICAyMDA5LTEyLTAyOiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjc5MDQ6IFRDUCBzZW5kcyB0b28gbWFueSBBQ0tzOiBkZWxheSByZXNldHRpbmcKICAgIHRjcF9pbnB1dF9wY2IgdW50aWwgYWZ0ZXIgY2FsbGluZyB0aGUgcGNiJ3MgY2FsbGJhY2tzCgogIDIwMDktMTEtMjk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyODA1NDogVHdvIHNlZ21lbnRzIHdpdGggRklOIGZsYWcgb24gdGhlIG91dC1vZi0KICAgIHNlcXVlbmNlIHF1ZXVlLCBhbHNvIGZpeGVkIFBCVUZfUE9PTCBsZWFrIGluIHRoZSBvdXQtb2Ytc2VxdWVuY2UgY29kZQoKICAyMDA5LTExLTI5OiBTaW1vbiBHb2xkc2NobWlkdAogICogcGJ1Zi5jOiBGaXhlZCBidWcgIzI4MDY0OiBwYnVmX2FsbG9jKFBCVUZfUE9PTCkgaXMgbm90IHRocmVhZC1zYWZlIGJ5CiAgICBxdWV1ZWluZyBhIGNhbGwgaW50byB0Y3BpcF90aHJlYWQgdG8gZnJlZSBvb3NlcS1idWZzIGlmIHRoZSBwb29sIGlzIGVtcHR5CgogIDIwMDktMTEtMjY6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaDogRml4ZWQgYnVnICMyODA5ODogTmFnbGUgY2FuIHByZXZlbnQgZmFzdCByZXRyYW5zbWl0IGZyb20gc2VuZGluZwogICAgc2VnbWVudAoKICAyMDA5LTExLTI2OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHNvY2tldHMuYzogRml4ZWQgYnVnICMyODA5OTogQVBJIHJlcXVpcmVkIHRvIGRpc2FibGUgTmFnbGUKICAgIGFsZ29yaXRobSBhdCBQQ0IgbGV2ZWwKCiAgMjAwOS0xMS0yMjogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogRml4ZWQgYnVnICMyNzkwNTogRklOIGlzbid0IGNvbWJpbmVkIHdpdGggZGF0YSBvbiB1bnNlbnQKCiAgMjAwOS0xMS0yMjogU2ltb24gR29sZHNjaG1pZHQgKHN1Z2dlc3RlZCBieSBCaWxsIEF1ZXJiYWNoKQogICogdGNwLmM6IHRjcF9hbGxvYzogcHJldmVudCBpbmNyZWFzaW5nIHN0YXRzLmVyciBmb3IgTUVNUF9UQ1BfUENCIHdoZW4KICAgIHJldXNpbmcgdGltZS13YWl0IHBjYgoKICAyMDA5LTExLTIwOiBTaW1vbiBHb2xkc2NobWlkdCAocGF0Y2ggYnkgQWxiZXJ0IEJhcnRlbCkKICAqIHNvY2tldHMuYzogRml4ZWQgYnVnICMyODA2MjogRGF0YSByZWNlaXZlZCBkaXJlY3RseSBhZnRlciBhY2NlcHRpbmcKICAgIGRvZXMgbm90IHdha2UgdXAgc2VsZWN0CgogIDIwMDktMTEtMTE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRkYi5oOiBGaXhlZCBidWcgIzI3OTk0OiBpbmNvcnJlY3QgZGVmaW5lIGZvciBmcmVlYWRkcmluZm8oYWRkcmluZm8pCgogIDIwMDktMTAtMzA6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogSW5jcmVhc2VkIGRlZmF1bHQgdmFsdWUgZm9yIFRDUF9NU1MgdG8gNTM2LCB1cGRhdGVkIGRlZmF1bHQKICAgIHZhbHVlIGZvciBUQ1BfV05EIHRvIDQqVENQX01TUyB0byBrZWVwIGRlbGF5ZWQgQUNLIHdvcmtpbmcuCgogIDIwMDktMTAtMjg6IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogcmUtd29yayB0aGUgZmFzdCByZXRyYW5zbWlzc2lvbiBjb2RlCiAgICB0byBmb2xsb3cgYWxnb3JpdGhtIGZyb20gVENQL0lQIElsbHVzdHJhdGVkCgogIDIwMDktMTAtMjc6IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3BfaW4uYzogZml4IEJVRyMyNzQ0NTogZ3JvdyBjd25kIHdpdGggZXZlcnkgZHVwbGljYXRlIEFDSwoKICAyMDA5LTEwLTI1OiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IGJ1Zy1maXggaW4gdGhlIFRDUF9FVkVOVF9SRUNWIG1hY3JvIChoYXMgdG8gY2FsbCB0Y3BfcmVjdmVkIGlmCiAgICBwY2ItPnJlY3YgaXMgTlVMTCB0byBrZWVwIHJjdl93bmQgY29ycmVjdCkKCiAgMjAwOS0xMC0yNTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzI2MjUxOiBSU1QgcHJvY2VzcyBpbiBUSU1FX1dBSVQgVENQIHN0YXRlCgogIDIwMDktMTAtMjM6IFNpbW9uIEdvbGRzY2htaWR0IChEYXZpZCBFbXBzb24pCiAgKiB0Y3AuYzogRml4ZWQgYnVnICMyNzc4MzogU2lsbHkgd2luZG93IGF2b2lkYW5jZSBmb3Igc21hbGwgd2luZG93IHNpemVzCgogIDIwMDktMTAtMjE6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyNzIxNTogVENQIHNlbnQoKSBjYWxsYmFjayBnaXZlcyBsZWFkaW5nIGFuZAogICAgdHJhaWxpbmcgMSBieXRlIGxlbiAoU1lOL0ZJTikKCiAgMjAwOS0xMC0yMTogU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogRml4ZWQgYnVnICMyNzMxNTogemVybyB3aW5kb3cgcHJvYmUgYW5kIEZJTgoKICAyMDA5LTEwLTE5OiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jLy5oOiBNaW5vciBjb2RlIHNpbXBsaWZpY2F0aW9uIChkb24ndCBzdG9yZSByZWNlaXZlZCBwYnVmLCBjaGFuZ2UKICAgIGNvbmRpdGlvbmFsIGNvZGUgdG8gYXNzZXJ0IHdoZXJlIGFwcGxpY2FibGUpLCBjaGVjayBwYnVmIGxlbmd0aCBiZWZvcmUKICAgIHRlc3RpbmcgZm9yIHZhbGlkIHJlcGx5CgogIDIwMDktMTAtMTk6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IFJlbW92ZWQgbW9zdCBjYWxscyB0byB1ZHBfY29ubmVjdCBzaW5jZSB0aGV5IGFyZW4ndCBuZWNlc3NhcnkKICAgIHdoZW4gdXNpbmcgdWRwX3NlbmR0b19pZigpIC0gYWx3YXlzIHN0YXkgY29ubmVjdGVkIHRvIElQX0FERFJfQU5ZLgoKICAyMDA5LTEwLTE2OiBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuYzogRml4ZWQgYnVnICMyNzM5MDogU291cmNlIElQIGNoZWNrIGluIGlwX2lucHV0KCkgY2F1c2VzIGl0IHRvIGRyb3AKICAgIHZhbGlkIERIQ1AgcGFja2V0cyAtPiBhbGxvdyAwLjAuMC4wIGFzIHNvdXJjZSBhZGRyZXNzIHdoZW4gTFdJUF9ESENQIGlzCiAgICBlbmFibGVkCgogIDIwMDktMTAtMTU6IFNpbW9uIEdvbGRzY2htaWR0IChPbGVnIFR5c2hldikKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzI3MzI5OiBkdXBhY2tzIGJ5IHVuaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNtaXQKCiAgMjAwOS0xMC0xNTogU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9saWIuYzogRml4ZWQgYnVnICMyNzcwOTogY29ubi0+ZXJyIHJhY2UgY29uZGl0aW9uIG9uIG5ldGNvbm5fcmVjdigpCiAgICB0aW1lb3V0CgogIDIwMDktMTAtMTU6IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhdXRvaXAuYzogRml4ZWQgYnVnICMyNzcwNDogYXV0b2lwIHN0YXJ0cyB3aXRoIHdyb25nIGFkZHJlc3MKICAgIExXSVBfQVVUT0lQX0NSRUFURV9TRUVEX0FERFIoKSByZXR1cm5lZCBhZGRyZXNzIGluIGhvc3QgYnl0ZSBvcmRlciBpbnN0ZWFkCiAgICBvZiBuZXR3b3JrIGJ5dGUgb3JkZXIKCiAgMjAwOS0xMC0xMSBTaW1vbiBHb2xkc2NobWlkdCAoSvZyZyBLZXN0ZW4pCiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjc1MDQ6IHRjcF9lbnF1ZXVlIHdyb25nbHkgY29uY2F0ZW5hdGVzIHNlZ21lbnRzCiAgICB3aGljaCBhcmUgbm90IGNvbnNlY3V0aXZlIHdoZW4gcmV0cmFuc21pdHRpbmcgdW5hY2tlZCBzZWdtZW50cwoKICAyMDA5LTEwLTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaDogRml4ZWQgZGVmYXVsdCB2YWx1ZXMgb2Ygc29tZSBzdGF0cyB0byBvbmx5IGJlIGVuYWJsZWQgaWYgdXNlZAogICAgRml4ZXMgYnVnICMyNzMzODogc3lzX3N0YXRzIGlzIGRlZmluZWQgd2hlbiBOT19TWVMgPSAxCgogIDIwMDktMDgtMzAgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IEZpeGVkIGJ1ZyBidWcgIzI3MzQ1OiAiaXBfZnJhZygpIGRvZXMgbm90IHVzZSB0aGUgTFdJUF9ORVRJRl9MT09QQkFDSwogICAgZnVuY3Rpb24iIGJ5IGNoZWNraW5nIGZvciBsb29wYmFjayBiZWZvcmUgY2FsbGluZyBpcF9mcmFnCgogIDIwMDktMDgtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogZml4ZWQgaW52YWxpZCBkZXBlbmRlbmN5IHRvIGV0aGFycF9xdWVyeSBpZiBESENQX0RPRVNfQVJQX0NIRUNLPT0wCgogIDIwMDktMDgtMjMgU2ltb24gR29sZHNjaG1pZHQKICAqIHBwcC5jOiBidWcgIzI3MDc4OiBQb3NzaWJsZSBtZW1vcnkgbGVhayBpbiBwcHBJbml0KCkKCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogbmV0ZGIuYywgZG5zLmM6IGJ1ZyAjMjY2NTc6IEROUywgaWYgaG9zdCBuYW1lIGlzICJsb2NhbGhvc3QiLCByZXN1bHQKICAgIGlzIGVycm9yLgoKICAyMDA5LTA4LTIzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgaW5pdC5jOiBidWcgIzI2NjQ5OiBUQ1AgZmFpbHMgd2hlbiBUQ1BfTVNTID4gVENQX1NORF9CVUYKICAgIEZpeGVkIHdyb25nIHBhcmVudGhlc2lzLCBhZGRlZCBjaGVjayBpbiBpbml0LmMKCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogcHBwLmM6IGJ1ZyAjMjcyNjY6IHdhaXQtc3RhdGUgZGVidWcgbWVzc2FnZSBpbiBwcHBNYWluIG9jY3VycyBldmVyeSBtcwoKICAyMDA5LTA4LTIzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtYW55IHBwcCBmaWxlczogYnVnICMyNzI2NzogQWRkZWQgaW5jbHVkZSB0byBzdHJpbmcuaCB3aGVyZSBuZWVkZWQKCiAgMjAwOS0wOC0yMyBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmg6IHBhdGNoICM2ODQzOiB0Y3AuaCBtYWNybyBvcHRpbWl6YXRpb24gcGF0Y2ggKGZvciBsaXR0bGUgZW5kaWFuKQoKCihTVEFCTEUtMS4zLjEpCgogICsrIE5ldyBmZWF0dXJlczoKCiAgMjAwOS0wNS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsIHNvY2tldHMuYywgcGJ1Zi5jLCBuZXRidWYuaCwgcGJ1Zi5oOiB0YXNrICM3MDEzOiBBZGRlZCBvcHRpb24KICAgIExXSVBfTkVUSUZfVFhfU0lOR0xFX1BCVUYgdG8gdHJ5IHRvIGNyZWF0ZSB0cmFuc21pdCBwYWNrZXRzIGZyb20gb25seQogICAgb25lIHBidWYgdG8gaGVscCBNQUNzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzY2F0dGVyLWdhdGhlciBETUEuCgogIDIwMDktMDUtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIGljbXAuaCwgaWNtcC5jOiBTaHJpbmtlZCBJQ01QIGNvZGUsIGFkZGVkIG9wdGlvbiB0byBOT1QgY2hlY2sgaWNvbWluZwogICAgRUNITyBwYnVmIGZvciBzaXplIChqdXN0IHVzZSBpdCk6IExXSVBfSUNNUF9FQ0hPX0NIRUNLX0lOUFVUX1BCVUZfTEVOCgogIDIwMDktMDUtMDUgU2ltb24gR29sZHNjaG1pZHQsIEpha29iIFN0b2tsdW5kIE9sZXNlbgogICogaXAuaCwgaXAuYzogQWRkZWQgaXBfY3VycmVudF9uZXRpZigpICYgaXBfY3VycmVudF9oZWFkZXIoKSB0byByZWNlaXZlCiAgICBleHRlbmRlZCBpbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgcmVjZWl2ZWQgcGFja2V0LgoKICAyMDA5LTA0LTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzeXMuaDogTWFkZSBTWVNfTElHSFRXRUlHSFRfUFJPVCBhbmQgc3lzX25vdygpIHdvcmsgd2l0aCBOT19TWVM9MQoKICAyMDA5LTA0LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgb3B0Lmg6IEFkZGVkIG9wdGlvbiBNRU1fVVNFX1BPT0xTX1RSWV9CSUdHRVJfUE9PTCB0byB0cnkgdGhlIG5leHQKICAgIGJpZ2dlciBtYWxsb2MgcG9vbCBpZiBvbmUgaXMgZW1wdHkgKG9ubHkgdXNhYmxlIHdpdGggTUVNX1VTRV9QT09MUykuCgogIDIwMDktMDQtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGRucy5jLCBpbml0LmMsIGRucy5oLCBvcHQuaDogdGFzayAjNzUwNywgcGF0Y2ggIzY3ODY6IEROUyBzdXBwb3J0cyBzdGF0aWMKICAgIGhvc3RzIHRhYmxlLiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIEROU19MT0NBTF9IT1NUTElTVCBhbmQKICAgIEROU19MT0NBTF9IT1NUTElTVF9JU19EWU5BTUlDLiBBbHNvLCBETlNfTE9PS1VQX0xPQ0FMX0VYVEVSTigpIGNhbiBiZSBkZWZpbmVkCiAgICBhcyBhbiBleHRlcm5hbCBmdW5jdGlvbiBmb3IgbG9va3VwLgoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IHBhdGNoICM2NzYzOiBHbG9iYWwgREhDUCBYSUQgY2FuIGJlIHJlZGVmaW5lZCB0byBzb21ldGhpbmcgbW9yZSB1bmlxdWUKCiAgMjAwOS0wMy0zMSBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9vdXQuYywgdGNwX2luLmMsIHN5cy5oLCB0Y3AuaCwgb3B0cy5oOiBhZGQgc3VwcG9ydCBmb3IKICAgIFRDUCB0aW1lc3RhbXAgb3B0aW9ucywgb2ZmIGJ5IGRlZmF1bHQuICBSZXdvcmsgdGNwX2VucXVldWUoKSB0bwogICAgdGFrZSBvcHRpb24gZmxhZ3MgcmF0aGVyIHRoYW4gc3BlY2lmaWVkIG9wdGlvbiBkYXRhCgogIDIwMDktMDItMTggU2ltb24gR29sZHNjaG1pZHQKICAqIGNjLmg6IEFkZGVkIHByaW50ZiBmb3JtYXR0ZXIgZm9yIHNpemVfdDogU1pUX0YKCiAgMjAwOS0wMi0xNiBTaW1vbiBHb2xkc2NobWlkdCAocGF0Y2ggYnkgUmlzaGkgS2hhbikKICAqIGljbXAuYywgb3B0Lmg6IHBhdGNoICM2NTM5OiAoY29uZmlndXJhYmxlKSByZXNwb25zZSB0byBicm9hZGNhc3QtIGFuZCBtdWx0aWNhc3QKICAgIHBpbmdzCgogIDIwMDktMDItMTIgU2ltb24gR29sZHNjaG1pZHQKICAqIGluaXQuaDogQWRkZWQgTFdJUF9WRVJTSU9OIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBzdGFjawoKICAyMDA5LTAyLTExIFNpbW9uIEdvbGRzY2htaWR0IChzdWdnZXN0ZWQgYnkgR290dGZyaWVkIFNwaXRhbGVyKQogICogb3B0LmgsIG1lbXAuaC8uYzogYWRkZWQgTUVNUF9NRU1fTUFMTE9DIHRvIHVzZSBtZW1fbWFsbG9jL21lbV9mcmVlIGluc3RlYWQKICAgIG9mIHRoZSBwb29sIGFsbG9jYXRvciAoY2FuIHNhdmUgY29kZSBzaXplIHdpdGggTUVNX0xJQkNfTUFMTE9DIGlmIGxpYmMtbWFsbG9jCiAgICBpcyBvdGhlcndpc2UgdXNlZCkKCiAgMjAwOS0wMS0yOCBKb25hdGhhbiBMYXJtb3VyIChzdWdnZXN0ZWQgYnkgQmlsbCBCYXVlcmJhY2gpCiAgKiBpcHY0L2luZXRfY2hrc3VtLmMsIGlwdjQvbHdpcC9pbmV0X2Noa3N1bS5oOiBpbmV0X2Noa3N1bV9wc2V1ZG9fcGFydGlhbCgpCiAgaXMgb25seSB1c2VkIGJ5IFVEUExJVEUgYXQgcHJlc2VudCwgc28gY29uZGl0aW9uYWxpc2UgaXQuCgogIDIwMDgtMTItMDMgU2ltb24gR29sZHNjaG1pZHQgKGJhc2Ugb24gcGF0Y2ggZnJvbSBMdWNhIENlcmVzb2xpKQogICogYXV0b2lwLmM6IGNoZWNrZWQgaW4gKHNsaWdodGx5IG1vZGlmaWVkKSBwYXRjaCAjNjY4MzogQ3VzdG9taXphYmxlIEFVVE9JUAogICAgInNlZWQiIGFkZHJlc3MuIFRoaXMgc2hvdWxkIHJlZHVjZSBBVVRPSVAgY29uZmxpY3RzIGlmCiAgICBMV0lQX0FVVE9JUF9DUkVBVEVfU0VFRF9BRERSIGlzIG92ZXJyaWRkZW4uCgogIDIwMDgtMTAtMDIgSm9uYXRoYW4gTGFybW91ciBhbmQgUmlzaGkgS2hhbgogICogc29ja2V0cy5jIChsd2lwX2FjY2VwdCk6IFJldHVybiBFV09VTERCTE9DSyBpZiB3b3VsZCBibG9jayBvbiBub24tYmxvY2tpbmcKICAgIHNvY2tldC4KCiAgMjAwOC0wNi0zMCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtLmMsIG9wdC5oLCBzdGF0cy5oOiBmaXhlZCBidWcgIzIxNDMzOiBDYWxsaW5nIG1lbV9mcmVlL3BidWZfZnJlZSBmcm9tCiAgICBpbnRlcnJ1cHQgY29udGV4dCBpc24ndCBzYWZlOiBMV0lQX0FMTE9XX01FTV9GUkVFX0ZST01fT1RIRVJfQ09OVEVYVCBhbGxvd3MKICAgIG1lbV9mcmVlIHRvIHJ1biBiZXR3ZWVuIG1lbV9tYWxsb2MgaXRlcmF0aW9ucy4gQWRkZWQgaWxsZWdhbCBjb3VudGVyIGZvcgogICAgbWVtIHN0YXRzLgoKICAyMDA4LTA2LTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzdGF0cy5oLy5jLCBzb21lIG90aGVyIGZpbGVzOiBwYXRjaCAjNjQ4Mzogc3RhdHMgbW9kdWxlIGltcHJvdmVtZW50OgogICAgQWRkZWQgZGVmaW5lcyB0byBkaXNwbGF5IGVhY2ggbW9kdWxlJ3Mgc3RhdGlzdGljIGluZGl2aWR1YWxseSwgYWRkZWQgc3RhdHMKICAgIGRlZmluZXMgZm9yIE1FTSwgTUVNUCBhbmQgU1lTIG1vZHVsZXMsIHJlbW92ZWQgKHVudXNlZCkgcmV4bWl0IGNvdW50ZXIuCgogIDIwMDgtMDYtMTcgU2ltb24gR29sZHNjaG1pZHQKICAqIGVyci5oOiBwYXRjaCAjNjQ1OTogTWFkZSBlcnJfdCBvdmVycmlkYWJsZSB0byB1c2UgYSBtb3JlIGVmZmljaWVudCB0eXBlCiAgICAoZGVmaW5lIExXSVBfRVJSX1QgaW4gY2MuaCkKCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdAogICogc2xpcGlmLmM6IHBhdGNoICM2NDgwOiBBZGRlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBzbGlwaWYgZm9yIHN5bW1ldHJ5CiAgICB0byBsb29waWYKCiAgMjAwOC0wNi0xNyBTaW1vbiBHb2xkc2NobWlkdCAocGF0Y2ggYnkgTHVjYSBDZXJlc29saSkKICAqIG5ldGlmLmMsIGxvb3BpZi5jLCBpcC5jLCBuZXRpZi5oLCBsb29waWYuaCwgb3B0Lmg6IENoZWNrZWQgaW4gc2xpZ2h0bHkKICAgIG1vZGlmaWVkIHZlcnNpb24gb2YgcGF0Y2ggIyA2MzcwOiBNb3ZlZCBsb29waWYgY29kZSB0byBuZXRpZi5jIHNvIHRoYXQKICAgIGxvb3BiYWNrIHRyYWZmaWMgaXMgc3VwcG9ydGVkIG9uIGFsbCBuZXRpZnMgKGFsbCBsb2NhbCBJUHMpLgogICAgQWRkZWQgb3B0aW9uIHRvIGxpbWl0IGxvb3BiYWNrIHBhY2tldHMgZm9yIGVhY2ggbmV0aWZzLgoKCiAgKysgQnVnZml4ZXM6CiAgMjAwOS0wOC0xMiBLaWVyYW4gTWFuc2xleQogICogdGNwX2luLmMsIHRjcC5jOiBGaXggYnVnICMyNzIwOTogaGFuZGxlIHRyaW1taW5nIG9mIHNlZ21lbnRzIHdoZW4KICAgIG91dCBvZiB3aW5kb3cgb3Igb3V0IG9mIG9yZGVyIHByb3Blcmx5CgogIDIwMDktMDgtMTIgS2llcmFuIE1hbnNsZXkKICAqIHRjcF9pbi5jOiBGaXggYnVnICMyNzE5OTogdXNlIHNuZF93bDIgaW5zdGVhZCBvZiBzbmRfd2wxCgogIDIwMDktMDctMjggU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5oOiBGaXhlZCBidWcgIzI3MTA1OiAicmVhbGxvYygpIGNhbm5vdCByZXBsYWNlIG1lbV9yZWFsbG9jKCkicwoKICAyMDA5LTA3LTI3IEtpZXJhbiBNYW5zbGV5CiAgKiBhcGkuaCBhcGlfbXNnLmggbmV0ZGIuaCBzb2NrZXRzLmg6IGFkZCBtaXNzaW5nICNpbmNsdWRlIGRpcmVjdGl2ZXMKCiAgMjAwOS0wNy0wOSBLaWVyYW4gTWFuc2xleQogICogYXBpX21zZy5jLCBzb2NrZXRzLmMsIGFwaS5oOiBCVUcyMzI0MCB1c2Ugc2lnbmVkIGNvdW50ZXJzIGZvcgogICAgcmVjdl9hdmFpbCBhbmQgZG9uJ3QgaW5jcmVtZW50IGNvdW50ZXJzIHVudGlsIG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5CiAgICBzZW50IHRvIG1ib3gKCiAgMjAwOS0wNi0yNSBLaWVyYW4gTWFuc2xleQogICogYXBpX21zZy5jIGFwaS5oOiBCVUcyNjcyMjogaW5pdGlhbGlzZSBuZXRjb25uIHdyaXRlIHZhcmlhYmxlcyAKICAgIGluIG5ldGNvbm5fYWxsb2MKCiAgMjAwOS0wNi0yNSBLaWVyYW4gTWFuc2xleQogICogdGNwLmg6IEJVRzI2ODc5OiBzZXQgcmV0IHZhbHVlIGluIFRDUF9FVkVOVCBtYWNyb3Mgd2hlbiBmdW5jdGlvbiBpcyBub3Qgc2V0CgogIDIwMDktMDYtMjUgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogQlVHMjYzMDEgYW5kIEJVRzI2MjY3OiBjb3JyZWN0CiAgICBzaW11bHRhbmVvdXMgY2xvc2UgYmVoYXZpb3VyLCBhbmQgbWFrZSBzbmRfbnh0IGhhdmUgdGhlIHNhbWUgbWVhbmluZyAKICAgIGFzIGluIHRoZSBSRkNzLgoKICAyMDA5LTA1LTEyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuaCwgZXRoYXJwLmMsIG5ldGlmLmM6IGZpeGVkIGJ1ZyAjMjY1MDc6ICJHcmF0dWl0b3VzIEFSUCBkZXBlbmRzIG9uCiAgICBhcnBfdGFibGUgLyB1c2VzIGV0aGFycF9xdWVyeSIgYnkgYWRkaW5nIGV0aGFycF9ncmF0dWl0b3VzKCkKCiAgMjAwOS0wNS0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogaXAuaCwgaXAuYywgaWdtcC5jOiBidWcgIzI2NDg3OiBBZGRlZCBpcF9vdXRwdXRfaWZfb3B0IHRoYXQgY2FuIGFkZCBJUCBvcHRpb25zCiAgICB0byB0aGUgSVAgaGVhZGVyICh1c2VkIGJ5IGlnbXBfaXBfb3V0cHV0X2lmKQoKICAyMDA5LTA1LTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbmV0X2Noa3N1bS5jOiBPbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMsIHVzZSBMV0lQX1BMQVRGT1JNX0hUT05TIChpZgogICAgZGVmaW5lZCkgZm9yIFNXQVBfQllURVNfSU5fV09SRCB0byBzcGVlZCB1cCBjaGVja3N1bW1pbmcuCgogIDIwMDktMDUtMDUgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogYnVnICMyNjQwNTogUHJlbWF0dXJlbHkgcmVsZWFzZWQgc2VtYXBob3JlIGNhdXNlcyBsd2lwX3NlbGVjdCgpCiAgICB0byBjcmFzaAoKICAyMDA5LTA1LTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbml0LmM6IHNubXAgd2FzIG5vdCBpbml0aWFsaXplZCBpbiBsd2lwX2luaXQoKQoKICAyMDA5LTA1LTA0IEZy6WTpcmljIEJlcm5vbgogICogZGhjcC5jLCBuZXRiaW9zLmM6IENoYW5nZXMgaWYgSVBfU09GX0JST0FEQ0FTVCBpcyBlbmFibGVkLgoKICAyMDA5LTA1LTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaDogYnVnICMyNjM0OTogTmFnbGUgYWxnb3JpdGhtIGRvZXNuJ3Qgc2VuZCBhbHRob3VnaCBzZWdtZW50IGlzIGZ1bGwKICAgIChhbmQgdW5zZW50LT5uZXh0ID09IE5VTEwpCgogIDIwMDktMDUtMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcGlwLmgsIHRjcGlwLmM6IGZpeGVkIHRjcGlwX3VudGltZW91dCAoZG9lcyBub3QgbmVlZCB0aGUgdGltZSwgYnJva2VuIGFmdGVyCiAgICAxLjMuMCBpbiBDVlMgb25seSkgLSBmaXhlcyBjb21waWxhdGlvbiBvZiBwcHBfb2UuYwoKICAyMDA5LTA1LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtc2dfaW4uYzogZml4ZWQgYnVnICMyNTYzNjogU05NUFNFVCB2YWx1ZSBpcyBpZ25vcmVkIGZvciBpbnRlZ2VyIGZpZWxkcwoKICAyMDA5LTA1LTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYXAuYzogYnVnICMyMTY4MDogUFBQIHVwYXBfcmF1dGhuYWsoKSBkcm9wcyBsZWdhbCBOQUsgcGFja2V0cwoKICAyMDA5LTA1LTAxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwcHAuYzogYnVnICMyNDIyODogTWVtb3J5IGNvcnJ1cHRpb24gd2l0aCBQUFAgYW5kIERIQ1AKCiAgMjAwOS0wNC0yOSBGculk6XJpYyBCZXJub24KICAqIHJhdy5jLCB1ZHAuYywgaW5pdC5jLCBvcHQuaCwgaXAuaCwgc29ja2V0cy5oOiBidWcgIzI2MzA5OiBJbXBsZW1lbnQgdGhlCiAgICBTTyhGKV9CUk9BRENBU1QgZmlsdGVyIGZvciBhbGwgQVBJIGxheWVycy4gQXZvaWQgdGhlIHVuaW5kZW50ZWQgcmVjZXB0aW9uCiAgICBvZiBicm9hZGNhc3QgcGFja2V0cyBldmVuIHdoZW4gdGhpcyBvcHRpb24gd2Fzbid0IHNldC4gUG9ydCBtYWludGFpbmVycwogICAgd2hpY2ggd2FudCB0byBlbmFibGUgdGhpcyBmaWx0ZXIgaGF2ZSB0byBzZXQgSVBfU09GX0JST0FEQ0FTVD0xIGluIG9wdC5oLgogICAgSWYgeW91IHdhbnQgdGhpcyBvcHRpb24gYWxzbyBmaWx0ZXIgYnJvYWRjYXN0IG9uIHJlY3Ygb3BlcmF0aW9ucywgeW91IGFsc28KICAgIGhhdmUgdG8gc2V0IElQX1NPRl9CUk9BRENBU1RfUkVDVj0xIGluIG9wdC5oLgoKICAyMDA5LTA0LTI4IFNpbW9uIEdvbGRzY2htaWR0LCBKYWtvYiBTdG9rbHVuZCBPbGVzZW4KICAqIGRoY3AuYzogcGF0Y2ggIzY3MjEsIGJ1Z3MgIzI1NTc1LCAjMjU1NzY6IFNvbWUgc21hbGwgZml4ZXMgdG8gREhDUCBhbmQKICAgIERIQ1AvQVVUT0lQIGNvb3BlcmF0aW9uCgogIDIwMDktMDQtMjUgU2ltb24gR29sZHNjaG1pZHQsIE9sZWcgVHlzaGV2CiAgKiB0Y3Bfb3V0LmM6IGJ1ZyAjMjQyMTI6IERlYWRsb2NrZWQgdGNwX3JldHJhbnNtaXQgZHVlIHRvIGV4Y2VlZGVkIHBjYi0+Y3duZAogICAgRml4ZWQgYnkgc29ydGluZyB0aGUgdW5zZW50IGFuZCB1bmFja2VkIHF1ZXVlcyAoc2VnbWVudHMgYXJlIGluc2VydGVkIGF0IHRoZQogICAgcmlnaHQgcGxhY2UgaW4gdGNwX291dHB1dCBhbmQgdGNwX3JleG1pdCkuCgogIDIwMDktMDQtMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYywgbWVtLmMsIG1lbXAuaCwgbWVtX3N0ZC5oOiBidWcgIzI2MjEzICJQcm9ibGVtIHdpdGggbWVtb3J5IGFsbG9jYXRpb24KICAgIHdoZW4gZGVidWdnaW5nIjogbWVtcF9zaXplcyBjb250YWluZWQgdGhlIHdyb25nIHNpemVzIChpbmNsdWRpbmcgc2FuaXR5CiAgICByZWdpb25zKTsgbWVtcCBwb29scyBmb3IgTUVNX1VTRV9QT09MUyB3ZXJlIHRvbyBzbWFsbAoKICAyMDA5LTA0LTI0IFNpbW9uIEdvbGRzY2htaWR0LCBGculk6XJpYyBCZXJub24KICAqIGluZXQuYzogcGF0Y2ggIzY3NjU6IEZpeCBhIHNtYWxsIHByb2JsZW0gd2l0aCB0aGUgbGFzdCBjaGFuZ2VzIChpbmNvcnJlY3QKICAgIGJlaGF2aW9yLCB3aXRoIHdpdGggaXAgYWRkcmVzcyBzdHJpbmcgbm90IGVuZGVkIGJ5IGEgJ1wwJywgYSBzcGFjZSBvciBhCiAgICBlbmQgb2YgbGluZSkKCiAgMjAwOS0wNC0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogcmF3YXBpLnR4dDogRml4ZWQgYnVnICMyNjA2OTogQ29ycmVjdGVkIGRvY3VtZW50YXRpb246IGlmIHRjcF9jb25uZWN0IGZhaWxzLAogICAgcGNiLT5lcnIgaXMgY2FsbGVkLCBub3QgcGNiLT5jb25uZWN0ZWQgKHdpdGggYW4gZXJyb3IgY29kZSkuCgogIDIwMDktMDQtMTkgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9vdXQuYzogRml4ZWQgYnVnICMyNjIzNjogIlRDUCBvcHRpb25zICh0aW1lc3RhbXApIGRvbid0IHdvcmsgd2l0aAogICAgbm8tY29weS10Y3B3cml0ZSI6IGRlYWxsb2NhdGUgb3B0aW9uIGRhdGEsIG9ubHkgY29uY2F0IHNlZ21lbnRzIHdpdGggc2FtZSBmbGFncwoKICAyMDA5LTA0LTE5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIGJ1ZyAjMjUwOTQ6ICJaZXJvLWxlbmd0aCBwYnVmIiAob3B0aW9ucyBhcmUgbm93IGFsbG9jYXRlZAogICAgaW4gdGhlIGhlYWRlciBwYnVmLCBub3QgdGhlIGRhdGEgcGJ1ZikKCiAgMjAwOS0wNC0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jOiBmaXhlZCBidWcgIzI1Njk1OiBTZWdtZW50YXRpb24gZmF1bHQgaW4gZG9fd3JpdGVtb3JlKCkKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiB0cmllZCB0byBmaXggYnVnICMyMzU1OTogbHdpcF9yZWN2ZnJvbSBwcm9ibGVtIHdpdGggdGNwCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGRoY3AuYzogdGFzayAjOTE5MjogbWVtX2ZyZWUgb2YgZGhjcC0+b3B0aW9uc19pbiBhbmQgZGhjcC0+bXNnX2luCgogIDIwMDktMDQtMTUgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmMsIGlwNi5jLCB0Y3Bfb3V0LmMsIGlwLmg6IHBhdGNoICM2ODA4OiBBZGQgYSB1dGlsaXR5IGZ1bmN0aW9uCiAgICBpcF9oaW50ZWRfb3V0cHV0KCkgKGZvciBzbWFsbGVyIGNvZGUgbWFpbmx5KQoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbmV0LmM6IHBhdGNoICM2NzY1OiBTdXBwb3J0aW5nIG5ldyBsaW5lIGNoYXJhY3RlcnMgaW4gaW5ldF9hdG9uKCkKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBwYXRjaCAjNjc2NDogREhDUCByZWJpbmQgYW5kIHJlbmV3IGRpZCBub3Qgc2VuZCBob3N0bmFtIG9wdGlvbjsKICAgIENvbnZlcnRlZCBjb25zdGFudCBPUFRJT05fTUFYX01TR19TSVpFIHRvIG5ldGlmLT5tdHUsIGNoZWNrIGlmIG5ldGlmLT5tdHUKICAgIGlzIGJpZyBlbm91Z2ggaW4gZGhjcF9zdGFydAoKICAyMDA5LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRidWYuYzogYnVnICMyNjAyNzogbmV0YnVmX2NoYWluIHJlc3VsdGVkIGluIHBidWYgbWVtb3J5IGxlYWsKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jLCBwcHAuYzogYnVnICMyNTc2MzogY29ycmVjdGVkIDQgb2NjdXJyZW5jZXMgb2YgU01FTUNQWSB0byBNRU1DUFkKCiAgMjAwOS0wNC0xNSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBidWcgIzI2MTIxOiBzZXRfZXJybm8gY2FuIGJlIG92ZXJyaWRkZW4KCiAgMjAwOS0wNC0wOSBLaWVyYW4gTWFuc2xleSAocGF0Y2ggZnJvbSBMdWNhIENlcmVzb2xpIDxsdWNhY2VyZXNvbGk+KQogICogaW5pdC5jLCBvcHQuaDogUGF0Y2gjNjc3NCBUQ1BfUVVFVUVfT09TRVEgYnJlYWtzIGNvbXBpbGF0aW9uIHdoZW4KICAgIExXSVBfVENQPT0wCgogIDIwMDktMDQtMDkgS2llcmFuIE1hbnNsZXkgKHBhdGNoIGZyb20gUm95IExlZSA8cm95bGVlMTc+KQogICogdGNwLmg6IFBhdGNoIzY4MDIgQWRkIGRvLXdoaWxlLWNsYXVzZXMgdG8gdGhvc2UgZnVuY3Rpb24gbGlrZQogICAgbWFjcm9zIGluIHRjcC5oCgogIDIwMDktMDMtMzEgS2llcmFuIE1hbnNsZXkKICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaCwgb3B0Lmg6IFJld29yayB0aGUgd2F5IHdpbmRvdwogICAgdXBkYXRlcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2VudCAoQlVHMjA1MTUpCgogICogdGNwX2luLmM6IGNvcGUgd2l0aCBTWU4gcGFja2V0cyByZWNlaXZlZCBkdXJpbmcgZXN0YWJsaXNoZWQgc3RhdGVzLAogICAgYW5kIHJldHJhbnNtaXNzaW9uIG9mIGluaXRpYWwgU1lOLgoKICAqIHRjcF9vdXQuYzogc2V0IHB1c2ggYml0IGNvcnJlY3RseSB3aGVuIHRjcCBzZWdtZW50cyBhcmUgbWVyZ2VkCgogIDIwMDktMDMtMjcgS2llcmFuIE1hbnNsZXkKICAqIHRjcF9vdXQuYyBzZXQgd2luZG93IGNvcnJlY3RseSBvbiBwcm9iZXMgKGNvcnJlY3RpbmcgY2hhbmdlIG1hZGUKICAgIHllc3RlcmRheSkKCiAgMjAwOS0wMy0yNiBLaWVyYW4gTWFuc2xleQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3AuaDogYWRkIHRjcF9hYmFuZG9uKCkgdG8gY29wZSB3aXRoIGRyb3BwaW5nCiAgICBjb25uZWN0aW9ucyB3aGVyZSBubyByZXNldCByZXF1aXJlZCAoYnVnICMyNTYyMikKCiAgKiB0Y3Bfb3V0LmM6IHNldCBUQ1BfQUNLIGZsYWcgb24ga2VlcGFsaXZlIGFuZCB6ZXJvIHdpbmRvdyBwcm9iZXMgCiAgICAoYnVnICMyMDc3OSkKCiAgMjAwOS0wMi0xOCBTaW1vbiBHb2xkc2NobWlkdCAoSm9uYXRoYW4gTGFybW91ciBhbmQgQmlsbCBBdWVyYmFjaCkKICAqIGlwX2ZyYWcuYzogcGF0Y2ggIzY1Mjg6IHRoZSBidWZmZXIgdXNlZCBmb3IgSVBfRlJBR19VU0VTX1NUQVRJQ19CVUYgY291bGQgYmUKICAgIHRvbyBzbWFsbCBkZXBlbmRpbmcgb24gTUVNX0FMSUdOTUVOVAoKICAyMDA5LTAyLTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmgvLmMsIGFwaV8qLmgvLmM6IGZpeGVkIGFyZ3VtZW50cyBvZiBzb2NrZXQgZnVuY3Rpb25zIHRvIG1hdGNoIHRoZSBzdGFuZGFyZDsKICAgIGNvbnZlcnRlZCBzaXplIGFyZ3VtZW50IG9mIG5ldGNvbm5fd3JpdGUgdG8gJ3NpemVfdCcKCiAgMjAwOS0wMi0xNiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcC5jOiBmaXhlZCBidWcgIzI0NDQwOiBUQ1AgY29ubmVjdGlvbiBjbG9zZSBwcm9ibGVtIG9uIDY0LWJpdCBob3N0CiAgICBieSBtb3ZpbmcgYWNjZXB0IGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdG8gVENQX1BDQl9DT01NT04KCiAgMjAwOS0wMi0xMiBTaW1vbiBHb2xkc2NobWlkdAogICogZGhjcC5jOiBmaXhlZCBidWcgIzI1MzQ1IChESENQREVDTElORSBpcyBzZW50IHdpdGggIk1heGltdW0gbWVzc2FnZSBzaXplIgogICAgb3B0aW9uKQoKICAyMDA5LTAyLTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IGZpeGVkIGJ1ZyAjMjQ0ODAgKHJlbGVhc2luZyBvbGQgdWRwX3BkYiBhbmQgcGJ1ZiBpbiBkaGNwX3N0YXJ0KQoKICAyMDA5LTAyLTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgYXBpX21zZy5jOiBhZGRlZCBjb25maWd1cmFibGUgZGVmYXVsdCB2YWx1ZCBmb3IgbmV0Y29ubi0+cmVjdl9idWZzaXplOgogICAgUkVDVl9CVUZTSVpFX0RFRkFVTFQgKGZpeGVzIGJ1ZyAjMjM3MjY6IHBidWYgcG9vbCBleGhhdXN0aW9uIG9uIHNsb3cgcmVjdigpKQoKICAyMDA5LTAyLTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuYzogZml4ZWQgYnVnICMyNTQ2NzogTGlzdGVuIGJhY2tsb2cgaXMgbm90IHJlc2V0IG9uIHRpbWVvdXQgaW4gU1lOX1JDVkQ6CiAgICBBY2NlcHRzX3BlbmRpbmcgaXMgZGVjcmVhc2Ugb24gYSBjb3JyZXNwb25kaW5nIGxpc3RlbiBwY2Igd2hlbiBhIGNvbm5lY3Rpb24KICAgIGluIHN0YXRlIFNZTl9SQ1ZEIGlzIGNsb3NlLgoKICAyMDA5LTAxLTI4IEpvbmF0aGFuIExhcm1vdXIKICAqIHBidWYuYzogcmVjbGFpbSBwYnVmcyBmcm9tIFRDUCBvdXQtb2Ytc2VxdWVuY2Ugc2VnbWVudHMgaWYgd2UgcnVuCiAgICBvdXQgb2YgcG9vbCBwYnVmcy4KCiAgMjAwOC0xMi0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogbWFueSBmaWxlczogcGF0Y2ggIzY2OTk6IGZpeGVkIHNvbWUgd2FybmluZ3Mgb24gcGxhdGZvcm0gd2hlcmUgc2l6ZW9mKGludCkgPT0gMiAKCiAgMjAwOC0xMi0xMCBUYW1hcyBTb21vZ3lpLCBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYzogZml4ZWQgYnVnICMyNTA1MTogbHdpcF9yZWN2ZnJvbSBwcm9ibGVtIHdpdGggdWRwOiBmcm9tYWRkciBhbmQKICAgIHBvcnQgdXNlcyBkZWxldGVkIG5ldGJ1Zi4KCiAgMjAwOC0xMC0xOCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX2luLmM6IGZpeGVkIGJ1ZyAjIzI0NTk2OiBWdWxuZXJhYmlsaXR5IG9uIGZhdWx0eSBUQ1Agb3B0aW9ucyBsZW5ndGgKICAgIGluIHRjcF9wYXJzZW9wdAoKICAyMDA4LTEwLTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9mcmFnLmM6IGZpeGVkIGJ1ZyAjMjQ1MTc6IElQIHJlYXNzZW1ibHkgY3Jhc2hlcyBvbiB1bmFsaWduZWQgSVAgaGVhZGVycwogICAgYnkgcGFja2luZyB0aGUgc3RydWN0IGlwX3JlYXNzX2hlbHBlci4KCiAgMjAwOC0xMC0wMyBEYXZpZCBXb29kaG91c2UsIEpvbmF0aGFuIExhcm1vdXIKICAqIGV0aGFycC5jIChldGhhcnBfYXJwX2lucHV0KTogRml4IHR5cGUgYWxpYXNpbmcgcHJvYmxlbSBjb3B5aW5nIGlwIGFkZHJlc3MuCgogIDIwMDgtMTAtMDIgSm9uYXRoYW4gTGFybW91cgogICogZG5zLmM6IEhhcmQtY29kZSBzdHJ1Y3R1cmUgc2l6ZXMsIHRvIGF2b2lkIGlzc3VlcyBvbiBzb21lIGNvbXBpbGVycyB3aGVyZQogICAgcGFkZGluZyBpcyBpbmNsdWRlZC4KCiAgMjAwOC0wOS0zMCBKb25hdGhhbiBMYXJtb3VyCiAgKiBzb2NrZXRzLmMgKGx3aXBfYWNjZXB0KTogY2hlY2sgYWRkciBpc24ndCBOVUxMLiBJZiBpdCdzIHZhbGlkLCBkbyBhbgogICAgYXNzZXJ0aW9uIGNoZWNrIHRoYXQgYWRkcmxlbiBpc24ndCBOVUxMLgoKICAyMDA4LTA5LTMwIEpvbmF0aGFuIExhcm1vdXIKICAqIHRjcC5jOiBGaXggYnVnICMyNDIyNywgd3JvbmcgZXJyb3IgbWVzc2FnZSBpbiB0Y3BfYmluZC4KCiAgMjAwOC0wOC0yNiBTaW1vbiBHb2xkc2NobWlkdAogICogaW5ldC5oLCBpcF9hZGRyLmg6IGZpeGVkIGJ1ZyAjMjQxMzI6IENyb3NzLWRlcGVuZGVuY3kgYmV0d2VlbiBpcF9hZGRyLmggYW5kCiAgICBpbmV0LmggLT4gbW92ZWQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IGluX2FkZHIgZnJvbSBpcF9hZGRyLmggdG8gaW5ldC5oCgogIDIwMDgtMDgtMTQgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYzogZml4ZWQgYnVnICMyMzg0NzogZG9fY2xvc2VfaW50ZXJuYWwgcmVmZXJlbmNlcyBmcmVlZCBtZW1vcnkgKHdoZW4KICAgIHRjcF9jbG9zZSByZXR1cm5zICE9IEVSUl9PSykKCiAgMjAwOC0wNy0wOCBGculk6XJpYyBCZXJub24KICAqIHN0YXRzLmg6IEZpeCBzb21lIGJ1aWxkIGJ1Z3MgaW50cm9kdWNlZCB3aXRoIHBhdGNoICM2NDgzIChtaXNzaW5nIHNvbWUgcGFyYW1ldGVycwogICAgaW4gbWFjcm9zLCBtYWlubHkgaWYgTUVNX1NUQVRTPTAgYW5kIE1FTVBfU1RBVFM9MCkuCgogIDIwMDgtMDYtMjQgSm9uYXRoYW4gTGFybW91cgogICogdGNwX2luLmM6IEZpeCBmb3IgYnVnICMyMzY5MyBhcyBzdWdnZXN0ZWQgYnkgQXJ0IFIuIEVuc3VyZSBjc2VnIGlzIHVudXNlZAogICAgaWYgdGNwX3NlZ19jb3B5IGZhaWxzLgoKICAyMDA4LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpbmV0X2Noa3N1bS5jOiBDaGVja2VkIGluIHNvbWUgaWRlYXMgb2YgcGF0Y2ggIzY0NjAgKGxvb3Agb3B0aW1pemF0aW9ucykKICAgIGFuZCBjcmVhdGVkIGRlZmluZXMgZm9yIHN3YXBwaW5nIGJ5dGVzIGFuZCBmb2xkaW5nIHUzMiB0byB1MTYuCgogIDIwMDgtMDUtMzAgS2llcmFuIE1hbnNsZXkKICAqIHRjcF9pbi5jIFJlbW92ZSByZWR1bmRhbnQgImlmIiBzdGF0ZW1lbnQsIGFuZCB1c2UgcmVhbCByY3Zfd25kCiAgICByYXRoZXIgdGhhbiByY3ZfYW5uX3duZCB3aGVuIGRlY2lkaW5nIGlmIHBhY2tldHMgYXJlIGluLXdpbmRvdy4KICAgIENvbnRyaWJ1dGVkIGJ5IDxhcmFzbXVzc2VuQGNvbnN1bHRhbnQuZGF0YXN5cy5zd3JpLmVkdT4KCiAgMjAwOC0wNS0zMCBLaWVyYW4gTWFuc2xleQogICogbWVtLmg6IEZpeCBCVUcjMjMyNTQuICBDaGFuZ2UgbWFjcm8gZGVmaW5pdGlvbiBvZiBtZW1fKiB0byBhbGxvdwogICAgcGFzc2luZyBhcyBmdW5jdGlvbiBwb2ludGVycyB3aGVuIE1FTV9MSUJDX01BTExPQyBpcyBkZWZpbmVkLgoKICAyMDA4LTA1LTA5IEpvbmF0aGFuIExhcm1vdXIKICAqIGVyci5oLCBlcnIuYywgc29ja2V0cy5jOiBGaXggYnVnICMyMzExOTogUmVvcmRlciB0aW1lb3V0IGVycm9yIGNvZGUgdG8KICAgIHN0b3AgaXQgYmVpbmcgdHJlYXRlZCBhcyBhIGZhdGFsIGVycm9yLgoKICAyMDA4LTA0LTE1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IGZpeGVkIGJ1ZyAjMjI4MDQ6IGRoY3Bfc3RvcCBkb2Vzbid0IGNsZWFyIE5FVElGX0ZMQUdfREhDUAogICAgKGZsYWcgbm93IGNsZWFyZWQpCgogIDIwMDgtMDMtMjcgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCB0Y3BpcC5jLCB0Y3BpcC5oLCBvcHQuaDogZml4ZWQgYnVnICMyMTQzMyAoQ2FsbGluZyBtZW1fZnJlZS9wYnVmX2ZyZWUKICAgIGZyb20gaW50ZXJydXB0IGNvbnRleHQgaXNuJ3Qgc2FmZSk6IHNldCBMV0lQX1VTRV9IRUFQX0ZST01fSU5URVJSVVBUIHRvIDEKICAgIGluIGx3aXBvcHRzLmggb3IgdXNlIHBidWZfZnJlZV9jYWxsYmFjayhwKS9tZW1fZnJlZV9jYWxsYmFjayhtKSB0byBmcmVlIHBidWZzCiAgICBvciBoZWFwIG1lbW9yeSBmcm9tIGludGVycnVwdCBjb250ZXh0CgogIDIwMDgtMDMtMjYgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jLCB0Y3AuYzogZml4ZWQgYnVnICMyMjI0OTogZGl2aXNpb24gYnkgemVybyBjb3VsZCBvY2N1ciBpZiBhIHJlbW90ZQogICAgaG9zdCBzZW50IGEgemVybyBtc3MgYXMgVENQIG9wdGlvbi4KCgooU1RBQkxFLTEuMy4wKQoKICArKyBOZXcgZmVhdHVyZXM6CgogIDIwMDgtMDMtMTAgSm9uYXRoYW4gTGFybW91cgogICogaW5ldF9jaGtzdW0uYzogQWxsb3cgY2hvaWNlIG9mIG9uZSBvZiB0aGUgc2FtcGxlIGFsZ29yaXRobXMgdG8gYmUKICAgIG1hZGUgZnJvbSBsd2lwb3B0cy5oLiBGaXggY29tbWVudCBvbiBob3cgdG8gb3ZlcnJpZGUgTFdJUF9DSEtTVU0uCgogIDIwMDgtMDEtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcC5oLCBvcHQuaDogUmVuYW1lIExXSVBfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyBpbiAKICAgIFRDUF9DQUxDVUxBVEVfRUZGX1NFTkRfTVNTIHRvIGhhdmUgY29oZXJlbnQgVENQIG9wdGlvbnMgbmFtZXMuCgogIDIwMDgtMDEtMTQgRnLpZOlyaWMgQmVybm9uCiAgKiByYXdhcGkudHh0LCBhcGlfbXNnLmMsIHRjcC5jLCB0Y3BfaW4uYywgdGNwLmg6IGNoYW5nZXMgZm9yIHRhc2sgIzc2NzUgIkVuYWJsZQogICAgdG8gcmVmdXNlIGRhdGEgb24gYSBUQ1BfRVZFTlRfUkVDViBjYWxsIi4gSW1wb3J0YW50LCBiZWhhdmlvciBjaGFuZ2VzIGZvciB0aGUKICAgIHRjcF9yZWN2IGNhbGxiYWNrIChzZWUgcmF3YXBpLnR4dCkuCgogIDIwMDgtMDEtMTQgRnLpZOlyaWMgQmVybm9uLCBNYXJjIENoYWxhbmQKICAqIGlwLmM6IEludGVncmF0ZSBwYXRjaCAjNjM2OSIgaXBfaW5wdXQgOiBjaGVja2luZyBiZWZvcmUgcmVhbGxvYyIuCiAgCiAgMjAwOC0wMS0xMiBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiByZXBsYWNlIHRoZSBmaWVsZAogICAgbmV0Y29ubjo6c2VtIHBlciBuZXRjb25uOjpvcF9jb21wbGV0ZWQgbGlrZSBzdWdnZXN0ZWQgZm9yIHRoZSB0YXNrICM3NDkwCiAgICAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4KCiAgMjAwOC0wMS0xMiBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYywgb3B0Lmg6IHJlcGxhY2UgREVGQVVMVF9SRUNWTUJPWF9TSVpFIHBlciBERUZBVUxUX1RDUF9SRUNWTUJPWF9TSVpFLAogICAgREVGQVVMVF9VRFBfUkVDVk1CT1hfU0laRSBhbmQgREVGQVVMVF9SQVdfUkVDVk1CT1hfU0laRSAodG8gb3B0aW1pemUgcXVldWVzCiAgICBzaXplcyksIGxpa2Ugc3VnZ2VzdGVkIGZvciB0aGUgdGFzayAjNzQ5MCAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4KCiAgMjAwOC0wMS0xMCBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmgsIHRjcGlwLmM6IGFkZCB0Y3BpcF9jYWxsYmFja193aXRoX2Jsb2NrIGZ1bmN0aW9uIGZvciB0aGUgdGFzayAjNzQ5MAogICAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuIHRjcGlwX2NhbGxiYWNrIGlzIGFsd2F5cyBkZWZpbmVkIGFzCiAgICAiYmxvY2tpbmciICgiYmxvY2siIHBhcmFtZXRlciA9IDEpLgoKICAyMDA4LTAxLTEwIEZy6WTpcmljIEJlcm5vbgogICogdGNwaXAuaCwgdGNwaXAuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IHJlcGxhY2UgdGhlIGZpZWxkCiAgICBuZXRjb25uOjptYm94IChzeXNfbWJveF90KSBwZXIgbmV0Y29ubjo6c2VtIChzeXNfc2VtX3QpIGZvciB0aGUgdGFzayAjNzQ5MAogICAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuCgogIDIwMDgtMDEtMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBzeXNfYXJjaC50eHQsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jLCB0Y3BpcC5jLCBzeXMuaCwgb3B0Lmg6CiAgICBJbnRyb2R1Y2UgY2hhbmdlcyBmb3IgdGFzayAjNzQ5MCAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0IiB3aXRoIHNvbWUKICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHN5c19tYm94IGFwaTogc3lzX21ib3hfbmV3IHRha2UgYSAic2l6ZSIgcGFyYW1ldGVycyB3aGljaAogICAgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBwb2ludGVycyBxdWVyeSBieSB0aGUgbWFpbGJveC4gVGhlcmUgaXMgdGhyZWUgZGVmaW5lcwogICAgaW4gb3B0LmggdG8gaW5kaWNhdGUgc2l6ZXMgZm9yIHRjcGlwOjptYm94LCBuZXRjb25uOjpyZWN2bWJveCwgYW5kIGZvciB0aGUgCiAgICBuZXRjb25uOjphY2NlcHRtYm94LiBQb3J0IG1haW50YWluZXJzLCB5b3UgY2FuIGRlY2lkZSB0byBqdXN0IGFkZCB0aGlzIG5ldyAKICAgIHBhcmFtZXRlciBpbiB5b3VyIGltcGxlbWVudGF0aW9uLCBidXQgdG8gaWdub3JlIGl0IHRvIGtlZXAgdGhlIHByZXZpb3VzIGJlaGF2aW9yLgogICAgVGhlIG5ldyBzeXNfbWJveF90cnlwb3N0IGZ1bmN0aW9uIHJldHVybiBhIHZhbHVlIHRvIGtub3cgaWYgdGhlIG1haWxib3ggaXMKICAgIGZ1bGwgb3IgaWYgdGhlIG1lc3NhZ2UgaXMgcG9zdGVkLiBUYWtlIGEgbG9vayB0byBzeXNfYXJjaC50eHQgZm9yIG1vcmUgZGV0YWlscy4KICAgIFRoaXMgbmV3IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGNwaXBfaW5wdXQgKHNvLCBjYW4gYmUgY2FsbGVkIGluIGFuIGludGVycnVwdAogICAgY29udGV4dCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMgbm90IGJsb2NraW5nKSwgYW5kIGluIHJlY3ZfdWRwIGFuZCByZWN2X3Jhdy4KCiAgMjAwOC0wMS0wNCBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0LCBKb25hdGhhbiBMYXJtb3VyCiAgKiByYXdhcGkudHh0LCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgc29ja2V0cy5jLCB0Y3AuaCwgdGNwLmMsCiAgICB0Y3BfaW4uYywgaW5pdC5jLCBvcHQuaDogcmVuYW1lIGJhY2tsb2cgb3B0aW9ucyB3aXRoIFRDUF8gcHJlZml4LCBsaW1pdCB0aGUKICAgICJiYWNrbG9nIiBwYXJhbWV0ZXIgaW4gYW4gdThfdCwgMCBpcyBpbnRlcnByZXRlZCBhcyAic21hbGxlc3QgcXVldWUiLCBhZGQKICAgIGRvY3VtZW50YXRpb24gaW4gdGhlIHJhd2FwaS50eHQgZmlsZS4KCiAgMjAwNy0xMi0zMSBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBQZXItSGVucmlrIEx1bmRib2xtKQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBBZGQgVENQIHBlcnNpc3QgdGltZXIKCiAgMjAwNy0xMi0zMSBGculk6XJpYyBCZXJub24sIEx1Y2EgQ2VyZXNvbGkKICAqIGF1dG9pcC5jLCBldGhhcnAuYzogaXBfYWRkci5oOiBJbnRlZ3JhdGUgcGF0Y2ggIzYzNDg6ICJCcm9hZGNhc3QgQVJQIHBhY2tldHMKICAgIGluIGF1dG9pcCIuIFRoZSBjaGFuZ2UgaW4gZXRoYXJwX3JhdyBjb3VsZCBiZSByZW1vdmVkLCBzaW5jZSBhbGwgY2FsbHMgdG8KICAgIGV0aGFycF9yYXcgdXNlIGV0aGJyb2FkY2FzdCBmb3IgdGhlICJldGhkc3RfYWRkciIgcGFyYW1ldGVyLiBCdXQgaXQgY291bGQgYmUKICAgIHdyb25nIGluIHRoZSBmdXR1cmUuCgogIDIwMDctMTItMzAgRnLpZOlyaWMgQmVybm9uLCBUb20gRXZhbnMKICAqIGlwLmM6IEZpeCBidWcgIzIxODQ2ICJMd0lQIGRvZXNuJ3QgYXBwZWFyIHRvIHBlcmZvcm0gYW55IElQIFNvdXJjZSBBZGRyZXNzCiAgICBGaWx0ZXJpbmciIHJlcG9ydGVkIGJ5IFRvbSBFdmFucy4KCiAgMjAwNy0xMi0yMSBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0LCBKb25hdGhhbiBMYXJtb3VyCiAgKiB0Y3AuaCwgb3B0LmgsIGFwaS5oLCBhcGlfbXNnLmgsIHRjcC5jLCB0Y3BfaW4uYywgYXBpX2xpYi5jLCBhcGlfbXNnLmMsCiAgICBzb2NrZXRzLmMsIGluaXQuYzogdGFzayAjNzI1MjogSW1wbGVtZW50IFRDUCBsaXN0ZW4gYmFja2xvZzogV2FybmluZzogcmF3IEFQSQogICAgYXBwbGljYXRpb25zIGhhdmUgdG8gY2FsbCAndGNwX2FjY2VwdGVkKHBjYiknIGluIHRoZWlyIGFjY2VwdCBjYWxsYmFjayB0bwogICAga2VlcCBhY2NlcHRpbmcgbmV3IGNvbm5lY3Rpb25zLgoKICAyMDA3LTEyLTEzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jLCBlcnIuaCwgZXJyLmMsIHNvY2tldHMuYywgZG5zLmMsIGRucy5oOiByZXBsYWNlICJlbnVtIGRuc19yZXN1bHQiCiAgICBieSBlcnJfdCB0eXBlLiBBZGQgYSBuZXcgZXJyX3QgY29kZSAiRVJSX0lOUFJPR1JFU1MiLgoKICAyMDA3LTEyLTEyIEZy6WTpcmljIEJlcm5vbgogICogZG5zLmgsIGRucy5jLCBvcHQuaDogbW92ZSBETlMgb3B0aW9ucyB0byB0aGUgInJpZ2h0IiBwbGFjZS4gTW9zdCB2aXNpYmxlcwogICAgYXJlIHRoZSBvbmUgd2hpY2ggaGF2ZSByYW0gdXNhZ2UuCgogIDIwMDctMTItMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRkYi5jOiBhZGQgYSBMV0lQX0ROU19BUElfSE9TVEVOVF9TVE9SQUdFIG9wdGlvbiB0byBkZWNpZGUgdG8gdXNlIGEgc3RhdGljCiAgICBzZXQgb2YgdmFyaWFibGVzICg9MCkgb3IgYSBsb2NhbCBvbmUgKD0xKS4gSW4gdGhpcyBsYXN0IGNhc2UsIHlvdXIgcG9ydCBzaG91bGQKICAgIHByb3ZpZGUgYSBmdW5jdGlvbiAic3RydWN0IGhvc3RlbnQqIHN5c190aHJlYWRfaG9zdGVudCggc3RydWN0IGhvc3RlbnQqIGgpIgogICAgd2hpY2ggaGF2ZSB0byBkbyBhIGNvcHkgb2YgImgiIGFuZCByZXR1cm4gYSBwb2ludGVyIG9udCB0aGUgInBlci10aHJlYWQiIGNvcHkuCgogIDIwMDctMTItMDMgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwLmM6IGlwX2lucHV0OiBjaGVjayBpZiBhIHBhY2tldCBpcyBmb3IgaW5wIGZpcnN0IGJlZm9yZSBjaGVja2luZyBhbGwgb3RoZXIKICAgIG5ldGlmcyBvbiBuZXRpZl9saXN0IChzcGVlZHMgdXAgcGFja2V0IHJlY2VpdmluZyBpbiBtb3N0IGNhc2VzKQoKICAyMDA3LTExLTMwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYywgcmF3LmM6IHRhc2sgIzc0OTc6IFNvcnQgbGlzdHMgKHBjYiwgbmV0aWYsIC4uLikgZm9yIGZhc3RlciBhY2Nlc3MKICAgIFVEUDogbW92ZSBhIChjb25uZWN0ZWQpIHBjYiBzZWxlY3RlZCBmb3IgaW5wdXQgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IG9mCiAgICBwY2JzIHNvIHRoYXQgaXQgaXMgZm91bmQgZmFzdGVyIG5leHQgdGltZS4gU2FtZSBmb3IgUkFXIHBjYnMgdGhhdCBoYXZlIGVhdGVuCiAgICBhIHBhY2tldC4KCiAgMjAwNy0xMS0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIHN0YXRzLmMsIHN0YXRzLmgsIG9wdC5oOiBJbnRyb2R1Y2VkIEVUSEFSUF9TVEFUUwoKICAyMDA3LTExLTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBkaGNwLmM6IGRoY3BfdW5mb2xkX3JlcGx5KCkgdXNlcyBwYnVmX2NvcHlfcGFydGlhbCBpbnN0ZWFkIG9mIGl0cyBvd24gY29weQogICAgYWxnb3JpdGhtLgoKICAyMDA3LTExLTI0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBuZXRkYi5oLCBuZXRkYi5jLCBzb2NrZXRzLmgvLmM6IE1vdmVkIGx3aXBfZ2V0aG9zdGJ5bmFtZSBmcm9tIHNvY2tldHMuYwogICAgdG8gdGhlIG5ldyBmaWxlIG5ldGRiLmM7IGluY2x1ZGVkIGx3aXBfZ2V0YWRkcmluZm8uCgogIDIwMDctMTEtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCBvcHQuaCwgdGNwLmMsIHRjcF9pbi5jOiBpbXBsZW1lbnRlZCBjYWxjdWxhdGluZyB0aGUgZWZmZWN0aXZlIHNlbmQtbXNzCiAgICBiYXNlZCBvbiB0aGUgTVRVIG9mIHRoZSBuZXRpZiB1c2VkIHRvIHNlbmQuIEVuYWJsZWQgYnkgZGVmYXVsdC4gRGlzYWJsZSBieQogICAgc2V0dGluZyBMV0lQX0NBTENVTEFURV9FRkZfU0VORF9NU1MgdG8gMC4gVGhpcyBmaXhlcyBidWcgIzIxNDkyLgoKICAyMDA3LTExLTE5IEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jLCBkbnMuaCwgZG5zLmM6IEltcGxlbWVudCBETlNfRE9FU19OQU1FX0NIRUNLIG9wdGlvbiAoY2hlY2sgaWYgbmFtZQogICAgcmVjZWl2ZWQgbWF0Y2ggdGhlIG5hbWUgcXVlcnkpLCBpbXBsZW1lbnQgRE5TX1VTRVNfU1RBVElDX0JVRiAodGhlIHBsYWNlIHdoZXJlCiAgICBjb3B5IGRucyBwYXlsb2FkIHRvIHBhcnNlIHRoZSByZXNwb25zZSksIHJldHVybiBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBwbGFjZQogICAgZm9yIGEgbmV3IHF1ZXJ5LCBhbmQgZml4IHNvbWUgbWlub3IgcHJvYmxlbXMuCgogIDIwMDctMTEtMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldyBmaWxlczogaXB2NC9pbmV0LmMsIGlwdjQvaW5ldF9jaGtzdW0uYywgaXB2Ni9pbmV0Ni5jCiAgICByZW1vdmVkIGZpbGVzOiBjb3JlL2luZXQuYywgY29yZS9pbmV0Ni5jCiAgICBNb3ZlZCBpbmV0IGZpbGVzIGludG8gaXB2NC9pcHY2IGRpcmVjdG9yeTsgc3BsaXR0ZWQgaW5ldC5jL2luZXQuaCBpbnRvCiAgICBpbmV0IGFuZCBjaGtzdW0gcGFydDsgY2hhbmdlZCBpbmNsdWRlcyBpbiBhbGwgbHdJUCBmaWxlcyBhcyBhcHByb3ByaWF0ZQoKICAyMDA3LTExLTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX21zZy5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0LmgsIHNvY2tldC5jOiBBZGRlZCBzZXF1ZW50aWFsCiAgICBkbnMgcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIG5ldGNvbm4gYXBpIChuZXRjb25uX2dldGhvc3RieW5hbWUpIGFuZCBzb2NrZXQgYXBpCiAgICAoZ2V0aG9zdGJ5bmFtZS9nZXRob3N0YnluYW1lX3IpLgoKICAyMDA3LTExLTE1IEppbSBQZXR0aW5hdG8sIEZy6WTpcmljIEJlcm5vbgogICogb3B0LmgsIGluaXQuYywgdGNwaXAuYywgZGhjcC5jLCBkbnMuaCwgZG5zLmM6IGFkZCBETlMgY2xpZW50IGZvciBzaW1wbGUgbmFtZQogICAgcmVxdWVzdHMgd2l0aCBSQVcgYXBpIGludGVyZmFjZS4gSW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiBsd2lwX2luaXQoKSB3aXRoCiAgICBidWlsZCB0aW1lIG9wdGlvbnMuIEROUyB0aW1lciBpcyBhZGRlZCBpbiB0Y3BpcF90aHJlYWQgY29udGV4dC4gREhDUCBjYW4gc2V0CiAgICBETlMgc2VydmVyIGlwIGFkZHJlc3NlcyB3aGVuIG9wdGlvbnMgYXJlIHJlY2VpdmVkLiBZb3UgbmVlZCB0byBzZXQgTFdJUF9ETlM9MQogICAgaW4geW91ciBsd2lwb3B0cy5oIGZpbGUgKExXSVBfRE5TPTAgaW4gb3B0LmgpLiBETlNfREVCVUcgY2FuIGJlIHNldCB0byBnZXQKICAgIHNvbWUgdHJhY2VzIHdpdGggTFdJUF9ERUJVR0YuIFNhbml0eSBjaGVjayBoYXZlIGJlZW4gYWRkZWQuIFRoZXJlIGlzIGEgInRvZG8iCiAgICBsaXN0IHdpdGggcG9pbnRzIHRvIGltcHJvdmUuCgogIDIwMDctMTEtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBtaWIyLmM6IFBhdGNoICM2MjE1OiBhZGRlZCBpZkFkbWluU3RhdHVzIHdyaXRlIHN1cHBvcnQgKGlmIGV4cGxpY2l0bHkKICAgIGVuYWJsZWQgYnkgZGVmaW5pbmcgU05NUF9TQUZFX1JFUVVFU1RTIHRvIDApOyBhZGRlZCBjb2RlIHRvIGNoZWNrIGxpbmsgc3RhdHVzCiAgICBmb3IgaWZPcGVyU3RhdHVzIGlmIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBpcyBkZWZpbmVkLgoKICAyMDA3LTExLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGkuaCwgYXBpX21zZy5oIGFuZCBkZXBlbmRlbnQgZmlsZXM6IFRhc2sgIzc0MTA6IFJlbW92ZWQgdGhlIG5lZWQgdG8gaW5jbHVkZQogICAgY29yZSBoZWFkZXIgZmlsZXMgaW4gYXBpLmggKGlwL3RjcC91ZHAvcmF3LmgpIHRvIGhpZGUgdGhlIGludGVybmFsCiAgICBpbXBsZW1lbnRhdGlvbiBmcm9tIG5ldGNvbm4gYXBpIGFwcGxpY2F0aW9ucy4KCiAgMjAwNy0xMS0wMyBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jLCBvcHQuaDogYWRkIFNPX1JDVkJVRiBvcHRpb24gZm9yIFVEUCAmCiAgICBSQVcgbmV0Y29ubi4gWW91IG5lZWQgdG8gc2V0IExXSVBfU09fUkNWQlVGPTEgaW4geW91ciBsd2lwb3B0cy5oIChpdCdzIGRpc2FibGVkCiAgICBieSBkZWZhdWx0KS4gTmV0Y29ubiBBUEkgdXNlcnMgY2FuIHVzZSB0aGUgbmV0Y29ubl9yZWN2X2J1ZnNpemUgbWFjcm8gdG8gYWNjZXNzCiAgICBpdC4gVGhpcyBpcyBhIGZpcnN0IHJlbGVhc2Ugd2hpY2ggaGF2ZSB0byBiZSBpbXByb3ZlIGZvciBUQ1AuIE5vdGUgaXQgdXNlZCB0aGUKICAgIG5ldGNvbm46OnJlY3ZfYXZhaWwgd2hpY2ggbmVlZCB0byBiZSBtb3JlICJ0aHJlYWQtc2FmZSIgKG5vdGUgdGhlcmUgaXMgYWxyZWFkeQogICAgdGhlIHByb2JsZW0gZm9yIEZJT05SRUFEIHdpdGggbHdpcF9pb2N0bC9pb2N0bHNvY2tldCkuCgogIDIwMDctMTEtMDEgRnLpZOlyaWMgQmVybm9uLCBNYXJjIENoYWxhbmQKICAqIHNvY2tldHMuaCwgc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgdGNwLmgsIHRjcF9vdXQuYzoKICAgIEludGVncmF0ZSAicGF0Y2ggIzYyNTAgOiBNU0dfTU9SRSBmbGFnIGZvciBzZW5kIi4gTVNHX01PUkUgaXMgdXNlZCBhdCBzb2NrZXQgYXBpCiAgICBsYXllciwgTkVUQ09OTl9NT1JFIGF0IG5ldGNvbm4gYXBpIGxheWVyLCBhbmQgVENQX1dSSVRFX0ZMQUdfTU9SRSBhdCByYXcgYXBpCiAgICBsYXllci4gVGhpcyBvcHRpb24gZW5hYmxlIHRvIGRlbGF5ZWQgVENQIFBVU0ggZmxhZyBvbiBtdWx0aXBsZSAid3JpdGUiIGNhbGxzLgogICAgTm90ZSB0aGF0IHByZXZpb3VzICJjb3B5IiBwYXJhbWV0ZXIgZm9yICJ3cml0ZSIgQVBJcyBpcyBub3cgY2FsbGVkICJhcGlmbGFncyIuCgogIDIwMDctMTAtMjQgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmM6IEFkZCBtYWNybyBBUElfRVZFTlQgaW4gdGhlIHNhbWUgc3Bpcml0IHRoYW4gCiAgICBUQ1BfRVZFTlRfeHh4IG1hY3JvcyB0byBnZXQgYSBjb2RlIG1vcmUgcmVhZGFibGUuIEl0IGNvdWxkIGFsc28gaGVscCB0byByZW1vdmUKICAgIHNvbWUgY29kZSAobGlrZSB3ZSBoYXZlIHRhbGsgaW4gInBhdGNoICM1OTE5IDogQ3JlYXRlIGNvbXBpbGUgc3dpdGNoIHRvIHJlbW92ZQogICAgc2VsZWN0IGNvZGUiKSwgYnV0IGl0IGNvdWxkIGJlIGRvbmUgbGF0ZXIuCgogIDIwMDctMTAtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIG1hbnkgZmlsZXM6IENoYW5nZWQgaW5pdGlhbGl6YXRpb246IG1hbnkgaW5pdCBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQgYW55CiAgICBtb3JlIHNpbmNlIHdlIG5vdyByZWx5IG9uIHRoZSBjb21waWxlciBpbml0aWFsaXppbmcgZ2xvYmFsIGFuZCBzdGF0aWMKICAgIHZhcmlhYmxlcyB0byB6ZXJvIQoKICAyMDA3LTEwLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9mcmFnLmMsIG1lbXAuYywgbWliMi5jLCBpcF9mcmFnLmgsIG1lbXBfc3RkLmgsIG9wdC5oOiBDaGFuZ2VkIElQX1JFQVNTRU1CTFkKICAgIHRvIGVucXVldWUgdGhlIHJlY2VpdmVkIHBidWZzIHNvIHRoYXQgbXVsdGlwbGUgcGFja2V0cyBjYW4gYmUgcmVhc3NlbWJsZWQKICAgIHNpbXVsdGFuZW91c2x5IGFuZCBubyBzdGF0aWMgcmVhc3NlbWJseSBidWZmZXIgaXMgbmVlZGVkLgoKICAyMDA3LTEwLTA1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5jLCBldGhhcnAuaCwgZXRoYXJwLmM6IG1vdmVkIGV0aGVybmV0X2lucHV0IGZyb20gdGNwaXAuYyB0byBldGhhcnAuYyBzbwogICAgYWxsIG5ldGlmcyAob3IgcG9ydHMpIGNhbiB1c2UgaXQuCgogIDIwMDctMTAtMDUgRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZmFwaS5oLCBuZXRpZmFwaS5jOiBhZGQgZnVuY3Rpb24gbmV0aWZhcGlfbmV0aWZfc2V0X2RlZmF1bHQuIENoYW5nZSB0aGUgCiAgICBjb21tb24gZnVuY3Rpb24gdG8gcmVkdWNlIGEgbGl0dGxlIGJpdCB0aGUgZm9vdHByaW50IChmb3IgYWxsIGZ1bmN0aW9ucyB1c2luZwogICAgb25seSB0aGUgIm5ldGlmIiBwYXJhbWV0ZXIpLgoKICAyMDA3LTEwLTAzIEZy6WTpcmljIEJlcm5vbgogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogYWRkIGZ1bmN0aW9ucyBuZXRpZmFwaV9uZXRpZl9zZXRfdXAsIG5ldGlmYXBpX25ldGlmX3NldF9kb3duLAogICAgbmV0aWZhcGlfYXV0b2lwX3N0YXJ0IGFuZCBuZXRpZmFwaV9hdXRvaXBfc3RvcC4gVXNlIGEgY29tbW9uIGZ1bmN0aW9uIHRvIHJlZHVjZQogICAgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgKGZvciBhbGwgZnVuY3Rpb25zIHVzaW5nIG9ubHkgdGhlICJuZXRpZiIgcGFyYW1ldGVyKS4KCiAgMjAwNy0wOS0xNSBGculk6XJpYyBCZXJub24KICAqIHVkcC5oLCB1ZHAuYywgc29ja2V0cy5jOiBDaGFuZ2VzIGZvciAiIzIwNTAzIElHTVAgSW1wcm92ZW1lbnQiLiBBZGQgSVBfTVVMVElDQVNUX0lGCiAgICBvcHRpb24gaW4gc29ja2V0IEFQSSwgYW5kIGEgbmV3IGZpZWxkICJtdWx0aWNhc3RfaXAiIGluICJzdHJ1Y3QgdWRwX3BjYiIgKGZvcgogICAgbmV0Y29ubiBhbmQgcmF3IEFQSSB1c2VycyksIG9ubHkgaWYgTFdJUF9JR01QPTEuIEFkZCBnZXRzb2Nrb3B0IHByb2Nlc3NpbmcgZm9yCiAgICBJUF9NVUxUSUNBU1RfVFRMIGFuZCBJUF9NVUxUSUNBU1RfSUYuCgogIDIwMDctMDktMTAgRnLpZOlyaWMgQmVybm9uCiAgKiBzbm1wLmgsIG1pYjIuYzogZW5hYmxlIHRvIHJlbW92ZSBTTk1QIHRpbWVyICh3aGljaCBjb25zdW1uZSBzZXZlcmFsIGN5Y2xlcwogICAgZXZlbiB3aGVuIGl0J3Mgbm90IG5lY2Vzc2FyeSkuIHNubXBfYWdlbnQudHh0IHRlbGwgdG8gY2FsbCBzbm1wX2luY19zeXN1cHRpbWUoKQogICAgZWFjaCAxMG1zIChidXQsIGl0J3MgaW50cnVzaXZlIGlmIHlvdSB1c2Ugc3lzX3RpbWVvdXQgZmVhdHVyZSkuIE5vdywgeW91IGNhbgogICAgZGVjaWRlIHRvIGNhbGwgc25tcF9hZGRfc3lzdXB0aW1lKDEwMCkgZWFjaCAxMDAwbXMgKHdoaWNoIGlzIGJpZ2dlciAic3RlcCIsIGJ1dAogICAgY2FsbCB0byBhIGxvd2VyIGZyZXF1ZW5jeSkuIE9yLCB5b3UgY2FuIGRlY2lkZSB0byBub3QgY2FsbCBzbm1wX2luY19zeXN1cHRpbWUoKQogICAgb3Igc25tcF9hZGRfc3lzdXB0aW1lKCksIGFuZCB0byBkZWZpbmUgdGhlIFNOTVBfR0VUX1NZU1VQVElNRShzeXN1cHRpbWUpIG1hY3JvLgogICAgVGhpcyBvbmUgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQgaW4gbWliMi5jLiBTTk1QX0dFVF9TWVNVUFRJTUUgaXMgY2FsbGVkIGluc2lkZQogICAgc25tcF9nZXRfc3lzdXB0aW1lKHUzMl90ICp2YWx1ZSksIGFuZCBlbmFibGUgdG8gY2hhbmdlICJzeXN1cHRpbWUiIHZhbHVlIG9ubHkKICAgIHdoZW4gaXQncyBxdWVyaWVkIChhbnkgZGlyZWN0IGNhbGwgdG8gInN5c3VwdGltZSIgaXMgY2hhbmdlZCBieSBhIGNhbGwgdG8gCiAgICBzbm1wX2dldF9zeXN1cHRpbWUpLgoKICAyMDA3LTA5LTA5IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIGlnbXAuaCwgaWdtcC5jLCBuZXRpZi5oLCBuZXRpZi5jLCBpcC5jOiBUbyBlbmFibGUgdG8gaGF2ZSBpbnRlcmZhY2VzIHdpdGggSUdNUCwKICAgIGFuZCBvdGhlcnMgd2l0aG91dCBpdCwgdGhlcmUgaXMgYSBuZXcgTkVUSUZfRkxBR19JR01QIGZsYWcgdG8gc2V0IGluIG5ldGlmLT5mbGFncwogICAgaWYgeW91IHdhbnQgSUdNUCBvbiBhbiBpbnRlcmZhY2UuIGlnbXBfc3RvcCgpIGlzIG5vdyBjYWxsZWQgaW5zaWRlIG5ldGlmX3JlbW92ZSgpLgogICAgaWdtcF9yZXBvcnRfZ3JvdXBzKCkgaXMgbm93IGNhbGxlZCBpbnNpZGUgbmV0aWZfc2V0X2xpbmtfdXAoKSAobmVlZCB0byBoYXZlCiAgICBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0s9MSkgdG8gcmVzZW5kIHJlcG9ydHMgb25jZSB0aGUgbGluayBpcyB1cCAoYXZvaWQgdG8gd2FpdAogICAgdGhlIG5leHQgcXVlcnkgbWVzc2FnZSB0byByZWNlaXZlIHRoZSBtYXRjaGluZyBtdWx0aWNhc3Qgc3RyZWFtcykuCgogIDIwMDctMDktMDggRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGlwLmgsIGFwaS5oLCB0Y3AuaDogZGVjbGFyZSBhICJzdHJ1Y3QgaXBfcGNiIiB3aGljaCBvbmx5IGNvbnRhaW5zCiAgICBJUF9QQ0IuIEFkZCBpbiB0aGUgbmV0Y29ubidzICJwY2IiIHVuaW9uIGEgInN0cnVjdCBpcF9wY2IgKmlwOyIgKG5vIHNpemUgY2hhbmdlKS4KICAgIFVzZSB0aGlzIG5ldyBmaWVsZCB0byBhY2Nlc3MgdG8gY29tbW9uIHBjYiBmaWVsZHMgKHR0bCwgdG9zLCBzb19vcHRpb25zLCBldGMuLi4pLgogICAgRW5hYmxlIHRvIGFjY2VzcyB0byB0aGVzZSBmaWVsZHMgd2l0aCBMV0lQX1RDUD0wLgoKICAyMDA3LTA5LTA1IEZy6WTpcmljIEJlcm5vbgogICogdWRwLmMsIGlwdjQvaWNtcC5jLCBpcHY0L2lwLmMsIGlwdjYvaWNtcC5jLCBpcHY2L2lwNi5jLCBpcHY0L2ljbXAuaCwKICAgIGlwdjYvaWNtcC5oLCBvcHQuaDogSW50ZWdyYXRlICJ0YXNrICM3MjcyIDogTFdJUF9JQ01QIG9wdGlvbiIuIFRoZSBuZXcgb3B0aW9uCiAgICBMV0lQX0lDTVAgZW5hYmxlL2Rpc2FibGUgSUNNUCBtb2R1bGUgaW5zaWRlIHRoZSBJUCBzdGFjayAoZW5hYmxlIHBlciBkZWZhdWx0KS4KICAgIEJlIGNhcmVmdWwsIGRpc2FibGluZyBJQ01QIG1ha2UgeW91ciBwcm9kdWN0IG5vbi1jb21wbGlhbnQgdG8gUkZDMTEyMiwgYnV0CiAgICBoZWxwIHRvIHJlZHVjZSBmb290cHJpbnQsIGFuZCB0byByZWR1Y2UgInZpc2liaWxpdHkiIG9uIHRoZSBJbnRlcm5ldC4KCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBvcHQuaCwgc3lzLmgsIHRjcGlwLmMsIHNsaXBpZi5jLCBwcHAuYywgc3lzX2FyY2gudHh0OiBDaGFuZ2UgcGFyYW1ldGVycyBsaXN0CiAgICBmb3Igc3lzX3RocmVhZF9uZXcgKHNlZSAidGFzayAjNzI1MiA6IENyZWF0ZSBzeXNfdGhyZWFkX25ld19leCgpIikuIFR3byBuZXcKICAgIHBhcmFtZXRlcnMgaGF2ZSB0byBiZSBwcm92aWRlZDogYSB0YXNrIG5hbWUsIGFuZCBhIHRhc2sgc3RhY2sgc2l6ZS4gRm9yIHRoaXMKICAgIG9uZSwgc2luY2UgaXQncyBwbGF0Zm9ybSBkZXBlbmRhbnQsIHlvdSBjb3VsZCBkZWZpbmUgdGhlIGJlc3Qgb25lIGZvciB5b3UgaW4KICAgIHlvdXIgbHdpcG9wdHMuaC4gRm9yIHBvcnQgbWFpbnRhaW5lcnMsIHlvdSBjYW4ganVzdCBhZGQgdGhlc2UgbmV3IHBhcmFtZXRlcnMKICAgIGluIHlvdXIgc3lzX2FyY2guYyBmaWxlLCBhbmQgYnV0IGl0J3Mgbm90IG1hbmRhdG9yeSwgdXNlIHRoZW0gaW4geW91ciBPUwogICAgc3BlY2lmaWMgZnVuY3Rpb25zLgoKICAyMDA3LTA5LTA1IEZy6WTpcmljIEJlcm5vbgogICogaW5ldC5jLCBhdXRvaXAuYywgbXNnX2luLmMsIG1zZ19vdXQuYywgaW5pdC5jOiBNb3ZlIHNvbWUgYnVpbGQgdGltZSBjaGVja2luZ3MKICAgIGluc2lkZSBpbml0LmMgZm9yIHRhc2sgIzcxNDIgIlNhbml0eSBjaGVjayB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLgoKICAyMDA3LTA5LTA0IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMKICAqIGlnbXAuaCwgaWdtcC5jLCBtZW1wX3N0ZC5oLCBtZW1wLmMsIGluaXQuYywgb3B0Lmg6IFJlcGxhY2UgbWVtX21hbGxvYyBjYWxsIGJ5CiAgICBtZW1wX21hbGxvYywgYW5kIHVzZSBhIG5ldyBNRU1QX05VTV9JR01QX0dST1VQIG9wdGlvbiAoc2VlIG9wdC5oIHRvIGRlZmluZSB0aGUKICAgIHZhbHVlKS4gSXQgd2lsbCBhdm9pZCBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBwcm9ibGVtcywgdXNlIGEgY291bnRlciB0byBrbm93CiAgICBob3cgbWFueSB0aW1lcyBhIGdyb3VwIGlzIHVzZWQgb24gYW4gbmV0aWYsIGFuZCBmcmVlIGl0IHdoZW4gYWxsIGFwcGxpY2F0aW9ucwogICAgbGVhdmUgaXQuIE1FTVBfTlVNX0lHTVBfR1JPVVAgZ290IDggYXMgZGVmYXVsdCB2YWx1ZSAoYW5kIGluaXQuYyBnb3QgYSBzYW5pdHkKICAgIGNoZWNrIGlmIExXSVBfSUdNUCE9MCkuCgogIDIwMDctMDktMDMgRnLpZOlyaWMgQmVybm9uCiAgKiBpZ21wLmgsIGlnbXAuYywgc29ja2V0cy5jLCBhcGlfbXNnLmM6IENoYW5nZXMgZm9yICIjMjA1MDMgSUdNUCBJbXByb3ZlbWVudCIuCiAgICBJbml0aWFsaXplIGlnbXBfbWFjX2ZpbHRlciB0byBOVUxMIGluIG5ldGlmX2FkZCAodGhpcyBmaWVsZCBzaG91bGQgYmUgc2V0IGluCiAgICB0aGUgbmV0aWYncyAiaW5pdCIgZnVuY3Rpb24pLiBVc2UgdGhlICJpbXJfaW50ZXJmYWNlIiBmaWVsZCAoZm9yIHNvY2tldCBsYXllcikKICAgIGFuZC9vciB0aGUgImludGVyZmFjZSIgZmllbGQgKGZvciBuZXRjb25uIGxheWVyKSwgZm9yIGpvaW4vbGVhdmUgb3BlcmF0aW9ucy4KICAgIFRoZSBpZ21wX2pvaW4vbGVhdmVncm91cCBmaXJzdCBwYXJhbWV0ZXIgY2hhbmdlIGZyb20gYSBuZXRpZiB0byBhbiBpcGFkZHIuCiAgICBUaGlzIGZpZWxkIGNvdWxkIGJlIGEgbmV0aWYncyBpcGFkZHIsIG9yICJhbnkiIChzYW1lIG1lYW5pbmcgdGhhbiBpcF9hZGRyX2lzYW55KS4KCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24KICAqIEFkZCBuZXRidWYuaCwgbmV0YnVmLmMsIENoYW5nZSBhcGkuaCwgYXBpX2xpYi5jOiAjNzI0OSAiU3BsaXQgbmV0YnVmIGZ1bmN0aW9ucwogICAgZnJvbSBhcGkvYXBpX2xpYiIuIE5vdyBuZXRidWYgQVBJIGlzIGluZGVwZW5kYW50IG9mIG5ldGNvbm4sIGFuZCBjYW4gYmUgdXNlZAogICAgd2l0aCBvdGhlciBBUEkgKGFwcGxpY2F0aW9uIGJhc2VkIG9uIHJhdyBBUEksIG9yIGZ1dHVyZSAic29ja2V0MiIgQVBJKS4gUG9ydHMKICAgIG1haW50YWluZXJzIGp1c3QgaGF2ZSB0byBhZGQgc3JjL2FwaS9uZXRidWYuYyBpbiB0aGVpciBtYWtlZmlsZS9wcm9qZWN0cy4KCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIGluaXQuYzogQWRkIGZpcnN0IHZlcnNpb24gb2YgbHdpcF9zYW5pdHlfY2hlY2sgZm9yIHRhc2sgIzcxNDIgIlNhbml0eSBjaGVjawogICAgdXNlci1jb25maWd1cmFibGUgdmFsdWVzIi4KCiAgMjAwNy0wOC0yOSBGculk6XJpYyBCZXJub24KICAqIGlnbXAuaCwgaWdtcC5jLCB0Y3BpcC5jLCBpbml0LmMsIG5ldGlmLmM6IGNoYW5nZSBpZ21wX2luaXQgYW5kIGFkZCBpZ21wX3N0YXJ0LgogICAgaWdtcF9zdGFydCBpcyBjYWxsIGluc2lkZSBuZXRpZl9hZGQuIE5vdywgaWdtcCBpbml0aWFsaXphdGlvbiBpcyBpbiB0aGUgc2FtZQogICAgc3Bpcml0IHRoYW4gdGhlIG90aGVycyBtb2R1bGVzLiBNb2RpZnkgc29tZSBJR01QIGRlYnVnIHRyYWNlcy4KCiAgMjAwNy0wOC0yOSBGculk6XJpYyBCZXJub24KICAqIEFkZCBpbml0LmgsIGluaXQuYywgQ2hhbmdlIG9wdC5oLCB0Y3BpcC5jOiBUYXNrICAjNzIxMyAiQWRkIGEgbHdpcF9pbml0IGZ1bmN0aW9uIgogICAgQWRkIGx3aXBfaW5pdCBmdW5jdGlvbiB0byByZWdyb3VwIGFsbCBtb2R1bGVzIGluaXRpYWxpemF0aW9ucywgYW5kIHRvIHByb3ZpZGUKICAgIGEgcGxhY2UgdG8gYWRkIGNvZGUgZm9yIHRhc2sgIzcxNDIgIlNhbml0eSBjaGVjayB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLgogICAgUG9ydHMgbWFpbnRhaW5lcnMgc2hvdWxkIHJlbW92ZSBkaXJlY3QgaW5pdGlhbGl6YXRpb25zIGNhbGxzIGZyb20gdGhlaXIgY29kZSwKICAgIGFuZCBhZGQgaW5pdC5jIGluIHRoZWlyIG1ha2VmaWxlcy4gTm90ZSB0aGF0IGx3aXBfaW5pdCgpIGZ1bmN0aW9uIGlzIGNhbGxlZAogICAgaW5zaWRlIHRjcGlwX2luaXQsIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IHJhdyBhcGkgdXNlcnMgc2luY2UgYWxsIGNhbGxzIGFyZQogICAgZGlzYWJsZWQgd2hlbiBtYXRjaGluZyBvcHRpb25zIGFyZSBkaXNhYmxlZC4gQWxzbyBub3RlIHRoYXQgdGhlaXIgaXMgbmV3IG9wdGlvbnMKICAgIGluIG9wdC5oLCB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSBpbiB5b3VyIGx3aXBvcHRzLmggKHRoZXkgYXJlIGVuYWJsZWQgcGVyIGRlZmF1bHQpLgoKICAyMDA3LTA4LTI2IE1hcmMgQm91Y2hlcgogICogYXBpX21zZy5jOiBkb19jbG9zZV9pbnRlcm5hbCgpOiBSZXNldCB0aGUgY2FsbGJhY2tzIGFuZCBhcmcgKGNvbm4pIHRvIE5VTEwKICAgIHNpbmNlIHRoZXkgY2FuIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBiZSBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIGNvbm4KICAgIHBvaW50ZXIgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkIChhbmQgY29ubiBoYXMgYmVlbiBmcmVlZCkuIAoKICAyMDA3LTA4LTI1IEZy6WTpcmljIEJlcm5vbiAoQXJ0ZW0gTWlnYWV2J3MgUGF0Y2gpCiAgKiBuZXRpZi5oLCBuZXRpZi5jOiBJbnRlZ3JhdGUgInBhdGNoICM2MTYzIDogRnVuY3Rpb24gdG8gY2hlY2sgaWYgbGluayBsYXllciBpcyB1cCIuCiAgICBBZGQgYSBuZXRpZl9pc19saW5rX3VwKCkgZnVuY3Rpb24gaWYgTFdJUF9ORVRJRl9MSU5LX0NBTExCQUNLIG9wdGlvbiBpcyBzZXQuCgogIDIwMDctMDgtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZi5oLCBuZXRpZi5jLCBvcHQuaDogUmVuYW1lIExXSVBfTkVUSUZfQ0FMTEJBQ0sgaW4gTFdJUF9ORVRJRl9TVEFUVVNfQ0FMTEJBQ0sKICAgIHRvIGJlIGNvaGVyZW50IHdpdGggbmV3IExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBvcHRpb24gYmVmb3JlIG5leHQgcmVsZWFzZS4KCiAgMjAwNy0wOC0yMiBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGV0aGVybmV0aWYuYywgb3B0Lmg6IHJlbW92ZSBvcHRpb25zIEVUSEFSUF9UQ1BJUF9JTlBVVCAmCiAgICBFVEhBUlBfVENQSVBfRVRISU5QVVQsIG5vdywgb25seSAiZXRoaW5wdXQiIGNvZGUgaXMgc3VwcG9ydGVkLCBldmVuIGlmIHRoZSAKICAgIG5hbWUgaXMgdGNwaXBfaW5wdXQgKHdlIGtlZXAgdGhlIG5hbWUgb2YgMS4yLjAgZnVuY3Rpb24pLgoKICAyMDA3LTA4LTE3IEphcmVkIEdydWJiCiAgKiBtZW1wX3N0ZC5oLCBtZW1wLmgsIG1lbXAuYywgbWVtLmMsIHN0YXRzLmM6IChUYXNrICM3MTM2KSBDZW50cmFsaXplIG1lbXBvb2wgCiAgICBzZXR0aW5ncyBpbnRvIG5ldyBtZW1wX3N0ZC5oIGFuZCBvcHRpb25hbCB1c2VyIGZpbGUgbHdpcHBvb2xzLmguIFRoaXMgYWRkcwogICAgbW9yZSBkeW5hbWljIG1lbXBvb2xzLCBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCiAgICBtZW1wb29scyBmb3IgbWVtX21hbGxvYy4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIGFwaV9tc2cuYzogSW5pdGlhbGl6ZSBuZXdjb25uLT5zdGF0ZSB0byBORVRDT05OX05PTkUgaW4gYWNjZXB0X2Z1bmN0aW9uOwogICAgb3RoZXJ3aXNlIGl0IHdhcyBsZWZ0IHRvIE5FVENPTk5fQ0xPU0UgYW5kIHNlbnRfdGNwKCkgY291bGQgcHJlbWF0dXJlbHkKICAgIGNsb3NlIHRoZSBjb25uZWN0aW9uLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogc29ja2V0cy5jOiBsd2lwX2FjY2VwdCgpOiBjaGVjayBuZXRjb25uX3BlZXIoKSBlcnJvciByZXR1cm4uCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBtZW0uYywgbWVtLmg6IEFkZGVkIG1lbV9jYWxsb2MoKS4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIHRjcGlwLmMsIHRjcGlwLmggbWVtcC5jLCBtZW1wLmg6IEFkZGVkIGRpc3RpbmN0IG1lbXAgKE1FTVBfVENQSVBfTVNHX0lOUEtUKQogICAgZm9yIGlucHV0IHBhY2tldHMgdG8gcHJldmVudCBmbG9vZHMgZnJvbSBjb25zdW1pbmcgYWxsIG9mIE1FTVBfVENQSVBfTVNHCiAgICBhbmQgc3RhcnZpbmcgb3RoZXIgbWVzc2FnZSB0eXBlcy4KICAgIFJlbmFtZWQgTUVNUF9UQ1BJUF9NU0cgdG8gTUVNUF9UQ1BJUF9NU0dfQVBJCgogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyCiAgKiBwYnVmLmMsIHBidWYuaCwgZXRoYXJwLmMsIHRjcF9pbi5jLCBzb2NrZXRzLmM6IFNwbGl0IHBidWYgZmxhZ3MgaW4gcGJ1ZgogICAgdHlwZSBhbmQgZmxncyAobGF0ZXIgcmVuYW1lZCB0byBmbGFncykuCiAgICBVc2UgZW51bSBwYnVmX2ZsYWcgYXMgcGJ1Zl90eXBlLiAgUmVudW1iZXIgUEJVRl9GTEFHXyouCiAgICBJbXByb3ZlZCBsd2lwX3JlY3Zmcm9tKCkuICBUQ1AgcHVzaCBub3cgcHJvcGFnYXRlZC4KCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXIKICAqIGV0aGVybmV0aWYuYywgY29udHJpYi9wb3J0cy92YXJpb3VzOiBldGhicm9hZGNhc3Qgbm93IGEgc2hhcmVkIGdsb2JhbAogICAgcHJvdmlkZWQgYnkgZXRoYXJwLgoKICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcgogICogcHBwX29lLmMgcHBwX29lLmgsIGF1dGguYyBjaGFwLmMgZnNtLmMgbGNwLmMgcHBwLmMgcHBwLmgsCiAgICBldGhhcnAuYyBldGhlcm5ldGlmLmMsIGV0aGFycC5oLCBvcHQuaCB0Y3BpcC5oLCB0Y3BpcC5jOgogICAgQWRkZWQgUFBQb0Ugc3VwcG9ydCBhbmQgdmFyaW91cyBQUFAgaW1wcm92ZW1lbnRzLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmMsIGlwX2ZyYWcuYywgcGJ1Zi5jLCBhcGkuaCwgcGJ1Zi5oOiBJbnRyb2R1Y2VkIHBidWZfY29weV9wYXJ0aWFsLAogICAgbWFraW5nIG5ldGJ1Zl9jb3B5X3BhcnRpYWwgdXNlIHRoaXMgZnVuY3Rpb24uCgogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXggYnVnICMyMDUwNjogU2xvdyBzdGFydCAvIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cgc3RhcnRzIHdpdGgKICAgIDIgKiBtc3MgKGluc3RlYWQgb2YgMSAqIG1zcyBwcmV2aW91c2x5KSB0byBjb21wbHkgd2l0aCBzb21lIG5ld2VyIFJGQ3MgYW5kCiAgICBvdGhlciBzdGFja3MuCgogIDIwMDctMDctMTMgSmFyZWQgR3J1YmIgKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQogICogb3B0LmgsIG5ldGlmLmgsIG5ldGlmLmMsIGV0aGVybmV0aWYuYzogQWRkIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBhZGQKICAgIGEgbGluayBjYWxsYmFjayBpbiB0aGUgbmV0aWYgc3RydWN0LCBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSBpdC4gQmUgY2FyZWZ1bGwKICAgIGZvciBwb3J0IG1haW50YWluZXJzIHRvIGFkZCB0aGUgTkVUSUZfRkxBR19MSU5LX1VQIGZsYWcgKGxpa2UgaW4gZXRoZXJuZXRpZi5jKQogICAgaWYgeW91IHdhbnQgdG8gYmUgc3VyZSB0byBiZSBjb21wYXRpYmxlIHdpdGggZnV0dXJlIGNoYW5nZXMuLi4KCiAgMjAwNy0wNi0zMCBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuaCwgc29ja2V0cy5jOiBJbXBsZW1lbnQgTVNHX1BFRUsgZmxhZyBmb3IgcmVjdi9yZWN2ZnJvbSBmdW5jdGlvbnMuCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5oLCBldGhhcnAuYzogQ29tYmluZWQgZXRoYXJwX3JlcXVlc3Qgd2l0aCBldGhhcnBfcmF3IGZvciBib3RoCiAgICBMV0lQX0FVVE9JUCA9MCBhbmQgPTEgdG8gcmVtb3ZlIHJlZHVuZGFudCBjb2RlLgoKICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYywgbWVtcC5jLCBtZW0uaCwgbWVtcC5oLCBvcHQuaDogdGFzayAjNjg2MzogSW50cm9kdWNlZCB0aGUgb3B0aW9uCiAgICBNRU1fVVNFX1BPT0xTIHRvIHVzZSA0IHBvb2xzIHdpdGggZGlmZmVyZW50IHNpemVkIGVsZW1lbnRzIGluc3RlYWQgb2YgYQogICAgaGVhcC4gVGhpcyBib3RoIHByZXZlbnRzIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCBnaXZlcyBhIGhpZ2hlciBzcGVlZAogICAgYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgY29uc3VtcHRpb24uIFR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIGFwaS5oLCBhcGlfbXNnLmg6IENvbnZlcnRlZCB0aGUgbGVuZ3RoIGFyZ3VtZW50IG9mCiAgICBuZXRjb25uX3dyaXRlIChhbmQgdGhlcmVmb3JlIGFsc28gYXBpX21zZ19tc2cubXNnLncubGVuKSBmcm9tIHUxNl90IGludG8KICAgIGludCB0byBiZSBhYmxlIHRvIHNlbmQgYSBiaWdnZXIgYnVmZmVyIHRoYW4gNjRLIHdpdGggb25lIHRpbWUgKG1haW5seQogICAgdXNlZCBmcm9tIGx3aXBfc2VuZCkuCgogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCBhcGlfbXNnLmM6IE1vdmVkIHRoZSBuYWdsZSBhbGdvcml0aG0gZnJvbSBuZXRjb25uX3dyaXRlL2RvX3dyaXRlCiAgICBpbnRvIGEgZGVmaW5lICh0Y3Bfb3V0cHV0X25hZ2xlKSBpbiB0Y3AuaCB0byBwcm92aWRlIGl0IHRvIHJhdyBhcGkgdXNlcnMsIHRvby4KCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBGaXhlZCBidWcgIzIwMDIxOiBNb3ZlZCBzZW5kYnVmLXByb2Nlc3NpbmcgaW4KICAgIG5ldGNvbm5fd3JpdGUgZnJvbSBhcGlfbGliLmMgdG8gYXBpX21zZy5jIHRvIGFsc28gcHJldmVudCBtdWx0aXBsZSBjb250ZXh0LQogICAgY2hhbmdlcyBvbiBsb3cgbWVtb3J5IG9yIGVtcHR5IHNlbmQtYnVmZmVyLgoKICAyMDA3LTA2LTE4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYywgZXRoYXJwLmg6IENoYW5nZWQgZXRoYXJwIHRvIHVzZSBhIGRlZmluZWQgaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGgKICAgIG9mIDYgdG8gYXZvaWQgbG9hZGluZyBuZXRpZi0+aHdhZGRyX2xlbiBldmVyeSB0aW1lIChzaW5jZSB0aGlzIGZpbGUgaXMgb25seQogICAgdXNlZCBmb3IgZXRoZXJuZXQgYW5kIHN0cnVjdCBldGhfYWRkciBhbHJlYWR5IGhhZCBhIGRlZmluZWQgbGVuZ3RoIG9mIDYpLgoKICAyMDA3LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmMsIHNvY2tldHMuaDogSW1wbGVtZW50ZWQgc29ja2V0IG9wdGlvbnMgU09fTk9fQ0hFQ0sgZm9yIFVEUCBzb2NrZXRzCiAgICB0byBkaXNhYmxlIFVEUCBjaGVja3N1bSBnZW5lcmF0aW9uIG9uIHRyYW5zbWl0LgoKICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQKICAqIGRlYnVnLmgsIGFwaV9tc2cuYzogY2hhbmdlIExXSVBfRVJST1IgdG8gdXNlIGl0IHRvIGNoZWNrIGVycm9ycyBsaWtlIGludmFsaWQKICAgIHBvaW50ZXJzIG9yIHBhcmFtZXRlcnMsIGFuZCBsZXQgdGhlIHBvc3NpYmlsaXR5IHRvIHJlZGVmaW5lZCBpdCBpbiBjYy5oLiBVc2UKICAgIHRoaXMgbWFjcm8gdG8gY2hlY2sgImNvbm4iIHBhcmFtZXRlciBpbiBhcGlfbXNnLmMgZnVuY3Rpb25zLgoKICAyMDA3LTA2LTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmMsIHNvY2tldHMuaDogQWRkZWQgVURQIGxpdGUgc3VwcG9ydCBmb3Igc29ja2V0cwoKICAyMDA3LTA2LTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuaCwgb3B0LmgsIGFwaV9tc2cuYywgaXAuYywgdWRwLmM6IEluY2x1ZGVkIHN3aXRjaCBMV0lQX1VEUExJVEUgKGVuYWJsZWQKICAgIGJ5IGRlZmF1bHQpIHRvIHN3aXRjaCBvZmYgVURQLUxpdGUgc3VwcG9ydCBpZiBub3QgbmVlZGVkIChyZWR1Y2VzIHVkcC5jIGNvZGUKICAgIHNpemUpCgogIDIwMDctMDYtMDkgRG9taW5payBTcGllcyAoaW50ZWdyYXRlZCBieSBGculk6XJpYyBCZXJub24pCiAgKiBhdXRvaXAuaCwgYXV0b2lwLmMsIGRoY3AuaCwgZGhjcC5jLCBuZXRpZi5oLCBuZXRpZi5jLCBldGhhcnAuaCwgZXRoYXJwLmMsIG9wdC5oOgogICAgQXV0b0lQIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBmb3IgSVB2NCwgd2l0aCBuZXcgb3B0aW9ucyBMV0lQX0FVVE9JUCBhbmQKICAgIExXSVBfREhDUF9BVVRPSVBfQ09PUCBpZiB5b3Ugd2FudCB0byBjb29wZXJhdGUgd2l0aCBESENQLiBTb21lIHRpcHMgdG8gYWRhcHQKICAgIChzZWUgVE9ETyBtYXJrIGluIHRoZSBzb3VyY2UgY29kZSkuCgogIDIwMDctMDYtMDkgU2ltb24gR29sZHNjaG1pZHQKICAqIGV0aGFycC5oLCBldGhhcnAuYywgZXRoZXJuZXRpZi5jOiBNb2RpZmllZCBvcmRlciBvZiBwYXJhbWV0ZXJzIGZvcgogICAgZXRoYXJwX291dHB1dCgpIHRvIG1hdGNoIG5ldGlmLT5vdXRwdXQgc28gZXRoYXJwX291dHB1dCgpIGNhbiBiZSB1c2VkCiAgICBkaXJlY3RseSBhcyBuZXRpZi0+b3V0cHV0IHRvIHNhdmUgb25lIGZ1bmN0aW9uIGNhbGwuCgogIDIwMDctMDYtMDggU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmgsIGV0aGVybmV0aWYuYywgc2xpcGlmLmMsIGxvb3BpZi5jOiBBZGRlZCBkZWZpbmUKICAgIE5FVElGX0lOSVRfU05NUChuZXRpZiwgdHlwZSwgc3BlZWQpIHRvIGluaXRpYWxpemUgcGVyLW5ldGlmIHNubXAgdmFyaWFibGVzLAogICAgYWRkZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhvc2UgdG8gZXRoZXJuZXRpZiwgc2xpcGlmIGFuZCBsb29waWYuCgogIDIwMDctMDUtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBpcF9mcmFnLmMsIGlwX2ZyYWcuaCwgaXAuYzogQWRkZWQgb3B0aW9uIElQX0ZSQUdfVVNFU19TVEFUSUNfQlVGCiAgICAoZGVmYXVsdGluZyB0byBvZmYgZm9yIG5vdykgdGhhdCBjYW4gYmUgc2V0IHRvIDAgdG8gc2VuZCBmcmFnbWVudGVkCiAgICBwYWNrZXRzIGJ5IHBhc3NpbmcgUEJVRl9SRUZzIGRvd24gdGhlIHN0YWNrLgoKICAyMDA3LTA1LTIzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jOiBJbXBsZW1lbnQgU09fUkNWVElNRU8gZm9yIGFjY2VwdCBhbmQgcmVjdiBvbiBUQ1AKICAgIGNvbm5lY3Rpb25zLCBzdWNoIHByZXNlbnQgaW4gcGF0Y2ggIzU5NTkuCgogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogZ3JvdXAgdGhlIGRpZmZlcmVudCBORVRDT05OX1VEUHh4eAogICAgY29kZSBpbiBvbmx5IG9uZSBwYXJ0Li4uCgogIDIwMDctMDUtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBtZW1wLmgsIG1lbXAuYzogQWRkZWQgb3B0aW9uIE1FTVBfT1ZFUkZMT1dfQ0hFQ0sgdG8gY2hlY2sgZm9yIG1lbXAKICAgIGVsZW1lbnRzIHRvIG92ZXJmbG93LiBUaGlzIGlzIGFjaGlldmVkIGJ5IGFkZGluZyBzb21lIGJ5dGVzIGJlZm9yZSBhbmQgYWZ0ZXIKICAgIGVhY2ggcG9vbCBlbGVtZW50IChpbmNyZWFzaW5nIHRoZWlyIHNpemUsIG9mIGNvdXJzZSksIGZpbGxpbmcgdGhlbSB3aXRoIGEKICAgIHByb21pbmVudCB2YWx1ZSBhbmQgY2hlY2tpbmcgdGhlbSBvbiBmcmVlaW5nIHRoZSBlbGVtZW50LgogICAgU2V0IGl0IHRvIDIgdG8gYWxzbyBjaGVjayBldmVyeSBlbGVtZW50IGluIGV2ZXJ5IHBvb2wgZWFjaCB0aW1lIG1lbXBfbWFsbG9jKCkKICAgIG9yIG1lbXBfZnJlZSgpIGlzIGNhbGxlZCAoc2xvd2VyIGJ1dCBtb3JlIGhlbHBmdWwpLgoKICAyMDA3LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgbWVtcC5oLCBtZW1wLmMsIHBidWYuYyAoc2VlIHRhc2sgIzY4MzEpOiB1c2UgYSBuZXcgbWVtcCBwb29sIGZvcgogICAgUEJVRl9QT09MIHBidWZzIGluc3RlYWQgb2YgdGhlIG9sZCBwb29sIGltcGxlbWVudGF0aW9uIGluIHBidWYuYyB0byByZWR1Y2UKICAgIGNvZGUgc2l6ZS4KCiAgMjAwNy0wNS0xMSBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgbmV0aWZhcGkuaCwgbmV0aWZhcGkuYywgdGNwaXAuYzoKICAgIEluY2x1ZGUgYSBmdW5jdGlvbiBwb2ludGVyIGluc3RlYWQgb2YgYSB0YWJsZSBpbmRleCBpbiB0aGUgbWVzc2FnZSB0byByZWR1Y2UKICAgIGZvb3RwcmludC4gRGlzYWJsZSBzb21lIHBhcnQgb2YgbHdpcF9zZW5kIGFuZCBsd2lwX3NlbmR0byBpZiBzb21lIG9wdGlvbnMgYXJlCiAgICBub3Qgc2V0IChMV0lQX1RDUCwgTFdJUF9VRFAsIExXSVBfUkFXKS4KCiAgMjAwNy0wNS0xMCBTaW1vbiBHb2xkc2NobWlkdAogICogKi5oIChleGNlcHQgbmV0aWYvcHBwLyouaCk6IEluY2x1ZGVkIHBhdGNoICM1NDQ4OiBpbmNsdWRlICcjaWZkZWYgX19jcGx1c3BsdXMKICAgIFwgZXh0ZXJuICJDIiB7JyBpbiBhbGwgaGVhZGVyIGZpbGVzLiBOb3cgeW91IGNhbiB3cml0ZSB5b3VyIGFwcGxpY2F0aW9uIHVzaW5nCiAgICB0aGUgbHdJUCBzdGFjayBpbiBDKysgYW5kIHNpbXBseSAjaW5jbHVkZSB0aGUgY29yZSBmaWxlcy4gTm90ZSBJIGhhdmUgbGVmdAogICAgb3V0IHRoZSBuZXRpZi9wcHAvKmggaGVhZGVyIGZpbGVzIGZvciBub3csIHNpbmNlIEkgZG9uJ3Qga25vdyB3aGljaCBmaWxlcyBhcmUKICAgIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9ucyBhbmQgd2hpY2ggYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KCiAgMjAwNy0wNS0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogb3B0LmgsICouYy8qLmg6IEluY2x1ZGVkIHBhdGNoICM1OTIwOiBDcmVhdGUgZGVmaW5lIHRvIG92ZXJyaWRlIEMtbGlicmFyeQogICAgbWVtY3B5LiAyIERlZmluZXMgYXJlIGNyZWF0ZWQ6IE1FTUNQWSgpIGZvciBub3JtYWwgbWVtY3B5LCBTTUVNQ1BZKCkgZm9yCiAgICBzaXR1YXRpb25zIHdoZXJlIHNvbWUgY29tcGlsZXJzIG1pZ2h0IGlubGluZSB0aGUgY29weSBhbmQgc2F2ZSBhIGZ1bmN0aW9uCiAgICBjYWxsLiBBbHNvIHJlcGxhY2VkIGFsbCBjYWxscyB0byBtZW1jcHkoKSB3aXRoIGNhbGxzIHRvIChTKU1FTUNQWSgpLgoKICAyMDA3LTA1LTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uaDogSWYgTUVNX0xJQkNfTUFMTE9DPT0xLCBhbGxvdyB0aGUgZGVmaW5lcyAoZS5nLiBtZW1fbWFsbG9jKCkgLT4gbWFsbG9jKCkpCiAgICB0byBiZSBvdmVycmlkZW4gaW4gY2FzZSB0aGUgQy1saWJyYXJ5IG1hbGxvYyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcHJvdGVjdGVkCiAgICBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzLgoKICAyMDA3LTA1LTA0IFNpbW9uIEdvbGRzY2htaWR0IChBdHRlIEtvam8pCiAgKiBldGhhcnAuYzogSW50cm9kdWNlZCBmYXN0IG9uZS1lbnRyeS1jYWNoZSB0byBzcGVlZCB1cCBBUlAgbG9va3VwIHdoZW4gc2VuZGluZwogICAgbXVsdGlwbGUgcGFja2V0cyB0byB0aGUgc2FtZSBob3N0LgoKICAyMDA3LTA1LTA0IEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cgogICogc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYzogRml4IGJ1ZyAjMTkxNjIgImx3aXBfc2VudG86IGEgcG9zc2libGUKICAgIHRvIGNvcnJ1cHQgcmVtb3RlIGFkZHIvcG9ydCBjb25uZWN0aW9uIHN0YXRlIi4gUmVkdWNlIHByb2JsZW1zICJub3QgZW5vdWdodCBtZW1vcnkiIHdpdGgKICAgIG5ldGJ1ZiAoaWYgd2UgcmVjZWl2ZSBsb3Qgb2YgZGF0YWdyYW1zKS4gSW1wcm92ZSBsd2lwX3NlbmR0byAob25seSBvbmUgZXhjaGFuZ2UgYmV0d2VlbgogICAgc29ja2V0cyBhcGkgYW5kIGFwaV9tc2cgd2hpY2ggcnVuIGluIHRjcGlwX3RocmVhZCBjb250ZXh0KS4gQWRkIG5ldGNvbm5fc2VudG8gZnVuY3Rpb24uCiAgICBXYXJuaW5nLCBpZiB5b3UgZGlyZWN0bHkgYWNjZXNzIHRvICJmcm9tYWRkciIgJiAiZnJvbXBvcnQiIGZpZWxkIGZyb20gbmV0YnVmIHN0cnVjdCwKICAgIHRoZXNlIGZpZWxkcyBhcmUgbm93IHJlbmFtZWQgImFkZHIiICYgInBvcnQiLgoKICAyMDA3LTA0LTExIEpvbmF0aGFuIExhcm1vdXIKICAqIHN5cy5oLCBhcGlfbGliLmM6IFByb3ZpZGUgbmV3IHN5c19tYm94X3RyeWZldGNoIGZ1bmN0aW9uLiBSZXF1aXJlIHBvcnRzIHRvIHByb3ZpZGUgbmV3CiAgICBzeXNfYXJjaF9tYm94X3RyeWZldGNoIGZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2UgaWYgb25lIGlzIHRoZXJlLCBvdGhlcndpc2UgcmV0dXJuCiAgICB3aXRoIFNZU19NQk9YX0VNUFRZLiBzeXNfYXJjaF9tYm94X3RyeWZldGNoIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8KICAgIGJ5IHRoZSBwb3J0IGluIHN5c19hcmNoLmggaWYgZGVzaXJlZC4KCiAgMjAwNy0wNC0wNiBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBvcHQuaCwgdGNwaXAuaCwgdGNwaXAuYywgbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfTkVUSUZfQVBJCiAgICBhbGxvdyB0byB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIHRvIGFkZC9yZW1vdmUgbmV0aWYgaW4gbGlzdCwgYW5kIHRvIHN0YXJ0L3N0b3AgZGhjcAogICAgY2xpZW50cywgdXNpbmcgbmV3IGZ1bmN0aW9ucyBmcm9tIG5ldGlmYXBpLmguIERpc2FibGUgYXMgZGVmYXVsdCAobm8gcG9ydCBjaGFuZ2UgdG8gZG8pLgoKICAyMDA3LTA0LTA1IEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jOiByZW1wbGFjZSBFTk9CVUZTIGVycm9ycyBvbiBhbGxvY19zb2NrZXQgYnkgRU5GSUxFIHRvIGJlIG1vcmUgQlNEIGNvbXBsaWFudC4KCiAgMjAwNy0wNC0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogYXJjaC5oLCBhcGlfbXNnLmMsIGRoY3AuYywgbXNnX2luLmMsIHNvY2tldHMuYzogSW50cm9kdWNlZCAjZGVmaW5lIExXSVBfVU5VU0VEX0FSRyh4KQogICAgdXNlIHRoaXMgZm9yIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZm9ybSB0byB0ZWxsIHRoZSBjb21waWxlciB5b3UgaW50ZW50aW9uYWxseQogICAgYXJlIG5vdCB1c2luZyB0aGlzIHZhcmlhYmxlLiBDYW4gYmUgb3ZlcnJpZGVuIGluIGNjLmguCgogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBvcHQuaCwgbmV0aWYuaCwgZGhjcC5oLCBkaGNwLmM6IE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX05FVElGX0hPU1ROQU1FIGFsbG93IHRvCiAgICBkZWZpbmUgYSBob3N0bmFtZSBpbiBuZXRpZiBzdHJ1Y3QgKHRoaXMgaXMganVzdCBhIHBvaW50ZXIsIHNvLCB5b3UgY2FuIHVzZSBhIGhhcmRjb2RlZAogICAgc3RyaW5nLCBwb2ludCBvbiBvbmUgb2YgeW91cidzIGV0aGVybmV0aWYgZmllbGQsIG9yIGFsbG9jIGEgc3RyaW5nIHlvdSB3aWxsIGZyZWUgeW91cnNlbGYpLgogICAgSXQgd2lsbCBiZSB1c2VkIGJ5IERIQ1AgdG8gcmVnaXN0ZXIgYSBjbGllbnQgaG9zdG5hbWUsIGJ1dCBjYW4gYWxzbyBiZSB1c2Ugd2hlbiB5b3UgY2FsbAogICAgc25tcF9zZXRfc3lzbmFtZS4KCiAgMjAwNy0wMy0yOCBGculk6XJpYyBCZXJub24KICAqIG5ldGlmLmgsIG5ldGlmLmM6IEEgbmV3IE5FVElGX0ZMQUdfRVRIQVJQIGZsYWcgaXMgZGVmaW5lZCBpbiBuZXRpZi5oLCB0byBhbGxvdyB0byAKICAgIGluaXRpYWxpemUgYSBuZXR3b3JrIGludGVyZmFjZSdzIGZsYWcgd2l0aC4gSXQgdGVsbCB0aGlzIGludGVyZmFjZSBpcyBhbiBldGhlcm5ldAogICAgZGV2aWNlLCBhbmQgd2UgY2FuIHVzZSBBUlAgd2l0aCBpdCB0byBkbyBhICJncmF0dWl0b3VzIEFSUCIgKFJGQyAzMjIwICJJUCBNb2JpbGl0eQogICAgU3VwcG9ydCBmb3IgSVB2NCIgc2VjdGlvbiA0LjYpIHdoZW4gaW50ZXJmYWNlIGlzICJ1cCIgd2l0aCBuZXRpZl9zZXRfdXAoKS4KCiAgMjAwNy0wMy0yNiBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIG9wdC5oLCB0Y3BpcC5jOiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9BUlAgYWxsb3cgdG8gZGlzYWJsZSBBUlAgaW5pdCBhdCBidWlsZAogICAgdGltZSBpZiB5b3Ugb25seSB1c2UgUFBQIG9yIFNMSVAuIFRoZSBkZWZhdWx0IGlzIGVuYWJsZS4gTm90ZSB3ZSBkb24ndCBoYXZlIHRvIGNhbGwgCiAgICBldGhhcnBfaW5pdCBpbiB5b3VyIHBvcnQncyBpbml0aWxpemF0aW9uIHNlcXVlbmNlIGlmIHlvdSB1c2UgdGNwaXAuYywgYmVjYXVzZSB0aGlzIGNhbGwKICAgIGlzIGRvbmUgaW4gdGNwaXBfaW5pdCBmdW5jdGlvbi4KCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24KICAqIHN0YXRzLmgsIHN0YXRzLmMsIG1zZ19pbi5jOiBTdGF0cyBjb3VudGVycyBjYW4gYmUgY2hhbmdlIHRvIHUzMl90IGlmIG5lY2Vzc2FyeSB3aXRoIHRoZQogICAgbmV3IG9wdGlvbiBMV0lQX1NUQVRTX0xBUkdFLiBJZiB5b3UgbmVlZCB0aGlzIG9wdGlvbiwgZGVmaW5lIExXSVBfU1RBVFNfTEFSR0UgdG8gMSBpbgogICAgeW91ciBsd2lwb3B0cy5oLiBNb3JlLCB1bnVzZWQgY291bnRlcnMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBzdGF0cyBzdHJ1Y3RzLCBhbmQgbm90IAogICAgZGlzcGxheSBieSBzdGF0c19kaXNwbGF5KCkuIE5vdGUgdGhhdCBzb21lIG9wdGlvbnMgKFNZU19TVEFUUyBhbmQgUkFXX1NUQVRTKSBhcmUgZGVmaW5lZAogICAgYnV0IG5ldmVyIHVzZWQuIEZpeCBtc2dfaW4uYyB3aXRoIHRoZSBjb3JyZWN0ICNpZiB0ZXN0IGZvciBhIHN0YXQgZGlzcGxheS4KCiAgMjAwNy0wMy0yMSBLaWVyYW4gTWFuc2xleQogICogbmV0aWYuYywgbmV0aWYuaDogQXBwbHkgcGF0Y2gjNDE5NyB3aXRoIHNvbWUgY2hhbmdlcyAob3JpZ2luYXRvcjogcmlyZWxhbmRAaG1nc2wuY29tKS4gCiAgICBQcm92aWRlcyBjYWxsYmFjayBvbiBuZXRpZiB1cC9kb3duIHN0YXRlIGNoYW5nZS4KCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24sIE1hY2UgR2FlbCwgU3RldmUgUmV5bm9sZHMKICAqIHNvY2tldHMuaCwgc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgaWdtcC5oLCBpZ21wLmMsCiAgICBpcC5jLCBuZXRpZi5oLCB0Y3BpcC5jLCBvcHQuaDoKICAgIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX0lHTVAgdG8gZW5hYmxlIElHTVAgcHJvY2Vzc2luZy4gQmFzZWQgb24gb25seSBvbmUgCiAgICBmaWx0ZXIgcGVyIGFsbCBuZXR3b3JrIGludGVyZmFjZXMuIERlY2xhcmUgYSBuZXcgZnVuY3Rpb24gaW4gbmV0aWYgdG8gZW5hYmxlIHRvCiAgICBjb250cm9sIHRoZSBNQUMgZmlsdGVyICh0byByZWR1Y2UgbHdJUCB0cmFmZmljIHByb2Nlc3NpbmcpLgoKICAyMDA3LTAzLTExIEZy6WTpcmljIEJlcm5vbgogICogdGNwLmgsIHRjcC5jLCBzb2NrZXRzLmMsIHRjcF9vdXQuYywgdGNwX2luLmMsIG9wdC5oOiBLZWVwYWxpdmUgdmFsdWVzIGNhbgogICAgYmUgY29uZmlndXJlZCBhdCBydW4gdGltZSB3aXRoIExXSVBfVENQX0tFRVBBTElWRSwgYnV0IGRvbid0IGNoYW5nZSB0aGlzCiAgICB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcgKGRlZmF1bHQgYXJlIFJGQzExMjIgY29tcGxpYW50KS4gTm90ZQogICAgdGhhdCBUQ1BfS0VFUElETEUgYW5kIFRDUF9LRUVQSU5UVkwgaGF2ZSB0byBiZSBzZXQgaW4gc2Vjb25kcy4KCiAgMjAwNy0wMy0wOCBGculk6XJpYyBCZXJub24KICAqIHRjcC5oOiBLZWVwYWxpdmUgdmFsdWVzIGNhbiBiZSBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZSwgYnV0IGRvbid0IGNoYW5nZQogICAgdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcgKGRlZmF1bHQgYXJlIFJGQzExMjIgY29tcGxpYW50KS4KCiAgMjAwNy0wMy0wOCBGculk6XJpYyBCZXJub24KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgdGNwaXAuYywgc3lzLmgsIHN5cy5jLCBlcnIuYywgb3B0Lmg6CiAgICBJbXBsZW1lbnQgTFdJUF9TT19SQ1ZUSU1FTyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSBTT19SQ1ZUSU1FTwogICAgb24gVURQIHNvY2tldHMvbmV0Y29ubi4KCiAgMjAwNy0wMy0wOCBTaW1vbiBHb2xkc2NobWlkdAogICogc25tcF9tc2cuaCwgbXNnX2luLmM6IFNOTVAgVURQIHBvcnRzIGNhbiBiZSBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4KCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIHNvY2tldHMuaCwgc29ja2V0cy5jLCB0Y3BpcC5jLCBzeXMuaCwgc3lzLmMsIGVyci5oOiAKICAgIEltcGxlbWVudCBTT19SQ1ZUSU1FTyBvbiBVRFAgc29ja2V0cy9uZXRjb25uLgoKICAyMDA3LTAyLTI4IEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIFNpbW9uIEdvbGRzY2htaWR0KQogICogYXBpX2xpYi5jLCB0Y3BpcC5jLCBtZW1wLmMsIG1lbXAuaDogbWFrZSBBUEkgbXNnIHN0cnVjdHMgYWxsb2NhdGVkCiAgICBvbiB0aGUgc3RhY2sgYW5kIHJlbW92ZSB0aGUgQVBJIG1zZyB0eXBlIGZyb20gbWVtcAoKICAyMDA3LTAyLTI2IEpvbmF0aGFuIExhcm1vdXIgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYzogTW92ZSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gdG8gbmV3CiAgICBsd2lwX3NvY2tldF9pbml0KCkgZnVuY3Rpb24uCiAgICBOT1RFOiB0aGlzIGNoYW5nZXMgdGhlIEFQSSB3aXRoIHBvcnRzLiBQb3J0cyB3aWxsIGhhdmUgdG8gYmUKICAgIHVwZGF0ZWQgdG8gY2FsbCBsd2lwX3NvY2tldF9pbml0KCkgbm93LgoKICAyMDA3LTAyLTI2IEpvbmF0aGFuIExhcm1vdXIgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpCiAgKiBhcGlfbGliLmM6IFVzZSBtZW1jcHkgaW4gbmV0YnVmX2NvcHlfcGFydGlhbC4KCgogICsrIEJ1ZyBmaXhlczoKCiAgMjAwOC0wMy0xNyBGculk6XJpYyBCZXJub24sIEVkIEtlcmVrZXMKICAqIGlnbXAuaCwgaWdtcC5jOiBGaXggYnVnICMyMjYxMyAiSUdNUCBpcGhkciBwcm9ibGVtIiAoY291bGQgaGF2ZQogICAgc29tZSBwcm9ibGVtcyB0byBmaWxsIHRoZSBJUCBoZWFkZXIgb24gc29tZSB0YXJnZXRzLCB1c2Ugbm93IHRoZQogICAgaXAuaCBtYWNyb3MgdG8gZG8gaXQpLgoKICAyMDA4LTAzLTEzIEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jOiBGaXggYnVnICMyMjQzNSAibHdpcF9yZWN2ZnJvbSB3aXRoIFRDUCBicmVhazsiLiBVc2luZwogICAgKGx3aXBfKXJlY3Zmcm9tIHdpdGggdmFsaWQgImZyb20iIGFuZCAiZnJvbWxlbiIgcGFyYW1ldGVycywgb24gYQogICAgVENQIGNvbm5lY3Rpb24gY2F1c2VkIGEgY3Jhc2guIE5vdGUgdGhhdCB1c2luZyAobHdpcF8pcmVjdmZyb20KICAgIGxpa2UgdGhpcyBpcyBhIGJpdCBzbG93IGFuZCB0aGF0IHVzaW5nIChsd2lwKWdldHBlZXJuYW1lIGlzIHRoZQogICAgZ29vZCBsd2lwIHdheSB0byBkbyBpdCAoc28sIHVzaW5nIHJlY3YgaXMgZmFzdGVyIG9uIHRjcCBzb2NrZXRzKS4KCiAgMjAwOC0wMy0xMiBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXIKICAqIGFwaV9tc2cuYywgY29udHJpYi9hcHBzL3BpbmcuYzogRml4IGJ1ZyAjMjI1MzAgImFwaV9tc2cuYydzCiAgICByZWN2X3JhdygpIGRvZXMgbm90IGNvbnN1bWUgZGF0YSIsIGFuZCB0aGUgcGluZyBzYW1wbGUgKHdpdGgKICAgIExXSVBfU09DS0VUPTEsIHRoZSBjb2RlIGRpZCB0aGUgd3Jvbmcgc3VwcG9zaXRpb24gdGhhdCBsd2lwX3JlY3Zmcm9tCiAgICByZXR1cm5lZCB0aGUgSVAgcGF5bG9hZCwgd2l0aG91dCB0aGUgSVAgaGVhZGVyKS4KCiAgMjAwOC0wMy0wNCBKb25hdGhhbiBMYXJtb3VyCiAgKiBtZW0uYywgc3RhdHMuYywgbWVtLmg6IGFwcGx5IHBhdGNoICM2NDE0IHRvIGF2b2lkIGNvbXBpbGVyIGVycm9ycwogIGFuZC9vciB3YXJuaW5ncyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgbWVtX3NpemVfdCBhbmQgc2l6ZV90IGRpZmZlci4KICAqIHBidWYuYywgcHBwLmM6IEZpeCB3YXJuaW5ncyBvbiBzb21lIHN5c3RlbXMgd2l0aCBtZW1fbWFsbG9jLgoKICAyMDA4LTAzLTA0IEtpZXJhbiBNYW5zbGV5IChjb250cmlidXRpb25zIGJ5IG90aGVycykgCiAgKiBOdW1lcm91cyBzbWFsbCBjb21waWxlciBlcnJvci93YXJuaW5nIGZpeGVzIGZyb20gY29udHJpYnV0aW9ucyB0bwogICAgbWFpbGluZyBsaXN0IGFmdGVyIDEuMy4wIHJlbGVhc2UgY2FuZGlkYXRlIG1hZGUuCgogIDIwMDgtMDEtMjUgQ3VpIGhlbmdiaW4gKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQogICogZG5zLmM6IEZpeCBidWcgIzIyMTA4ICJETlMgcHJvYmxlbSIgY2F1c2VkIGJ5IHVuYWxpZ25lZCBzdHJ1Y3R1cmVzLgoKICAyMDA4LTAxLTE1IEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3Bfb3V0LmM6IEJVRzIwNTExLiAgTW9kaWZ5IHBlcnNpc3QgdGltZXIgdG8gc3RhcnQgd2hlbiB3ZSBhcmUKICAgIHByZXZlbnRlZCBmcm9tIHNlbmRpbmcgYnkgYSBzbWFsbCBzZW5kIHdpbmRvdywgbm90IGp1c3QgYSB6ZXJvCiAgICBzZW5kIHdpbmRvdy4KCiAgMjAwOC0wMS0wOSBKb25hdGhhbiBMYXJtb3VyCiAgKiBvcHQuaCwgaXAuYzogUmVuYW1lIElQX09QVElPTlMgZGVmaW5lIHRvIElQX09QVElPTlNfQUxMT1dFRCB0byBhdm9pZAogICAgY29uZmxpY3Qgd2l0aCBMaW51eCBzeXN0ZW0gaGVhZGVycy4KCiAgMjAwOC0wMS0wNiBKb25hdGhhbiBMYXJtb3VyCiAgKiBkaGNwLmM6IGZpeCBidWcgIzE5OTI3OiAiREhDUCBOQUNLIHByb2JsZW0iIGJ5IGNsZWFyaW5nIGFueSBleGlzdGluZyBzZXQgSVAKICAgIGFkZHJlc3MgZW50aXJlbHkgb24gcmVjZWl2aW5nIGEgREhDUE5BSywgYW5kIHJlc3RhcnRpbmcgZGlzY292ZXJ5LgoKICAyMDA3LTEyLTIxIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzeXMuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHNvY2tldHMuYzogZml4IGJ1ZyAjMjE2OTg6ICJuZXRjb25uLT5yZWN2X2F2YWlsCiAgICBpcyBub3QgcHJvdGVjdGVkIiBieSB1c2luZyBuZXcgbWFjcm9zIGZvciBpbnRlcmxvY2tlZCBhY2Nlc3MgdG8gbW9kaWZ5L3Rlc3QKICAgIG5ldGNvbm4tPnJlY3ZfYXZhaWwuCgogIDIwMDctMTItMjAgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gT2xlZyBUeXNoZXYpCiAgKiB0Y3BfaW4uYzogZml4IGJ1ZyMgMjE1MzUgKG5ydHggbm90IHJlc2V0IGNvcnJlY3RseSBpbiBTWU5fU0VOVCBzdGF0ZSkKCiAgMjAwNy0xMi0yMCBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBQZXItSGVucmlrIEx1bmRib2xtKQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBmaXggYnVnICMyMDE5OSAoYmV0dGVyIGhhbmRsaW5nCiAgICBvZiBzaWxseSB3aW5kb3cgYXZvaWRhbmNlIGFuZCBwcmV2ZW50IGx3SVAgZnJvbSBzaHJpbmtpbmcgdGhlIHdpbmRvdykKCiAgMjAwNy0xMi0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmMsIHRjcF9pbi5jOiBmaXggYnVnICMyMTY5OSAoc2VnbWVudCBsZWFrIGluIG9vc2VxIHByb2Nlc3Npbmcgd2hlbiBsYXN0CiAgICBkYXRhIHBhY2tldCB3YXMgbG9zdCk6IGFkZCBhc3NlcnQgdGhhdCBhbGwgc2VnbWVudCBsaXN0cyBhcmUgZW1wdHkgaW4KICAgIHRjcF9wY2JfcmVtb3ZlIGJlZm9yZSBzZXR0aW5nIHBjYiB0byBDTE9TRUQgc3RhdGU7IGRvbid0IGRpcmVjdGx5IHNldCBDTE9TRUQKICAgIHN0YXRlIGZyb20gTEFTVF9BQ0sgaW4gdGNwX3Byb2Nlc3MKCiAgMjAwNy0xMi0wMiBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5oOiBmaXggYnVnICMyMTY1NDogZXhjbHVkZSBkZWZpbml0aW9uIG9mIHN0cnVjdCB0aW1ldmFsIGZyb20gI2lmbmRlZiBGRF9TRVQKICAgIElmIGluY2x1ZGluZyA8c3lzL3RpbWUuaD4gZm9yIHN5c3RlbS1zdHJ1Y3QgdGltZXZhbCwgTFdJUF9USU1FVkFMX1BSSVZBVEUgbm93CiAgICBoYXMgdG8gYmUgc2V0IHRvIDAgaW4gbHdpcG9wdHMuaAoKICAyMDA3LTEyLTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmMsIGFwaV9saWIuYzogZml4IGJ1ZyAjMjE2NTYgKHJlY3ZtYm94IHByb2JsZW0gaW4gbmV0Y29ubiBBUEkpOiBhbHdheXMKICAgIGFsbG9jYXRlIGEgcmVjdm1ib3ggaW4gbmV0Y29ubl9uZXdfd2l0aF9wcm90b19hbmRfY2FsbGJhY2suIEZvciBhIHRjcC1saXN0ZW4KICAgIG5ldGNvbm4sIHRoaXMgcmVjdm1ib3ggaXMgbGF0ZXIgZnJlZWQgYW5kIGEgbmV3IG1ib3ggaXMgYWxsb2NhdGVkIGZvciBhY2NlcHRtYm94LgogICAgVGhpcyBpcyBhIGZpeCBmb3IgdGhyZWFkLXNhZmV0eSBhbmQgYWxsb2NhdGVzIGFsbCBpdGVtcyBuZWVkZWQgZm9yIGEgbmV0Y29ubgogICAgd2hlbiB0aGUgbmV0Y29ubiBpcyBjcmVhdGVkLgoKICAyMDA3LTExLTMwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYzogZmlyc3QgYXR0ZW1wdCB0byBmaXggYnVnICMyMTY1NSAoREhDUCBkb2Vzbid0IHdvcmsgcmVsaWFibHkgd2l0aCBtdWx0aXBsZQogICAgbmV0aWZzKTogaWYgTFdJUF9ESENQIGlzIGVuYWJsZWQsIFVEUCBwYWNrZXRzIHRvIERIQ1BfQ0xJRU5UX1BPUlQgYXJlIHBhc3NlZAogICAgdG8gbmV0aWYtPmRoY3AtPnBjYiBvbmx5IChpZiB0aGF0IGV4aXN0cykgYW5kIG5vdCB0byBhbnkgb3RoZXIgcGNiIGZvciB0aGUgc2FtZQogICAgcG9ydCAob25seSBzb2x1dGlvbiB0byBsZXQgVURQIHBjYnMgJ2JpbmQnIHRvIGEgbmV0aWYgaW5zdGVhZCBvZiBhbiBJUCBhZGRyZXNzKQoKICAyMDA3LTExLTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcC5jOiBmaXhlZCBidWcgIzIxNjQzICh1ZHBfc2VuZC9yYXdfc2VuZCBkb24ndCBmYWlsIGlmIG5ldGlmIGlzIGRvd24pIGJ5CiAgICBsZXR0aW5nIGlwX3JvdXRlIG9ubHkgdXNlIG5ldGlmcyB0aGF0IGFyZSB1cC4KCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdAogICogZXJyLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IENoYW5nZWQgZXJyb3IgaGFuZGxpbmc6IEVSUl9NRU0sIEVSUl9CVUYKICAgIGFuZCBFUlJfUlRFIGFyZSBzZWVuIGFzIG5vbi1mYXRhbCwgYWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuIG5ldGNvbm5zIGFuZAogICAgc29ja2V0cyBibG9jayBtb3N0IG9wZXJhdGlvbnMgb25jZSB0aGV5IGhhdmUgc2VlbiBhIGZhdGFsIGVycm9yLgoKICAyMDA3LTExLTI3IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuaCwgdWRwLmMsIGRoY3AuYzogSW1wbGVtZW50ZWQgbmV3IGZ1bmN0aW9uIHVkcF9zZW5kdG9faWYgd2hpY2ggdGFrZXMgdGhlCiAgICBuZXRpZiB0byBzZW5kIGFzIGFuIGFyZ3VtZW50ICh0byBiZSBhYmxlIHRvIHNlbmQgb24gbmV0aWZzIHRoYXQgYXJlIGRvd24pLgoKICAyMDA3LTExLTI2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTU4MjogcGNiLT5hY2tlZCBhY2NvdW50aW5nIGNhbiBiZSB3cm9uZyB3aGVuIEFDS3MKICAgIGFycml2ZSBvdXQtb2Ytb3JkZXIKCiAgMjAwNy0xMS0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHRjcF9vdXQuYywgYXBpX21zZy5jOiBGaXhlZCBidWcgIzIwMjg3OiB0Y3Bfb3V0cHV0X25hZ2xlIHNlbmRzIHRvbyBlYXJseQogICAgRml4ZWQgdGhlIG5hZ2xlIGFsZ29yaXRobTsgbmFnbGUgbm93IGFsc28gd29ya3MgZm9yIGFsbCByYXcgQVBJIGFwcGxpY2F0aW9ucwogICAgYW5kIGhhcyB0byBiZSBleHBsaWNpdGx5IGRpc2FibGVkIHdpdGggJ3RjcF9wY2ItPmZsYWdzIHw9IFRGX05PREVMQVknCgogIDIwMDctMTEtMTIgRnLpZOlyaWMgQmVybm9uCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBGaXhlZCBidWcgIzIwOTAwLiBOb3csIG1vc3QKICAgIG9mIHRoZSBuZXRjb25uX3BlZXIgYW5kIG5ldGNvbm5fYWRkciBwcm9jZXNzaW5nIGlzIGRvbmUgaW5zaWRlIHRjcGlwX3RocmVhZAogICAgY29udGV4dCBpbiBkb19nZXRhZGRyLgoKICAyMDA3LTExLTEwIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYzogRml4ZWQgYnVnOiBhc3NlcnQgZmlyZWQgd2hlbiBNRU1QX0FSUF9RVUVVRSB3YXMgZW1wdHkgKHdoaWNoIGNhbgogICAgaGFwcGVuIGFueSB0aW1lKS4gTm93IHRoZSBwYWNrZXQgc2ltcGx5IGlzbid0IGVucXVldWVkIHdoZW4gb3V0IG9mIG1lbW9yeS4KCiAgMjAwNy0xMS0wMSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmMsIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxNDk0OiBUaGUgc2VuZCBtc3MgKHBjYi0+bXNzKSBpcyBzZXQgdG8gNTM2IChvcgogICAgVENQX01TUyBpZiB0aGF0IGlzIHNtYWxsZXIpIGFzIGxvbmcgYXMgbm8gTVNTIG9wdGlvbiBpcyByZWNlaXZlZCBmcm9tIHRoZQogICAgcmVtb3RlIGhvc3QuCgogIDIwMDctMTEtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5oLCB0Y3AuYywgdGNwX2luLmM6IEZpeGVkIGJ1ZyAjMjE0OTE6IFRoZSBNU1Mgb3B0aW9uIHNlbnQgKHdpdGggU1lOKQogICAgaXMgbm93IGJhc2VkIG9uIFRDUF9NU1MgaW5zdGVhZCBvZiBwY2ItPm1zcyAob24gcGFzc2l2ZSBvcGVuIG5vdyBlZmZlY3RpdmVseQogICAgc2VuZGluZyBvdXIgY29uZmlndXJlZCBUQ1BfTVNTIGluc3RlYWQgb2YgdGhlIG9uZSByZWNlaXZlZCkuCgogIDIwMDctMTEtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxMTgxOiBPbiBhY3RpdmUgb3BlbiwgdGhlIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cgd2FzCiAgICBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIFRDUF9NU1MsIG5vdCBvbiB0aGUgTVNTIG9wdGlvbiByZWNlaXZlZAogICAgd2l0aCBTWU4rQUNLLgoKICAyMDA3LTEwLTA5IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYywgaW5ldC5jLCBpbmV0Lmg6IEZpeGVkIFVEUExpdGU6IHNlbmQ6IENoZWNrc3VtIHdhcyBhbHdheXMgZ2VuZXJhdGVkIHRvbwogICAgc2hvcnQgYW5kIGFsc28gd2FzIGdlbmVyYXRlZCB3cm9uZyBpZiBjaGVja3N1bSBjb3ZlcmFnZSAhPSB0b3RfbGVuOwogICAgcmVjZWl2ZTogY2hlY2tzdW0gd2FzIGNhbGN1bGF0ZWQgd3JvbmcgaWYgY2hlY2tzdW0gY292ZXJhZ2UgIT0gdG90X2xlbgoKICAyMDA3LTEwLTA4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBtZW0uYzogbGZyZWUgd2FzIG5vdCB1cGRhdGVkIGluIG1lbV9yZWFsbG9jIQoKICAyMDA3LTEwLTA3IEZy6WTpcmljIEJlcm5vbgogICogc29ja2V0cy5jLCBhcGkuaCwgYXBpX2xpYi5jOiBGaXJzdCBzdGVwIHRvIGZpeCAiYnVnICMyMDkwMCA6IFBvdGVudGlhbAogICAgY3Jhc2ggZXJyb3IgcHJvYmxlbSB3aXRoIG5ldGNvbm5fcGVlciAmIG5ldGNvbm5fYWRkciIuIFZFUlkgSU1QT1JUQU5UOgogICAgdGhpcyBjaGFuZ2UgY2F1c2UgYW4gQVBJIGJyZWFrYWdlIGZvciBuZXRjb25uX2FkZHIsIHNpbmNlIGEgcGFyYW1ldGVyCiAgICB0eXBlIGNoYW5nZS4gQW55IGNvbXBpbGVyIHNob3VsZCBjYXVzZSBhbiBlcnJvciB3aXRob3V0IGFueSBjaGFuZ2VzIGluCiAgICB5b3VycyBuZXRjb25uX3BlZXIgY2FsbHMgKHNvLCBpdCBjYW4ndCBiZSBhICJzaWxlbnQgY2hhbmdlIikuIEl0IGFsc28KICAgIHJlZHVjZSBhIGxpdHRsZSBiaXQgdGhlIGZvb3RwcmludCBmb3Igc29ja2V0IGxheWVyIChsd2lwX2dldHBlZXJuYW1lICYKICAgIGx3aXBfZ2V0c29ja25hbWUgdXNlIG5vdyBhIGNvbW1vbiBsd2lwX2dldGFkZHJuYW1lIGZ1bmN0aW9uIHNpbmNlIAogICAgbmV0Y29ubl9wZWVyICYgbmV0Y29ubl9hZGRyIGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVycykuCgogIDIwMDctMDktMjAgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcC5jOiBGaXhlZCBidWcgIzIxMDgwICh0Y3BfYmluZCB3aXRob3V0IGNoZWNrIHBjYnMgaW4gVElNRV9XQUlUIHN0YXRlKQogICAgYnkgY2hlY2tpbmcgIHRjcF90d19wY2JzIGFsc28KCiAgMjAwNy0wOS0xOSBTaW1vbiBHb2xkc2NobWlkdAogICogaWNtcC5jOiBGaXhlZCBidWcgIzIxMTA3IChkaWRuJ3QgcmVzZXQgSVAgVFRMIGluIElDTVAgZWNobyByZXBsaWVzKQoKICAyMDA3LTA5LTE1IE1pa2UgS2xlc2hvdgogICogbWVtLmM6IEZpeGVkIGJ1ZyAjMjEwNzcgKGluYWNjdXJhY3kgaW4gY2FsY3VsYXRpb24gb2YgbHdpcF9zdGF0Lm1lbS51c2VkKQoKICAyMDA3LTA5LTA2IEZy6WTpcmljIEJlcm5vbgogICogc2V2ZXJhbC1maWxlczogcmVwbGFjZSBzb21lICNpbmNsdWRlICJhcmNoL2NjLmgiIGJ5ICJsd2lwL2FyY2guaCIsIG9yIHNpbXBseSByZW1vdmUKICAgIGl0IGFzIGxvbmcgYXMgImx3aXAvb3B0LmgiIGlzIGluY2x1ZGVkIGJlZm9yZSAodGhpcyBvbmUgaW5jbHVkZSAibHdpcC9kZWJ1Zy5oIiB3aGljaAogICAgYWxyZWFkeSBpbmNsdWRlICJsd2lwL2FyY2guaCIpLiBMaWtlIHRoYXQsIGRlZmF1bHQgZGVmaW5lcyBhcmUgcHJvdmlkZWQgYnkgImx3aXAvYXJjaC5oIgogICAgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gY2MuaCwgaW4gdGhlIHNhbWUgc3Bpcml0IHRoYW4gImx3aXAvb3B0LmgiIGZvciBsd2lwb3B0cy5oLgoKICAyMDA3LTA4LTMwIEZy6WTpcmljIEJlcm5vbgogICogaWdtcC5oLCBpZ21wLmM6IFNvbWUgY2hhbmdlcyB0byByZW1vdmUgc29tZSByZWR1bmRhbnQgY29kZSwgYWRkIHNvbWUgdHJhY2VzLCAKICAgIGFuZCBmaXggc29tZSBjb2Rpbmcgc3R5bGUuCgogIDIwMDctMDgtMjggRnLpZOlyaWMgQmVybm9uCiAgKiB0Y3BpcC5jOiBGaXggVENQSVBfTVNHX0lOUEtUIHByb2Nlc3Npbmc6IG5vdywgdGNwaXBfaW5wdXQgY2FuIGJlIHVzZWQgZm9yIGFueQogICAga2luZCBvZiBwYWNrZXRzLiBUaGVzZSBwYWNrZXRzIGFyZSBjb25zaWRlcmVkIGxpa2UgRXRoZXJuZXQgcGFja2V0cyAocGF5bG9hZCAKICAgIHBvaW50aW5nIHRvIGV0aGhkcikgaWYgdGhlIG5ldGlmIGdvdCB0aGUgTkVUSUZfRkxBR19FVEhBUlAgZmxhZy4gRWxzZSwgcGFja2V0cyAKICAgIGFyZSBjb25zaWRlcmVkIGxpa2UgSVAgcGFja2V0cyAocGF5bG9hZCBwb2ludGluZyB0byBpcGhkcikuCgogIDIwMDctMDgtMjcgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmM6IEZpcnN0IGZpeCBmb3IgImJ1ZyAjMjA5MDAgOiBQb3RlbnRpYWwgY3Jhc2ggZXJyb3IKICAgIHByb2JsZW0gd2l0aCBuZXRjb25uX3BlZXIgJiBuZXRjb25uX2FkZHIiLiBJbnRyb2R1Y2UgTkVUQ09OTl9MSVNURU4gbmV0Y29ubl9zdGF0ZQogICAgYW5kIHJlbW92ZSBvYnNvbGV0ZSBvbmVzIChORVRDT05OX1JFQ1YgJiBORVRDT05OX0FDQ0VQVCkuCgogIDIwMDctMDgtMjQgS2llcmFuIE1hbnNsZXkKICAqIGluZXQuYyBNb2RpZnkgKGFjYyA+PiAxNikgdGVzdCB0byAoKGFjYyA+PiAxNikgIT0gMCkgdG8gaGVscCBidWdneQogICAgY29tcGlsZXIgKFBhcmFkaWdtIEMrKykKCiAgMjAwNy0wOC0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBzdGF0cy5oLCBzdGF0cy5jLCBpZ21wLmgsIGlnbXAuYywgb3B0Lmg6IEZpeCBmb3IgYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuCiAgICBJbnRyb2R1Y2UgSUdNUF9TVEFUUyB0byBjZW50cmFsaXplIHN0YXRpc3RpY3MgbWFuYWdlbWVudC4KCiAgMjAwNy0wOC0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiB1ZHAuYzogRml4IGZvciBidWcgIzIwNTAzIDogSUdNUCBJbXByb3ZlbWVudC4gRW5hYmxlIHRvIHJlY2VpdmUgYSBtdWx0aWNhc3QKICAgIHBhY2tldCBvbiBhIHVkcCBwY2IgYmluZGVkIG9uIGFuIG5ldGlmJ3MgSVAgYWRkcmVzcywgYW5kIG5vdCBvbiAiYW55Ii4KCiAgMjAwNy0wOC0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjCiAgKiBpZ21wLmgsIGlnbXAuYywgaXAuYzogRml4IG1pbm9yIGNoYW5nZXMgZnJvbSBidWcgIzIwNTAzIDogSUdNUCBJbXByb3ZlbWVudC4KICAgIFRoaXMgaXMgbWFpbmx5IG9uIHVzaW5nIGxvb2t1cC9sb29rZm9yLCBhbmQgc29tZSBjb2Rpbmcgc3R5bGVzLi4uCgogIDIwMDctMDctMjYgRnLpZOlyaWMgQmVybm9uIChhbmQgInRoZWRvY3RvciIpCiAgKiBpZ21wLmM6IEZpeCBidWcgIzIwNTk1IHRvIGFjY2VwdCBJR01QdjMgIlF1ZXJ5IiBtZXNzYWdlcy4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX21zZy5jLCB0Y3AuYzogQW5vdGhlciBmaXggZm9yIGJ1ZyAjMjAwMjE6IGJ5IG5vdCByZXR1cm5pbmcgYW4gZXJyb3IgaWYKICAgIHRjcF9vdXRwdXQgZmFpbHMgaW4gdGNwX2Nsb3NlLCB0aGUgY29kZSBpbiBkb19jbG9zZV9pbnRlcm5hbCBnZXRzIHNpbXBsZXIKICAgICh0Y3Bfb3V0cHV0IGlzIGNhbGxlZCBhZ2FpbiBsYXRlciBmcm9tIHRjcCB0aW1lcnMpLgoKICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9mcmFnLmM6IEZpeGVkIGJ1ZyAjMjA0Mjk6IHVzZSB0aGUgbmV3IHBidWZfY29weV9wYXJ0aWFsIGluc3RlYWQgb2YgdGhlIG9sZAogICAgY29weV9mcm9tX3BidWYsIHdoaWNoIGlsbGVnYWxseSBtb2RpZmllZCB0aGUgZ2l2ZW4gcGJ1Zi4KCiAgMjAwNy0wNy0yNSBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiB0Y3BfZW5xdWV1ZTogcGNiLT5zbmRfcXVldWVsZW4gZGlkbid0IHdvcmsgZm9yIGNoYWluZSBQQlVGX1JBTXM6CiAgICBjaGFuZ2VkIHNuZF9xdWV1ZWxlbisrIHRvIHNuZF9xdWV1ZWxlbiArPSBwYnVmX2NsZW4ocCkuCgogIDIwMDctMDctMjQgU2ltb24gR29sZHNjaG1pZHQKICAqIGFwaV9tc2cuYywgdGNwLmM6IEZpeCBidWcgIzIwNDgwOiBDaGVjayB0aGUgcGNiIHBhc3NlZCB0byB0Y3BfbGlzdGVuKCkgZm9yIHRoZQogICAgY29ycmVjdCBzdGF0ZSAobXVzdCBiZSBDTE9TRUQpLgoKICAyMDA3LTA3LTEzIFRob21hcyBUYXJhbm93c2tpIChjb21taXRlZCBieSBKYXJlZCBHcnViYikKICAqIG1lbXAuYzogRml4IGJ1ZyAjMjA0Nzg6IG1lbXBfbWFsbG9jIHJldHVybmVkIE5VTEwrTUVNUF9TSVpFIG9uIGZhaWxlZAogICAgYWxsb2NhdGlvbi4gSXQgbm93IHJldHVybnMgTlVMTC4KCiAgMjAwNy0wNy0xMyBGculk6XJpYyBCZXJub24KICAqIGFwaV9tc2cuYzogRml4IGJ1ZyAjMjAzMTg6IGFwaV9tc2cgInJlY3YiIGNhbGxiYWNrcyBkb24ndCBjYWxsIHBidWZfZnJlZSBpbgogICAgYWxsIGVycm9yIGNhc2VzLgoKICAyMDA3LTA3LTEzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5jOiBGaXggYnVnICMyMDMxNTogcG9zc2libGUgbWVtb3J5IGxlYWsgcHJvYmxlbSBpZiB0Y3BfbGlzdGVuIGZhaWxlZCwKICAgIGJlY2F1c2UgY3VycmVudCBjb2RlIGRvZXNuJ3QgZm9sbG93IHJhd2FwaS50eHQgZG9jdW1lbnRhdGlvbi4KCiAgMjAwNy0wNy0xMyBLaWVyYW4gTWFuc2xleQogICogc3JjL2NvcmUvdGNwX2luLmMgQXBwbHkgcGF0Y2gjNTc0MSBmcm9tIE9sZWcgVHlzaGV2IHRvIGZpeCBidWcgaW4KICAgIG91dCBvZiBzZXF1ZW5jZSBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIHBhY2tldHMKCiAgMjAwNy0wNy0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogbmVhcmx5LWFsbC1maWxlczogQWRkZWQgYXNzZXJ0aW9ucyB3aGVyZSBQQlVGX1JBTSBwYnVmcyBhcmUgdXNlZCBhbmQgYW4KICAgIGFzc3VtcHRpb24gaXMgbWFkZSB0aGF0IHRoaXMgcGJ1ZiBpcyBpbiBvbmUgcGllY2UgKGkuZS4gbm90IGNoYWluZWQpLiBUaGVzZQogICAgYXNzdW1wdGlvbnMgY2xhc2ggd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgY29udmVydGluZyB0byBmdWxseSBwb29sLWJhc2VkCiAgICBwYnVmIGltcGxlbWVudGF0aW9ucywgd2hlcmUgUEJVRl9SQU0gcGJ1ZnMgbWlnaHQgYmUgY2hhaW5lZC4KCiAgMjAwNy0wNy0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBGaW5hbCBmaXggZm9yIGJ1ZyAjMjAwMjEgYW5kIHNvbWUgb3RoZXIgcHJvYmxlbXMKICAgIHdoZW4gY2xvc2luZyB0Y3AgbmV0Y29ubnM6IHJlbW92ZWQgY29ubi0+c2VtLCBsZXNzIGNvbnRleHQgc3dpdGNoZXMgd2hlbgogICAgY2xvc2luZywgYm90aCBuZXRjb25uX2Nsb3NlIGFuZCBuZXRjb25uX2RlbGV0ZSBzaG91bGQgc2FmZWx5IGNsb3NlIHRjcAogICAgY29ubmVjdGlvbnMuCgogIDIwMDctMDctMDIgU2ltb24gR29sZHNjaG1pZHQKICAqIGlwdjQvaXAuaCwgaXB2Ni9pcC5oLCBvcHQuaCwgbmV0aWYuaCwgZXRoYXJwLmgsIGlwdjQvaXAuYywgbmV0aWYuYywgcmF3LmMsCiAgICB0Y3Bfb3V0LmMsIHVkcC5jLCBldGhhcnAuYzogQWRkZWQgb3B0aW9uIExXSVBfTkVUSUZfSFdBRERSSElOVCAoZGVmYXVsdD1vZmYpCiAgICB0byBjYWNoZSBBUlAgdGFibGUgaW5kaWNlcyB3aXRoIGVhY2ggcGNiIGluc3RlYWQgb2Ygc2luZ2xlLWVudHJ5IGNhY2hlIGZvcgogICAgdGhlIGNvbXBsZXRlIHN0YWNrLgoKICAyMDA3LTA3LTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaCwgdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmM6IEFkZGVkIHNvbWUgQVNTRVJUUyBhbmQgY2FzdHMgdG8gcHJldmVudAogICAgd2FybmluZ3Mgd2hlbiBhc3NpZ25pbmcgdG8gc21hbGxlciB0eXBlcy4KCiAgMjAwNy0wNi0yOCBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwX291dC5jOiBBZGRlZCBjaGVjayB0byBwcmV2ZW50IHRjcF9wY2ItPnNuZF9xdWV1ZWxlbiBmcm9tIG92ZXJmbG93aW5nLgoKICAyMDA3LTA2LTI4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3AuaDogRml4ZWQgYnVnICMyMDI4NzogRml4ZWQgbmFnbGUgYWxnb3JpdGhtIChzZW5kaW5nIHdhcyBkb25lIHRvbyBlYXJseSBpZgogICAgYSBzZWdtZW50IGNvbnRhaW5lZCBjaGFpbmVkIHBidWZzKQoKICAyMDA3LTA2LTI4IEZy6WTpcmljIEJlcm5vbgogICogYXV0b2lwLmM6IHJlcGxhY2UgbW9zdCBvZiByYW5kKCkgY2FsbHMgYnkgYSBtYWNybyBMV0lQX0FVVE9JUF9SQU5EIHdoaWNoIGNvbXB1dGUKICAgIGEgInBzZXVkby1yYW5kb20iIHZhbHVlIGJhc2VkIG9uIG5ldGlmJ3MgTUFDIGFuZCBzb21lIGF1dG9pcCBmaWVsZHMuIEl0J3MgYWx3YXlzCiAgICBwb3NzaWJsZSB0byBkZWZpbmUgdGhpcyBtYWNybyBpbiB5b3VyIG93biBsd2lwb3B0cy5oIHRvIGFsd2F5cyB1c2UgQyBsaWJyYXJ5J3MKICAgIHJhbmQoKS4gTm90ZSB0aGF0IGF1dG9pcF9jcmVhdGVfcmFuZF9hZGRyIGRvZXNuJ3QgdXNlIHRoaXMgbWFjcm8uCgogIDIwMDctMDYtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBuZXRpZmFwaS5oLCBuZXRpZmFwaS5jLCB0Y3BpcC5oLCB0Y3BpcC5jOiBVcGRhdGUgY29kZSB0byBoYW5kbGUgdGhlIG9wdGlvbgogICAgTFdJUF9UQ1BJUF9DT1JFX0xPQ0tJTkcsIGFuZCBkbyBzb21lIGNoYW5nZXMgdG8gYmUgY29oZXJlbnQgd2l0aCBsYXN0IG1vZGlmaWNhdGlvbnMKICAgIGluIGFwaV9saWIvYXBpX21zZyAodXNlIHBvaW50ZXJzIGFuZCBub3QgdHlwZSB3aXRoIHRhYmxlLCBldGMuLi4pIAoKICAyMDA3LTA2LTI2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuaDogRml4ZWQgYnVnICMyMDI1OTogc3RydWN0IHVkcF9oZHIgd2FzIGxhY2tpbmcgdGhlIHBhY2tpbiBkZWZpbmVzLgoKICAyMDA3LTA2LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYzogRml4ZWQgYnVnICMyMDI1MzogaWNtcF9kZXN0X3VucmVhY2ggd2FzIGNhbGxlZCB3aXRoIGEgd3JvbmcgcC0+cGF5bG9hZAogICAgZm9yIHVkcCBwYWNrZXRzIHdpdGggbm8gbWF0Y2hpbmcgcGNiLgoKICAyMDA3LTA2LTI1IFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYzogRml4ZWQgYnVnICMyMDIyMDogVURQIFBDQiBzZWFyY2ggaW4gdWRwX2lucHV0KCk6IGEgbm9uLWxvY2FsIG1hdGNoCiAgICBjb3VsZCBnZXQgdWRwIGlucHV0IHBhY2tldHMgaWYgdGhlIHJlbW90ZSBzaWRlIG1hdGNoZWQuCgogIDIwMDctMDYtMTMgU2ltb24gR29sZHNjaG1pZHQKICAqIG5ldGlmLmM6IEZpeGVkIGJ1ZyAjMjAxODAgKFRDUCBwY2JzIGxpc3RlbmluZyBvbiBJUF9BRERSX0FOWSBjb3VsZCBnZXQKICAgIGNoYW5nZWQgaW4gbmV0aWZfc2V0X2lwYWRkciBpZiBwcmV2aW91cyBuZXRpZi0+aXBfYWRkci5hZGRyIHdhcyAwLgoKICAyMDA3LTA2LTEzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmM6IHBjYl9uZXcgc2V0cyBjb25uLT5lcnIgaWYgcHJvdG9jb2wgaXMgbm90IGltcGxlbWVudGVkCiAgICAtPiBuZXRjb25uX25ld18uLigpIGRvZXMgbm90IGFsbG9jYXRlIGEgbmV3IGNvbm5lY3Rpb24gZm9yIHVuc3VwcG9ydGVkCiAgICBwcm90b2NvbHMuCgogIDIwMDctMDYtMTMgRnLpZOlyaWMgQmVybm9uLCBTaW1vbiBHb2xkc2NobWlkdAogICogYXBpX2xpYi5jOiBjaGFuZ2UgcmV0dXJuIGV4cHJlc3Npb24gaW4gbmV0Y29ubl9hZGRyIGFuZCBuZXRjb25uX3BlZXIsIGJlY2F1c2UKICAgIGNvbm4tPmVyciB3YXMgcmVzZXQgdG8gRVJSX09LIHdpdGhvdXQgYW55IHJlYXNvbnMgKGFuZCBlcnJvciB3YXMgbG9zdCkuLi4KCiAgMjAwNy0wNi0xMyBGculk6XJpYyBCZXJub24sIE1hdHRoaWFzIFdlaXNzZXIKICAqIG9wdC5oLCBtZW0uaCwgbWVtLmMsIG1lbXAuYywgcGJ1Zi5jLCBpcF9mcmFnLmMsIHZqLmM6IEZpeCBidWcgIzIwMTYyLiBSZW5hbWUKICAgIE1FTV9BTElHTiBpbiBMV0lQX01FTV9BTElHTiBhbmQgTUVNX0FMSUdOX1NJWkUgaW4gTFdJUF9NRU1fQUxJR05fU0laRSB0byBhdm9pZAogICAgc29tZSBtYWNybyBuYW1lcyBjb2xsaXNpb24gd2l0aCBzb21lIE9TIG1hY3Jvcy4KCiAgMjAwNy0wNi0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogdWRwLmM6IFVEUCBMaXRlOiBjb3JyZWN0ZWQgdGhlIHVzZSBvZiBjaGtzdW1fbGVuIChiYXNlZCBvbiBSRkMzODI4OiBpZiBpdCdzIDAsCiAgICBjcmVhdGUgY2hlY2tzdW0gb3ZlciB0aGUgY29tcGxldGUgcGFja2V0LiBPbiBSWCwgaWYgaXQncyA8IDggKGFuZCBub3QgMCksCiAgICBkaXNjYXJkIHRoZSBwYWNrZXQuIEFsc28gcmVtb3ZlZCB0aGUgZHVwbGljYXRlICd1ZHBoZHItPmNoa3N1bSA9IDAnIGZvciBib3RoCiAgICBVRFAgJiBVRFAgTGl0ZS4KCiAgMjAwNy0wNi0xMSBTcmluaXZhcyBHb2xsYWtvdGEgJiBPbGVnIFR5c2hldgogICogdGNwX291dC5jOiBGaXggZm9yIGJ1ZyAjMjAwNzUgOiAiQSBwcm9ibGVtIHdpdGgga2VlcC1hbGl2ZSB0aW1lciBhbmQgVENQIGZsYWdzIgogICAgd2hlcmUgVENQIGZsYWdzIHdhc24ndCBpbml0aWFsaXplZCBpbiB0Y3Bfa2VlcGFsaXZlLgoKICAyMDA3LTA2LTAzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB1ZHAuYzogdWRwX2lucHV0KCk6IElucHV0IHBidWYgd2FzIG5vdCBmcmVlZCBpZiBwY2IgaGFkIG5vIHJlY3YgZnVuY3Rpb24KICAgIHJlZ2lzdGVyZWQsIHAtPnBheWxvYWQgd2FzIG1vZGlmaWVkIHdpdGhvdXQgbW9kaWZ5aW5nIHAtPmxlbiBpZiBzZW5kaW5nCiAgICBpY21wX2Rlc3RfdW5yZWFjaCgpIChoYWQgbm8gbmVnYXRpdmUgZWZmZWN0IGJ1dCB3YXMgZGVmaW5pdGl2ZWx5IHdyb25nKS4KCiAgMjAwNy0wNi0wMyBTaW1vbiBHb2xkc2NobWlkdAogICogaWNtcC5jOiBDb3JyZWN0ZWQgYnVnICMxOTkzNzogRm9yIHJlc3BvbmRpbmcgdG8gYW4gaWNtcCBlY2hvIHJlcXVlc3QsIGljbXAKICAgIHJlLXVzZWQgdGhlIGlucHV0IHBidWYgZXZlbiBpZiB0aGF0IGRpZG4ndCBoYXZlIGVub3VnaCBzcGFjZSB0byBpbmNsdWRlIHRoZQogICAgbGluayBoZWFkZXJzLiBOb3cgdGhlIHNwYWNlIGlzIHRlc3RlZCBhbmQgYSBuZXcgcGJ1ZiBpcyBhbGxvY2F0ZWQgZm9yIHRoZQogICAgZWNobyByZXNwb25zZSBwYWNrZXQgaWYgdGhlIGVjaG8gcmVxdWVzdCBwYnVmIGlzbid0IGJpZyBlbm91Z2guCgogIDIwMDctMDYtMDEgU2ltb24gR29sZHNjaG1pZHQKICAqIHNvY2tldHMuYzogQ2hlY2tlZCBpbiBwYXRjaCAjNTkxNDogTW92ZWQgc29ja29wdCBwcm9jZXNzaW5nIGludG8gdGNwaXBfdGhyZWFkLgoKICAyMDA3LTA1LTIzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jLCBzb2NrZXRzLmM6IEZpeGVkIGJ1ZyAjNTk1OCBmb3IgbmV0Y29ubl9saXN0ZW4gKGFjY2VwdG1ib3ggb25seQogICAgYWxsb2NhdGVkIGJ5IGRvX2xpc3RlbiBpZiBzdWNjZXNzKSBhbmQgbmV0Y29ubl9hY2NlcHQgZXJyb3JzIGhhbmRsaW5nLiBJbgogICAgbW9zdCBvZiBhcGlfbGliIGZ1bmN0aW9ucywgd2UgcmVwbGFjZSBzb21lIGVycm9ycyBjaGVja2luZ3MgbGlrZSAiaWYgKGNvbm49PU5VTEwpIgogICAgYnkgQVNTRVJULCBleGNlcHQgZm9yIG5ldGNvbm5fZGVsZXRlLgoKICAyMDA3LTA1LTIzIEZy6WTpcmljIEJlcm5vbgogICogYXBpX2xpYi5jOiBGaXhlZCBidWcgIzU5NTcgIlNhZmUtdGhyZWFkIHByb2JsZW0gaW5zaWRlIG5ldGNvbm5fcmVjdiIgdG8gcmV0dXJuCiAgICBhbiBlcnJvciBjb2RlIGlmIGl0J3MgaW1wb3NzaWJsZSB0byBmZXRjaCBhIHBidWYgb24gYSBUQ1AgY29ubmVjdGlvbiAoYW5kIG5vdAogICAgZGlyZWN0bHkgY2xvc2UgdGhlIHJlY3ZtYm94KS4KCiAgMjAwNy0wNS0yMiBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmM6IEZpeGVkIGJ1ZyAjMTg5NSAodGNwX2JpbmQgbm90IGNvcnJlY3QpIGJ5IGludHJvZHVjaW5nIGEgbGlzdCBvZgogICAgYm91bmQgYnV0IHVuY29ubmVjdGVkIChhbmQgbm9uLWxpc3RlbmluZykgdGNwX3BjYnMuCgogIDIwMDctMDUtMjIgRnLpZOlyaWMgQmVybm9uCiAgKiBzeXMuaCwgc3lzLmMsIGFwaV9saWIuYywgdGNwaXAuYzogcmVtb3ZlIHN5c19tYm94X2ZldGNoX3RpbWVvdXQoKSAod2FzIG9ubHkKICAgIHVzZWQgZm9yIExXSVBfU09fUkNWVElNRU8gb3B0aW9uKSBhbmQgdXNlIHN5c19hcmNoX21ib3hfZmV0Y2goKSBpbnN0ZWFkIG9mCiAgICBzeXNfbWJveF9mZXRjaCgpIGluIGFwaSBmaWxlcy4gTm93LCB1c2VycyBTSE9VTEQgTk9UIHVzZSBpbnRlcm5hbCBsd0lQIGZlYXR1cmVzCiAgICBsaWtlICJzeXNfdGltZW91dCIgaW4gdGhlaXIgYXBwbGljYXRpb24gdGhyZWFkcy4KCiAgMjAwNy0wNS0yMiBGculk6XJpYyBCZXJub24KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBjaGFuZ2UgdGhlIHN0cnVjdCBhcGlfbXNnX21zZyB0byBzZWUKICAgIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHVzZWQgYnkgd2hpY2ggZG9feHh4IGZ1bmN0aW9uLCBhbmQgdG8gYXZvaWQgIm1pc3VzaW5nIgogICAgcGFyYW1ldGVycyAocGF0Y2ggIzU5MzgpLgoKICAyMDA3LTA1LTIyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbGliLmMsIGFwaV9tc2cuYywgcmF3LmMsIGFwaS5oLCBhcGlfbXNnLmgsIHJhdy5oOiBJbmNsdWRlZCBwYXRjaCAjNTkzODoKICAgIGNoYW5nZWQgcmF3X3BjYi5wcm90b2NvbCBmcm9tIHUxNl90IHRvIHU4X3Qgc2luY2UgZm9yIElQdjQgYW5kIElQdjYsIHByb3RvCiAgICBpcyBvbmx5IDggYml0cyB3aWRlLiBUaGlzIGFmZmVjdHMgdGhlIGFwaSwgYXMgdGhlcmUsIHRoZSBwcm90b2NvbCB3YXMKICAgIHUxNl90LCB0b28uCgogIDIwMDctMDUtMTggU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbXAuYzogYWRkaXRpb24gdG8gcGF0Y2ggIzU5MTM6IHNtYWxsZXIgcG9pbnRlciB3YXMgcmV0dXJuZWQgYnV0CiAgICBtZW1wX21lbW9yeSB3YXMgdGhlIHNhbWUgc2l6ZSAtPiBkaWQgbm90IHNhdmUgbWVtb3J5LgoKICAyMDA3LTA1LTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBsb29waWYuYywgc2xpcGlmLmM6IEZpeCBidWcgIzE5NzI5OiBmcmVlIHBidWYgaWYgbmV0aWYtPmlucHV0KCkgcmV0dXJucwogICAgIT0gRVJSX09LLgoKICAyMDA3LTA1LTE2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBhcGlfbXNnLmMsIHVkcC5jOiBJZiBhIHVkcF9wY2IgaGFzIGEgbG9jYWxfaXAgc2V0LCBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZQogICAgYXMgdGhlIG9uZSBvZiB0aGUgbmV0aWYgdXNlZCBmb3Igc2VuZGluZyB0byBwcmV2ZW50IHNlbmRpbmcgZnJvbSBvbGQKICAgIGFkZHJlc3NlcyBhZnRlciBhIG5ldGlmIGFkZHJlc3MgZ2V0cyBjaGFuZ2VkIChwYXJ0bHkgZml4ZXMgYnVnICMzMTY4KS4KCiAgMjAwNy0wNS0xNiBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmMsIGlnbXAuaCwgaWdtcC5jOiBGaXhlZCBidWcgIiMxOTgwMCA6IElHTVA6IGlnbXBfdGljaygpIHdpbGwgbm90IHdvcmsKICAgIHdpdGggTk9fU1lTPTEiLiBOb3RlIHRoYXQgaWdtcF9pbml0IGlzIGFsd2F5cyBpbiB0Y3BpcF90aHJlYWQgKGFuZCBub3QgaW4gCiAgICB0Y3BpcF9pbml0KSBiZWNhdXNlIHdlIGhhdmUgdG8gYmUgc3VyZSB0aGF0IG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgYWxyZWFkeQogICAgYWRkZWQgKG1hYyBmaWx0ZXIgaXMgdXBkYXRlZCBvbmx5IGluIGlnbXBfaW5pdCBmb3IgdGhlIG1vbWVudCkuCgogIDIwMDctMDUtMTYgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jLCBtZW1wLmM6IFJlbW92ZWQgc2VtYXBob3JlcyBmcm9tIG1lbXAsIGNoYW5nZWQgc3lzX3NlbV93YWl0IGNhbGxzCiAgICBpbnRvIHN5c19hcmNoX3NlbV93YWl0IGNhbGxzIHRvIHByZXZlbnQgdGltZXJzIGZyb20gcnVubmluZyB3aGlsZSB3YWl0aW5nCiAgICBmb3IgdGhlIGhlYXAuIFRoaXMgZml4ZXMgYnVnICMxOTE2Ny4KCiAgMjAwNy0wNS0xMyBTaW1vbiBHb2xkc2NobWlkdAogICogdGNwLmgsIHNvY2tldHMuaCwgc29ja2V0cy5jOiBGaXhlZCBidWcgZnJvbSBwYXRjaCAjNTg2NSBieSBtb3ZpbmcgdGhlIGRlZmluZXMKICAgIGZvciBzb2NrZXQgb3B0aW9ucyAobHdpcF9zZXQvLWdldHNvY2tvcHQpIHVzZWQgd2l0aCBsZXZlbCBJUFBST1RPX1RDUCBmcm9tCiAgICB0Y3AuaCB0byBzb2NrZXRzLmguCgogIDIwMDctMDUtMDcgU2ltb24gR29sZHNjaG1pZHQKICAqIG1lbS5jOiBBbm90aGVyIGF0dGVtcHQgdG8gZml4IGJ1ZyAjMTc5MjIuCgogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQKICAqIHBidWYuYywgcGJ1Zi5oLCBldGhhcnAuYzogRnVydGhlciB1cGRhdGUgdG8gQVJQIHF1ZXVlaW5nOiBDaGFuZ2VkIHBidWZfY29weSgpCiAgICBpbXBsZW1lbnRhdGlvbiBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQgKGRvbid0IGFsbG9jYXRlIHRoZSB0YXJnZXQKICAgIHBidWYgaW5zaWRlIHBidWZfY29weSgpKS4KCiAgMjAwNy0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtcC5jOiBjaGVja2VkIGluIHBhdGNoICM1OTEzOiBpbiBtZW1wX21hbGxvYygpIHdlIGNhbiByZXR1cm4gbWVtcCBhcyBtZW0KICAgIHRvIHNhdmUgYSBsaXR0bGUgUkFNIChuZXh0IHBvaW50ZXIgb2YgbWVtcCBpcyBub3QgdXNlZCB3aGlsZSBub3QgaW4gcG9vbCkuCgogIDIwMDctMDUtMDMgIm1hcSIKICAqIHNvY2tldHMuYzogRml4IGlvY3RsIEZJT05SRUFEIHdoZW4gc29tZSBkYXRhIHJlbWFpbnMgZnJvbSBsYXN0IHJlY3YuCiAgICAocGF0Y2ggIzM1NzQpLgoKICAyMDA3LTA0LTIzIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBsb29waWYuYywgbG9vcGlmLmgsIG9wdC5oLCBzcmMvbmV0aWYvRklMRVM6IGZpeCBidWcgIzI1OTU6ICJsb29waWYgcmVzdWx0cwogICAgaW4gTlVMTCByZWZlcmVuY2UgZm9yIGluY29taW5nIFRDUCBwYWNrZXRzIi4gTG9vcGlmIGhhcyB0byBiZSBjb25maWd1cmVkCiAgICAodXNpbmcgTFdJUF9MT09QSUZfTVVMVElUSFJFQURJTkcpIHRvIGRpcmVjdGx5IGNhbGwgbmV0aWYtPmlucHV0KCkKICAgIChtdWx0aXRocmVhZGluZyBlbnZpcm9ubWVudHMsIGUuZy4gbmV0aWYtPmlucHV0KCkgPSB0Y3BpcF9pbnB1dCgpKSBvcgogICAgcHV0dGluZyBwYWNrZXRzIG9uIGEgbGlzdCB0aGF0IGlzIGZlZCB0byB0aGUgc3RhY2sgYnkgY2FsbGluZyBsb29waWZfcG9sbCgpCiAgICAoc2luZ2xlLXRocmVhZCAvIE5PX1NZUyAvIHBvbGxpbmcgZW52aXJvbm1lbnQgd2hlcmUgZS5nLgogICAgbmV0aWYtPmlucHV0KCkgPSBpcF9pbnB1dCkuCgogIDIwMDctMDQtMTcgSm9uYXRoYW4gTGFybW91cgogICogcGJ1Zi5jOiBVc2UgczMyX3QgaW4gcGJ1Zl9yZWFsbG9jKCksIGFzIGFuIHMxNl90IGNhbid0IHJlbGlhYmx5IGhvbGQKICAgIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHUxNl90J3MuCiAgKiBzb2NrZXRzLmg6IEZEX1NFVFNJWkUgbmVlZHMgdG8gbWF0Y2ggbnVtYmVyIG9mIHNvY2tldHMsIHdoaWNoIGlzCiAgICBNRU1QX05VTV9ORVRDT05OIGluIHNvY2tldHMuYyByaWdodCBub3cuCgogIDIwMDctMDQtMTIgSm9uYXRoYW4gTGFybW91cgogICogaWNtcC5jOiBSZXNldCBJUCBoZWFkZXIgVFRMIGluIElDTVAgRUNITyByZXNwb25zZXMgKGJ1ZyAjMTk1ODApLgoKICAyMDA3LTA0LTEyIEtpZXJhbiBNYW5zbGV5CiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYywgdGNwLmg6IE1vZGlmeSB3YXkgdGhlIHJldHJhbnNtaXNzaW9uCiAgICB0aW1lciBpcyByZXNldCB0byBmaXggYnVnIzE5NDM0LCB3aXRoIGhlbHAgZnJvbSBPbGVnIFR5c2hldi4KCiAgMjAwNy0wNC0xMSBTaW1vbiBHb2xkc2NobWlkdAogICogZXRoYXJwLmMsIHBidWYuYywgcGJ1Zi5oOiAzcmQgZml4IGZvciBidWcgIzExNDAwIChhcnAtcXVldWluZyk6IE1vcmUgcGJ1ZnMgdGhhbgogICAgcHJldmlvdXNseSB0aG91Z2h0IG5lZWQgdG8gYmUgY29waWVkIChldmVyeXRoaW5nIGJ1dCBQQlVGX1JPTSEpLiBDbGVhbmVkIHVwCiAgICBwYnVmLmM6IHJlbW92ZWQgZnVuY3Rpb25zIG5vIG5lZWRlZCBhbnkgbW9yZSAoYnkgZXRoYXJwKS4KCiAgMjAwNy0wNC0xMSBLaWVyYW4gTWFuc2xleQogICogaW5ldC5jLCBpcF9hZGRyLmgsIHNvY2tldHMuaCwgc3lzLmgsIHRjcC5oOiBBcHBseSBwYXRjaCAjNTc0NTogRml4CiAgICAiQ29uc3RhbnQgaXMgbG9uZyIgd2FybmluZ3Mgd2l0aCAxNmJpdCBjb21waWxlcnMuICBDb250cmlidXRlZCBieQogICAgYXZhdGFyQG1tbGFiLmNzZS55enUuZWR1LnR3CgogIDIwMDctMDQtMDUgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyCiAgKiBhcGlfbXNnLmM6IEZpeCBidWcgIzE2ODMwOiAiZXJyX3RjcCgpIHBvc3RzIHRvIGNvbm5lY3Rpb24gbWFpbGJveCB3aGVuIG5vIHBlbmQgb24KICAgIHRoZSBtYWlsYm94IGlzIGFjdGl2ZSIuIE5vdywgdGhlIHBvc3QgaXMgb25seSBkb25lIGR1cmluZyBhIGNvbm5lY3QsIGFuZCBkb19zZW5kLAogICAgZG9fd3JpdGUgYW5kIGRvX2pvaW5fbGVhdmVfZ3JvdXAgZG9uJ3QgZG8gYW55dGhpbmcgaWYgYSBwcmV2aW91cyBlcnJvciB3YXMgc2lnbmFsZWQuCgogIDIwMDctMDQtMDMgRnLpZOlyaWMgQmVybm9uCiAgKiBpcC5jOiBEb24ndCBzZXQgdGhlIElQX0RGICgiRG9uJ3QgZnJhZ21lbnQiKSBmbGFnIGluIHRoZSBJUCBoZWFkZXIgaW4gSVAgb3V0cHV0CiAgICBwYWNrZXRzLiBTZWUgcGF0Y2ggIzU4MzQuCgogIDIwMDctMDMtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmM6IGFkZCBhICJwY2JfbmV3IiBoZWxwZXIgZnVuY3Rpb24gdG8gYXZvaWQgcmVkdW5kYW50IGNvZGUsIGFuZCB0byBhZGQKICAgIG1pc3NpbmcgIHBjYiBhbGxvY2F0aW9ucyBjaGVja2luZyAoaW4gZG9fYmluZCwgYW5kIGZvciBlYWNoIHJhd19uZXcpLiBGaXggc3R5bGUuCgogIDIwMDctMDMtMzAgRnLpZOlyaWMgQmVybm9uCiAgKiBtb3N0IG9mIGZpbGVzOiBwcmVmaXggYWxsIGRlYnVnLmggZGVmaW5lIHdpdGggIkxXSVBfIiB0byBhdm9pZCBhbnkgY29uZmxpY3Qgd2l0aAogICAgb3RoZXJzIGVudmlyb25tZW50IGRlZmluZXMgKHRoZXNlIHdlcmUgdG9vICJnZW5lcmljIikuCgogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBzb2NrZXRzLmM6IG5ldGJ1Zl9yZWYgZG9lc24ndCBjaGVjayBpdHMgaW50ZXJuYWwgcGJ1Zl9hbGxvYyBjYWxsCiAgICByZXN1bHQgYW5kIGNhbiBjYXVzZSBhIGNyYXNoLiBsd2lwX3NlbmQgbm93IGNoZWNrIG5ldGJ1Zl9yZWYgcmVzdWx0LgoKICAyMDA3LTAzLTI4IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBzb2NrZXRzLmMgUmVtb3ZlICIjaW5jbHVkZSA8ZXJybm8uaD4iIGZyb20gc29ja2V0cy5jIHRvIGF2b2lkIG11bHRpcGxlCiAgICBkZWZpbml0aW9uIG9mIG1hY3JvcyAoaW4gZXJybm8uaCBhbmQgbHdpcC9hcmNoLmgpIGlmIExXSVBfUFJPVklERV9FUlJOTyBpcwogICAgZGVmaW5lZC4gVGhpcyBpcyB0aGUgd2F5IGl0IHNob3VsZCBoYXZlIGJlZW4gYWxyZWFkeSAobG9va2luZyBhdAogICAgZG9jL3N5c19hcmNoLnR4dCkKCiAgMjAwNy0wMy0yOCBLaWVyYW4gTWFuc2xleQogICogb3B0LmggQ2hhbmdlIGRlZmF1bHQgUEJVRl9QT09MX0JVRlNJWkUgKGFnYWluKSB0byBhY2NvbW9kYXRlIGRlZmF1bHQgTVNTICsKICAgIElQIGFuZCBUQ1AgaGVhZGVycyAqYW5kKiBwaHlzaWNhbCBsaW5rIGhlYWRlcnMKCiAgMjAwNy0wMy0yNiBGculk6XJpYyBCZXJub24gKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBhcGlfbGliLmM6IHBhdGNoIGZvciBuZXRjb25uX3dyaXRlKCksIGZpeGVzIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gd2hpY2ggY2F1c2UKICAgIHRvIHNlbmQgc29tZSBnYXJiYWdlLiBJdCBpcyBub3QgYSBkZWZpbml0aXZlIHNvbHV0aW9uLCBidXQgdGhlIHBhdGNoIGRvZXMgc29sdmUKICAgIHRoZSBwcm9ibGVtIGZvciBtb3N0IGNhc2VzLgoKICAyMDA3LTAzLTIyIEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5oLCBhcGlfbXNnLmM6IFJlbW92ZSBvYnNvbGV0ZSBBUElfTVNHX0FDQ0VQVCBhbmQgZG9fYWNjZXB0IChuZXZlciB1c2VkKS4KCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogc29tZXMgcmVzb3VyY2VzIGNvdWxkbid0IGJlIGZyZWVkIGlmIHRoZXJlIHdhcyBlcnJvcnMgZHVyaW5nCiAgICBuZXRjb25uX25ld193aXRoX3Byb3RvX2FuZF9jYWxsYmFjay4KCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24KICAqIGV0aGVybmV0aWYuYzogdXBkYXRlIG5ldGlmLT5pbnB1dCBjYWxscyB0byBjaGVjayByZXR1cm4gdmFsdWUuIEluIG9sZGVyIHBvcnRzLAogICAgaXQncyBhIGdvb2QgaWRlYSB0byB1cGdyYWRlIHRoZW0sIGV2ZW4gaWYgYmVmb3JlLCB0aGVyZSBjb3VsZCBiZSBhbm90aGVyIHByb2JsZW0KICAgIChhY2Nlc3MgdG8gYW4gdW5pbml0aWFsaXplZCBtYWlsYm94KS4KCiAgMjAwNy0wMy0yMSBTaW1vbiBHb2xkc2NobWlkdAogICogc29ja2V0cy5jOiBmaXhlZCBidWcgIzUwNjcgKGVzc2VudGlhbHkgYSBzaWduZWQvdW5zaWduZWQgd2FybmluZyBmaXhlZAogICAgYnkgY2FzdGluZyB0byB1bnNpZ25lZCkuCgogIDIwMDctMDMtMjEgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbGliLmMsIGFwaV9tc2cuYywgdGNwaXAuYzogaW50ZWdyYXRlIHN5c19tYm94X2ZldGNoKGNvbm4tPm1ib3gsIE5VTEwpIGNhbGxzIGZyb20KICAgIGFwaV9saWIuYyB0byB0Y3BpcC5jJ3MgdGNwaXBfYXBpbXNnKCkuIE5vdywgdXNlIGEgbG9jYWwgdmFyaWFibGUgYW5kIG5vdCBhCiAgICBkeW5hbWljIG9uZSBmcm9tIG1lbXAgdG8gc2VuZCB0Y3BpcF9tc2cgdG8gdGNwaXBfdGhyZWFkIGluIGEgc3luY2hyb25lIGNhbGwuCiAgICBGcmVlIHRjcGlwX21zZyBmcm9tIHRjcGlwX2FwaW1zZyBpcyBub3QgZG9uZSBpbiB0Y3BpcF90aHJlYWQuIFRoaXMgZ2l2ZSBhCiAgICBmYXN0ZXIgYW5kIG1vcmUgcmVsaWFibGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGFwaV9saWIgYW5kIHRjcGlwLgoKICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbgogICogb3B0Lmg6IEFkZCBMV0lQX05FVElGX0NBTExCQUNLICh0byBhdm9pZCBjb21waWxlciB3YXJuaW5nKSBhbmQgc2V0IGl0IHRvIDAuCgogIDIwMDctMDMtMjEgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmMsIGlnbXAuYywgaWdtcC5oOiBGaXggQysrIHN0eWxlIGNvbW1lbnRzCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIG9wdC5oIENoYW5nZSBkZWZhdWx0IFBCVUZfUE9PTF9CVUZTSVpFIHRvIGFjY29tb2RhdGUgZGVmYXVsdCBNU1MgKwogICAgSVAgYW5kIFRDUCBoZWFkZXJzCgogIDIwMDctMDMtMjEgS2llcmFuIE1hbnNsZXkKICAqIEZpeCBhbGwgdXNlcyBvZiBwYnVmX2hlYWRlciB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLiAgSW4gc29tZQogICAgY2FzZXMganVzdCBhc3NlcnQgaWYgaXQgZmFpbHMgYXMgSSdtIG5vdCBzdXJlIGhvdyB0byBmaXggdGhlbSwgYnV0CiAgICB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gYmVmb3JlIHdoZW4gdGhleSB3b3VsZCBjYXJyeSBvbiByZWdhcmRsZXNzCiAgICBvZiB0aGUgZmFpbHVyZS4KCiAgMjAwNy0wMy0yMSBLaWVyYW4gTWFuc2xleQogICogc29ja2V0cy5jLCBpZ21wLmMsIGlnbXAuaCwgbWVtcC5oOiBGaXggQysrIHN0eWxlIGNvbW1lbnRzIGFuZAogICAgY29tbWVudCBvdXQgbWlzc2luZyBoZWFkZXIgaW5jbHVkZSBpbiBpY21wLmMKCiAgMjAwNy0wMy0yMCBGculk6XJpYyBCZXJub24KICAqIG1lbXAuaCwgc3RhdHMuYzogRml4IHN0YXRzX2Rpc3BsYXkgZnVuY3Rpb24gd2hlcmUgbWVtcF9uYW1lcyB0YWJsZSB3YXNuJ3QKICAgIHN5bmNocm9uaXplZCB3aXRoIG1lbXAuaC4KCiAgMjAwNy0wMy0yMCBGculk6XJpYyBCZXJub24KICAqIHRjcGlwLmM6IEluaXRpYWxpemUgdGNwaXAncyBtYm94LCBhbmQgdmVyaWZ5IGlmIGluaXRpYWxpemVkIGluIHRjcGlwX2lucHV0LAogICAgdGNwaXBfZXRoaW5wdXQsIHRjcGlwX2NhbGxiYWNrLCB0Y3BpcF9hcGltc2csIHRvIGZpeCBhIGluaXQgcHJvYmxlbSB3aXRoIAogICAgbmV0d29yayBpbnRlcmZhY2VzLiBBbHNvIGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcuCgogIDIwMDctMDMtMjAgS2llcmFuIE1hbnNsZXkKICAqIHVkcC5jOiBPbmx5IHRyeSBhbmQgdXNlIHBidWZfaGVhZGVyKCkgdG8gbWFrZSBzcGFjZSBmb3IgaGVhZGVycyBpZgogICAgbm90IGEgUk9NIG9yIFJFRiBwYnVmLgoKICAyMDA3LTAzLTE5IEZy6WTpcmljIEJlcm5vbgogICogYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcGlwLmgsIHRjcGlwLmM6IEFkZCByZXR1cm4gdHlwZXMgdG8gdGNwaXBfYXBpbXNnKCkKICAgIGFuZCBhcGlfbXNnX3Bvc3QoKS4KCiAgMjAwNy0wMy0xOSBGculk6XJpYyBCZXJub24KICAqIFJlbW92ZSB1bmltcGxlbWVudGVkICJtZW1wX3JlYWxsb2MiIGZ1bmN0aW9uIGZyb20gbWVtcC5oLgoKICAyMDA3LTAzLTExIFNpbW9uIEdvbGRzY2htaWR0CiAgKiBwYnVmLmM6IGNoZWNrZWQgaW4gcGF0Y2ggIzU3OTY6IHBidWZfYWxsb2M6IGxlbiBmaWVsZCBjbGFjdWxhdGlvbiBjYXVzZWQKICAgIG1lbW9yeSBjb3JydXB0aW9uLgoKICAyMDA3LTAzLTExIFNpbW9uIEdvbGRzY2htaWR0IChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogYXBpX2xpYi5jLCBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbXNnLmgsIHNvY2tldHMuaDogRml4ZWQgYnVnICMxOTI1MQogICAgKG1pc3NpbmcgYGNvbnN0JyBxdWFsaWZpZXIgaW4gc29ja2V0IGZ1bmN0aW9ucyksIHRvIGdldCBtb3JlIGNvbXBhdGlibGUgdG8KICAgIHN0YW5kYXJkIFBPU0lYIHNvY2tldHMuCgogIDIwMDctMDMtMTEgRnLpZOlyaWMgQmVybm9uIChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQogICogc29ja2V0cy5jOiBBZGQgYXNzZXJ0cyBpbnNpZGUgYmluZCwgY29ubmVjdCBhbmQgc2VuZHRvIHRvIGNoZWNrIGlucHV0CiAgICBwYXJhbWV0ZXJzLiBSZW1vdmUgZXhjZXNzaXZlIHNldF9lcnJubygpIGNhbGxzIGFmdGVyIGdldF9zb2NrZXQoKSwgYmVjYXVzZQogICAgZXJybm8gaXMgc2V0IGluc2lkZSBvZiBnZXRfc29ja2V0KCkuIE1vdmUgbGFzdCBzb2NrX3NldF9lcnJubygpIGluc2lkZQogICAgbHdpcF9jbG9zZS4KCiAgMjAwNy0wMy0wOSBTaW1vbiBHb2xkc2NobWlkdAogICogbWVtcC5jOiBGaXhlZCBidWcgIzExNDAwOiBOZXcgZXRoYXJwIHF1ZXVlaW5nIGludHJvZHVjZWQgYnVnOiBtZW1wX21lbW9yeQogICAgd2FzIGFsbG9jYXRlZCB0b28gc21hbGwuCgogIDIwMDctMDMtMDYgU2ltb24gR29sZHNjaG1pZHQKICAqIHRjcGlwLmM6IEluaXRpYWxpemUgZGhjcCB0aW1lcnMgaW4gdGNwaXBfdGhyZWFkIChpZiBMV0lQX0RIQ1ApIHRvIHByb3RlY3QKICAgIHRoZSBzdGFjayBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLgoKICAyMDA3LTAzLTA2IEZy6WTpcmljIEJlcm5vbiwgRG1pdHJ5IFBvdGFwb3YKICAqIHRjcGlwLmMsIGlwX2ZyYWcuYywgZXRoZXJuZXRpZi5jOiBGaXggc29tZSBidWlsZCBwcm9ibGVtcywgYW5kIGEgcmVkdW5kYW5jeQogICAgY2FsbCB0byAibHdpcF9zdGF0cy5saW5rLnJlY3YrKzsiIGluIGxvd19sZXZlbF9pbnB1dCgpICYgZXRoZXJuZXRpZl9pbnB1dCgpLgoKICAyMDA3LTAzLTA2IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBpcF9mcmFnLmMsIGlwX2ZyYWcuaDogUmVkdWNlIGNvZGUgc2l6ZTogZG9uJ3QgaW5jbHVkZSBjb2RlIGluIHRob3NlIGZpbGVzCiAgICBpZiBJUF9GUkFHID09IDAgYW5kIElQX1JFQVNTRU1CTFkgPT0gMAoKICAyMDA3LTAzLTA2IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQKICAqIG9wdC5oLCBpcF9mcmFnLmgsIHRjcGlwLmgsIHRjcGlwLmMsIGV0aGVybmV0aWYuYzogYWRkIG5ldyBjb25maWd1cmF0aW9uCiAgICBvcHRpb24gbmFtZWQgRVRIQVJQX1RDUElQX0VUSElOUFVULCB3aGljaCBlbmFibGUgdGhlIG5ldyB0Y3BpcF9ldGhpbnB1dC4KICAgIEFsbG93IHRvIGRvIEFSUCBwcm9jZXNzaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIGluc2lkZSB0Y3BpcF90aHJlYWQKICAgIChwcm90ZWN0aW5nIEFSUCBsYXllciBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzKS4gWW91IGNhbiBhbHNvIGRpc2FibGUKICAgIG9sZCBjb2RlIHVzaW5nIHRjcF9pbnB1dCB3aXRoIG5ldyBkZWZpbmUgRVRIQVJQX1RDUElQX0lOUFVUIHNldCB0byAwLgogICAgT2xkZXIgcG9ydHMgaGF2ZSB0byB1c2UgdGNwaXBfZXRoaW5wdXQuCgogIDIwMDctMDMtMDYgU2ltb24gR29sZHNjaG1pZHQgKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpCiAgKiBlcnIuaCwgZXJyLmM6IGZpeGVkIGNvbXBpbGVyIHdhcm5pbmcgImluaXRpYWxpemF0aW9uIGRpcmNhcmRzIHF1YWxpZmllcnMKICAgIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZSIKCiAgMjAwNy0wMy0wNSBGculk6XJpYyBCZXJub24KICAqIG9wdC5oLCBzb2NrZXRzLmg6IGFkZCBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIChMV0lQX1BPU0lYX1NPQ0tFVFNfSU9fTkFNRVMsCiAgICBFVEhBUlBfVFJVU1RfSVBfTUFDLCByZXZpZXcgU09fUkVVU0UpCgogIDIwMDctMDMtMDQgRnLpZOlyaWMgQmVybm9uCiAgKiBhcGlfbXNnLmM6IFJlbW92ZSBzb21lIGNvbXBpbGVyIHdhcm5pbmdzIDogcGFyYW1ldGVyICJwY2IiIHdhcyBuZXZlcgogICAgcmVmZXJlbmNlZC4KCiAgMjAwNy0wMy0wNCBGculk6XJpYyBCZXJub24KICAqIGFwaV9saWIuYzogRml4ICJbcGF0Y2ggIzU3NjRdIGFwaV9saWIuYyBjbGVhbnVwOiBhZnRlciBwYXRjaCAjNTY4NyIgKGZyb20KICAgIERtaXRyeSBQb3RhcG92KS4KICAgIFRoZSBhcGlfbXNnIHN0cnVjdCBzdGF5IG9uIHRoZSBzdGFjayAobm90IG1vdmVkIHRvIG5ldGNvbm4gc3RydWN0KS4KCiAgMjAwNy0wMy0wNCBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikKICAqIHBidWYuYzogRml4IEJVRyMxOTE2OCAtIHBidWZfZnJlZSBjYW4gY2F1c2UgZGVhZGxvY2sgKGlmCiAgICBTWVNfTElHSFRXRUlHSFRfUFJPVD0xICYgZnJlZWluZyBQQlVGX1JBTSB3aGVuIG1lbV9zZW0gaXMgbm90IGF2YWlsYWJsZSkKICAgIEFsc28gZml4ZWQgY2FzdCB3YXJuaW5nIGluIHBidWZfYWxsb2MoKQoKICAyMDA3LTAzLTA0IFNpbW9uIEdvbGRzY2htaWR0CiAgKiBldGhhcnAuYywgZXRoYXJwLmgsIG1lbXAuYywgbWVtcC5oLCBvcHQuaDogRml4IEJVRyMxMTQwMCAtIGRvbid0IGNvcnJ1cHQKICAgIGV4aXN0aW5nIHBidWYgY2hhaW4gd2hlbiBlbnF1ZXVpbmcgbXVsdGlwbGUgcGJ1ZnMgdG8gYSBwZW5kaW5nIEFSUCByZXF1ZXN0CgogIDIwMDctMDMtMDMgRnLpZOlyaWMgQmVybm9uCiAgKiB1ZHAuYzogcmVtb3ZlIG9ic29sZXRlIGxpbmUgInN0YXRpYyBzdHJ1Y3QgdWRwX3BjYiAqcGNiX2NhY2hlID0gTlVMTDsiCiAgICBJdCBpcyBzdGF0aWMsIGFuZCBuZXZlciB1c2VkIGluIHVkcC5jIGV4Y2VwdCB1ZHBfaW5pdCgpLgoKICAyMDA3LTAzLTAyIFNpbW9uIEdvbGRzY2htaWR0CiAgKiB0Y3BpcC5jOiBNb3ZlZCBjYWxsIHRvIGlwX2luaXQoKSwgdWRwX2luaXQoKSBhbmQgdGNwX2luaXQoKSBmcm9tCiAgICB0Y3BpcF90aHJlYWQoKSB0byB0Y3BpcF9pbml0KCkuIFRoaXMgd2F5LCByYXcgQVBJIGNvbm5lY3Rpb25zIGNhbiBiZQogICAgaW5pdGlhbGl6ZWQgYmVmb3JlIHRjcGlwX3RocmVhZCBpcyBydW5uaW5nIChlLmcuIGJlZm9yZSBPUyBpcyBzdGFydGVkKQoKICAyMDA3LTAzLTAyIEZy6WTpcmljIEJlcm5vbgogICogcmF3YXBpLnR4dDogRml4IGRvY3VtZW50YXRpb24gbWlzbWF0Y2ggd2l0aCBldGhhcnAuaCBhYm91dCBldGhhcnBfdG1yJ3MgY2FsbAogICAgaW50ZXJ2YWwuCgogIDIwMDctMDItMjggS2llcmFuIE1hbnNsZXkgCiAgKiBwYnVmLmM6IEZpeCBCVUcjMTc2NDUgLSBlbnN1cmUgcGJ1ZiBwYXlsb2FkIHBvaW50ZXIgaXMgbm90IG1vdmVkCiAgICBvdXRzaWRlIHRoZSByZWdpb24gb2YgdGhlIHBidWYgYnkgcGJ1Zl9oZWFkZXIoKQoKICAyMDA3LTAyLTI4IEtpZXJhbiBNYW5zbGV5IAogICogc29ja2V0cy5jOiBGaXggQlVHIzE5MTYxIC0gZW5zdXJlIG1pbGxpc2Vjb25kcyB0aW1lb3V0IGlzIG5vbi16ZXJvCiAgICB3aGVuIHN1cHBsaWVkIHRpbWVvdXQgaXMgYWxzbyBub24temVybyAKCihTVEFCTEUtMS4yLjApCgogIDIwMDYtMTItMDUgTGVvbiBXb2VzdGVuYmVyZwogICogQ0hBTkdFTE9HOiBNZW50aW9uIFNUQUJMRS0xLjIuMCByZWxlYXNlLgoKICArKyBOZXcgZmVhdHVyZXM6CgogIDIwMDYtMTItMDEgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIG1lbS5oLCBvcHQuaDogQWRkZWQgTUVNX0xJQkNfTUFMTE9DIG9wdGlvbi4KICAgIE5vdGUgdGhpcyBpcyBhIHdvcmthcm91bmQuIEN1cnJlbnRseSBJIGhhdmUgbm8gb3RoZXIgb3B0aW9ucyBsZWZ0LgoKICAyMDA2LTEwLTI2IENocmlzdGlhYW4gU2ltb25zIChhY2NlcHRlZCBwYXRjaCBieSBKb25hdGhhbiBMYXJtb3VyKQogICogaXB2NC9pcF9mcmFnLmM6IHJlbmFtZSBNQVhfTVRVIHRvIElQX0ZSQUdfTUFYX01UVSBhbmQgbW92ZSBkZWZpbmUKICAgIHRvIGluY2x1ZGUvbHdpcC9vcHQuaC4KICAqIGlwdjQvbHdpcC9pcF9mcmFnLmg6IFJlbW92ZSB1bnVzZWQgSVBfUkVBU1NfSU5URVJWQUwuCiAgICBNb3ZlIElQX1JFQVNTX01BWEFHRSBhbmQgSVBfUkVBU1NfQlVGU0laRSB0byBpbmNsdWRlL2x3aXAvb3B0LmguCiAgKiBvcHQuaDogQWRkIGFib3ZlIG5ldyBvcHRpb25zLgoKICAyMDA2LTA4LTE4IENocmlzdGlhYW4gU2ltb25zCiAgKiB0Y3Bfe2luLG91dH0uYzogYWRkZWQgU05NUCBjb3VudGVycy4KICAqIGlwdjQvaXAuYzogYWRkZWQgU05NUCBjb3VudGVycy4KICAqIGlwdjQvaXBfZnJhZy5jOiBhZGRlZCBTTk1QIGNvdW50ZXJzLgoKICAyMDA2LTA4LTA4IENocmlzdGlhYW4gU2ltb25zCiAgKiBldGhhcnAue2MsaH06IGFkZGVkIGV0aGFycF9maW5kX2FkZHIoKSB0byByZWFkCiAgICAoc3RhYmxlKSBldGhlcm5ldC9JUCBhZGRyZXNzIHBhaXIgZnJvbSBBUlAgdGFibGUKCiAgMjAwNi0wNy0xNCBDaHJpc3RpYWFuIFNpbW9ucwogICogbWliX3N0cnVjdHMuYzogYWRkZWQKICAqIGluY2x1ZGUvbHdpcC9zbm1wX3N0cnVjdHMuaDogYWRkZWQKICAqIG5ldGlmLntjLGh9LCBuZXRpZi9ldGhlcm5ldGlmLmM6IGFkZGVkIFNOTVAgc3RhdGlzdGljcyB0byBuZXRpZiBzdHJ1Y3QKCiAgMjAwNi0wNy0wNiBDaHJpc3RpYWFuIFNpbW9ucwogICogc25tcC9hc24xX3tlbmMsZGVjfS5jIGFkZGVkCiAgKiBzbm1wL21pYjIuYyBhZGRlZAogICogc25tcC9tc2dfe2luLG91dH0uYyBhZGRlZAogICogaW5jbHVkZS9sd2lwL3NubXBfYXNuMS5oIGFkZGVkCiAgKiBpbmNsdWRlL2x3aXAvc25tcF9tc2cuaCBhZGRlZAogICogZG9jL3NubXBfYWdlbnQudHh0IGFkZGVkCgogIDIwMDYtMDMtMjkgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGluZXQuYywgaW5ldC5oOiBBZGRlZCBwbGF0Zm9ybSBieXRlc3dhcCBzdXBwb3J0LgogICAgQWRkZWQgTFdJUF9QTEFURk9STV9CWVRFU1dBUCBkZWZpbmUgKGRlZmF1bHRzIHRvIDApIGFuZAogICAgb3B0aW9uYWwgTFdJUF9QTEFURk9STV9IVE9OUygpLCBMV0lQX1BMQVRGT1JNX0hUT05MKCkgbWFjcm9zLgoKICArKyBCdWcgZml4ZXM6CgogIDIwMDYtMTEtMzAgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGRoY3AuYzogRml4ZWQgZmFsc2UgdHJpZ2dlcnMgb2YgcmVxdWVzdF90aW1lb3V0LgoKICAyMDA2LTExLTI4IENocmlzdGlhYW4gU2ltb25zCiAgKiBuZXRpZi5jOiBJbiBuZXRpZl9hZGQoKSBmaXhlZCBtaXNzaW5nIGNsZWFyIG9mIGlwX2FkZHIsIG5ldG1hc2ssIGd3IGFuZCBmbGFncy4KCiAgMjAwNi0xMC0xMSBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX2xpYi5jIGV0aGFycC5jLCBpcC5jLCBtZW1wLmMsIHN0YXRzLmMsIHN5cy57YyxofSB0Y3AuaDoKICAgIFBhcnRpYWxseSBhY2NlcHRlZCBwYXRjaCAjNTQ0OSBmb3IgQU5TSSBDIGNvbXBhdGliaWxpdHkgLyBidWlsZCBmaXhlcy4KICAqIGlwdjQvbHdpcC9pcC5oIGlwdjYvbHdpcC9pcC5oOiBDb3JyZWN0ZWQgVURQLUxpdGUgcHJvdG9jb2wKICAgIGlkZW50aWZpZXIgZnJvbSAxNzAgdG8gMTM2IChidWcgIzE3NTc0KS4KCiAgMjAwNi0xMC0xMCBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX21zZy5jOiBGaXhlZCBOYWdsZSBhbGdvcml0aG0gYXMgcmVwb3J0ZWQgYnkgQm9iIEdyaWNlLgoKICAyMDA2LTA4LTE3IENocmlzdGlhYW4gU2ltb25zCiAgKiB1ZHAuYzogRml4ZWQgYnVnICMxNzIwMCwgYWRkZWQgY2hlY2sgZm9yIGJyb2FkY2FzdAogICAgZGVzdGluYXRpb25zIGZvciBQQ0JzIGJvdW5kIHRvIGEgdW5pY2FzdCBhZGRyZXNzLgoKICAyMDA2LTA4LTA3IENocmlzdGlhYW4gU2ltb25zCiAgKiBhcGlfbXNnLmM6IEZsdXNoaW5nIFRDUCBvdXRwdXQgaW4gZG9fY2xvc2UoKSAoYnVnICMxNTkyNikuCgogIDIwMDYtMDYtMjcgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9tc2cuYzogQXBwbGllZCBwYXRjaCBmb3IgY29sZCBjYXNlIChidWcgIzExMTM1KS4KICAgIEluIGFjY2VwdF9mdW5jdGlvbigpIGVuc3VyZSBuZXdjb25uLT5jYWxsYmFjayBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuCgogIDIwMDYtMDYtMTUgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIG1lbS5oOiBhZGRlZCBNRU1fU0laRV9GIGFsaWFzIHRvIGZpeCBhbiBhbmNpZW50IGNvbGQgY2FzZSAoYnVnICMxNzQ4KSwKICAgIGZhY2lsaXRhdGUgcHJpbnRpbmcgb2YgbWVtX3NpemVfdCBhbmQgdTE2X3Qgc3RhdGlzdGljcy4KCiAgMjAwNi0wNi0xNCBDaHJpc3RpYWFuIFNpbW9ucwogICogYXBpX21zZy5jOiBBcHBsaWVkIHBhdGNoICM1MTQ2IHRvIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzCiAgICBpbiBhY2NlcHQoKSBieSBLZXZpbiBMYXdzb24uCgogIDIwMDYtMDUtMjYgQ2hyaXN0aWFhbiBTaW1vbnMKICAqIGFwaV9saWIuYzogUmVtb3ZlZCBjb25uLT5zZW0gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIAogICAgZnJvbSBuZXRjb25uX3dyaXRlKCkgYW5kIGFkZGVkIHN5c19zZW1fbmV3IHRvIG5ldGNvbm5fbmV3XyouCgooU1RBQkxFLTFfMV8xKQoKICAyMDA2LTAzLTAzICBDaHJpc3RpYWFuIFNpbW9ucwogICogaXB2NC9pcF9mcmFnLmM6IEFkZGVkIGJvdW5kLWNoZWNraW5nIGFzc2VydGlvbnMgb24gaXBfcmVhc3NiaXRtYXAKICAgIGFjY2VzcyBhbmQgYWRkZWQgcGJ1Zl9hbGxvYygpIHJldHVybiB2YWx1ZSBjaGVja3MuCgogIDIwMDYtMDEtMDEgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcF97aW4sb3V0fS5jLCB0Y3Bfb3V0LmM6IFJlbW92ZWQgJ2V2ZW4gc25kYnVmJyBmaXggaW4gVENQLCB3aGljaCBpcwogICAgbm93IGhhbmRsZWQgYnkgdGhlIGNoZWNrc3VtIHJvdXRpbmUgcHJvcGVybHkuCgogIDIwMDYtMDItMjcgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAgKiBwYnVmLmM6IEZpeCBhbGlnbm1lbnQ7IHBidWZfaW5pdCgpIHdvdWxkIG5vdCB3b3JrIHVubGVzcwogICAgIHBidWZfcG9vbF9tZW1vcnlbXSB3YXMgcHJvcGVybHkgYWxpZ25lZC4gKFBhdGNoIGJ5IEN1cnQgTWNEb3dlbGwuKQoKICAyMDA1LTEyLTIwICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiB0Y3AuYzogUmVtb3ZlIFBDQnMgd2hpY2ggc3RheSBpbiBMQVNUX0FDSyBzdGF0ZSB0b28gbG9uZy4gUGF0Y2gKICAgIHN1Ym1pdHRlZCBieSBNaXRyYW5pIEhpcm9zaGkuCgogIDIwMDUtMTItMTUgIENocmlzdGlhYW4gU2ltb25zCiAgKiBpbmV0LmM6IERpc2FibGVkIHRoZSBhZGRlZCBzdW1taW5nIHJvdXRpbmUgdG8gcHJlc2VydmUgY29kZSBzcGFjZS4KCiAgMjAwNS0xMi0xNCAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdGNwX2luLmM6IER1cGxpY2F0ZSBGSU4gQUNLIHJhY2UgY29uZGl0aW9uIGZpeCBieSBLZWx2aW4gTGF3c29uLgogICAgQWRkZWQgQ3VydCBNY0Rvd2VsbCdzIG9wdGltaXplZCBjaGVja3N1bW1pbmcgcm91dGluZSBmb3IgZnV0dXJlCiAgICBpbmNsdXNpb24uIE5lZWQgdG8gY3JlYXRlIHRlc3QgY2FzZSBmb3IgdW5hbGlnZWQsIGFsaWduZWQsIG9kZCwKICAgIGV2ZW4gbGVuZ3RoIGNvbWJpbmF0aW9uIG9mIGNhc2VzIG9uIHZhcmlvdXMgZW5kaWFuZXNzIG1hY2hpbmVzLgoKICAyMDA1LTEyLTA5ICBDaHJpc3RpYWFuIFNpbW9ucwogICogaW5ldC5jOiBSZXdyb3RlIHN0YW5kYXJkIGNoZWNrc3VtIHJvdXRpbmUgaW4gcHJvcGVyIHBvcnRhYmxlIEMuCgogIDIwMDUtMTEtMjUgIENocmlzdGlhYW4gU2ltb25zCiAgKiB1ZHAuYyB0Y3AuYzogUmVtb3ZlZCBTT19SRVVTRSBoYWNrLiBTaG91bGQgcmVzaWRlIGluIHNvY2tldCBjb2RlIG9ubHkuCiAgKiAqLmM6IGludHJvZHVjZWQgY2MuaCBMV0lQX0RFQlVHIGZvcm1hdHRlcnMgbWF0Y2hpbmcgdGhlIHUxNl90LCBzMTZfdCwKICAgIHUzMl90LCBzMzJfdCB0eXBlZGVmcy4gVGhpcyBzb2x2ZXMgbW9zdCBkZWJ1ZyB3b3JkLWxlbmd0aCBhc3N1bWVzLgoKICAyMDA1LTA3LTE3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIGluZXQuYzogRml4ZWQgdW5hbGlnbmVkIDE2LWJpdCBhY2Nlc3MgaW4gdGhlIHN0YW5kYXJkIGNoZWNrc3VtCiAgICByb3V0aW5lIGJ5IFBldGVyIEpvbGFzc29uLgogICogc2xpcGlmLmM6IEZpeGVkIGltcGxlbWVudGF0aW9uIGFzc3VtcHRpb24gb2Ygc2luZ2xlLXBidWYgZGF0YWdyYW1zLgoKICAyMDA1LTAyLTA0IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcF9vdXQuYzogRml4ZWQgdW5pbml0aWFsaXplZCAncXVldWUnIHJlZmVyZW5jZWQgaW4gbWVtZXJyIGJyYW5jaC4KICAqIHRjcF97b3V0fGlufS5jOiBBcHBsaWVkIHBhdGNoIGZpeGluZyB1bmFsaWduZWQgYWNjZXNzLgoKICAyMDA1LTAxLTA0IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHBidWYuYzogRml4ZWQgbWlzc2luZyBzZW1pY29sb24gYWZ0ZXIgTFdJUF9ERUJVRyBzdGF0ZW1lbnQuCgogIDIwMDUtMDEtMDMgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogdWRwLmM6IFVEUCBwY2ItPnJlY3YoKSB3YXMgY2FsbGVkIGV2ZW4gd2hlbiBpdCB3YXMgTlVMTC4KCihTVEFCTEUtMV8xXzApCgogIDIwMDQtMTItMjggTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZXRoYXJwLio6IERpc2FibGVkIG11bHRpcGxlIHBhY2tldHMgb24gdGhlIEFSUCBxdWV1ZS4KICAgIFRoaXMgY2xhc2hlcyB3aXRoIFRDUCBxdWV1ZWluZy4KCiAgMjAwNC0xMS0yOCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBldGhhcnAuKjogRml4ZWQgcmFjZSBjb25kaXRpb24gZnJvbSBBUlAgcmVxdWVzdCB0byBBUlAgdGltZW91dC4KICAgIEhhbHZlZCB0aGUgQVJQIHBlcmlvZCwgZG91YmxlZCB0aGUgcGVyaW9kIGNvdW50cy4KICAgIEVUSEFSUF9NQVhfUEVORElORyBub3cgc2hvdWxkIGJlIGF0IGxlYXN0IDIuIFRoaXMgcHJldmVudHMKICAgIHRoZSBjb3VudGVyIGZyb20gcmVhY2hpbmcgMCByaWdodCBhd2F5ICh3aGljaCB3b3VsZCBhbGxvdwogICAgdG9vIGxpdHRsZSB0aW1lIGZvciBBUlAgcmVzcG9uc2VzIHRvIGJlIHJlY2VpdmVkKS4KCiAgMjAwNC0xMS0yNSBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBkaGNwLmM6IERlY2xpbmUgbWVzc2FnZXMgd2VyZSBub3QgbXVsdGljYXN0IGJ1dCB1bmljYXN0LgogICogZXRoYXJwLmM6IEVUSEFSUF9DUkVBVEUgaXMgcmVuYW1lZCB0byBFVEhBUlBfVFJZX0hBUkQuCiAgICBEbyBub3QgdHJ5IGhhcmQgdG8gaW5zZXJ0IGFyYml0cmFyeSBwYWNrZXQncyBzb3VyY2UgYWRkcmVzcywKICAgIGV0aGFycF9pcF9pbnB1dCgpIG5vdyBjYWxscyBldGhhcnBfdXBkYXRlKCkgd2l0aG91dCBFVEhBUlBfVFJZX0hBUkQuIAogICAgZXRoYXJwX3F1ZXJ5KCkgbm93IGFsd2F5cyBET0VTIGNhbGwgRVRIQVJQX1RSWV9IQVJEIHNvIHRoYXQgdXNlcnMKICAgIHF1ZXJ5aW5nIGFuIGFkZHJlc3Mgd2lsbCBzZWUgaXQgYXBwZWFyIGluIHRoZSBjYWNoZSAoREhDUCBjb3VsZAogICAgc3VmZmVyIGZyb20gdGhpcyB3aGVuIGEgc2VydmVyIGludmFsaWRseSBnYXZlIGFuIGluLXVzZSBhZGRyZXNzLikKICAqIGlwdjQvaXBfYWRkci5oOiBSZW5hbWVkIGlwX2FkZHJfbWFza2NtcCgpIHRvIF9uZXRjbXAoKSBhcyB3ZSBhcmUKICAgIGNvbXBhcmluZyBuZXR3b3JrIGFkZHJlc3NlcyAoaWRlbnRpZmllcnMpLCBub3QgdGhlIG5ldHdvcmsgbWFza3MKICAgIHRoZW1zZWx2ZXMuCiAgKiBpcHY0L2lwX2FkZHIuYzogaXBfYWRkcl9pc2Jyb2FkY2FzdCgpIG5vdyBjaGVja3MgdGhhdCB0aGUgZ2l2ZW4KICAgIElQIGFkZHJlc3MgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUgbmV0d29yayBvZiB0aGUgZ2l2ZW4gaW50ZXJmYWNlLgoKICAyMDA0LTExLTI0IEtpZXJhbiBNYW5zbGV5IDxram0yNUBjYW0uYWMudWs+CiAgKiB0Y3AuYzogSW5jcmVtZW50IHBjYi0+c25kX2J1ZiB3aGVuIEFDSyBpcyByZWNlaXZlZCBpbiBTWU5fU0VOVCBzdGF0ZS4KCihTVEFCTEUtMV8xXzAtUkMxKQoKICAyMDA0LTEwLTE2IEtpZXJhbiBNYW5zbGV5IDxram0yNUBjYW0uYWMudWs+CiAgKiB0Y3AuYzogQWRkIGNvZGUgdG8gdGNwX3JlY3ZlZCgpIHRvIHNlbmQgYW4gQUNLICh3aW5kb3cgdXBkYXRlKSBpbW1lZGlhdGVseSwKICAgIGV2ZW4gaWYgb25lIGlzIGFscmVhZHkgcGVuZGluZywgaWYgdGhlIHJjdl93bmQgaXMgYWJvdmUgYSB0aHJlc2hvbGQKICAgIChjdXJyZW50bHkgVENQX1dORC8yKS4gVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgYSB0aW1lciB0byBleHBpcmUgdG8gc2VuZCBhCiAgICBkZWxheWVkIEFDSyBpbiBvcmRlciB0byBvcGVuIHRoZSB3aW5kb3cgaWYgdGhlIHN0YWNrIGlzIG9ubHkgcmVjZWl2aW5nIGRhdGEuCgogIDIwMDQtMDktMTIgS2llcmFuIE1hbnNsZXkgPGtqbTI1QGNhbS5hYy51az4KICAqIHRjcCouKjogUmV0cmFuc21pdCB0aW1lLW91dCBoYW5kbGluZyBpbXByb3ZlbWVudCBieSBTYW0gSmFuc2VuLgoKICAyMDA0LTA4LTIwIFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4KICAqIGV0aGFycC5jOiBNYWtlIHN1cmUgdGhlIGZpcnN0IHBidWYgcXVldWVkIG9uIGFuIEFSUCBlbnRyeQogICAgaXMgcHJvcGVybHkgcmVmIGNvdW50ZWQuCgogIDIwMDQtMDctMjcgVG9ueSBNb3VudGlmaWVsZCA8dG9ueUBzb2Z0aW5zLmNvLnVrPgogICogZGVidWcuaDogQWRkZWQgKGludCkgY2FzdCBpbiBMV0lQX0RFQlVHRigpIHRvIGF2b2lkIGNvbXBpbGVyCiAgICB3YXJuaW5ncyBhYm91dCBjb21wYXJpc29uLgogICogcGJ1Zi5jOiBTdG9wcGVkIGNvbXBpbGVyIGNvbXBsYWluaW5nIG9mIGVtcHR5IGlmIHN0YXRlbWVudAogICAgd2hlbiBMV0lQX0RFQlVHRigpIGVtcHR5LiAgQ2xvc2VkIGFuIHVuY2xvc2VkIGNvbW1lbnQuCiAgKiB0Y3AuYzogU3RvcHBlZCBjb21waWxlciBjb21wbGFpbmluZyBvZiBlbXB0eSBpZiBzdGF0ZW1lbnQKICAgIHdoZW4gTFdJUF9ERUJVR0YoKSBlbXB0eS4KICAqIGlwLmggQ29ycmVjdGVkIElQSF9UT1MoKSBtYWNybzogcmV0dXJucyBhIGJ5dGUsIHNvIGRvZXNuJ3QgbmVlZCBodG9ucygpLgogICogaW5ldC5jOiBBZGRlZCBhIGNvdXBsZSBvZiBjYXN0cyB0byBxdWlldCB0aGUgY29tcGlsZXIuCiAgICBObyBuZWVkIHRvIHRlc3QgaXNhc2NpaShjKSBiZWZvcmUgaXNkaWdpdChjKSBvciBpc3hkaWdpdChjKS4KCiAgMjAwNC0wNy0yMiBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+CiAgKiBpbmV0LmM6IE1hZGUgZGF0YSB0eXBlcyBjb25zaXN0ZW50IGluIGluZXRfbnRvYSgpLgogICAgQWRkZWQgY2FzdHMgZm9yIHJldHVybiB2YWx1ZXMgb2YgY2hlY2tzdW0gcm91dGluZXMsIHRvIHBhY2lmeSBjb21waWxlci4KICAqIGlwX2ZyYWcuYywgdGNwX291dC5jLCBzb2NrZXRzLmMsIHBidWYuYwogICAgU21hbGwgY29ycmVjdGlvbnMgdG8gc29tZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cywgdG8gcGFjaWZ5IGNvbXBpbGVyLgoKICAyMDA0LTA3LTIxIFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4KICAqIGV0aGFycC5jOiBSZW1vdmVkIHNwdXJpb3VzIHNlbWljb2xvbiBhbmQgYWRkZWQgbWlzc2luZyBlbmQtb2YtY29tbWVudC4KICAqIGV0aGVybmV0aWYuYyBVcGRhdGVkIGxvd19sZXZlbF9vdXRwdXQoKSB0byBtYXRjaCBwcm90b3R5cGUgZm9yCiAgICBuZXRpZi0+bGlua291dHB1dCBhbmQgY2hhbmdlZCBsb3dfbGV2ZWxfaW5wdXQoKSBzaW1pbGFybHkgZm9yIGNvbnNpc3RlbmN5LgogICogYXBpX21zZy5jOiBDaGFuZ2VkIHJlY3ZfcmF3KCkgZnJvbSBpbnQgdG8gdThfdCwgdG8gbWF0Y2ggcHJvdG90eXBlCiAgICBvZiByYXdfcmVjdigpIGluIHJhdy5oIGFuZCBzbyBhdm9pZCBjb21waWxlciBlcnJvci4KICAqIHNvY2tldHMuYzogQWRkZWQgdHJpdmlhbCAoaW50KSBjYXN0IHRvIGtlZXAgY29tcGlsZXIgaGFwcGllci4KICAqIGlwLmMsIG5ldGlmLmMgQ2hhbmdlZCBkZWJ1ZyBzdGF0ZW1lbnRzIHRvIHVzZSB0aGUgdGlkaWVyIGlwNF9hZGRyTigpIG1hY3Jvcy4KCihTVEFCTEUtMV8wXzApCgogICsrIENoYW5nZXM6CgogIDIwMDQtMDctMDUgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogc29ja2V0cy4qOiBSZXN0cnVjdHVyZWQgTFdJUF9QUklWQVRFX1RJTUVWQUwuIE1ha2Ugc3VyZQogICAgeW91ciBjYy5oIGZpbGUgZGVmaW5lcyB0aGlzIGVpdGhlciAxIG9yIDAuIElmIG5vbi1kZWZpbmVkLAogICAgZGVmYXVsdHMgdG8gMS4KICAqIC5jOiBBZGRlZCA8c3RyaW5nLmg+IGFuZCA8ZXJybm8uaD4gaW5jbHVkZXMgd2hlcmUgdXNlZC4KICAqIGV0aGFycC5jOiBNYWRlIHNvbWUgYXJyYXkgaW5kaWNlcyB1bnNpZ25lZC4KCiAgMjAwNC0wNi0yNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBuZXRpZi4qOiBBZGRlZCBuZXRpZl9zZXRfdXAoKS9kb3duKCkuCiAgKiBkaGNwLmM6IENoYW5nZXMgdG8gcmVzdGFydCBwcm9ncmFtIGZsb3cuCgogIDIwMDQtMDUtMDcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZXRoYXJwLmM6IEluIGZpbmRfZW50cnkoKSwgaW5zdGVhZCBvZiBhIGxpc3QgdHJhdmVyc2FsIHBlciBjYW5kaWRhdGUsIGRvIGEKICAgIHNpbmdsZS1wYXNzIGxvb2t1cCBmb3IgZGlmZmVyZW50IGNhbmRpZGF0ZXMuIFNob3VsZCBleHBsb2l0IGxvY2FsaXR5LgoKICAyMDA0LTA0LTI5IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4KICAqIHRjcCouYzogQ2xlYW5lZCB1cCBzb3VyY2UgY29tbWVudCBkb2N1bWVudGF0aW9uIGZvciBEb3h5Z2VuIHByb2Nlc3NpbmcuCiAgKiBvcHQuaDogRVRIQVJQX0FMV0FZU19JTlNFUlQgb3B0aW9uIHJlbW92ZWQgdG8gY29tcGx5IHdpdGggQVJQIFJGQy4KICAqIGV0aGFycC5jOiB1cGRhdGVfYXJwX2VudHJ5KCkgb25seSBhZGRzIG5ldyBBUlAgZW50cmllcyB3aGVuIGFkdmljZWQgdG8gYnkKICAgIHRoZSBjYWxsZXIuIFRoaXMgZGVwcmVjYXRlcyB0aGUgRVRIQVJQX0FMV0FZU19JTlNFUlQgb3ZlcnJ1bGUgb3B0aW9uLgoKICArKyBCdWcgZml4ZXM6CgogIDIwMDQtMDQtMjcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0PgogICogZXRoYXJwLmM6IEFwcGxpZWQgcGF0Y2ggb2YgYnVnICM4NzA4IGJ5IFRvbmkgTW91bnRpZmllbGQgd2l0aCBhIHNvbHV0aW9uCiAgICBzdWdnZXN0ZWQgYnkgVGltbXkgQnJvbGluLiBGaXggZm9yIDMyLWJpdCBwcm9jZXNzb3JzIHRoYXQgY2Fubm90IGFjY2VzcwogICAgbm9uLWFsaWduZWQgMzItYml0IHdvcmRzLCBzdWNoIGFzIHNvbXMgMzItYml0IFRDUC9JUCBoZWFkZXIgZmllbGRzLiBGaXgKICAgIGlzIHRvIHByZWZpeCB0aGUgMTQtYml0IEV0aGVybmV0IGhlYWRlcnMgd2l0aCB0d28gcGFkZGluZyBieXRlcy4KCiAgMjAwNC0wNC0yMyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+CiAgKiBpcF9hZGRyLmM6IEZpeCBpbiB0aGUgaXBfYWRkcl9pc2Jyb2FkY2FzdCgpIGNoZWNrLgogICogZXRoYXJwLmM6IEZpeGVkIHRoZSBjYXNlIHdoZXJlIHRoZSBwYWNrZXQgdGhhdCBpbml0aWF0ZXMgdGhlIEFSUCByZXF1ZXN0CiAgICBpcyBub3QgcXVldWVkLCBhbmQgZ2V0cyBsb3N0LiBGaXhlZCB0aGUgY2FzZSB3aGVyZSB0aGUgcGFja2V0cyBkZXN0aW5hdGlvbgogICAgYWRkcmVzcyBpcyBhbHJlYWR5IGtub3duOyB3ZSBub3cgYWx3YXlzIHF1ZXVlIHRoZSBwYWNrZXQgYW5kIHBlcmZvcm0gYW4gQVJQCiAgICByZXF1ZXN0LgoKKFNUQUJMRS0wXzdfMCkKCiAgKysgQnVnIGZpeGVzOgoKICAqIEZpeGVkIFRDUCBidWcgZm9yIFNZTl9TRU5UIHRvIEVTVEFCTElTSEVEIHN0YXRlIHRyYW5zaXRpb24uCiAgKiBGaXhlZCBUQ1AgYnVnIGluIGRlcXVldWVpbmcgb2YgRklOIGZyb20gb3V0IG9mIG9yZGVyIHNlZ21lbnQgcXVldWUuCiAgKiBGaXhlZCB0d28gcG9zc2libGUgTlVMTCByZWZlcmVuY2VzIGluIHJhcmUgY2FzZXMuCgooU1RBQkxFLTBfNl82KQoKICArKyBCdWcgZml4ZXM6CgogICogRml4ZWQgREhDUCB3aGljaCBkaWQgbm90IGluY2x1ZGUgdGhlIElQIGFkZHJlc3MgaW4gREVDTElORSBtZXNzYWdlcy4KCiAgKysgQ2hhbmdlczoKCiAgKiBldGhhcnAuYyBoYXMgYmVlbiBoYXVsZWQgb3ZlciBhIGJpdC4KCihTVEFCTEUtMF82XzUpCgogICsrIEJ1ZyBmaXhlczoKCiAgKiBGaXhlZCBUQ1AgYnVnIGluZHVjZWQgYnkgYmFkIHdpbmRvdyByZXNpemluZyB3aXRoIHVuaWRpcmVjdGlvbmFsIFRDUCB0cmFmZmljLgogICogUGFja2V0cyBzZW50IGZyb20gQVJQIHF1ZXVlIGhhZCBpbnZhbGlkIHNvdXJjZSBoYXJkd2FyZSBhZGRyZXNzLgoKICArKyBDaGFuZ2VzOgoKICAqIFBhc3MtYnkgQVJQIHJlcXVlc3RzIGRvIG5vdyB1cGRhdGUgdGhlIGNhY2hlLgoKICArKyBOZXcgZmVhdHVyZXM6CgogICogTm8gbG9uZ2VyIGRlcGVuZGVudCBvbiBjdHlwZS5oLgogICogTmV3IHNvY2tldCBvcHRpb25zLgogICogUmF3IElQIHBjYiBzdXBwb3J0LgoKKFNUQUJMRS0wXzZfNCkKCiAgKysgQnVnIGZpeGVzOgoKICAqIFNvbWUgZGVidWcgZm9ybWF0dGVycyBhbmQgY2FzdHMgZml4ZWQuCiAgKiBOdW1lcmVvdXMgZml4ZXMgaW4gUFBQLgoKICArKyBDaGFuZ2VzOgoKICAqIERFQlVHRiBub3cgaXMgTFdJUF9ERUJVR0YKICAqIHBidWZfZGVjaGFpbigpIGhhcyBiZWVuIHJlLWVuYWJsZWQuCiAgKiBNZW50aW9uZWQgdGhlIGNoYW5nZWQgdXNlIG9mIENWUyBicmFuY2hlcyBpbiBSRUFETUUuCgooU1RBQkxFLTBfNl8zKQoKICArKyBCdWcgZml4ZXM6CgogICogRml4ZWQgcG9vbCBwYnVmIG1lbW9yeSBsZWFrIGluIHBidWZfYWxsb2MoKS4KICAgIE9jY3VyZWQgaWYgbm90IGVub3VnaCBQQlVGX1BPT0wgcGJ1ZnMgZm9yIGEgcGFja2V0IHBidWYgY2hhaW4uCiAgICBSZXBvcnRlZCBieSBTYXZpbiBabG9iZWMuCgogICogUEJVRl9QT09MIGNoYWlucyBoYWQgdGhlaXIgdG90X2xlbiBmaWVsZCBub3Qgc2V0IGZvciBub24tZmlyc3QKICAgIHBidWZzLiBGaXhlZCBpbiBwYnVmX2FsbG9jKCkuCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBBZGRlZCBQUFAgc3RhY2sgY29udHJpYnV0ZWQgYnkgTWFyYyBCb3VjaGVyCgogICsrIENoYW5nZXM6CgogICogTm93IGRyb3BzIHNob3J0IHBhY2tldHMgZm9yIElDTVAvVURQL1RDUCBwcm90b2NvbHMuIE1vcmUgcm9idXN0LgoKICAqIEFSUCBxdWV1ZXVpbmcgbm93IHF1ZXVlcyB0aGUgbGF0ZXN0IHBhY2tldCBpbnN0ZWFkIG9mIHRoZSBmaXJzdC4KICAgIFRoaXMgaXMgdGhlIFJGQyByZWNvbW1lbmRlZCBiZWhhdmlvdXIsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpbgogICAgbHdpcG9wdHMuaC4KCigwLjYuMikKCiAgKysgQnVnZml4ZXM6CgogICogVENQIGhhcyBiZWVuIGZpeGVkIHRvIGRlYWwgd2l0aCB0aGUgbmV3IHVzZSBvZiB0aGUgcGJ1Zi0+cmVmCiAgICBjb3VudGVyLgoKICAqIERIQ1AgZGhjcF9pbmZvcm0oKSBjcmFzaCBidWcgZml4ZWQuCgogICsrIENoYW5nZXM6CgogICogUmVtb3ZlZCBwYnVmX3Bvb2xfZnJlZV9jYWNoZSBhbmQgcGJ1Zl9wb29sX2FsbG9jX2NhY2hlLiBBbHNvIHJlbW92ZWQKICAgIHBidWZfcmVmcmVzaCgpLiBUaGlzIGhhcyBzcGVkIHVwIHBidWYgcG9vbCBvcGVyYXRpb25zIGNvbnNpZGVyYWJseS4KICAgIEltcGxlbWVudGVkIGJ5IERhdmlkIEhhYXMuCgooMC42LjEpCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBUaGUgcGFja2V0IGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBlbmhhbmNlZCB0byBzdXBwb3J0CiAgICB6ZXJvLWNvcHkgYW5kIGNvcHktb24tZGVtYW5kIGZvciBwYWNrZXQgYnVmZmVycyB3aGljaCBoYXZlIHRoZWlyCiAgICBwYXlsb2FkcyBpbiBhcHBsaWNhdGlvbi1tYW5hZ2VkIG1lbW9yeS4KICAgIEltcGxlbWVudGVkIGJ5IERhdmlkIEhhYXMuCgogICAgVXNlIFBCVUZfUkVGIHRvIG1ha2UgYSBwYnVmIHJlZmVyIHRvIFJBTS4gbHdJUCB3aWxsIHVzZSB6ZXJvLWNvcHkKICAgIGlmIGFuIG91dGdvaW5nIHBhY2tldCBjYW4gYmUgZGlyZWN0bHkgc2VudCBvbiB0aGUgbGluaywgb3IgcGVyZm9ybQogICAgYSBjb3B5LW9uLWRlbWFuZCB3aGVuIG5lY2Vzc2FyeS4KCiAgICBUaGUgYXBwbGljYXRpb24gY2FuIHNhZmVseSBhc3N1bWUgdGhlIHBhY2tldCBpcyBzZW50LCBhbmQgdGhlIFJBTQogICAgaXMgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbiBkaXJlY3RseSBhZnRlciBjYWxsaW5nIHVkcF9zZW5kKCkKICAgIG9yIHNpbWlsYXIgZnVuY3Rpb24uCgogICsrIEJ1Z2ZpeGVzOgoKICAqIEFSUF9RVUVVRUlORyBzaG91bGQgbm93IGNvcnJlY3RseSB3b3JrIGZvciBhbGwgY2FzZXMsIGluY2x1ZGluZwogICAgUEJVRl9SRUYuCiAgICBJbXBsZW1lbnRlZCBieSBMZW9uIFdvZXN0ZW5iZXJnLgoKICArKyBDaGFuZ2VzOgoKICAqIElQX0FERFJfQU5ZIGlzIG5vIGxvbmdlciBhIE5VTEwgcG9pbnRlci4gSW5zdGVhZCwgaXQgaXMgYSBwb2ludGVyCiAgICB0byBhICcwLjAuMC4wJyBJUCBhZGRyZXNzLgoKICAqIFRoZSBwYWNrZXQgYnVmZmVyIGltcGxlbWVudGF0aW9uIGlzIGNoYW5nZWQuIFRoZSBwYnVmLT5yZWYgY291bnRlcgogICAgbWVhbmluZyBoYXMgY2hhbmdlZCwgYW5kIHNldmVyYWwgcGJ1ZiBmdW5jdGlvbnMgaGF2ZSBiZWVuCiAgICBhZGFwdGVkIGFjY29yZGluZ2x5LgoKICAqIG5ldGlmIGRyaXZlcnMgaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIHNldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggZmllbGQKICAgIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkgYnkgdGhlIGRyaXZlciAoaGludDogNiBmb3IgRXRoZXJuZXQgTUFDKS4KICAgIFNlZSB0aGUgY29udHJpYi9wb3J0cy9jMTZ4IGNzODkwMCBkcml2ZXIgYXMgYSBkcml2ZXIgZXhhbXBsZS4KCiAgKiBuZXRpZidzIGhhdmUgYSBkaGNwIGZpZWxkIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZCB0byBOVUxMIGJ5IHRoZSBkcml2ZXIuCiAgICBTZWUgdGhlIGNvbnRyaWIvcG9ydHMvYzE2eCBjczg5MDAgZHJpdmVyIGFzIGEgZHJpdmVyIGV4YW1wbGUuCgooMC41LngpIFRoaXMgZmlsZSBoYXMgYmVlbiB1bm1haW50YWluZWQgdXAgdG8gMC42LjEuIEFsbCBjaGFuZ2VzIGFyZQogIGxvZ2dlZCBpbiBDVlMgYnV0IGhhdmUgbm90IGJlZW4gZXhwbGFpbmVkIGhlcmUuCgooMC41LjMpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjUuMgoKICArKyBCdWdmaXhlczoKCiAgKiBtZW1wX21hbGxvYyhNRU1QX0FQSV9NU0cpIGNvdWxkIGZhaWwgd2l0aCBtdWx0aXBsZSBhcHBsaWNhdGlvbgogICAgdGhyZWFkcyBiZWNhdXNlIGl0IHdhc24ndCBwcm90ZWN0ZWQgYnkgc2VtYXBob3Jlcy4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBzdHJ1Y3QgaXBfYWRkciBub3cgcGFja2VkLgoKICAqIFRoZSBuYW1lIG9mIHRoZSB0aW1lIHZhcmlhYmxlIGluIGFycC5jIGhhcyBiZWVuIGNoYW5nZWQgdG8gY3RpbWUKICAgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSB0aW1lKCkgZnVuY3Rpb24uCgooMC41LjIpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjUuMQoKICArKyBOZXcgZmVhdHVyZXM6CgogICogQSBuZXcgVENQIGZ1bmN0aW9uLCB0Y3BfdG1yKCksIG5vdyBoYW5kbGVzIGJvdGggVENQIHRpbWVycy4KCiAgKysgQnVnZml4ZXM6CgogICogQSBidWcgaW4gdGNwX3BhcnNlb3B0KCkgY291bGQgY2F1c2UgdGhlIHN0YWNrIHRvIGhhbmcgYmVjYXVzZSBvZiBhCiAgICBtYWxmb3JtZWQgVENQIG9wdGlvbi4KCiAgKiBUaGUgYWRkcmVzcyBvZiBuZXcgY29ubmVjdGlvbnMgaW4gdGhlIGFjY2VwdCgpIGZ1bmN0aW9uIGluIHRoZSBCU0QKICAgIHNvY2tldCBsaWJyYXJ5IHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCgogICogcGJ1Zl9kZWNoYWluKCkgZGlkIG5vdCB1cGRhdGUgdGhlIC0+dG90X2xlbiBmaWVsZCBvZiB0aGUgdGFpbC4KCiAgKiBBYm9ydGVkIFRDUCBjb25uZWN0aW9ucyB3ZXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBhbGwKICAgIHNpdHVhdGlvbnMuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogQWxsIHByb3RvY29sIGhlYWRlciBzdHJ1Y3RzIGFyZSBub3cgcGFja2VkLgoKICAqIFRoZSAtPmxlbiBmaWVsZCBpbiB0aGUgdGNwX3NlZyBzdHJ1Y3R1cmUgbm93IGNvdW50cyB0aGUgYWN0dWFsCiAgICBhbW91bnQgb2YgZGF0YSwgYW5kIGRvZXMgbm90IGFkZCBvbmUgZm9yIFNZTiBhbmQgRklOIHNlZ21lbnRzLgoKKDAuNS4xKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC41LjAKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIFBvc3NpYmxlIHRvIHJ1biBhcyBhIHVzZXIgcHJvY2VzcyB1bmRlciBMaW51eC4KCiAgKiBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBjcm9zcyBwbGF0Zm9ybSBwYWNrZWQgc3RydWN0cy4KCiAgKiBBUlAgdGltZXIgbm93IGltcGxlbWVudGVkLgoKICArKyBCdWdmaXhlczoKCiAgKiBUQ1Agb3V0cHV0IHF1ZXVlIGxlbmd0aCB3YXMgYmFkbHkgaW5pdGlhbGl6ZWQgd2hlbiBvcGVuaW5nCiAgICBjb25uZWN0aW9ucy4KCiAgKiBUQ1AgZGVsYXllZCBBQ0tzIHdlcmUgbm90IHNlbnQgY29ycmVjdGx5LgoKICAqIEV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIEJTUyBzZWdtZW50IHZhcmlhYmxlcy4KCiAgKiByZWFkKCkgaW4gQlNEIHNvY2tldCBsaWJyYXJ5IGNvdWxkIGRyb3AgZGF0YS4KCiAgKiBQcm9ibGVtcyB3aXRoIG1lbW9yeSBhbGlnbm1lbnQuCgogICogU2l0dWF0aW9ucyB3aGVuIGFsbCBUQ1AgYnVmZmVycyB3ZXJlIHVzZWQgY291bGQgbGVhZCB0bwogICAgc3RhcnZhdGlvbi4KCiAgKiBUQ1AgTVNTIG9wdGlvbiB3YXNuJ3QgcGFyc2VkIGNvcnJlY3RseS4KCiAgKiBQcm9ibGVtcyB3aXRoIFVEUCBjaGVja3N1bSBjYWxjdWxhdGlvbi4KCiAgKiBJUCBtdWx0aWNhc3QgYWRkcmVzcyB0ZXN0cyBoYWQgZW5kaWFuZXNzIHByb2JsZW1zLgoKICAqIEFSUCByZXF1ZXN0cyBoYWQgd3JvbmcgZGVzdGluYXRpb24gaGFyZHdhcmUgYWRkcmVzcy4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBzdHJ1Y3QgZXRoX2FkZHIgY2hhbmdlZCBmcm9tIHUxNl90WzNdIGFycmF5IHRvIHU4X3RbNl0uCgogICogQSAtPmxpbmtvdXRwdXQoKSBtZW1iZXIgd2FzIGFkZGVkIHRvIHN0cnVjdCBuZXRpZi4KCiAgKiBUQ1AgYW5kIFVEUCAtPmRlc3RfKiBzdHJ1Y3QgbWVtYmVycyB3aGVyZSBjaGFuZ2VkIHRvIC0+cmVtb3RlXyouCgogICogbnRvaCogbWFjcm9zIGFyZSBub3cgbnVsbCBkZWZpbml0aW9ucyBmb3IgYmlnIGVuZGlhbiBDUFVzLgoKKDAuNS4wKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC40LjIKCiAgKysgTmV3IGZlYXR1cmVzOgoKICAqIFJlZGVzaWduZWQgb3BlcmF0aW5nIHN5c3RlbSBlbXVsYXRpb24gbGF5ZXIgdG8gbWFrZSBwb3J0aW5nIGVhc2llci4KCiAgKiBCZXR0ZXIgY29udHJvbCBvdmVyIFRDUCBvdXRwdXQgYnVmZmVycy4KCiAgKiBEb2N1bWVuYXRpb24gYWRkZWQuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIExvY2tpbmcgaXNzdWVzIGluIGJ1ZmZlciBtYW5hZ2VtZW50LgoKICAqIEJ1Z2ZpeGVzIGluIHRoZSBzZXF1ZW50aWFsIEFQSS4KCiAgKiBJUCBmb3J3YXJkaW5nIGNvdWxkIGNhdXNlIG1lbW9yeSBsZWFrYWdlLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICArKyBPdGhlciBjaGFuZ2VzOgoKICAqIERpcmVjdG9yeSBzdHJ1Y3R1cmUgc29tZXdoYXQgY2hhbmdlZDsgdGhlIGNvcmUvIHRyZWUgaGFzIGJlZW4KICAgIGNvbGxhcHNlZC4KCigwLjQuMikgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNC4xCgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBFeHBlcmltZW50YWwgQVJQIGltcGxlbWVudGF0aW9uIGFkZGVkLgoKICAqIFNrZWxldG9uIEV0aGVybmV0IGRyaXZlciBhZGRlZC4KCiAgKiBFeHBlcmltZW50YWwgQlNEIHNvY2tldCBBUEkgbGlicmFyeSBhZGRlZC4KCiAgKysgQnVnZml4ZXM6CgogICogSW4gdmVyeSBpbnRlbnNlIHNpdHVhdGlvbnMsIG1lbW9yeSBsZWFrYWdlIGNvdWxkIG9jY3VyLiBUaGlzIGhhcwogICAgYmVlbiBmaXhlZC4KCiAgKysgT3RoZXIgY2hhbmdlczoKCiAgKiBWYXJpYWJsZXMgbmFtZWQgImRhdGEiIGFuZCAiY29kZSIgaGF2ZSBiZWVuIHJlbmFtZWQgaW4gb3JkZXIgdG8KICAgIGF2b2lkIG5hbWUgY29uZmxpY3RzIGluIGNlcnRhaW4gY29tcGlsZXJzLgoKICAqIFZhcmlhYmxlKysgaGF2ZSBpbiBhcHBsaWNpYWJsZSBjYXNlcyBiZWVuIHRyYW5zbGF0ZWQgdG8gKyt2YXJpYWJsZQogICAgc2luY2Ugc29tZSBjb21waWxlcnMgZ2VuZXJhdGUgYmV0dGVyIGNvZGUgaW4gdGhlIGxhdHRlciBjYXNlLgoKKDAuNC4xKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC40CgogICsrIE5ldyBmZWF0dXJlczoKCiAgKiBUQ1A6IENvbm5lY3Rpb24gYXR0ZW1wdHMgdGltZSBvdXQgZWFybGllciB0aGFuIGRhdGEKICAgIHRyYW5zbWlzc2lvbnMuIE5hZ2xlIGFsZ29yaXRobSBpbXBsZW1lbnRlZC4gUHVzaCBmbGFnIHNldCBvbiB0aGUKICAgIGxhc3Qgc2VnbWVudCBpbiBhIGJ1cnN0LgoKICAqIFVEUDogZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIFVEUC1MaXRlIGV4dGVuc2lvbnMuCgogICsrIEJ1Z2ZpeGVzOgoKICAqIFRDUDogb3V0IG9mIG9yZGVyIHNlZ21lbnRzIHdlcmUgaW4gc29tZSBjYXNlcyBoYW5kbGVkIGluY29ycmVjdGx5LAogICAgYW5kIHRoaXMgaGFzIG5vdyBiZWVuIGZpeGVkLiBEZWxheWVkIGFja25vd2xlZGdlbWVudHMgd2FzIGJyb2tlbgogICAgaW4gMC40LCBoYXMgbm93IGJlZW4gZml4ZWQuIEJpbmRpbmcgdG8gYW4gYWRkcmVzcyB0aGF0IGlzIGluIHVzZQogICAgbm93IHJlc3VsdHMgaW4gYW4gZXJyb3IuIFJlc2V0IGNvbm5lY3Rpb25zIHNvbWV0aW1lcyBodW5nIGFuCiAgICBhcHBsaWNhdGlvbjsgdGhpcyBoYXMgYmVlbiBmaXhlZC4KCiAgKiBDaGVja3N1bSBjYWxjdWxhdGlvbiBzb21ldGltZXMgZmFpbGVkIGZvciBjaGFpbmVkIHBidWZzIHdpdGggb2RkCiAgICBsZW5ndGhzLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICAqIEFQSTogYSBsb3Qgb2YgYnVnIGZpeGVzIGluIHRoZSBBUEkuIFRoZSBVRFAgQVBJIGhhcyBiZWVuIGltcHJvdmVkCiAgICBhbmQgdGVzdGVkLiBFcnJvciByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIGhhcyBiZWVuCiAgICBpbXByb3ZlZC4gTG9naWNhbCBmbGF3cyBhbmQgcmFjZSBjb25kaXRpb25zIGZvciBpbmNvbWluZyBUQ1AKICAgIGNvbm5lY3Rpb25zIGhhcyBiZWVuIGZvdW5kIGFuZCByZW1vdmVkLgoKICAqIE1lbW9yeSBtYW5hZ2VyOiBhbGlnbm1lbnQgaXNzdWVzLiBSZWFsbG9jYXRpbmcgbWVtb3J5IHNvbWV0aW1lcwogICAgZmFpbGVkLCB0aGlzIGhhcyBiZWVuIGZpeGVkLgoKICAqIEdlbmVyaWMgbGlicmFyeTogYmNvcHkgd2FzIGZsYXdlZCBhbmQgaGFzIGJlZW4gZml4ZWQuCgogICsrIE90aGVyIGNoYW5nZXM6CgogICogQVBJOiBhbGwgZGF0YXR5cGVzIGhhcyBiZWVuIGNoYW5nZWQgZnJvbSBnZW5lcmljIG9uZXMgc3VjaCBhcwogICAgaW50cywgdG8gc3BlY2lmaWVkIG9uZXMgc3VjaCBhcyB1MTZfdC4gRnVuY3Rpb25zIHRoYXQgcmV0dXJuCiAgICBlcnJvcnMgbm93IGhhdmUgdGhlIGNvcnJlY3QgdHlwZSAoZXJyX3QpLgoKICAqIEdlbmVyYWw6IEEgbG90IG9mIGNvZGUgY2xlYW5lZCB1cCBhbmQgZGVidWdnaW5nIGNvZGUgcmVtb3ZlZC4gTWFueQogICAgcG9ydGFiaWxpdHkgaXNzdWVzIGhhdmUgYmVlbiBmaXhlZC4KCiAgKiBUaGUgbGljZW5zZSB3YXMgY2hhbmdlZDsgdGhlIGFkdmVydGlzaW5nIGNsYXVzZSB3YXMgcmVtb3ZlZC4KCiAgKiBDNjQgcG9ydCBhZGRlZC4KCiAgKiBUaGFua3M6IEh1Z2UgdGhhbmtzIGdvIHRvIERhZ2FuIEdhbGFybmVhdSwgSG9yc3QgR2FybmV0emtlLCBQZXRyaQogICAgS29zdW5lbiwgTWlrYWVsIENhbGVyZXMsIGFuZCBGcml0cyBXaWxtaW5rIGZvciByZXBvcnRpbmcgYW5kCiAgICBmaXhpbmcgYnVncyEKCigwLjQpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjMuMQoKICAqIE1lbW9yeSBtYW5hZ2VtZW50IGhhcyBiZWVuIHJhZGljYWxseSBjaGFuZ2VkOyBpbnN0ZWFkIG9mCiAgICBhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIGEgc2hhcmVkIGhlYXAsIG1lbW9yeSBmb3Igb2JqZWN0cyB0aGF0IGFyZQogICAgcmFwaWRseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGlzIG5vdyBrZXB0IGluIHBvb2xzLiBBbGxvY2F0aW9uCiAgICBhbmQgZGVhbGxvY2F0aW9uIGZyb20gdGhvc2UgbWVtb3J5IHBvb2xzIGlzIHZlcnkgZmFzdC4gVGhlIHNoYXJlZAogICAgaGVhcCBpcyBzdGlsbCBwcmVzZW50IGJ1dCBpcyB1c2VkIGxlc3MgZnJlcXVlbnRseS4KCiAgKiBUaGUgbWVtb3J5LCBtZW1vcnkgcG9vbCwgYW5kIHBhY2tldCBidWZmZXIgc3Vic3lzdGVtcyBub3cgc3VwcG9ydAogICAgNC0sIDItLCBvciAxLWJ5dGUgYWxpZ25tZW50LgoKICAqICJPdXQgb2YgbWVtb3J5IiBzaXR1YXRpb25zIGFyZSBoYW5kbGVkIGluIGEgbW9yZSByb2J1c3Qgd2F5LgoKICAqIFN0YWNrIHVzYWdlIGhhcyBiZWVuIHJlZHVjZWQuCgogICogRWFzaWVyIGNvbmZpZ3VyYXRpb24gb2YgbHdJUCBwYXJhbWV0ZXJzIHN1Y2ggYXMgbWVtb3J5IHVzYWdlLAogICAgVFRMcywgc3RhdGlzdGljcyBnYXRoZXJpbmcsIGV0Yy4gQWxsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUKICAgIG5vdyBrZXB0IGluIGEgc2luZ2xlIGhlYWRlciBmaWxlICJsd2lwb3B0cy5oIi4KCiAgKiBUaGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBoYXMgYmVlbiBjaGFuZ2VkIHNsaWdodGx5IHNvIHRoYXQgYWxsCiAgICBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMgYXJlIGtlcHQgdW5kZXIgdGhlIHNyYy9hcmNoCiAgICBoaWVyYXJjaHkuCgogICogRXJyb3IgcHJvcGFnYXRpb24gaGFzIGJlZW4gaW1wcm92ZWQsIGJvdGggaW4gdGhlIHByb3RvY29sIG1vZHVsZXMKICAgIGFuZCBpbiB0aGUgQVBJLgoKICAqIFRoZSBjb2RlIGZvciB0aGUgUlRYQyBhcmNoaXRlY3R1cmUgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIHRlc3RlZAogICAgYW5kIHB1dCB0byB1c2UuCgogICogQnVncyBoYXZlIGJlZW4gZm91bmQgYW5kIGNvcnJlY3RlZCBpbiB0aGUgVENQLCBVRFAsIElQLCBBUEksIGFuZAogICAgdGhlIEludGVybmV0IGNoZWNrc3VtIG1vZHVsZXMuCgogICogQnVncyByZWxhdGVkIHRvIHBvcnRpbmcgYmV0d2VlbiBhIDMyLWJpdCBhbmQgYSAxNi1iaXQgYXJjaGl0ZWN0dXJlCiAgICBoYXZlIGJlZW4gZm91bmQgYW5kIGNvcnJlY3RlZC4KCiAgKiBUaGUgbGljZW5zZSBoYXMgYmVlbiBjaGFuZ2VkIHNsaWdodGx5IHRvIGNvbmZvcm0gbW9yZSB3aXRoIHRoZQogICAgb3JpZ2luYWwgQlNEIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgYWR2ZXJ0aXNlbWVudCBjbGF1c2UuCgooMC4zLjEpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjMKCiAgKiBGaXggb2YgYSBmYXRhbCBidWcgaW4gdGhlIGJ1ZmZlciBtYW5hZ2VtZW50LiBQYnVmcyB3aXRoIGFsbG9jYXRlZAogICAgUkFNIG5ldmVyIHJldHVybmVkIHRoZSBSQU0gd2hlbiB0aGUgcGJ1ZiB3YXMgZGVhbGxvY2F0ZWQuCgogICogVENQIGNvbmdlc3Rpb24gY29udHJvbCwgd2luZG93IHVwZGF0ZXMgYW5kIHJldHJhbnNtaXNzaW9ucyBkaWQgbm90CiAgICB3b3JrIGNvcnJlY3RseS4gVGhpcyBoYXMgbm93IGJlZW4gZml4ZWQuCgogICogQnVnZml4ZXMgaW4gdGhlIEFQSS4KCigwLjMpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjIKCiAgKiBOZXcgYW5kIGltcHJvdmVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIEFsbCBpbmNsdWRlIGZpbGVzIGFyZSBub3cKICAgIGtlcHQgaW4gYSBkZWRpY2F0ZWQgaW5jbHVkZS8gZGlyZWN0b3J5LgoKICAqIFRoZSBBUEkgbm93IGhhcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIEEgbmV3IGZ1bmN0aW9uLAogICAgbmV0Y29ubl9lcnIoKSwgbm93IHJldHVybnMgYW4gZXJyb3IgY29kZSBmb3IgdGhlIGNvbm5lY3Rpb24gaW4KICAgIGNhc2Ugb2YgZXJyb3JzLgoKICAqIEltcHJvdmVtZW50cyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGUgc3lzdGVtIG5vdwogICAga2VlcHMgYSBwb2ludGVyIHRvIHRoZSBsb3dlc3QgZnJlZSBtZW1vcnkgYmxvY2suIEEgbmV3IGZ1bmN0aW9uLAogICAgbWVtX21hbGxvYzIoKSB0cmllcyB0byBhbGxvY2F0ZSBtZW1vcnkgb25jZSwgYW5kIGlmIGl0IGZhaWxzIHRyaWVzCiAgICB0byBmcmVlIHNvbWUgbWVtb3J5IGFuZCByZXRyeSB0aGUgYWxsb2NhdGlvbi4KCiAgKiBNdWNoIHRlc3RpbmcgaGFzIGJlZW4gZG9uZSB3aXRoIGxpbWl0ZWQgbWVtb3J5CiAgICBjb25maWd1cmF0aW9ucy4gbHdJUCBub3cgZG9lcyBhIGJldHRlciBqb2Igd2hlbiBvdmVybG9hZGVkLgoKICAqIFNvbWUgYnVnZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byB0aGUgYnVmZmVyIChwYnVmKSBzdWJzeXN0ZW0uCgogICogTWFueSBidWdmaXhlcyBpbiB0aGUgVENQIGNvZGU6CgogICAgLSBGaXhlZCBhIGJ1ZyBpbiB0Y3BfY2xvc2UoKS4KCiAgICAtIFRoZSBUQ1AgcmVjZWl2ZSB3aW5kb3cgd2FzIGluY29ycmVjdGx5IGNsb3NlZCB3aGVuIG91dCBvZgogICAgICBzZXF1ZW5jZSBzZWdtZW50cyB3YXMgcmVjZWl2ZWQuIFRoaXMgaGFzIGJlZW4gZml4ZWQuCgogICAgLSBDb25uZWN0aW9ucyBhcmUgbm93IHRpbWVkLW91dCBvZiB0aGUgRklOLVdBSVQtMiBzdGF0ZS4KCiAgICAtIFRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGNvdWxkIGluIHNvbWUgY2FzZXMgYmUgdG9vCiAgICAgIGxhcmdlLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICAgIC0gVGhlIHJldHJhbnNtaXNzaW9uIHF1ZXVlIGNvdWxkIGluIHNvbWUgY2FzZXMgYmUgc2NyZXdlZCB1cC4gVGhpcwogICAgICBoYXMgYmVlbiBmaXhlZC4KCiAgICAtIFRDUCBSU1QgZmxhZyBub3cgaGFuZGxlZCBjb3JyZWN0bHkuCgogICAgLSBPdXQgb2Ygc2VxdWVuY2UgZGF0YSB3YXMgaW4gc29tZSBjYXNlcyBuZXZlciBkZWxpdmVyZWQgdG8gdGhlCiAgICAgIGFwcGxpY2F0aW9uLiBUaGlzIGhhcyBiZWVuIGZpeGVkLgoKICAgIC0gUmV0cmFuc21pdHRlZCBzZWdtZW50cyBub3cgY29udGFpbiB0aGUgY29ycmVjdCBhY2tub3dsZWRnbWVudAogICAgICBudW1iZXIgYW5kIGFkdmVydGlzZWQgd2luZG93LgoKICAgIC0gVENQIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgYmFja29mZnMgYXJlIG5vdCBjb3JyZWN0bHkgY29tcHV0ZWQKICAgICAgKGFsYSBCU0QpLiBBZnRlciBhIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMsIFRDUCBub3cgZ2l2ZXMgdXAKICAgICAgdGhlIGNvbm5lY3Rpb24uCgogICogVENQIGNvbm5lY3Rpb25zIG5vdyBhcmUga2VwdCBvbiB0aHJlZSBsaXN0cywgb25lIGZvciBhY3RpdmUKICAgIGNvbm5lY3Rpb25zLCBvbmUgZm9yIGxpc3RlbmluZyBjb25uZWN0aW9ucywgYW5kIG9uZSBmb3IKICAgIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGluIFRJTUUtV0FJVC4gVGhpcyBncmVhdGx5IHNwZWVkcyB1cCB0aGUgZmFzdAogICAgdGltZW91dCBwcm9jZXNzaW5nIGZvciBzZW5kaW5nIGRlbGF5ZWQgQUNLcy4KCiAgKiBUQ1Agbm93IHByb3ZpZGVzIHByb3BlciBmZWVkYmFjayB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBhCiAgICBjb25uZWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdXAuCgogICogTW9yZSBjb21tZW50cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGNvZGUuIFRoZSBjb2RlIGhhcyBhbHNvIGJlZW4KICAgIHNvbWV3aGF0IGNsZWFuZWQgdXAuCgooMC4yKSBJbml0aWFsIHB1YmxpYyByZWxlYXNlLgo=