[ruby-core:97015] [Ruby master Feature#16511] Staged warnings for keyword arguments
From:
daniel@...42.com
Date:
2020-01-29 03:37:57 UTC
List:
ruby-core #97015
SXNzdWUgIzE2NTExIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCk9rLCBpdCB0b29rIGEgd2hpbGUgdG8gcGxheSB3aXRoIHRoZSB2bV9hcmdzIGNvZGUg ZW5vdWdoIHRvIHJlYWxseSB1bmRlcnN0YW5kIGl0LCBidXQgSSBmaW5hbGx5IGhhdmUgbXkgb3du ICoqcHJvb2Ygb2YgY29uY2VwdCoqIHJlYWR5ISDjgYrlvoXjgZ/jgZvjgZfjgb7jgZfjgZ/jgIIN Cmh0dHBzOi8vZ2l0aHViLmNvbS9kYW40Mi9ydWJ5L3RyZWUva3dhcmctd2FybmluZ3MtMTY1MTEN ClBsZWFzZSBjaGVjayBpdCBvdXQuIEknbSBzdXJlIHRoZXJlIGFyZSBzdGlsbCBzb21lIGJ1Z3Mg dG8gd29yayBvdXQsIHRob3VnaCwgc28gZG9uJ3QgdGFrZSB0aGF0IHRvIG1lYW4gdGhhdCB0aGUg ZW50aXJlIGlkZWEgaXMgZmxhd2VkLg0KDQpOb3RlOiBJIGhlYXZpbHkgcmVmYWN0b3JlZCB0aGUg dm1fYXJncyBjb2RlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaXQsIGJ1dCBfcGxlYXNlXyBkb24n dCBmb2N1cyBvbiB0aGF0OyB0aGlzIGlzIGludGVuZGVkIGFzIHByb29mIG9mIGNvbmNlcHQgdG8g ZGVtb25zdHJhdGUgdGhlIGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2gsIG5vdCBhIHBvbGlzaGVk IHB1bGwgcmVxdWVzdC4gKEFsdGhvdWdoIEkgX2FtXyBwcmV0dHkgaGFwcHkgYWJvdXQgaG93IHRo b3NlIHJlZmFjdG9yaW5ncyB0dXJuZWQgb3V0LikNCg0KQmVsb3cgSSByZWZlciB0byAyLjcuZSBm b3IgcHJvcG9zYWwgIzE2NDYzOyBhbmQgMi43LmQgLyAzLnguZCBmb3IgdGhpcyBwcm9wb3NhbC4N Cg0KQmVuZWZpdHM6DQoNCiMjIyBUaHJlZSBsZXZlbHMgb2YgdXJnZW5jeSBpbiB3YXJuaW5ncw0K DQpbRklYIE5PV106IG11c3QgYmUgZml4ZWQgbm93IHNpbmNlIGJlaGF2aW9yIHdpbGwgYmUgZGlm ZmVyZW50IGluIDMuMCwgZm9yIGV4YW1wbGUgSGFzaCBpcyBubyBsb25nZXIgY29udmVydGVkIHRv IGtleXdvcmRzDQpbZml4IG5vd106IHdpbGwgZXZlbnR1YWxseSByYWlzZSBlcnJvcjsgc2hvdWxk IGJlIGZpeGVkIG5vdyBidXQgdGhlcmUncyBubyBodXJyeSBvciBiZW5lZml0IHRvIGJyZWFrIHBl b3BsZSdzIHN0dWZmIGluIDMuMA0KW2ZpeCBpbiAzLnhdOiB3aWxsIGV2ZW50dWFsbHkgcmFpc2Ug ZXJyb3I7IGZpeCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIDIueDsgdGhlcmVmb3JlIG1lc3NhZ2Ug aXMgbm90IGRpc3BsYXllZCBpbiAyLjc7IGZpeCBvbmNlIHlvdSdyZSByZWFkeSB0byBkcm9wIHN1 cHBvcnQgZm9yIHJ1YnkgMi54DQoNClRoaXMgaXMgYmVjYXVzZSB0aGVyZSBhcmUgZGlmZmVyZW50 IG5lZWRzOg0KKiBhcHAgZGV2ZWxvcGVyIGNhcmVzIGFib3V0IGhpcyBjdXJyZW50IHZlcnNpb24g b2YgcnVieSBvbmx5DQoqIGdlbSBkZXZlbG9wZXIgY2FyZXMgYWJvdXQgcmVtYWluaW5nIGNvbXBh dGlibGUgd2l0aCBhIGZldyB2ZXJzaW9ucw0KKiBnZW0gdXNlciBkb2Vzbid0IHdhbnQgdG8gdXBn cmFkZSB0byBhIG5ldyBtYWpvciB2ZXJzaW9uIG9mIHRoZSBnZW0gd2l0aCBhbiBpbmNvbXBhdGli bGUgQVBJDQoNCkluIHRoaXMgcHJvb2Ygb2YgY29uY2VwdCB0aGUgdGhyZWUgbGFiZWxzIGFib3Zl IGFyZSBzaW1wbHkgYXBwZW5kZWQgdG8gdGhlIHdhcm5pbmdzLCBidXQgaW4gYSBmaW5hbCB2ZXJz aW9uIHRoZXkgd291bGQgaW5zdGVhZCBjaGFuZ2UgdGhlIF92aXNpYmlsaXR5XyBvZiB0aGUgd2Fy bmluZ3MuDQoNCiMjIyBEZWxlZ2F0aW9uIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUNCg0KYGBgcnVi eQ0KZGVmIGZvbygqYXJncyk7IHAgYXJnczsgZW5kDQpkZWYgYmFyKCoqa3cpOyBwIGt3OyBlbmQN CmRlZiBkZWxlZyhtLCphcmdzKTsgc2VuZChtLCphcmdzKTsgZW5kDQpydWJ5Ml9rZXl3b3JkcyBk ZWYgZGVsZWcyKG0sKmFyZ3MpOyBzZW5kKG0sKmFyZ3MpOyBlbmQNCmRlZiBkZWxlZ1YobSxhKTsg c2VuZChtLGEpOyBlbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIuNyAgICAg IDIuNy5lICAgIDIuNy5kDQpkZWxlZyg6YmFyLCB4OjEpICAjPT4gezp4PT4xfSAgIyB3YXJuaW5n ICAtICAgICAgICAtICAgIA0KZGVsZWcyKDpiYXIsIHg6MSkgIz0+IHs6eD0+MX0gICMgLSAgICAg ICAgLSAgICAgICAgLSAgICANCmRlbGVnVig6YmFyLCB4OjEpICM9PiB7Ong9PjF9ICAjIHdhcm5p bmcgIHdhcm5pbmcgIC0gICAgDQpkZWxlZyg6Zm9vLCAyKSAgICAjPT4gWzJdDQpkZWxlZzIoOmZv bywgMikgICAjPT4gWzJdDQpkZWxlZ1YoOmZvbywgMikgICAjPT4gWzJdDQpgYGANCg0KVGhpcyBl eGFtcGxlIGRlbW9uc3RyYXRlcyB0aGF0IGRlbGVnYXRpb24gX2Nhbl8gYnJlYWsgZXZlbiBpZiBp dCBkb2Vzbid0IHVzZSBgKmFyZ3NgLiBJbiB0aGlzIGNhc2UgeW91J2QgaGF2ZSB0byBjaGFuZ2Ug YGRlbGVnVmAgdG8gdXNlIGAqYXJnc2AgZGVsZWdhdGlvbiB3aXRoIHJ1YnkyX2tleXdvcmRzLiBJ IGFja25vd2xlZGdlIHRoaXMgaXMgdW5saWtlbHkgdG8gaGFwcGVuIGluIHByYWN0aWNlLCBidXQg c2luY2UgaXQncyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlLi4uIGFsbCBlbHNlIGJlaW5nIGVxdWFs IHdoeSBub3QgY2hvb3NlIHRoZSBhcHByb2FjaCB0aGF0IGhhbmRsZXMgZXZlbiB0aGlzIHJlbW90 ZSBwb3NzaWJpbGl0eT8NCg0KIyMjIEtleXdvcmRzLXRvLXBvc2l0aW9uYWwgaXMgY29tcGF0aWJs ZSB3aXRoIDIuNg0KDQpgYGBydWJ5DQpkZWYgZm9vKCphcmdzKTsgcCBhcmdzOyBlbmQNCmgwID0g e30NCmgxID0ge2s6IDQyfQ0KZm9vKCkgICAgICM9PiBbXSAgDQpmb28oKipoMCkgIz0+IFt7fV0g ICAgICAgKGxpa2UgMi42LCB1bmxpa2UgMi43KQ0KZm9vKCoqaDEpICM9PiBbezprPT40Mn1dDQpg YGANCg0KU2luY2UgaXQncyBiZWVuIGRlY2lkZWQgdGhhdCB0aGUgY29udmVyc2lvbiBmcm9tIGtl eXdvcmRzIHRvIHBvc2l0aW9uYWwgd2lsbCByZW1haW4gZm9yZXZlciBmb3IgdGhlIHNha2Ugb2Yg Y29tcGF0aWJpbGl0eSwgSSBzdHJvbmdseSBiZWxpZXZlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGlu dHJvZHVjZSBhbiBpbmNvbXBhdGliaWxpdHkgaW4gdGhpcyBjb21wYXRpYmlsaXR5IGJlaGF2aW9y Lg0KDQojIyMgYCoqa3dgIGRlbGVnYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBo YXNoIA0KDQpgYGBydWJ5DQpkZWYgZm9vKCphcmdzKTsgcCBhcmdzOyBlbmQNCmRlZiBkZWxlZygq YSwqKmspOyBmb28oKmEsKiprKTsgZW5kDQpoMCA9IHt9DQpoMSA9IHtrOiA0Mn0NCnAgZm9vKCkg ICAgPT1kZWxlZygpICAgICAgIz0+IFtdID09IFtdICAgICAgICAgICAgICAgICAjPT4gdHJ1ZSwg dW5saWtlIFtdID09IFt7fV0gaW4gMi42DQpwIGZvbygqKmgwKT09ZGVsZWcoKipoMCkgICM9PiBb e31dID09IFt7fV0gICAgICAgICAgICAgIz0+IHRydWUgICAgICAgICAgICAgICANCnAgZm9vKCoq aDEpPT1kZWxlZygqKmgxKSAgIz0+IFt7Oms9PjQyfV0gPT0gW3s6az0+NDJ9XSAjPT4gdHJ1ZQ0K cCBmb28oe30pICA9PWRlbGVnKHt9KSAgICAjPT4gW3t9XSA9PSBbe31dICAgICAgICAgICAgICM9 PiB0cnVlLCB1bmxpa2UgW3t9XSA9PSBbXSBpbiAyLjcgLi4uIGJ1dCB3aXRoIFtGSVggTk9XXSB3 YXJuaW5nDQpgYGANCg0KSSBpbnRyb2R1Y2VkIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBhbiBlbXB0 eSBrd3NwbGF0IGFuZCBhICJub25leGlzdGVudCIga3dzcGxhdDsgdGhlIGxhdGVyIGlzIG5vdCBj b252ZXJ0ZWQgdG8gYW4gZW1wdHkgcG9zaXRpb25hbCBoYXNoLiBJJ3ZlIGNvbWUgdG8gYmVsaWV2 ZSB0aGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBoYXZlIGJvdGggS2V5d29yZHMtdG8tcG9z aXRpb25hbCBjb21wYXRpYmlsaXR5IGFuZCBgKiprd2AgZGVsZWdhdGlvbiB3b3JrIGF0IHRoZSBz YW1lIHRpbWUuDQoNCiMjIyBEZXN0cnVjdHVyaW5nIGl0ZXJhdGlvbiBpcyBjb21wYXRpYmxlDQoN CmBgYHJ1YnkNCnAgW3g6MV0ucHVzaCh4OjIpLm1hcHsgfHg6fCB4IH0gICAgICM9PiBbMSwgMl0g IHdpdGggd2FybmluZyBpbiAyLjcgYW5kIDIuNy5lIGFuZCAzLnguZA0KcCBbe3g6MX1dLnB1c2go e3g6Mn0pLm1hcHsgfHg6fCB4IH0gIz0+IFsxLCAyXSAgd2l0aCB3YXJuaW5nIGluIDIuNyBhbmQg Mi43LmUgYW5kIDIuNy5kDQpgYGANCg0KSXQgbWF5IG5vdCBiZSBhIGNvbW1vbiBwYXR0ZXJuLCBi dXQgYXQgbGVhc3QgMiBwZW9wbGUgaGF2ZSByZXBvcnRlZCB0aGlzIGJlaW5nIGFuIGlzc3VlLiBT aW5jZSB0aGVyZSdzIGEgc29sdXRpb24gdGhhdCBhbGxvd3MgdGhpcyB0byB3b3JrLCB3aHkgbm90 IHRha2UgaXQ/IEluIHRoZSBlbmQgbWF5YmUgbWF0eiB3aWxsIGRlY2lkZSB0byBraWxsIHRoaXMg ZmVhdHVyZSBidXQgSSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBhbiBhY3R1YWwgZGlzY3Vzc2lvbiBv biB0aGlzIHJhdGhlciB0aGFuIHJ1c2ggdGhlICJraWxsIiBkZWNpc2lvbiBqdXN0IGJlY2F1c2Ug dGhlIGN1cnJlbnQgYXBwcm9hY2ggZG9lc24ndCBhbGxvdyB0aGlzIGZsZXhpYmlsaXR5Lg0KDQot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNjUxMTog U3RhZ2VkIHdhcm5pbmdzIGZvciBrZXl3b3JkIGFyZ3VtZW50cw0KaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvaXNzdWVzLzE2NTExI2NoYW5nZS04NDEwMw0KDQoqIEF1dGhvcjogRGFuMDA0MiAo RGFuaWVsIERlTG9ybWUpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFz c2lnbmVlOiANCiogVGFyZ2V0IHZlcnNpb246IA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KQXMgYW4gYWx0ZXJuYXRpdmUgdG8gIzE2NDYzIGFuZCAjMTY0OTQgSSdk IGxpa2UgdG8gcHJvcG9zZSB0aGlzIGFwcHJvYWNoLCB3aGljaCBJIGJlbGlldmUgYWxsb3dzIGEg KiptdWNoKiogbW9yZSBmbGV4aWJsZSBwYXRoIGZvciBtaWdyYXRpb24gb2Yga2V5d29yZCBhcmd1 bWVudHMuDQoNClRoZSBpZGVhIGlzIHRvIGluZGljYXRlIGZvciBldmVyeSBIYXNoIG9iamVjdCBp ZiBpdCdzIGludGVuZGVkIHRvIHJlcHJlc2VudCBhIF9rZXl3b3JkXyBoYXNoIG9yIGEgX2RhdGFf IGhhc2guIFRoaXMgZXh0cmEgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIGdlbmVyYXRlIG1v cmUgZ3JhbnVsYXIgd2FybmluZ3MgZGVwZW5kaW5nIG9uIGEgdXNlcidzIGNvbXBhdGliaWxpdHkg bmVlZHMuDQoNClRoZSAia2V5d29yZG5lc3MiIG9mIGEgaGFzaCB3b3VsZCBiZSBpbmRpY2F0ZWQg YnkgYSAqKmZsYWcqKiBvbiB0aGUgSGFzaCBvYmplY3Q7IHRoaXMgaXMgYWxyZWFkeSBpbXBsZW1l bnRlZCBpbiAyLjcgYW5kIGlzIHRoZSBhcHByb2FjaCBmYXZvcmVkIGJ5IE1hdHouIExldCdzIGNh bGwgdGhpcyBmbGFnZ2VkIGhhc2ggYSAiS3dIYXNoIiwgYW5kIGEgbm9uLWZsYWdnZWQgaGFzaCBp cyBqdXN0IGEgIkhhc2giLiBOb3RlOiB0aGlzIGNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgdmlh IGEgKipzdWJjbGFzcyoqIG9mIEhhc2ggKEkgcGVyc29uYWxseSBmYXZvciB0aGlzIG9iamVjdC1v cmllbnRlZCBhcHByb2FjaCkgd2hpY2ggd2FzIHRoZSBvcmlnaW5hbCBpZGVhIGluIHRoaXMgcHJv cG9zYWwuDQoNCkknbGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBpZGVhIGluIGRldGFpbCBieSBicmVh a2luZyBpdCBkb3duIGludG8gZmlndXJhdGl2ZSBzdGVwcy4gKFNraXAgdG8gIlB1dHRpbmcgaXQg YWxsIHRvZ2V0aGVyIiBmb3IgdGhlIFRMO0RSIHZlcnNpb24uKSBJbWFnaW5lIHN0YXJ0aW5nIHdp dGggcnVieSAyLjYgYW5kIHRoZW46DQoNCiMjIyBTdGVwIDENCg0KV2hlbiBhIGRvdWJsZS1zcGxh dCBvciBhIGJyYWNlLWxlc3MgaGFzaCBpcyB1c2VkLCBpbnN0ZWFkIG9mIGEgSGFzaCBpdCBjcmVh dGVzIGEgS3dIYXNoLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHgpIHggZW5kDQpmb28oazoxKS5jbGFz cyAgICAgICM9PiBLd0hhc2gNCmZvbygqKmhhc2gpLmNsYXNzICAgIz0+IEt3SGFzaA0KW2s6MV0u bGFzdC5jbGFzcyAgICAjPT4gS3dIYXNoDQpbKipoYXNoXS5sYXN0LmNsYXNzICM9PiBLd0hhc2gN CnsqKmhhc2h9LmNsYXNzICAgICAgIz0+IEhhc2gNCmBgYA0KDQpBdCB0aGlzIHBvaW50IHdlIGhh dmVuJ3QgaW50cm9kdWNlZCBhbnkgcmVhbCBjaGFuZ2UuIEV2ZXJ5dGhpbmcgdGhhdCB3b3JrZWQg YmVmb3JlIGlzIHN0aWxsIHdvcmtpbmcgdGhlIHNhbWUgd2F5Lg0KKFdpdGggYSBtaW5vciBleGNl cHRpb24gaWYgdXNpbmcgdGhlIHN1YmNsYXNzIGFwcHJvYWNoOiB1bnVzdWFsIGNvZGUgbGlrZSBg a3cuY2xhc3MgPT0gSGFzaGAgd291bGQgbm93IHJldHVybiBmYWxzZS4pDQoNCiMjIyBTdGVwIDIN Cg0KV2hlbiB0aGVyZSBpcyBhbWJpZ3VpdHkgZHVlIHRvIG9wdGlvbmFsIHZzIGtleXdvcmQgYXJn dW1lbnQsIHdlIHJlbHkgb24gdGhlIGxhc3QgYXJndW1lbnQgYmVpbmcgSGFzaCBvciBLd0hhc2gg dG8gZGlzYW1iaWd1YXRlLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHg9bmlsLCAqKmt3KQ0KICBbeCxr d10NCmVuZA0KZm9vKHtrOjF9KSAjPT4gW3trOjF9LHt9XQ0KZm9vKGs6MSkgICAjPT4gW25pbCx7 azoxfV0NCmBgYA0KDQpUaGlzIGlzIHRoZSBfbWluaW11bV8gYW1vdW50IG9mIGluY29tcGF0aWJp bGl0eSByZXF1aXJlZCB0byBzb2x2ZSBBTEwgYnVncyBwcmV2aW91c2x5IHJlcG9ydGVkIHdpdGgg a2V5d29yZCBhcmd1bWVudHMuICgjODA0MCwgIzgzMTYsICM5ODk4LCAjMTA4NTYsICMxMTIzNiwg IzExOTY3LCAjMTIxMDQsICMxMjcxNywgIzEyODIxLCAjMTMzMzYsICMxMzY0NywgIzE0MTMwLCBl dGMuKSANCg0KVGhlIHdhcm5pbmdzIGZvciB0aGlzIHdvdWxkIGJlIGFib3V0IGFuIGltcGVuZGlu ZyBfY2hhbmdlIG9mIGJlaGF2aW9yXyBpbiB0aGUgX25leHQgcnVieSB2ZXJzaW9uXywgd2hlcmUg YGZvbyh7azoxfSlgIGlzIG5vIGxvbmdlciBpbnRlcnByZXRlZCBhcyBrZXl3b3JkIGFyZ3VtZW50 Lg0KDQojIyMgU3RlcCAzDQoNCkludHJvZHVjZSBhZGRpdGlvbmFsIGluY29tcGF0aWJpbGl0eSB0 byBpbXByb3ZlIGNsYXJpdHkgb2YgZGVzaWduLiBIZXJlIHdlIGRlcHJlY2F0ZSB0aGUgYXV0b21h dGljIGNvbnZlcnNpb24gb2YgSGFzaCB0byBrZXl3b3JkIGFyZ3VtZW50OyBvbmx5IEt3SGFzaCBp cyBhY2NlcHRlZC4gV2l0aCBhIGRlcHJlY2F0aW9uL3dhcm5pbmcgcGhhc2UsIG9mIGNvdXJzZS4g VGhlICJhdXRvbWF0aWMiIHByb21vdGlvbiBvZiBhIEt3SGFzaCB0byBhIGtleXdvcmQgYXJndW1l bnQgZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBhIEhhc2ggaW4gMi42OyBzaW5jZSB0aGUgS3dI YXNoIGlzIGNvbmNlcHR1YWxseSBpbnRlbmRlZCB0byByZXByZXNlbnQga2V5d29yZCBhcmd1bWVu dHMsIHRoaXMgY29udmVyc2lvbiBtYWtlcyBzZW5zZSBpbiBhIHdheSB0aGF0IGEgbm9ybWFsIGRh dGEgSGFzaCBkb2Vzbid0LiBXZSd2ZSB0YWtlbiB0aGUgImxhc3QgcG9zaXRpb25hbCBoYXNoIiBj b25jZXB0IGFuZCBzcGxpdCBpdCBpbnRvICJjb25jZXB0dWFsbHkgYSBoYXNoIiBhbmQgImNvbmNl cHR1YWxseSBrZXl3b3JkIGFyZ3VtZW50cyIuIF9Nb3N0IGltcG9ydGFudGx5XywgYWxsIHRoZSBj aGFuZ2VzIHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ugd2FybmluZ3MgYXJlIF9jb21wYXRpYmxl IHdpdGggMi42Xy4NCg0KYGBgcnVieQ0KZGVmIGZvbyh4LCAqKmt3KTsgZW5kDQpmb28oazoxKSAg ICAgICMgQXJndW1lbnRFcnJvciBiZWNhdXNlIHggbm90IHNwZWNpZmllZA0KZm9vKDEsIHtrOjF9 KSAjIEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB0b28gbWFueSBhcmd1bWVudHM7IEhhc2ggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBLd0hhc2hzDQpvcHRzID0gW2s6MV0uZmlyc3QNCmZvbyhvcHRzKSAg ICAgIyBvcHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnQ7 IEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB4IG5vdCBzcGVjaWZpZWQNCmZvbygxLCBvcHRzKSAgIyBv cHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnQNCmBgYA0K DQpUaGUgd2FybmluZ3MgZm9yIHRoaXMgd291bGQgYmUgYWJvdXQgdXBjb21pbmcgX2Vycm9yc18g Zm9yIHBvc2l0aW9uYWwgYXJndW1lbnRzOiBgZm9vKHg6MSlgIHdpbGwgYmUgImdpdmVuIDAsIGV4 cGVjdGVkIDEiIGFuZCBgZm9vKDEse3g6Mn0pYCB3aWxsIGJlICJnaXZlbiAyLCBleHBlY3RlZCAx Ii4gU3VjaCBlcnJvcnMgYXJlIHVzZWZ1bCB3aGVuIGRldmVsb3BpbmcsIGJ1dCB0aGVyZSBpcyBu byBuZXcgZnVuY3Rpb25hbGl0eSBwZXIgc2UsIGp1c3QgYSBzdHJpY3RlciBzeW50YXguIFNvIGl0 J3MgbGVzcyBpbXBvcnRhbnQgdG8gZXNjYWxhdGUgdG8gYW4gZXJyb3IgYW5kIHdlIGNhbiBrZWVw IHRoZSB3YXJuaW5ncyBmb3IgbG9uZ2VyIHRoYW4gU3RlcCAyLg0KDQpBdCB0aGlzIHBvaW50IHdl IGhhdmUgYWNoaWV2ZWQgX2FsbW9zdC1mdWxsXyAqKmR5bmFtaWMqKiBrZXl3b3JkIHNlcGFyYXRp b24sIGFzIG9wcG9zZWQgdG8gdGhlIGN1cnJlbnQgX2FsbW9zdC1mdWxsXyAqKnN0YXRpYyoqIGFw cHJvYWNoLiBJIHdhbnQgdG8gbWFrZSB0aGUgcG9pbnQgaGVyZSB0aGF0LCB5ZXMsIGtleXdvcmQg YXJndW1lbnRzICoqYXJlKiogc2VwYXJhdGVkLCBpdCdzIGp1c3QgYSBkaWZmZXJlbnQgcGFyYWRp Z20uIFdpdGggc3RhdGljIHNlcGFyYXRpb24sIGEga2V5d29yZCBhcmd1bWVudCBpcyBkZWZpbmVk IGxleGljYWxseSBieSBhIGRvdWJsZS1zcGxhdC4gV2l0aCBkeW5hbWljIHNlcGFyYXRpb24sIGEg a2V5d29yZCBhcmd1bWVudCBpcyB3aGVuIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgS3dIYXNoLiB7 e05vdGU6IEknbSBzYXlpbmcgImFsbW9zdC1mdWxsIiBiZWNhdXNlIEt3SGFzaCBpcyBub3QgcHJv bW90ZWQgdG8ga2V5d29yZHMgaW4gYGRlZiBmb28oYSwqKmt3KTtlbmQ7Zm9vKHg6MSlgIGFuZCBi ZWNhdXNlIHN0YXRpYyBrZXl3b3JkcyBhcmUgYXV0by1kZW1vdGVkIHRvIHBvc2l0aW9uYWwgaW4g YGRlZiBmb28oYSk7ZW5kO2Zvbyh4OjEpYH19DQoNCkFueSBmb3JtIG9mIGRlbGVnYXRpb24gd29y a3Mgd2l0aCBubyBjaGFuZ2UgcmVxdWlyZWQuIFRoaXMgcHJlc2VydmVzIHRoZSBiZWhhdmlvciBv ZiAyLjYgYnV0IG9ubHkgZm9yIEt3SGFzaCBvYmplY3RzLiBUaGlzIGlzIHNpbWlsYXIgdG8gaGF2 aW5nIDIuNyB3aXRoIGBydWJ5Ml9rZXl3b3Jkc2AgZW5hYmxlZCBieSBkZWZhdWx0LiBCdXQgYWxz byBkaWZmZXJlbnQgaW4gc29tZSB3YXlzOyBtb3N0IG5vdGFibHkgaXQgYWxsb3dzIHRoZSBjYXNl IHNob3duIGluICMxNjQ5NCB0byB3b3JrIGJ5IGRlZmF1bHQ6DQoNCmBgYHJ1YnkNCmFycmF5ID0g W3g6MV0NCmFycmF5LnB1c2goeDoyKQ0KYXJyYXkubWFweyB8eDp8IHggfSAjPT4gWzEsMl0NClt7 eDozfV0ubWFweyB8eDp8IHggfSAjPT4gYnV0IHRoaXMgd2FybnMsIGFzIGl0IHNob3VsZA0KYGBg DQoNClRoZSBjdXJyZW50IGFwcHJvYWNoIGRvZXMgbm90IGFsbG93IHRoaXMgdG8gd29yayBhdCBh bGwuIFRoZSBzb2x1dGlvbiBwcm9wb3NlZCBpbiAjMTY0OTQgaGFzIGFsbCB0aGUgc2FtZSBmbGF3 cyBhcyBIYXNoLWJhc2VkIGtleXdvcmQgYXJndW1lbnRzOyB3aGF0IGhhcHBlbnMgdG8gYGVhY2h7 IHx4PW5pbCwqKmt3fCB9YCA/IFRoaXMgc29sdXRpb24gYWxsb3dzIGEgS3dIYXNoIHRvIGJlIGNv bnZlcnRlZCB0by4uLiBrZXl3b3Jkcy4gVmVyeSB1bnN1cnByaXNpbmcuDQoNCkdpdmVuIHRoYXQg cnVieSBpcyBhIGR5bmFtaWNhbGx5LXR5cGVkIGxhbmd1YWdlIEkgZmVlbCB0aGF0IGR5bmFtaWMg dHlwaW5nIG9mIGtleXdvcmRzIGlmIGEgbW9yZSBuYXR1cmFsIGZpdCB0aGFuIHN0YXRpYyB0eXBp bmcuIEJ1dCBJIHJlYWxpemUgdGhhdCBtYW55IGRpc2FncmVlIHdpdGggdGhhdCwgd2hpY2ggaXMg d2h5IHdlIGNvbnRpbnVlIHRvLi4uDQoNCiMjIyBTdGVwIDQNCg0KSW50cm9kdWNlIGFkZGl0aW9u YWwgaW5jb21wYXRpYmlsaXR5IHRvIHJlYWNoIHN0YXRpYy9sZXhpY2FsIHNlcGFyYXRpb24gb2Yg a2V5d29yZCBhcmd1bWVudHMuIEhlcmUgd2UgcmVxdWlyZSB0aGF0IGV2ZW4gYSBLd0hhc2ggc2hv dWxkIGJlIHBhc3NlZCB3aXRoIGEgZG91YmxlLXNwbGF0IGluIG9yZGVyIHRvIHF1YWxpZnkgYXMg YSBrZXl3b3JkIGFyZ3VtZW50Lg0KDQpgYGBydWJ5DQpkZWYgYmFyKCoqa3cpDQplbmQNCmRlZiBm b28oKiprdykNCiAgYmFyKGt3KSAgICM9PiBlcnJvcjsgS3dIYXNoIHBhc3NlZCB3aXRob3V0ICoq DQogIGJhcigqKmt3KSAjPT4gb2sNCmVuZA0KYGBgDQoNCkF0IHRoaXMgcG9pbnQgd2UndmUgcmVh Y2hlZCB0aGUgc2FtZSBiZWhhdmlvciBhcyAyLjcuIERlbGVnYXRpb24gbmVlZHMgdG8gYmUgZml4 ZWQsIGJ1dCBhcyB3ZSBrbm93IHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ug d2FybmluZ3MgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIDIuNiBvciAyLjcuIFRoZSB3YXJu aW5ncyBmb3IgdGhpcyBhcmUgX2Z1bmRhbWVudGFsbHkgbm90IGZpeGFibGVfIGFzIGxvbmcgYXMg U3RlcCAyIGhhcyBub3QgYmVlbiBmaXhlZC4gVGhpcyBpcyB0aGUgY29yZSByZWFzb24gd2h5IGBy dWJ5Ml9rZXl3b3Jkc2AgaXMgY3VycmVudGx5IG5lY2Vzc2FyeSBpbiAyLjcuIFNvIGluIHRoZSB2 ZXJzaW9uIGFmdGVyIDIuNyB3ZSBjYW4gZW5hYmxlIHRoZXNlIHdhcm5pbmdzIGJ5IGRlZmF1bHQg c2luY2UgaXQncyBub3cgcG9zc2libGUgdG8gZml4IGRlbGVnYXRpb24gdG8gdXNlIHN0YXRpYyBr ZXl3b3Jkcy4gRXhjZXB0IHRoYXQgZ2VtIGF1dGhvcnMgd2hvIG5lZWQgdG8gc3RheSBjb21wYXRp YmxlIHdpdGgg4omkMi43IGNhbm5vdCB5ZXQgbWFrZSB0aGVzZSBjaGFuZ2VzLCBzbyB3ZSBpbnRy b2R1Y2UgYSB3YXkgdG8gX3NpbGVuY2UgKipvbmx5KiogdGhlc2UgIlN0ZXAgNCIgd2FybmluZ3Nf LCBmb3IgcGVvcGxlIHdobyBuZWVkIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGgg4omkMi43LiBB bmQgd2Uga2VlcCB0aGVtIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgZXJyb3JzIHVudGlsIHJ1Ynkg Mi43IGlzIEVPTC4NCg0KU28gaW5zdGVhZCBvZiBoYXZpbmcgdG8gdXBkYXRlIGEgYnVuY2ggb2Yg cGxhY2VzIHdpdGggYHJ1YnkyX2tleXdvcmRzYCBqdXN0IHRvIHRlbXBvcmFyaWx5IHNpbGVuY2Ug d2FybmluZ3MsIGl0J3MgYSBzaW5nbGUgZmxhZyBsaWtlIGBXYXJuaW5nWzpydWJ5M19rZXl3b3Jk c11gLiBPbmNlIHJ1YnkgMi43IGlzIEVPTCB0aGVzZSBiZWNvbWUgY29udHJvbGxlZCBieSBgV2Fy bmluZ1s6ZGVwcmVjYXRlZF1gIHdoaWNoIHRlbGxzIHBlb3BsZSB0aGV5ICoqaGF2ZSoqIHRvIGZp eCB0aGVpciBjb2RlLiBXaGljaCBpcyBqdXN0IGxpa2UgdGhlIGV2ZW50dWFsIGRlcHJlY2F0aW9u IG9mIGBydWJ5Ml9rZXl3b3Jkc2AsIGp1c3Qgd2l0aG91dCB0aGUgYnVzeSB3b3JrIG9mIGFkZGlu ZyBgcnVieTJfa2V5d29yZHNgIHN0YXRlbWVudHMgaW4gdGhlIGZpcnN0IHBsYWNlLiBCdXQgYWdh aW4sIHRoaXMgaW50cm9kdWNlcyBubyBuZXcgZnVuY3Rpb25hbGl0eSwganVzdCBhIHN0cmljdGVy IHN5bnRheC4gU28gd2UgY2FuIHBsYXkgbmljZSBhbmQgbGVhdmUgdGhlIHdhcm5pbmdzIGZvciBh IGZldyB5ZWFycyBiZWZvcmUgY2hhbmdpbmcgdG8gZXJyb3JzLg0KDQpUaGUgcXVlc3Rpb24gcmVt YWlucyBvZiBob3cgdG8gaGFuZGxlICMxNjQ5NCBoZXJlLiBFaXRoZXIgZGlzYWxsb3cgaXQgZW50 aXJlbHksIGJ1dCBJIHRoaW5rIHRoYXQgd291bGQgYmUgYSBzaGFtZS4gT3IganVzdCBsaWtlICMx NjQ5NCBzdWdnZXN0cywgYWxsb3cgaGFzaCB1bnBhY2tpbmcgaW4gbm9uLWxhbWJkYSBQcm9jLiBF eGNlcHQgdGhhdCBub3cgaXQgY2FuIGJlIGEgS3dIYXNoIGluc3RlYWQgb2YgYSBIYXNoLCB3aGlj aCBhdCBsZWFzdCBwcmVzZXJ2ZXMgZHluYW1pYyBrZXl3b3JkIHNlcGFyYXRpb24uDQoNCiMjIFB1 dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIChUTDtEUikNCg0KVGhlIGlkZWEgaXMgX25vdF8gdG8gcmVp bXBsZW1lbnQga2V5d29yZCBhcmd1bWVudCBzZXBhcmF0aW9uOyBhbGwgdGhhdCBpcyBuZWVkZWQg aXMgdG8gaW1wbGVtZW50IHRoZSB0aGluZ3MgYWJvdmUgdGhhdCBhcmUgbm90IGluIDIuNzoNCiog Q3JlYXRlIGEgS3dIYXNoIG9iamVjdCBmb3IgYnJhY2UtbGVzcyBhbmQgZG91YmxlLXNwbGF0dGVk IGhhc2hlcy4NCiogRGlmZmVyZW50aWF0ZSB0aGUgdmFyaW91cyB0eXBlcyBvZiB3YXJuaW5ncyBh bmQgYWxsb3cgdG8gdG9nZ2xlIG9uL29mZiBzZXBhcmF0ZWx5DQogICogU3RlcCAyIHdhcm5pbmdz IF9tdXN0XyBiZSBmaXhlZCBub3c7IGNhbm5vdCB0b2dnbGUgb2ZmDQogICogU3RlcCAzIHdhcm5p bmdzIF9zaG91bGRfIGJlIGZpeGVkIG5vdyBidXQgeW91IGRvbid0IGFic29sdXRlbHkgbmVlZCB0 byB1cGdyYWRlIHlvdXIgZ2VtcyBqdXN0IGZvciB0aGF0DQogICogU3RlcCA0IHdhcm5pbmdzIF9z aG91bGRfIGJlIGZpeGVkIGluIG5leHQgdmVyc2lvbiB1bmxlc3MgeW91IG5lZWQgdG8gc3VwcG9y dCDiiaQyLjcNCg0KSSB0aGluayB0aGF0J3MgYWxsLCByZWFsbHkuLi4NCg0KIyMjIFByb3MNCiog Q2xlYW5lciB3YXkgdG8gc29sdmUgIzE2NDk0DQoqIEJldHRlciBjb21wYXRpYmlsaXR5IChhdCBs ZWFzdCB1bnRpbCAyLjYgaXMgRU9MKQ0KICAgKiBkZWxlZ2F0aW9uDQogICAqIHN0b3JpbmcgYW4g YXJndW1lbnQgbGlzdCB0aGF0IGVuZHMgd2l0aCBhIEt3SGFzaA0KICAgKiBkZXN0cnVjdHVyaW5n IGl0ZXJhdGlvbiAoIzE2NDk0KQ0KKiBXZSBjYW4gYXZvaWQgdGhlICJ1bmZvcnR1bmF0ZSBjb3Ju ZXIgY2FzZSIgYXMgZGVzY3JpYmVkIGluIHRoZSBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly93d3cu cnVieS1sYW5nLm9yZy9lbi9uZXdzLzIwMTkvMTIvMTIvc2VwYXJhdGlvbi1vZi1wb3NpdGlvbmFs LWFuZC1rZXl3b3JkLWFyZ3VtZW50cy1pbi1ydWJ5LTMtMC8pDQogICAqIGluIDIuNyBvbmx5IGRv IG5vdCBvdXRwdXQgIlN0ZXAgNCIgd2FybmluZ3MsIGxlYXZlIGRlbGVnYXRpb24gbGlrZSBpdCB3 YXMNCiAgICogaW4gMi44IHRoZSAiU3RlcCAzIiB3YXJuaW5ncyBoYXZlIGJlZW4gZml4ZWQgYW5k IGEgSGFzaCB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgdG8ga2V5d29yZCBhcmd1bWVudHMNCiAgICog ZGVsZWdhdGlvbiBjYW4gbm93IHNhZmVseSBiZSBmaXhlZCB0byB1c2UgdGhlIGAqKmAgc3ludGF4 DQoqIHJ1YnkyX2tleXdvcmRzIGlzIG5vdCByZXF1aXJlZCwgd2hpY2ggaXMgZGVzaXJhYmxlIGJl Y2F1c2UNCiAgICogaXQncyBhIGhpZGRlbiBmbGFnIF9oYWNrXw0KICAgKiBpdCByZXF1aXJlcyB0 byBjaGFuZ2UgdGhlIGNvZGUgbm93LCBhbmQgY2hhbmdlIGl0IF9hZ2Fpbl8gd2hlbiBydWJ5Ml9r ZXl3b3JkcyBpcyBkZXByZWNhdGVkOyB0d2ljZSB0aGUgd29yazsgdHdpY2UgdGhlIGdlbSB1cGdy YWRlcw0KICAgKiBpdCB3YXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBvbmx5IGZvciBwZW9wbGUgd2hv IG5lZWQgdG8gc3VwcG9ydCAyLjYgb3IgYmVsb3csIGJ1dCBpdCdzIGJlaW5nIG1pc3VuZGVyc3Rv b2QgYXMgYW4gYWNjZXB0YWJsZSB3YXkgdG8gZml4IGRlbGVnYXRpb24gaW4gZ2VuZXJhbA0KICAg KiB0aGVyZSdzIHRoZSBub24temVybyByaXNrIHRoYXQgcnVieTJfa2V5d29yZHMgd2lsbCBuZXZl ciBiZSByZW1vdmVkLCBsZWF2aW5nIHVzIHdpdGggYSBwZXJtYW5lbnQgImhhY2sgbW9kZSINCiAg ICAgICogZHluYW1pYyBrZXl3b3JkcyBhcmUgYnkgZmFyIHByZWZlcmFibGUgdG8gc3VwcG9ydGlu ZyBydWJ5Ml9rZXl3b3JkcyBmb3JldmVyDQoqIExpa2VseSBfYmV0dGVyIHBlcmZvcm1hbmNlXywg YXMgdGhlIEt3SGFzaCBjbGFzcyBjYW4gYmUgb3B0aW1pemVkIHNwZWNpZmljYWxseSBmb3IgdGhl IGNoYXJhY3RlcmlzdGljcyBvZiBrZXl3b3JkIGFyZ3VtZW50cy4NCiogTW9yZSBmbGV4aWJsZSBt aWdyYXRpb24NCiAgICogQWxsb3cgbW9yZSB0aW1lIHRvIHVwZ3JhZGUgdGhlIGhhcmQgc3R1ZmYg aW4gU3RlcCA0DQogICAqIENhbiByZWFjaCB0aGUgX3NhbWVfIGdvYWwgYXMgdGhlIGN1cnJlbnQg c3RhdGljIGFwcHJvYWNoDQogICAqIExhcmdlciAic3VwcG9ydCB6b25lIiBodHRwczovL3hrY2Qu Y29tLzIyMjQvDQogICAqIEluc3RlYWQgb2Ygd2lkZS1yYW5naW5nIGluY29tcGF0aWJpbGl0aWVz IGFsbCBhdCBvbmNlLCB0aGVyZSdzIHRoZSBfcG9zc2liaWxpdHlfIG9mIG1ha2luZyBpdCBmaW5l ci1ncmFpbmVkIGFuZCBtb3JlIGdyYWR1YWwNCiAgICAgICogcnVieWlzdHMgY2FuIF9jaG9vc2Vf IHRvIG1pZ3JhdGUgYWxsIGF0IG9uY2Ugb3IgaW4gc21hbGxlciBjaHVua3MNCiAgICogSXQgaGVk Z2VzIHRoZSByaXNrcyBieSBrZWVwaW5nIG1vcmUgcG9zc2liaWxpdGllcyBvcGVuIGZvciBub3cu DQogICAqIEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0 IHRvbyBoYXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0dWZmDQoNCiMjIyBDb25zDQoq IEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBo YXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0dWZmDQoNCg0KDQoNCi0tIA0KaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJl cXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1 YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=