Li4gQ29weXJpZ2h0IEJydW5vIGRhIFNpbHZhIGRlIE9saXZlaXJhIDIwMDYuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdAouLiBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLi4gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCgoyNSBBcHJpbCAyMDA1Ci0gRml4ZWQgYnVnIHdoZXJlIHRoZSBjb2RlIGZvciB3cmFwcGVycyBvZiBtZW1iZXIgZnVuY3Rpb25zIHdlcmUgZGVmaW5lZCBvdXRzaWRlIAp0aGUgcHlzdGUgbmFtZXNwYWNlLiBSZXBvcnRlZCBieSBEYW4gSGFmZmV5LgoKOSBPY3RvYmVyIDIwMDQKLSBBcHBsaWVkIGEgcGF0Y2ggYnkgQ2hyaXN0aWFuIEh1ZG9uIHRoYXQgZml4ZWQgYW4gaXNzdWUgd2l0aCBmaWxlcwp0aGF0IGhhZCBhIHRhaWwgYW5kIHJlbGF0aXZlIGluY2x1ZGVzLgoKMTggSnVseSAyMDA0Ci0gQXBwbGllZCBhIHBhdGNoIGJ5IFBhdWwgQnJpZGdlciB0aGF0IHNvbHZlcyBzb21lIHByb2JsZW1zIGZvciB3cmFwcGVyIAptZXRob2RzLgotIEFwcGxpZWQgYSBwYXRjaCBieSBCYXB0aXN0ZSBMZXBpbGxldXIgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gaW5qZWN0CmNvZGUgaW5zaWRlIHRoZSBjbGFzcyBkZWZpbml0aW9uLgotIEFwcGxpZWQgYW5vdGhlciBwYXRjaCBieSBCYXB0aXN0ZSBMZXBpbGxldXIgdGhhdCBpbnNlcnRzIHR3byBuZXcgY29tbWFuZC1saW5lCm9wdGlvbnMgdGhhdCBoZWxwcyB3aXRoIHdyaXRpbmcgbWFrZWZpbGVzLgoKMjcgTWF5IDIwMDQKQXBwbGllZCBwYXRjaCBieSBQYXVsIEJyaWRnZXIgdGhhdCBzb2x2ZXMgYSBwcm9ibGVtIG9uIHdpbmRvd3MgcmVnYXJkaW5nIApzcGFjZXMgb24gcGF0aHMuIFRoYW5rcyBQYXVsIQoKQXBwbGllZCBhbm90aGVyIHBhdGNoIHRoYXQgZml4ZXMgdGhlIG1vZHVsZSBuYW1lIGlmIHB5c3RlIGlzIHJ1biBmcm9tCmFub3RoZXIgZGlyZWN0b3J5IG9mIHdoZXJlIHRoZSAucHlzdGUgZmlsZSBpcyBsb2NhdGVkLiBQYXRjaCBjb250cmlidXR0ZWQgCmJ5IFBhdWwgQnJpZGdlci4KCjE3IE1heSAyMDA0CkFwcGxpZWQgYSBwYXRjaCBieSBSb21hbiBZYWtvdmVua28gdGhhdCBtYWtlcyB0aGUgZXhwb3J0IG9mIHVubmFtZWQgZW51bXMKYmV0dGVyLiBUaGFua3MgUm9tYW4hCgoyMyBPY3RvYmVyIDIwMDMKRml4ZWQgYnVnIHdoZXJlIGEgY2xhc3Mgd291bGQgYXBwZWFyIG1vcmUgdGhhbiBvbmUgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLgoKNiBPY3RvYmVyIDIwMDMKRml4ZWQgYnVnIHJlcG9ydGVkIGJ5IE5pYWxsIERvdWdsYXMgKHVzaW5nIGhpcyBwYXRjaCkgYWJvdXQgVW5pcXVlSW50IG5vdAphcHBlYXJpbmcgY29ycmVjdGx5IHdpdGggLS1tdWx0aXBsZS4KCkFkZGVkIHByZWNvbXBpbGVkIGhlYWRlciBzdXBwb3J0IG9uIHdpbmRvd3Mgc3lzdGVtcyAodXNpbmcgI3ByYWdtYSBoZHJzdG9wKS4KU3VnZ2VzdGVkIGJ5IE5pYWxsIERvdWdsYXMuCgpGaXhlZCBhIGJ1ZyB3aXRoIC1JIGRpcmVjdGl2ZSBhbmQgQWxsRnJvbUhlYWRlci4gUmVwb3J0ZWQgYnkgU2NvdHQgU255ZGVyLgoKNCBPY3RvYmVyIDIwMDMKQWRkZWQgcmV0dXJuX3NlbGYsIHRoYW5rcyBmb3IgTmlhbGwgRG91Z2xhcyBmb3IgcG9pbnRpbmcgb3V0IHRoYXQgaXQgd2FzCm1pc3NpbmcuCgpBZGRlZCAtLWZpbGUtbGlzdCwgd2hlcmUgeW91IGNhbiBwYXNzIGEgZmlsZSB3aGVyZSB0aGUgcHlzdGUgZmlsZXMgYXJlIGxpc3RlZApvbmUgcGVyIGxpbmUuIEFsc28gc3VnZ2VzdGVkIGJ5IE5pYWxsIERvdWdsYXMuCgpEb2N1bWVudGF0aW9uIGhhcyBiZWVuIGZpbmFsbHkgdXBkYXRlZCwgYWZ0ZXIgYSBsb25nIHdhaXQuIFBsZWFzZSBsZXQgbWUga25vdwppZiB5b3Ugc3BvdCBhbnkgbWlzdGFrZSEKCjIgT2N0b2JlciAyMDAzClNjb3R0IFNueWRlciBmb3VuZCBhIHR5cG8gaW4gQ2xhc3NFeHBvcnRlciB0aGF0IHByZXZlbnRlZCAtPSBhbmQgKj0gb3BlcmF0b3JzCmZyb20gYmVpbmcgZXhwb3J0ZWQuIFRoYW5rcyBTY290dCEKCjIwIFNlcHRlbWJlciAyMDAzCkFkZGVkIHJldHVybl9ieV92YWx1ZSBpbiB0aGUgbGlzdCBvZiBwb2xpY2llcyBzdXBwb3J0ZWQuIFRoYW5rcyB0byBOaWFsbApEb3VnbGFzIGZvciB0aGUgcmVtYWluZGVyLgoKMTkgU2VwdGVtYmVyIDIwMDMKQmV0dGVyIHN1cHBvcnQgZm9yIHVubmFtZWQgZW51bXMsIHBsdXMgdGhleSBhcmUgYnkgZGVmYXVsdCBleHBvcnRlZCB0byB0aGUKcGFyZW50J3MgbmFtZXNwYWNlLiBOb3JtYWwgZW51bXMgY2FuIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIHVzaW5nIHRoZSBmdW5jdGlvbgpleHBvcnRfdmFsdWVzIG9uIHRoZSBFbnVtIG9iamVjdC4gRmVhdHVyZSByZXF1ZXN0ZWQgYnkgTmlhbGwgRG91Z2xhcy4KCjEwIFNlcHRlbWJlciAyMDAzCkEgbmV3IHZhcmlhYmxlIGlzIGFjY2Vzc2libGUgaW4gdGhlIFB5c3RlIGZpbGVzOiBJTlRFUkZBQ0VfRklMRSBjb250YWlucyB0aGUgCmZ1bGwgcGF0aCBvZiB0aGUgcHlzdGUgZmlsZS4KCjQgU2VwdGVtYmVyIDIwMDMKTm93IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHByb3RlY3RlZCBhbmQgcHJpdmF0ZSBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCmluIFB5dGhvbiwgYXMgcmVxdWVzdGVkIGJ5IFJvbWFuIFlha292ZW5rby4KCjIzIEF1Z3VzdCAyMDAzCkZpeGVkIGJ1ZyB3aGVyZSBzb21lIEltcG9ydHMgd2hlcmUgbm90IHdyaXRpbmcgdGhlaXIgaW5jbHVkZSBmaWxlcy4gIApOb3cgd2hlbmV2ZXIgdGhlIGRlY2xhcmF0aW9ucyBjaGFuZ2UsIHRoZSBjYWNoZSBmaWxlcyBhcmUgcmVidWlsdAphdXRvbWF0aWNhbGx5LgoKMTkgQXVndXN0IDIwMDMKRml4ZWQgYSBidWcgcmVsYXRlZCB0byB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYmFzZXM8PiB0ZW1wbGF0ZS4KCjE3IEF1Z3VzdCAyMDAzCkFkZGVkIHN1cHBvcnQgZm9yIGluc2VydGlvbiBvZiB1c2VyIGNvZGUgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLgoKMTYgQXVndXN0IDIwMDMKQXBwbGllZCBhIHBhdGNoIGJ5IEdvdHRmcmllZCBHYW5zc2F1Z2UgdGhhdCBhZGRzIGV4Y2VwdGlvbiBzcGVjaWZpZXJzIHRvIAp3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgcG9pbnRlciBkZWNsYXJhdGlvbnMuIFRoYW5rcyBhIGxvdCBHb3R0ZnJpZWQhIQoKQXBwbGllZCBhIHBhdGNoIGJ5IFByYWJodSBSYW1hY2hhbmRyYW4gdGhhdCBmaXhlcyBhZSBwcm9ibGVtIHdpdGggdGhlIApwdXJlIHZpcnR1YWwgbWV0aG9kIGdlbmVyYXRpb24uIFRoYW5rcyBhZ2FpbiBQcmFiaHUhCgoxMCBBdWd1c3QgMjAwMwpTdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlIGhhcyBiZWVuIGFkZGVkLiBUaGlzIGNoYW5nZXMKaG93IC0tbXVsdGlwbGUgd29ya3M7IGRvY3VtZW50YXRpb24gb2YgdGhpcyBuZXcgZmVhdHVyZSB3aWxsIGZvbGxvdy4gVGhhbmtzCnRvIFByYWJodSBSYW1hY2hhbmRyYW4sIHRoYXQgc2F3IHRoZSBuZWVkIGZvciB0aGlzIGZlYXR1cmUgYW5kIGRpc2N1c3NlZCBhCnNvbHV0aW9uLiAKCkF1dG9tYXRpY2FsbHkgY29udmVydCBcIHRvIC8gaW4gV2luZG93cyBzeXN0ZW1zIGJlZm9yZSBwYXNzaW5nIHRoZSBwYXRocyB0bwpnY2N4bWwuCgpGaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBQcmFiaHUgUmFtYWNoYW5kcmFuLCB3aGVyZSBpbiBzb21lIGNsYXNzZXMgdGhlIHZpcnR1YWwKbWV0aG9kcyB3ZXJlIGJlaW5nIGRlZmluaWVkIGluY29ycmVjdGx5LiBUaGFua3MgYSBsb3QgUHJhYmh1IQoKNyBKdWx5IDIwMDMKQXBwbGllZCAyIHBhdGNoZXMgYnkgUHJhYmh1IFJhbWFjaGFuZHJhbjogYSBmaXggaW4gdGhlIG5ldyAtLW11bHRpcGxlIG1ldGhvZCwKYW5kIHR3byBuZXcgZnVuY3Rpb25zICJob2xkX3dpdGhfc2hhcmVkX3B0ciIgYW5kIGl0cyBjb3VudGVycGFydCBmb3IgYXV0b19wdHIuClRoYW5rcyBhIGxvdCBQcmFiaHUhCgpGaXhlZCBhIGJ1ZyB3aGVyZSB0aGUgbWFjcm8gQk9PU1RfUFlUSE9OX09QQVFVRV9TUEVDSUFMSVpFRF9UWVBFX0lEIHdhcyBiZWluZwpjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIHR5cGUuClRoYW5rcyB0byBHb3R0ZnJpZWQgR2Fu32F1Z2UgZm9yIHJlcG9ydGluZyB0aGlzIQoKRml4ZWQgYnVnIHdoZXJlIHVzaW5nIEFsbEZyb21IZWFkZXIgZGlkbid0IHVzZSBiYXNlczw+IHdoZW4gZXhwb3J0aW5nIApoaWVyYXJjaGllcy4KCkZpeGVkIHRoZSBzdGF0aWNtZXRob2QgYnVnLgoKNSBKdWx5IDIwMDMKQ2hhbmdlZCBob3cgLS1tdWx0aXBsZSB3b3Jrczogbm93IGl0IGdlbmVyYXRlcyBvbmUgY3BwIGZpbGUgZm9yIGVhY2ggcHlzdGUKZmlsZSwgbWFrZWluZyBlYXNpZXIgdG8gaW50ZWdyYXRlIFB5c3RlIHdpdGggYnVpbGQgc3lzdGVtcy4KCjQgSnVseSAyMDAzCkFwcGxpZWQgcGF0Y2ggdGhhdCBzb2x2ZWQgYSBidWcgaW4gQ2xhc3NFeHBvcnRlciBhbmQgYWRkZWQgYSBkaXN0dXRpbHMgaW5zdGFsbApzY3JpcHQgKGluc3RhbGwvc2V0dXAucHkpLCBib3RoIGNvbnRyaWJ1dGVkIGJ5IFByYWJodSBSYW1hY2hhbmRyYW4uClRoYW5rcyBQcmFiaHUhCgoyIEp1bHkgMjAwMwpKaW0gV2lsc29uIGZvdW5kIGEgYnVnIHdoZXJlIHR5cGVzIGxpa2UgImNoYXIqKiIgd2VyZSBiZWluZyBpbnRlcnByZXRlZCBhcyAKImNoYXIqIi4gVGhhbmtzIEppbSEKCjE2IEp1bmUgMjAwMwpUaGFua3MgdG8gZGlzY3Vzc2lvbnMgd2l0aCBEYXZpZCBBYnJhaGFtcyBhbmQgUm9tYW4gU3Vsemh5aywgc29tZSBiZWhhdmlvdXJzCmhhdmUgY2hhbmdlZDoKCi0gSWYgeW91IGV4cG9ydCBhIGRlcml2ZWQgY2xhc3Mgd2l0aG91dCBleHBvcnRpbmcgaXRzIGJhc2UgY2xhc3NlcywgdGhlIGRlcml2ZWQKICBjbGFzcyB3aWxsIGV4cGxpY2l0bHkgZXhwb3J0IHRoZSBiYXNlcydzIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMuIEJlZm9yZSwgaWYKICB5b3Ugd2VyZSBpbnRlcmVzdGVkIGluIHRoZSBiYXNlcydzIG1ldGhvZHMsIHlvdSBoYWQgdG8gZXhwb3J0IHRoZSBiYXNlCiAgY2xhc3NlcyB0b28uCgotIEFkZGVkIGEgbmV3IGZ1bmN0aW9uLCBub19vdmVycmlkZS4gV2hlbiBhIG1lbWJlciBmdW5jdGlvbiBpcyBzcGVjaWZpZWQgYXMKICAibm9fb3ZlcnJpZGUiLCBubyB2aXJ0dWFsIHdyYXBwZXJzIGFyZSBnZW5lcmF0ZWQgZm9yIGl0LCBpbXByb3ZpbmcKICBwZXJmb3JtYW5jZSBhbmQgbGV0dGluZyB0aGUgY29kZSBtb3JlIGNsZWFuLgoKLSBUaGVyZSB3YXMgYSBidWcgaW4gd2hpY2ggdGhlIHBvbGljeSBvZiB2aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMgd2FzIGJlaW5nCiAgaWdub3JlZCAocGF0Y2ggYnkgUm9tYW4gU3Vsemh5aykuIAogIApUaGFua3MgYWdhaW4gdG8gUm9tYW4gU3Vsemh5ayBmb3IgdGhlIHBhdGNoZXMgYW5kIGRpc2N1c3Npb24gaW4gdGhlIGMrKy1zaWcuCgo0IEp1bmUgMjAwMwpNYWpvciBpbXByb3ZlbWVudHMgaW4gbWVtb3J5IHVzYWdlLgoKMyBKdW5lIDIwMDMKQXBwbGljZWQgYSBwYXRjaCBmcm9tIEdpdWxpbyBFdWxpc3NlIHRoYXQgYWxsb3dzIHVubmFtZWQgZW51bWVyYXRpb25zIHRvIGJlCmV4cG9ydGVkIHdpdGggYW4gQWxsRnJvbUhlYWRlciBjb25zdHJ1Y3QuIFRoYW5rcyBhIGxvdCBHaXVsaW8hCgoyIEp1bmUgMjAwMwpBZGRlZCBhIG5ldyBjb25zdHJ1Y3QsIGFkZF9tZXRob2QuIFNlZSBkb2N1bWVudGF0aW9uLgoKMjMgTWF5IDIwMDMKU3VwcG9ydCBmb3IgZ2xvYmFsIHZhcmlhYmxlcyBhZGRlZC4KVmFyaW91cyBidWcgZml4ZXMuCgowOCBNYXkgMjAwMwpGaXhlZCBidWcgd2hlcmUgaW4gYSBjZXJ0YWluIGNhc2VzIHRoZSBHQ0NYTUxQYXJzZXIgd291bGQgZW5kIHVwIHdpdGggbXVsdGlwbGUKZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGNsYXNzCgoyMiBBcHIgMjAwMwotIE5vdyBzaG93cyBhIHdhcm5pbmcgd2hlbiB0aGUgdXNlciB0cmllcyB0byBleHBvcnQgYSBmb3J3YXJkLWRlY2xhcmVkIGNsYXNzLgogIEZvcndhcmQtZGVjbGFyZWQgY2xhc3NlcyBhcmUgaWdub3JlZCBieSB0aGUgQWxsRnJvbUhlYWRlciBjb25zdHJ1Y3QuCi0gRml4ZWQgYSBidWcgd2hlcmUgY2xhc3NlcywgZnVuY3Rpb25zIGFuZCBlbnVtcyB3aGVyZSBiZWluZyBleHBvcnRlZCwgZXZlbiBpZgogIGV4Y2x1ZGVkIGZyb20gYSBBbGxGcm9tSGVhZGVyIGNvbnN0cnVjdC4KCjE2IEFwciAyMDAzCkFkZGVkIGEgbW9yZSBnZW5lcmljIChidXQgdWdseSkgY29kZSB0byBkZWNsYXJlIHRoZSBzbWFydCBwb2ludGVyIGNvbnZlcnRlcnMuCgowNyBBcHIgMjAwMwotIFJlbW92ZWQgdGhlIHdhcm5pbmdzIGFib3V0IGZvcndhcmQgZGVjbGFyYXRpb25zOiBpdCB3YXMgbm90IGFjY3VyYXRlIGVub3VnaC4KICBBbm90aGVyIHN0cmF0ZWd5IG11c3QgYmUgdGhvdWdodCBvZi4KLSBGaXhlZCBidWcgaW4gdGhlIC0tbXVsdGlwbGUgbW9kZSwgd2hlcmUgdGhlIG9yZGVyIG9mIHRoZSBjbGFzcyBpbnN0YW50aWF0aW9ucwogIGNvdWxkIGVuZCB1cCB3cm9uZy4KLSBMb3RzIG9mIGZpeGVzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBwb2ludGVkIG91dCBieSBEaXJrIEdlcnJpdHMuIFRoYW5rcyBEaXJrIQotIEZpeGVkIHN1cHBvcnQgZm9yIHRoZSByZXR1cm5fb3BhcXVlX3BvaW50ZXIgcG9saWN5ICh0aGUgc3VwcG9ydCBtYWNybyB3YXMgbm90CiAgYmVpbmcgZGVjbGFyZWQpLgoKCjA2IEFwciAyMDAzClN1cHBvcnQgZm9yIHRoZSBpbXByb3ZlZCBzdGF0aWMgZGF0YSBtZW1iZXJzIHN1cHBvcnQgb2YgQm9vc3QuUHl0aG9uLgoKMDUgQXByIDIwMDMKTmV3IG9wdGlvbiBmb3IgZ2VuZXJhdGluZyB0aGUgYmluZGluZ3M6IC0tbXVsdGlwbGUuCgowMiBBcHIgMjAwMwpGb3J3YXJkIGRlY2xhcmF0aW9ucyBhcmUgbm93IGRldGVjdGVkIGFuZCBhIHdhcm5pbmcgaXMgZ2VuZXJhdGVkLgoKMjQgTWFyIDIwMDMKRGVmYXVsdCBwb2xpY3kgZm9yIGZ1bmN0aW9ucy9tZXRob2RzIHRoYXQgcmV0dXJuIGNvbnN0IFQmIGlzIG5vdwpyZXR1cm5fdmFsdWVfcG9saWN5PGNvcHlfY29uc3RfcmVmZXJlbmNlPigpLgoKMjIgTWFyIDIwMDMKRXhwb3J0aW5nIHZpcnR1YWwgbWV0aG9kcyBvZiB0aGUgYmFzZSBjbGFzc2VzIGluIHRoZSBkZXJpdmVkIGNsYXNzZXMgdG9vLgoKMjEgTWFyIDIwMDMKQWRkZWQgbWFudWFsIHN1cHBvcnQgZm9yIGJvb3N0OjpzaGFyZWRfcHRyIGFuZCBzdGQ6OmF1dG9fcHRyIChzZWUgZG9jKS4KCjE5IE1hciAyMDAzIApBZGRlZCBzdXBwb3J0IGZvciBpbnQsIGRvdWJsZSwgZmxvYXQgYW5kIGxvbmcgb3BlcmF0b3JzIGFjdGluZyBhcyBleHBlY3RlZCBpbgpweXRob24uCgoxNCBNYXIgMjAwMyAKRml4ZWQgYnVnOiBXcmFwcGVycyBmb3IgcHJvdGVjdGVkIGFuZCB2aXJ0dWFsIG1ldGhvZHMgd2VyZSBub3QgYmVpbmcgZ2VuZXJhdGVkLgo=