Re: PEP 489: Multi-phase extension module initialization; version 5
Eric Snow <[email protected]> Tue, 19 May 2015 17:56:34 -0600
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CALFfu7CY3VL8VrSvSfHn=n+1i_KBusNkWpQ=nHkosKD4rGQhww@mail.gmail.com> |
T24gTW9uLCBNYXkgMTgsIDIwMTUgYXQgOTo1MSBQTSwgTmljayBDb2dobGFuIDxuY29naGxhbkBn bWFpbC5jb20+IHdyb3RlOgo+IE9uIDE5IE1heSAyMDE1IGF0IDEwOjA3LCBFcmljIFNub3cgPGVy aWNzbm93Y3VycmVudGx5QGdtYWlsLmNvbT4gd3JvdGU6CiAgW3NuaXBdCj4+IFdhcyB0aGVyZSBh bnkgY29uc2lkZXJhdGlvbiBtYWRlIGZvciBqdXN0IGlnbm9yaW5nIHVua25vd24gc2xvdCBJRHM/ Cj4+IE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHlvdSBoYXZlIGl0IHRoZSByaWdodCB3YXksIGJ1 dCBJIGNhbiBzdGlsbAo+PiBpbWFnaW5lIHVzZSBjYXNlcyBmb3IgY3VzdG9tIHNsb3RzIHRoYXQg UHlNb2R1bGVEZWZfSW5pdCB3b3VsZG4ndCBrbm93Cj4+IGFib3V0Lgo+Cj4gVGhlICJrbm93biBz bG90cyBvbmx5LCBhbGwgb3RoZXIgc2xvdCBJRHMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNl Igo+IHNsb3Qgc2VtYW50aWNzIHdlcmUgY29waWVkIGRpcmVjdGx5IGZyb20gUHlUeXBlX0Zyb21T cGVjIGluIFBFUCAzODQuCj4gU2luY2UgaXQncyBqdXN0IGEgbnVtZXJpYyBzbG90IElELCB5b3Un ZCBydW4gYSBoaWdoIHJpc2sgb2YgY29uZmxpY3RzCj4gaWYgeW91IGFsbG93ZWQgZm9yIGN1c3Rv bSBleHRlbnNpb25zLgo+Cj4gSWYgZm9sa3Mgd2FudCB0byBkbyBtb3JlIGNsZXZlciB0aGluZ3Ms IHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0ZQo+IG9yIGV4ZWMgc2xvdCB0byBzdGFzaCB0 aGVtIG9uIHRoZSBtb2R1bGUgb2JqZWN0LCByYXRoZXIgdGhhbiBzdG9yaW5nCj4gdGhlbSBpbiB0 aGUgbW9kdWxlIGRlZmluaXRpb24uCgpNYWtlcyBzZW5zZS4gIFRoaXMgZG9lcyByZW1pbmQgbWUg b2Ygc29tZXRoaW5nIEkgd2FudGVkIHRvIGFzay4gIFdvdWxkCml0IG1ha2Ugc2Vuc2UgdG8gbGV2 ZXJhZ2UgTW9kdWxlU3BlYy5sb2FkZXJfc3RhdGU/ICBJZiBJIHJlY2FsbApjb3JyZWN0bHksIHdl IGFkZGVkIGxvYWRlcl9zdGF0ZSB3aXRoIGV4dGVuc2lvbiBtb2R1bGVzIGluIG1pbmQuCgo+Cj4+ PiBUaGUgUHlNb2R1bGVEZWYgb2JqZWN0IG11c3QgYmUgYXZhaWxhYmxlIGZvciB0aGUgbGlmZXRp bWUgb2YgdGhlIG1vZHVsZQo+Pj4gY3JlYXRlZAo+Pj4gZnJvbSBpdCDigJMgdXN1YWxseSwgaXQg d2lsbCBiZSBkZWNsYXJlZCBzdGF0aWNhbGx5Lgo+Pgo+PiBIb3cgZWFzaWx5IHdpbGwgdGhpcyBi ZSBhIHNvdXJjZSBvZiBteXN0ZXJpb3VzIGVycm9ycy1hdC1hLWRpc3RhbmNlPwo+Cj4gSXQgc2hv dWxkbid0IGJlIGFueSB3b3JzZSB0aGFuIHN0YXRpYyB0eXBlIGRlZmluaXRpb25zLCBhbmQgbm9y bWFsCj4gcmVmZXJlbmNlIGNvdW50aW5nIHNlbWFudGljcyBzaG91bGQga2VlcCBpdCBhbGl2ZSBy ZWdhcmRsZXNzLgoKR290IGl0LgoKPgo+Pj4gW3NuaXBdCj4+PiBFeHRlbnNpb24gYXV0aG9ycyBh cmUgYWR2aXNlZCB0byBrZWVwIFB5X21vZF9jcmVhdGUgbWluaW1hbCwgYW4gaW4KPj4+IHBhcnRp Y3VsYXIKPj4+IHRvIG5vdCBjYWxsIHVzZXIgY29kZSBmcm9tIGl0Lgo+Pgo+PiBUaGlzIGlzIGEg cHJldHR5IGltcG9ydGFudCBwb2ludCBhcyB3ZWxsLiAgV2UnbGwgbmVlZCB0byBtYWtlIHN1cmUK Pj4gdGhpcyBpcyBzdWZmaWNpZW50bHkgY2xlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uICBXb3Vs ZCBpdCBtYWtlIHNlbnNlCj4+IHRvIHByb3ZpZGUgaGVscGVycyBmb3IgY29tbW9uIGNhc2VzLCB0 byBlbmNvdXJhZ2UgZXh0ZW5zaW9uIGF1dGhvcnMgdG8KPj4ga2VlcCB0aGUgY3JlYXRlIGZ1bmN0 aW9uIG1pbmltYWw/Cj4KPiBUaGUgbWFpbiBlbmNvdXJhZ2VtZW50IGlzIHRvIG5vdCBoYW5kY29k ZSB5b3VyIGV4dGVuc2lvbiBtb2R1bGVzIGF0Cj4gYWxsLCBhbmQgbGV0IHNvbWV0aGluZyBsaWtl IEN5dGhvbiBvciBTV0lHIHRha2UgY2FyZSBvZiB0aGUKPiBib2lsZXJwbGF0ZSA6KQoKSGV5LCBJ IHRyaWVkIHRvIG1ha2Ugc29tZXRoaW5nIGhhcHBlbiBvdmVyIG9uIHB5dGhvbi1pZGVhcyEgOikg IFNvbWUKZm9sa3MganVzdCBkb24ndCB3YW50IHRvIGdvIGZhciBlbm91Z2guCgogIFtzbmlwXQo+ PiBDb3VsZCB5b3UgZWxhYm9yYXRlPyAgV2hhdCBhcmUgdGhvc2UgdXNlIGNhc2VzIGFuZCB3aHkg d291bGQKPj4gUHlfbW9kX2NyZWF0ZSBiZSBiZXR0ZXI/Cj4KPiBSYXRoZXIgdGhhbiByZXBsYWNp bmcgdGhlIGltcGxpY2l0bHkgY3JlYXRlZCBub3JtYWwgbW9kdWxlIGR1cmluZwo+IFB5X21vZF9l eGVjICh3aGljaCBpcyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIHRvIFB5dGhvbiBtb2R1bGVz KSwKPiBQRVAgNDg5IGxldHMgeW91IGRlZmluZSB0aGUgUHlfbW9kX2NyZWF0ZSBzbG90IHRvIG92 ZXJyaWRlIHRoZSBtb2R1bGUKPiBvYmplY3QgY3JlYXRpb24gZGlyZWN0bHkuCj4KPiBPdXRzaWRl IGNvbnZlcnNpb24gb2YgYSBQeXRob24gbW9kdWxlIHRoYXQgbWFuaXB1bGF0ZXMgc3lzLm1vZHVs ZXMgdG8KPiBhbiBleHRlbnNpb24gbW9kdWxlIHdpdGggQ3l0aG9uLCB0aGVyZSdzIG5vIHJlYWwg cmVhc29uIHRvIHVzZSB0aGUKPiAicmVwbGFjaW5nIHlvdXJzZWxmIGluIHN5cy5tb2R1bGVzIiBv cHRpb24gb3ZlciB1c2luZyBQeV9tb2RfY3JlYXRlCj4gZGlyZWN0bHkuCgpBaCwgSSBnb3QgaXQu ICBXZSBqdXN0IHdhbnQgdG8gZW5zdXJlIHdlIG1hdGNoIFB5dGhvbiBtb2R1bGUgYmVoYXZpb3Is CndoZXJlIHRoZXJlIGlzIG5vIG1vZHVsZS1kZWZpbmVkIGNyZWF0ZSBzdGVwLiAgVGhpcyB3b3Vs ZCBzZWVtIGV2ZW4KbW9yZSBpbXBvcnRhbnQgd2l0aCB0b29scyBsaWtlIEN5dGhvbiB0aGF0IGNv bnZlcnQgUHl0aG9uIG1vZHVsZXMgaW50bwpDIGV4dGVuc2lvbnMsIGV2ZW4gaWYgdGhlIGFwcHJv cHJpYXRlIHNvbHV0aW9uIGZvciBhIEMgZXh0ZW5zaW9uCm1vZHVsZSB3b3VsZCBiZSBhIGRpZmZl cmVudCBhcHByb2FjaCAoZS5nLiBQeV9tb2RfY3JlYXRlKS4KCiAgW3NuaXBdCj4+IEdpdmVuIHlv dXIgZXhhbXBsZSBiZWxvdywgInNob3VsZCBub3QiIHNlZW1zIGEgYml0IHN0cm9uZyB0byBtZS4g IEluCj4+IGZhY3QsIHdoYXQgYXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBh cHByb2FjaCBmcm9tIHRoZQo+PiBleGFtcGxlPwo+Cj4gQWdyZWVkLCAic2hvdWxkIG5vdCIgaXMg cHJvYmFibHkgdG9vIHN0cm9uZyBoZXJlLiBPbiB0aGUgb3RoZXIgaGFuZCwKPiBwcmVzZXJ2aW5n IGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMgaW4gYSBtb2R1bGUgdGhh dAo+IGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVseSBvbiBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlv biBpcyBsaWtlbHkgdG8gYmUKPiBhIG1hdHRlciBvZiAiZ3JhY2VmdWwgZGVncmFkYXRpb24iLCBy YXRoZXIgdGhhbiBiZWluZyBhYmxlIHRvCj4gcmVwcm9kdWNlIGNvbXBhcmFibGUgZnVuY3Rpb25h bGl0eSAod2hpY2ggSSBiZWxpZXZlIG1heSBoYXZlIGJlZW4gdGhlCj4gcG9pbnQgUGV0ciB3YXMg dHJ5aW5nIHRvIGNvbnZleSkuCgpVbmRlcnN0b29kLiAgVGhpcyBzZWN0aW9uIGNvdWxkIHN0YW5k IHRvIGJlIGNsYXJpZmllZCB0aGVuLgoKPgo+IEkgZXhwZWN0IEN5dGhvbiBhbmQgU1dJRyBtYXkg YmUgYWJsZSB0byBtYW5hZ2UgdGhhdCB0aHJvdWdoCj4gYXBwcm9wcmlhdGUgdXNlIG9mICNpZmRl ZidzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IGRvaW5nIGl0IGJ5Cj4gaGFuZCBpcyBsaWtl bHkgdG8gYmUgcGFpbmZ1bCwgaGVuY2UgdGhlIHBvdGVudGlhbCBiZW5lZml0cyBvZiBqdXN0Cj4g c3RpY2tpbmcgd2l0aCBzaW5nbGUtcGhhc2UgaW5pdGlhbGlzYXRpb24gZm9yIHRoZSB0aW1lIGJl aW5nLgoKSG1tLiAgVGhlIGV4YW1wbGUgbWFkZSBpdCBsb29rIHJlbGF0aXZlbHkgc3RyYWlnaHQt Zm9yd2FyZC4KUmVnYXJkbGVzcywgaXQncyBub3QgYSBiaWcgZGVhbC4KCj4KPj4+IFtzbmlwXQo+ Pj4KPj4+IFN1YmludGVycHJldGVycyBhbmQgSW50ZXJwcmV0ZXIgUmVsb2FkaW5nCj4+PiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IEV4dGVuc2lvbnMg dXNpbmcgdGhlIG5ldyBpbml0aWFsaXphdGlvbiBzY2hlbWUgYXJlIGV4cGVjdGVkIHRvIHN1cHBv cnQKPj4+IHN1YmludGVycHJldGVycyBhbmQgbXVsdGlwbGUgUHlfSW5pdGlhbGl6ZS9QeV9GaW5h bGl6ZSBjeWNsZXMgY29ycmVjdGx5Lgo+Pgo+PiBQcmVzdW1hYmx5IHRoaXMgc3VwcG9ydCBpcyBl eHBsaWNpdGx5IGFuZCBjb21wbGV0ZWx5IGRlZmluZWQgaW4gdGhlCj4+IHN1YnNlcXVlbnQgc2Vu dGVuY2VzLiAgSXMgaXQgcmVhbGx5IGp1c3Qga2VlcGluZyAiaGlkZGVuIiBtb2R1bGUgc3RhdGUK Pj4gZW5jYXBzdWxhdGVkIG9uIHRoZSBtb2R1bGUgb2JqZWN0PyAgSWYgbm90IHRoZW4gaXQgbWF5 IG1ha2Ugc2Vuc2UgdG8KPj4gZW51bWVyYXRlIHRoZSByZXF1aXJlbWVudHMgYmV0dGVyIGZvciB0 aGUgc2FrZSBvZiBleHRlbnNpb24gbW9kdWxlCj4+IGF1dGhvcnMuCj4KPiBJJ2QgYWN0dWFsbHkg bGlrZSB0byBoYXZlIGEgYmV0dGVyIHdheSBvZiBkb2luZyBzY2VuYXJpbyB0ZXN0aW5nIGZvcgo+ IGV4dGVuc2lvbiBtb2R1bGVzIChzdWJpbnRlcnByZXRlcnMsIG11bHRpcGxlIGluaXRpYWxpemUv ZmluYWxpemUKPiBjeWNsZXMsIGZyZWV6aW5nKSwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIFBFUCBp cyB0aGUgYmVzdCBwbGFjZSB0bwo+IGRlZmluZSB0aGF0LiBQZXJoYXBzIHdlIGNvdWxkIGRvIGEg UHlQSSBwcm9qZWN0IHRoYXQgd2FzIGEgdG94LWJhc2VkCj4gdGVzdCBiYXR0ZXJ5IGZvciB0aGlz IGtpbmQgb2YgdGhpbmc/CgpJbnRlcmVzdGluZyBpZGVhLiAgSSB0aGluayB0aGF0IGEgbG90IG9m IGZvbGtzIHdvdWxkIGZpbmQgdGhhdCB1c2VmdWwuCkl0IGZlZWxzIGEgYml0IGxpa2Ugc29tZSBv ZiB0aGUgd29yayBEYXZlIE1hbGNvbG0gZGlkIHdpdGggdmFsaWRhdGluZwpleHRlbnNpb24gbW9k dWxlcy4KCj4KPj4+IFRoZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gbWFrZSB0aGlzIGVhc3ks IGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVkCj4+PiBvbiB0aGUgcGFydCBvZiB0aGUgZXh0ZW5z aW9uIGF1dGhvci4KPj4+IE5vIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMsIG1ldGhvZHMsIG9yIGlu c3RhbmNlcyBtYXkgbGVhayB0byBkaWZmZXJlbnQKPj4+IGludGVycHJldGVycy4KPj4+IFRvIGFj aGlldmUgdGhpcywgYWxsIG1vZHVsZS1sZXZlbCBzdGF0ZSBzaG91bGQgYmUga2VwdCBpbiBlaXRo ZXIgdGhlIG1vZHVsZQo+Pj4gZGljdCwgb3IgaW4gdGhlIG1vZHVsZSBvYmplY3QncyBzdG9yYWdl IHJlYWNoYWJsZSBieSBQeU1vZHVsZV9HZXRTdGF0ZS4KPj4KPj4gSXMgdGhpcyBwcm9ncmFtbWF0 aWNhbGx5IGVuZm9yY2VhYmxlPyAgSXMgdGhlcmUgYW55IG1lY2hhbmlzbSBmb3IKPj4gZWFzaWx5 IGNvcHlpbmcgbW9kdWxlIHN0YXRlPyAgSG93IGFib3V0IHNoYXJpbmcgc29tZSBzdGF0ZSBiZXR3 ZWVuCj4+IHN1YmludGVycHJldGVycz8gIEhvdyBtdWNoIHJvb20gaXMgdGhlcmUgZm9yIGxldHRp bmcgZXh0ZW5zaW9uIG1vZHVsZQo+PiBhdXRob3JzIGRlZmluZSBob3cgdGhlaXIgbW9kdWxlIGJl aGF2ZXMgYWNyb3NzIG11bHRpcGxlIGludGVycHJldGVycwo+PiBvciBhY3Jvc3MgbXVsdGlwbGUg SW5pdGlhbGl6ZS9GaW5hbGl6ZSBjeWNsZXM/Cj4KPiBJdCdzIG5vdCBwcm9ncmFtbWF0aWNhbGx5 IGVuZm9yY2FibGUsIGhlbmNlIHRoZSBpZGVhIGFib3ZlIG9mIGZpbmRpbmcKPiBhIHdheSB0byBt YWtlIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIHRlc3QgdGhlaXIgZXh0ZW5zaW9uIG1vZHVsZXMg YXJlCj4gaW1wb3J0YWJsZSBhY3Jvc3MgbXVsdGlwbGUgUHl0aG9uIHZlcnNpb25zIGFuZCBkZXBs b3ltZW50IHNjZW5hcmlvcy4KClRoYXQncyB3aGF0IEkgZmlndXJlZC4KCj4KPj4+IEFzIGEgcnVs ZSBvZiB0aHVtYiwgbW9kdWxlcyB0aGF0IHJlbHkgb24gUHlTdGF0ZV9GaW5kTW9kdWxlIGFyZSwg YXQgdGhlCj4+PiBtb21lbnQsCj4+PiBub3QgZ29vZCBjYW5kaWRhdGVzIGZvciBwb3J0aW5nIHRv IHRoZSBuZXcgbWVjaGFuaXNtLgo+Pgo+PiBBcmUgdGhlcmUgYW55IHBsYW5zIGZvciBhIGZvbGxv dy11cCBlZmZvcnQgdG8gaGVscCB3aXRoIHRoaXMgY2FzZT8KPgo+IFRoZSBwcm9ibGVtIGhlcmUg aXMgdGhhdCB0aGUgUEVQIDMxMjEgbW9kdWxlIHN0YXRlIGFwcHJvYWNoIHByb3ZpZGVzCj4gc3Rv cmFnZSBvbiBhICpwZXItaW50ZXJwcmV0ZXIqIGJhc2lzLCB0aGF0IGlzIHRoZW4gc2hhcmVkIGFt b25nc3QgYWxsCj4gbW9kdWxlIGluc3RhbmNlcyBjcmVhdGVkIGZyb20gYSBnaXZlbiBtb2R1bGUg ZGVmaW5pdGlvbi4KCllvdSBtZWFuIGEgZm9ybSBvZiBpbnRlcnByZXRlci1sb2NhbCBzdG9yYWdl PyAgQWxzbywgdGhlIG1vZHVsZQpkZWZpbml0aW9uIGlzIGVmZmVjdGl2ZWx5IGdsb2JhbCByaWdo dD8KCj4KPiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVj dCAoc2VlCj4gaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS9mYzJlZWQ5ZmMyZDAv UHl0aG9uL2ltcG9ydC5jI2w1MTgpCj4gcmVpbml0aWFsaXNlcyBhbiBleHRlbnNpb24gbW9kdWxl LCB0aGUgc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3bwo+IGluc3RhbmNlcy4gV2hlbiBQ RVAgMzEyMSB3YXMgd3JpdHRlbiwgdGhpcyB3YXMgbm90IHNlZW4gYXMgYSBwcm9ibGVtLAo+IHNp bmNlIHRoZSBleHBlY3RhdGlvbiB3YXMgdGhhdCB0aGUgYmVoYXZpb3VyIHdvdWxkIG9ubHkgYmUg dHJpZ2dlcmVkCj4gYnkgbXVsdGlwbGUgaW50ZXJwcmV0ZXIgbGV2ZWwgaW5pdGlhbGl6ZS9maW5h bGl6ZSBjeWNsZXMuCj4KPiBPbmUga2V5IHNjZW5hcmlvIHdlIG1pc3NlZCBhdCB0aGUgdGltZSB3 YXMgImRlbGV0aW5nIGFuIGV4dGVuc2lvbgo+IG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIGFuZCBp bXBvcnRpbmcgaXQgYSBzZWNvbmQgdGltZSwgd2hpbGUKPiByZXRhaW5pbmcgYSBsb2NhbCByZWZl cmVuY2UgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIi4gVW5kZXIgUEVQIDMxMjEsCj4gdGhlIHR3byBp bnN0YW5jZXMgY29sbGlkZSBvbiB0aGVpciBzdGF0ZSBzdG9yYWdlLCBhcyB3ZSBoYXZlIHR3bwo+ IHNpbXVsdGFuZW91c2x5IGV4aXN0aW5nIG1vZHVsZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIHNh bWUgaW50ZXJwcmV0ZXIKPiBmcm9tIHRoZSBzYW1lIG1vZHVsZSBkZWZpbml0aW9uLiBQRVAgNDg5 IHdvdWxkIGluaGVyaXQgdGhhdCBzYW1lCj4gcHJvYmxlbSBpZiB5b3UgdHJpZWQgdG8gdXNlIGl0 IHdpdGggdGhlIFB5U3RhdGVfKiBBUElzLCBzbyBpdCBzaW1wbHkKPiBkb2Vzbid0IGFsbG93IHRo ZW0gYXQgYWxsLiAoRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgUEVQIGFsbG93ZWQgaXQKPiB3aXRo IGFuICJFWFBPUlRfU0lOR0xFVE9OIiBzbG90IHRoYXQgd291bGQgZGlzYWxsb3cgcmVpbXBvcnRp bmcKPiBlbnRpcmVseSwgd2hpY2ggd2UgdG9vayBvdXQgaW4gZmF2b3VyIG9mICJqdXN0IGtlZXAg dXNpbmcgdGhlIGV4aXN0aW5nCj4gaW5pdGlhbGlzYXRpb24gbW9kZWwgaW4gdGhvc2UgY2FzZXMg Zm9yIHRoZSB0aW1lIGJlaW5nIikKClRoYXQgc2VlbXMgcmVhc29uYWJsZS4KCj4KPiBGb3IgcHVy ZSBQeXRob24gY29kZSwgd2UgZG9uJ3QgaGF2ZSB0aGlzIHByb2JsZW0sIHNpbmNlIHRoZQo+IGlu dGVycHJldGVyIHRha2VzIGNhcmUgb2YgcHJvdmlkaW5nIGEgcHJvcGVybHkgc2NvcGVkIGdsb2Jh bHMoKQo+IHJlZmVyZW5jZSB0byAqYWxsKiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGF0IG1vZHVs ZSwgcmVnYXJkbGVzcyBvZgo+IHdoZXRoZXIgdGhleSdyZSBtb2R1bGUgbGV2ZWwgZnVuY3Rpb25z IG9yIG1ldGhvZCBkZWZpbml0aW9ucyBvbiBhCj4gY2xhc3MuIEF0IHRoZSBDIGxldmVsLCB3ZSBk b24ndCBoYXZlIHRoYXQsIGFzIG9ubHkgbW9kdWxlIGxldmVsCj4gZnVuY3Rpb25zIGdldCBhIG1v ZHVsZSByZWZlcmVuY2UgcGFzc2VkIGluIC0gbWV0aG9kcyBvbmx5IGdldCBhCj4gcmVmZXJlbmNl IHRvIHRoZWlyIGNsYXNzIGluc3RhbmNlLCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvIHRoZSBtb2R1 bGUKPiBnbG9iYWxzLCBhbmQgZGVsYXllZCBjYWxsYmFja3MgY2FuIGJlIGEgcHJvYmxlbSBhcyB3 ZWxsLgoKWXVjay4gIElzIHRoaXMgc29tZXRoaW5nIHdlIGNvdWxkIGZpeD8gIElzIF9fbW9kdWxl X18gbm90IHNldCBvbiBhbGwgZnVuY3Rpb25zPwoKPgo+IFRoZSBiZXN0IGltcHJvdmVkIEFQSSB3 ZSBjb3VsZCBsaWtlbHkgb2ZmZXIgYXQgdGhpcyBwb2ludCBpcyBhCj4gY29udmVuaWVuY2UgQVBJ IGZvciBsb29raW5nIHVwIGEgbW9kdWxlIGluICpzeXMubW9kdWxlcyogYmFzZWQgb24gYQo+IFB5 TW9kdWxlRGVmIGluc3RhbmNlLCBhbmQgdXBkYXRpbmcgUEVQIDQ4OSB0byB3cml0ZSB0aGUgYXMt aW1wb3J0ZWQKPiBtb2R1bGUgbmFtZSBpbnRvIHRoZSByZXR1cm5lZCBQeU1vZHVsZURlZiBzdHJ1 Y3R1cmUuIFRoYXQncyBwcm9iYWJseQo+IG5vdCBhIGJhZCB3YXkgdG8gZ28sIGdpdmVuIHRoYXQg UEVQIDQ4OSBjdXJyZW50bHkgKmlnbm9yZXMqIHRoZSBtX25hbWUKPiBzbG90IC0gZmxpcHBpbmcg aXQgYXJvdW5kIHRvIGJlIGEgKndyaXRhYmxlKiBzbG90IHdvdWxkIGJlIGEgd2F5IHRvCj4gbGV0 IGV4dGVuc2lvbiBtb2R1bGVzIGtub3cgZHluYW1pY2FsbHkgaG93IHRvIGxvb2sgdGhlbXNlbHZl cyB1cCBpbgo+IHN5cy5tb2R1bGVzLgoKVGhhdCBzb3VuZHMgdXNlZnVsLgoKPgo+IFRoZSBuZXcg bG9va3VwIEFQSSB3b3VsZCB0aGVuIGJlIHRoZSBtb3JhbCBlcXVpdmFsZW50IG9mIFB5dGhvbiBj b2RlCj4gZG9pbmcgIm1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXSIuIFdpdGggdGhpcyBhcHBy b2FjaCwgYWN0aXZlbHkKPiAqdXNpbmcqIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gYSBnaXZlbiBt b2R1bGUgYXQgdGhlIHNhbWUgdGltZSB3b3VsZAo+IHN0aWxsIGJyZWFrIChzaW5jZSB5b3UnbGwg YWx3YXlzIGdldCB0aGUgbW9kdWxlIGN1cnJlbnRseSBpbgo+IHN5cy5tb2R1bGVzLCBldmVuIGlm IHRoYXQgaXNuJ3QgdGhlIG9uZSB5b3UgZXhwZWN0ZWQpLCBidXQgdGhlCj4gInNhdmUtYW5kLXJl c3RvcmUiIG1vZGVsIG5lZWRlZCBmb3IgY2VydGFpbiBraW5kcyBvZiB0ZXN0aW5nIGFuZAo+IHBv dGVudGlhbGx5IG90aGVyIHNjZW5hcmlvcyB3b3VsZCB3b3JrIGNvcnJlY3RseS4KClJpZ2h0LCB0 aG91Z2ggSSB3b3VsZCBleHBlY3QgdGhlcmUgdG8gYmUgdHJvdWJsZSBpZiB0aGUgcmVwbGFjZW1l bnQKbW9kdWxlIGRpZG4ndCBzdXBwb3J0IHRoZSBtb2R1bGUgc3RhdGUgQVBJIGluIHRoZSBleHBl Y3RlZCB3YXkuCgo+Cj4+PiBNb2R1bGUgUmVsb2FkaW5nCj4+PiAtLS0tLS0tLS0tLS0tLS0tCj4+ Pgo+Pj4gUmVsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgdXNpbmcgaW1wb3J0bGliLnJlbG9h ZCgpIHdpbGwgY29udGludWUgdG8KPj4+IGhhdmUgbm8gZWZmZWN0LCBleGNlcHQgcmUtc2V0dGlu ZyBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzLgo+Pj4KPj4+IER1ZSB0byBsaW1pdGF0aW9ucyBp biBzaGFyZWQgbGlicmFyeSBsb2FkaW5nIChib3RoIGRsb3BlbiBvbiBQT1NJWCBhbmQKPj4+IExv YWRNb2R1bGVFeCBvbiBXaW5kb3dzKSwgaXQgaXMgbm90IGdlbmVyYWxseSBwb3NzaWJsZSB0byBs b2FkCj4+PiBhIG1vZGlmaWVkIGxpYnJhcnkgYWZ0ZXIgaXQgaGFzIGNoYW5nZWQgb24gZGlzay4K Pj4+Cj4+PiBVc2UgY2FzZXMgZm9yIHJlbG9hZGluZyBvdGhlciB0aGFuIHRyeWluZyBvdXQgYSBu ZXcgdmVyc2lvbiBvZiB0aGUgbW9kdWxlCj4+PiBhcmUgdG9vIHJhcmUgdG8gcmVxdWlyZSBhbGwg bW9kdWxlIGF1dGhvcnMgdG8ga2VlcCByZWxvYWRpbmcgaW4gbWluZC4KPj4+IElmIHJlbG9hZC1s aWtlIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkLCBhdXRob3JzIGNhbiBleHBvcnQgYSBkZWRpY2F0 ZWQKPj4+IGZ1bmN0aW9uIGZvciBpdC4KPj4KPj4gS2VlcCBpbiBtaW5kIHRoZSBzZW1hbnRpY3Mg b2YgcmVsb2FkIGZvciBwdXJlIFB5dGhvbiBtb2R1bGVzLiAgVGhlCj4+IG1vZHVsZSBpcyBleGVj dXRlZCBpbnRvIHRoZSBleGlzdGluZyBuYW1lc3BhY2UsIG92ZXJ3cml0aW5nIHRoZSBsb2FkZWQK Pj4gbmFtZXNwYWNlIGJ1dCBsZWF2aW5nIG5vbi1jb2xsaWRpbmcgYXR0cmlidXRlcyBhbG9uZS4g IFdoaWxlIHRoZQo+PiBzZW1hbnRpY3MgZm9yIHJlbG9hZGluZyBhbiBleHRlbnNpb24vYnVpbHRp bi9mcm96ZW4gbW9kdWxlIGFyZQo+PiBjdXJyZW50bHkgYmFzaWMgKGkuZS4gYSBuby1vcCksIHRo ZXJlIG1heSB3ZWxsIGJlIHJvb20gdG8gc3VwcG9ydAo+PiByZWxvYWQgYmVoYXZpb3IgdGhhdCBt aXJyb3JzIHRoYXQgb2YgcHVyZSBQeXRob24gbW9kdWxlcyB3aXRob3V0Cj4+IG5lZWRpbmcgdG8g cmVsb2FkIGFuIFNPIGZpbGUuICBJIHdvdWxkIGV4cGVjdCBlaXRoZXIgdGhlIGJlaGF2aW9yIG9m Cj4+IGV4ZWMgdG8gZ2V0IHJlcGVhdGVkICh0cmlja3kgZHVlIHRvICJoaWRkZW4iIG1vZHVsZSBz dGF0ZT8pIG9yIGZvcgo+PiB0aGVyZSB0byBiZSBhICJyZWxvYWQiIHNsb3QgdGhhdCB3b3VsZCBt aXJyb3IgUHlfbW9kX2V4ZWMuCj4KPiBXZSBjb25zaWRlcmVkIHRoaXMsIGFuZCBkZWNpZGVkIGl0 IHdhcyBmYWlybHkgcG9pbnRsZXNzLCBzaW5jZSB5b3UKPiBjYW4ndCBtb2RpZnkgdGhlIGV4dGVu c2lvbiBtb2R1bGUgY29kZS4gVGhlIG9uZSBjYXNlIEkgc2VlIHdoZXJlIGl0Cj4gcG90ZW50aWFs bHkgbWFrZXMgc2Vuc2UgaXMgYSAidHJhbnNpdGl2ZSByZWxvYWQiLCB3aGVyZSB0aGUgZXh0ZW5z aW9uCj4gbW9kdWxlIHJldHJpZXZlcyBhbmQgY2FjaGVzIGF0dHJpYnV0ZXMgZnJvbSBhbm90aGVy IHB1cmUgUHl0aG9uIG1vZHVsZQo+IGF0IGltcG9ydCB0aW1lLCBhbmQgdGhhdCBleHRlbnNpb24g bW9kdWxlIGhhcyBiZWVuIHJlbG9hZGVkLgoKVGhlIHJlbG9hZCBhcHByb2FjaCBzcGVjaWZpZWQg aW4gdGhlIFBFUCBzZWVtcyBzYXRpc2ZhY3RvcnkgYXQgdGhpcyBwb2ludC4KCj4KPiBJdCBtYXkg YWxzbyBtYWtlIGEgZGlmZmVyZW5jZSBpbiB0aGUgY29udGV4dCBvZiB1dGlsaXRpZXMgbGlrZQo+ IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0 LmltcG9ydF9mcmVzaF9tb2R1bGUsCj4gd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGUgaW1wb3J0IHN5 c3RlbSBzdGF0ZSB0byBjb250cm9sIGhvdyBjb25kaXRpb25hbAo+IGltcG9ydHMgYXJlIGhhbmRs ZWQuCj4KPj4gQXQgdGhlIHNhbWUgdGltZSwgb25lIG1heSBhcmd1ZSB0aGF0IHJlbG9hZGluZyBt b2R1bGVzIGlzIG5vdAo+PiBzb21ldGhpbmcgdG8gZW5jb3VyYWdlLiA6KQo+Cj4gVGhlcmUncyBh IHJlYXNvbiBpbXBvcnRfZnJlc2hfbW9kdWxlIGhhcyBuZXZlciBtYWRlIGl0IG91dCBvZiB0ZXN0 LnN1cHBvcnQgOikKPgo+Pj4gTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeQo+Pj4gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4KPj4+IFRvIHN1cHBvcnQgbXVsdGlwbGUg UHl0aG9uIG1vZHVsZXMgaW4gb25lIHNoYXJlZCBsaWJyYXJ5LCB0aGUgbGlicmFyeSBjYW4KPj4+ IGV4cG9ydCBhZGRpdGlvbmFsIFB5SW5pdCogc3ltYm9scyBiZXNpZGVzIHRoZSBvbmUgdGhhdCBj b3JyZXNwb25kcwo+Pj4gdG8gdGhlIGxpYnJhcnkncyBmaWxlbmFtZS4KPj4+Cj4+PiBOb3RlIHRo YXQgdGhpcyBtZWNoYW5pc20gY2FuIGN1cnJlbnRseSBvbmx5IGJlIHVzZWQgdG8gKmxvYWQqIGV4 dHJhIG1vZHVsZXMsCj4+PiBidXQgbm90IHRvICpmaW5kKiB0aGVtLgo+Pgo+PiBXaGF0IGRvIHlv dSBtZWFuIGJ5ICJjdXJyZW50bHkiPwo+Cj4gSXQncyBhIGxpbWl0YXRpb24gb2YgdGhlIHdheSB0 aGUgZXhpc3RpbmcgZmluZGVycyB3b3JrLCByYXRoZXIgdGhhbiBhbgo+IGluaGVyZW50IGxpbWl0 YXRpb24gb2YgdGhlIGltcG9ydCBzeXN0ZW0gYXMgYSB3aG9sZS4KCkFoLiAgSXQgc291bmRlZCBs aWtlIHRoZSBQRVAgd2FzIGxlYWRpbmcgdG8gc29tZSBmdXR1cmUgc29sdXRpb24gdG8KcmVzb2x2 ZSB0aGF0LgoKPgo+PiBJdCBtYXkgYWxzbyBiZSB3b3J0aCB0eWluZyB0aGUgYWJvdmUgc3RhdGVt ZW50IHdpdGggdGhlIGZvbGxvd2luZwo+PiB0ZXh0LCBzaW5jZSB0aGUgZm9sbG93aW5nIGFwcGVh cnMgdG8gYmUgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRvCj4+IGFkZHJlc3MgdGhlICJmaW5kZXIi IGNhdmVhdC4KPgo+IEFncmVlZCB0aGF0IHRoaXMgY291bGQgYmUgY2xlYXJlci4KPgo+Pj4gVGVz dGluZyBhbmQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbnMKPj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4+Pgo+Pj4gRm9yIHRlc3RpbmcsIGEgbmV3IGJ1aWx0LWluIG1vZHVs ZSBgYF90ZXN0bXVsdGlwaGFzZWBgIHdpbGwgYmUgY3JlYXRlZC4KPj4+IFRoZSBsaWJyYXJ5IHdp bGwgZXhwb3J0IHNldmVyYWwgYWRkaXRpb25hbCBtb2R1bGVzIHVzaW5nIHRoZSBtZWNoYW5pc20K Pj4+IGRlc2NyaWJlZCBpbiAiTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeSIuCj4+Pgo+ Pj4gVGhlIGBgX3Rlc3RjYXBpYGAgbW9kdWxlIHdpbGwgYmUgdW5jaGFuZ2VkLCBhbmQgd2lsbCB1 c2Ugc2luZ2xlLXBoYXNlCj4+PiBpbml0aWFsaXphdGlvbiBpbmRlZmluaXRlbHkgKG9yIHVudGls IGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpLgo+Pj4KPj4+IFRoZSBgYGFycmF5YGAgYW5kIGBg eHgqYGAgbW9kdWxlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1c2UgbXVsdGktcGhhc2UKPj4+IGlu aXRpYWxpemF0aW9uIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCj4+Cj4+ IFdoYXQgZG8geW91IG1lYW4gYnkgImluaXRpYWwgaW1wbGVtZW50YXRpb24iPyAgV2lsbCBpdCBi ZSBkb25lCj4+IGRpZmZlcmVudGx5IGluIGEgbGF0ZXIgaW1wbGVtZW50YXRpb24/Cj4KPiBUaGVz ZSBtb2R1bGVzIHdpbGwgYmUgY29udmVydGVkIGluIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRp b24sIG90aGVyCj4gbW9kdWxlcyB3b24ndCBiZS4KClRoYXQncyB3aGF0IEkgdGhvdWdodC4gIFRo ZSB1c2Ugb2YgdGhlIHdvcmQgImluaXRpYWwiIHRocmV3IG1lIG9mZi4KCj4KPj4+IFN0cmluZyBj b25zdGFudHMgYW5kIHR5cGVzIGNhbiBiZSBoYW5kbGVkIHNpbWlsYXJseS4KPj4+IChOb3RlIHRo YXQgbm9uLWRlZmF1bHQgYmFzZXMgZm9yIHR5cGVzIGNhbm5vdCBiZSBwb3J0YWJseSBzcGVjaWZp ZWQKPj4+IHN0YXRpY2FsbHk7IHRoaXMgY2FzZSB3b3VsZCBuZWVkIGEgUHlfbW9kX2V4ZWMgZnVu Y3Rpb24gdGhhdCBydW5zCj4+PiBiZWZvcmUgdGhlIHNsb3RzIGFyZSBhZGRlZC4gVGhlIGZyZWUg ZXJyb3ItY2hlY2tpbmcgd291bGQgc3RpbGwgYmUKPj4+IGJlbmVmaWNpYWwsIHRob3VnaC4pCj4+ Cj4+IFRoaXMgaW1wbGllcyB0byBtZSB0aGF0IG5vdyBpcyB0aGUgdGltZSB0byBlbnN1cmUgdGhh dCB0aGlzIFBFUAo+PiBhcHByb3ByaWF0ZWx5IGFjY29tbW9kYXRlcyB0aGF0IG5lZWQuICBJdCB3 b3VsZCBiZSB1bmZvcnR1bmF0ZSBpZiB3ZQo+PiBoYWQgdG8gbGF0ZXIgaGFjayBpbiBzb21lIGV4 dHJhIEFQSSB0byBhY2NvbW1vZGF0ZSBhIHVzZSBjYXNlIHdlCj4+IGFscmVhZHkga25vdyBhYm91 dC4gIEJldHRlciBpZiB3ZSBtYWRlIHN1cmUgdGhlIGN1cnJlbnRseSBwcm9wb3NlZAo+PiBjaGFu Z2VzIGNvdWxkIGFjY29tbW9kYXRlIHRoZSBuZWVkLCBldmVuIGlmIHRoZSBpbXBsZW1lbnRhdGlv biBvZiB0aGF0Cj4+IHBhcnQgd2VyZSBub3QgcGFydCBvZiB0aGlzIFBFUC4KPgo+IFRoaXMgd291 bGQgYmUgYSBuZXcga2luZCBvZiBleGVjdXRpb24gc2xvdCwgc28gdGhlIFBFUCBhbHJlYWR5Cj4g YWNjb21tb2RhdGVzIHRoZXNlIHBvc3NpYmxlIGZ1dHVyZSBleHRlbnNpb25zLgoKU291bmRzIGdv b2QuICBUaGUgZXhwbGFuYXRpb24gbWFkZSBpdCBzb3VuZCBsaWtlIGEgbWVjaGFuaXNtIHdvdWxk IGJlCnJlcXVpcmVkIHRoYXQgY291bGQgbm90IGJlIGhhbmRsZWQgdmlhIGEgc2xvdC4KCj4KPj4+ IEFub3RoZXIgcG9zc2liaWxpdHkgaXMgcHJvdmlkaW5nIGEgIm1haW4iIGZ1bmN0aW9uIHRoYXQg d291bGQgYmUgcnVuCj4+PiB3aGVuIHRoZSBtb2R1bGUgaXMgZ2l2ZW4gdG8gUHl0aG9uJ3MgLW0g c3dpdGNoLgo+Pj4gRm9yIHRoaXMgdG8gd29yaywgdGhlIHJ1bnB5IG1vZHVsZSB3aWxsIG5lZWQg dG8gYmUgbW9kaWZpZWQgdG8gdGFrZQo+Pj4gYWR2YW50YWdlIG9mIE1vZHVsZVNwZWMtYmFzZWQg bG9hZGluZyBpbnRyb2R1Y2VkIGluIFBFUCA0NTEuCj4+Cj4+IEknbGwgcG9pbnQgb3V0IHRoYXQg dGhlIHB1cmUtUHl0aG9uIGVxdWl2YWxlbnQgaGFzIGJlZW4gcHJvcG9zZWQgb24gYQo+PiBudW1i ZXIgb2Ygb2NjYXNpb25zIGFuZCBiZWVuIHJlamVjdGVkIGV2ZXJ5IHRpbWUuICBIb3dldmVyLCBp biB0aGUKPj4gY2FzZSBvZiBleHRlbnNpb24gbW9kdWxlcyBpdCBpcyBtb3JlIGp1c3RpZmlhYmxl LiAgSWYgZXh0ZW5zaW9uCj4+IG1vZHVsZXMgZ2FpbiBzdWNoIGEgbWVjaGFuaXNtIHRoZW4gaXQg bWF5IGJlIGEganVzdGlmaWNhdGlvbiBmb3IgZG9pbmcKPj4gc29tZXRoaW5nIHNpbWlsYXIgaW4g UHl0aG9uLgo+Pgo+Pj4gQWxzbywgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbWVjaGFu aXNtIGZvciBzZXR0aW5nIHVwIGEgbW9kdWxlCj4+PiBhY2NvcmRpbmcgdG8gc2xvdHMgaXQgd2Fz bid0IG9yaWdpbmFsbHkgZGVmaW5lZCB3aXRoLgo+Pgo+PiBXaGF0IGRvZXMgdGhpcyBtZWFuPwo+ Cj4gV2hlbiB5b3UgdXNlIHRoZSAtbSBzd2l0Y2gsIHlvdSBhbHdheXMgcnVuIGluIHRoZSBidWls dGluIF9fbWFpbl9fCj4gbW9kdWxlIG5hbWVzcGFjZSwgYW5kIHJ1bnB5IGZpZGRsZXMgd2l0aCBf X21haW5fXy5fX3NwZWNfXyB0byBtYXRjaAo+IHRoZSBkZXRhaWxzIG9mIHRoZSBtb2R1bGUgcGFz c2VkIHRvIHRoZSBzd2l0Y2guIFRoYXQncyBub3QgY3VycmVudGx5IGEKPiB0cmljayB3ZSBjYW4g bWFuYWdlIHdoZW4gdGhlICJ0aGluZyB0byBydW4iIGlzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCgpJ IHNlZSBub3cuCgotZXJpYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbXBvcnQtU0lHIG1haWxpbmcgbGlzdApJbXBvcnQtU0lHQHB5dGhvbi5vcmcKaHR0 cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pbXBvcnQtc2lnCg==