[ruby-core:97019] [Ruby master Feature#16511] Staged warnings for keyword arguments
From:
daniel@...42.com
Date:
2020-01-29 14:16:31 UTC
List:
ruby-core #97019
SXNzdWUgIzE2NTExIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCj4gRldJVywgSSBhbHNvIGRpc2N1c3NlZCB0byBrZWVwIGAqKmVtcHR5X2hhc2hgIGlu IHRoZSBjYXNlIGl0J3MgcGFzc2VkIGJ5IHRoZSB1c2VyIGluIGh0dHBzOi8vYnVncy5ydWJ5LWxh bmcub3JnL2lzc3Vlcy8xNjUxOSNub3RlLTUNCg0KQWgsIEkgbWlzc2VkIHRoYXQgb25lLiBJIHdh cyBhY3R1YWxseSBpbnNwaXJlZCB0byBrZWVwIHRoZSBiZWhhdmlvciBieSB5b3VyIFBSIGluICMx NjQ2My4gSSBoYXZlbid0IHBvc3RlZCB0aGF0IG11Y2ggdGhlcmUgYnV0IHRoYXQncyBiZWNhdXNl IEkgdmVyeSBtdWNoIGFncmVlIHdpdGggd2hhdCB5b3UncmUgc2F5aW5nLiBJIGNhbid0IHRoYW5r IHlvdSBlbm91Z2ggZm9yIHRoZSBlZmZvcnRzIHlvdSd2ZSBiZWVuIHB1dHRpbmcgaW4gdGhpcy4N Cg0KPiBKZXJlbXkgc2VlbXMgY2xlYXJseSBhZ2FpbnN0IGl0LCBhbmQgSSBnZXQgdGhhdCBgKipl bXB0eV9oYXNoYCBhbHdheXMgcGFzc2luZyBub3RoaW5nIGlzIHNpbXBsZXIgdG8gdW5kZXJzdGFu ZC4NCg0KTm93IHRoYXQgSSB1bmRlcnN0YW5kIHRoZSB2bV9hcmdzIGNvZGUgSSd2ZSBnYWluZWQg YSBiZXR0ZXIgYXBwcmVjaWF0aW9uIGZvciBKZXJlbXkncyB2aWV3cG9pbnQuIFRoZSBzcGxhdHRp bmcgb2YgYW4gZW1wdHkgaGFzaCBpbnRlcmFjdHMgaW4gYSByZWFsbHkgbmFzdHkgd2F5IHdpdGgg YCpyZXN0YCBhbmQgYCoqa3dyZXN0YCBkZWxlZ2F0aW9uLiBCdXQgSSBkb24ndCB0aGluayB0aGF0 IGFsd2F5cyBwYXNzaW5nIG5vdGhpbmcgaXMgc2ltcGxlci4uLg0KDQpgYGBydWJ5DQpkZWYgZm9v KG9wdHMpOyBwIG9wdHM7IGVuZA0Kb3B0cyA9IHt9DQpvcHRzWzprXSA9IDEgaWYgc29tZV9jb25k aXRpb24NCmZvbygqKm9wdHMpDQpgYGANCg0KSW4gMi43IHRoaXMgcmVzdWx0cyBpbiBhIHdhcm5p bmcgZGVwZW5kaW5nIG9uIGBzb21lX2NvbmRpdGlvbmAsIHRoYXQncyByZWFsbHkgbm90IHNpbXBs ZSB0byB1bmRlcnN0YW5kLiAgOi0vDQoNCj4gSSdtIG5vdCBzdXJlIHdoYXQncyB0aGUgZGVzaWdu IG9mIHlvdXIgcHJvcG9zYWwuDQo+IFdoYXQgZG8geW91IGNoYW5nZSB0byBrZWVwICphcmdzLWRl bGVnYXRpb24gd29ya2luZz8NCg0KV2VsbCwgdGhlIGRlc2lnbiBpcyBkZXNjcmliZWQgaW4gZXh0 cmVtZWx5IHRob3JvdWdoIGRldGFpbCBhYm92ZSwgYWx0aG91Z2ggSSByZWFsaXplIGl0J3MgYSBt YXNzaXZlIHdhbGwgb2YgdGV4dCB0byByZWFkLiBJIGd1ZXNzIHlvdSBjYW4gYm9pbCBpdCBkb3du IHRvIGhhdmluZyB0aGUga2V5d29yZCBmbGFnIHNldCBvbiBfZXZlcnlfIHNwbGF0dGVkIGhhc2gg aW5zdGVhZCBvZiBqdXN0IHdoZW4gYWNjZXB0aW5nIGEgYCpyZXN0YCBhcmd1bWVudC4gVGhhdCB3 YXkgaXMgbXVjaCBtb3JlIGxvZ2ljYWw7IGl0J3MgYSBjb2hlcmVudCBwYXJ0IG9mIHRoZSBkZXNp Z24gaW5zdGVhZCBvZiBhIHNwZWNpYWwtY2FzZSBoYWNrIChhcyBleHBsYWluZWQgaW4gdGhlIHBy b3Bvc2FsIGRlc2NyaXB0aW9uKS4NCg0KPiBJdCBzZWVtcyB1bmxpa2VseSBSdWJ5IGNvcmUgd291 bGQgYWNjZXB0IHRvIGJhY2twb3J0IGFueXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiAjMTY0 NjMgdG8gMi43Lg0KDQpEZXNwaXRlIGhhdmluZyBkZW1vbnN0cmFibGUgYmVuZWZpdHM/IFRoYXQg d291bGQgbWFrZSBtZSBzYWQuIEVuYWJsaW5nIHJ1YnkyX2tleXdvcmRzIGJ5IGRlZmF1bHQgZ2V0 cyA5MCUgb2YgdGhlIGJlbmVmaXQgZm9yIDEwJSBvZiB0aGUgY29tcGxleGl0eSwgYnV0IEkgdGhp bmsgaXQncyB3b3J0aCBnb2luZyB0byAxMDAlLCBhbmQgSSd2ZSBkb25lIGl0Lg0KDQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNjUxMTogU3RhZ2Vk IHdhcm5pbmdzIGZvciBrZXl3b3JkIGFyZ3VtZW50cw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvaXNzdWVzLzE2NTExI2NoYW5nZS04NDEwOA0KDQoqIEF1dGhvcjogRGFuMDA0MiAoRGFuaWVs IERlTG9ybWUpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFzc2lnbmVl OiANCiogVGFyZ2V0IHZlcnNpb246IA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KQXMgYW4gYWx0ZXJuYXRpdmUgdG8gIzE2NDYzIGFuZCAjMTY0OTQgSSdkIGxpa2Ug dG8gcHJvcG9zZSB0aGlzIGFwcHJvYWNoLCB3aGljaCBJIGJlbGlldmUgYWxsb3dzIGEgKiptdWNo KiogbW9yZSBmbGV4aWJsZSBwYXRoIGZvciBtaWdyYXRpb24gb2Yga2V5d29yZCBhcmd1bWVudHMu DQoNClRoZSBpZGVhIGlzIHRvIGluZGljYXRlIGZvciBldmVyeSBIYXNoIG9iamVjdCBpZiBpdCdz IGludGVuZGVkIHRvIHJlcHJlc2VudCBhIF9rZXl3b3JkXyBoYXNoIG9yIGEgX2RhdGFfIGhhc2gu IFRoaXMgZXh0cmEgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIGdlbmVyYXRlIG1vcmUgZ3Jh bnVsYXIgd2FybmluZ3MgZGVwZW5kaW5nIG9uIGEgdXNlcidzIGNvbXBhdGliaWxpdHkgbmVlZHMu DQoNClRoZSAia2V5d29yZG5lc3MiIG9mIGEgaGFzaCB3b3VsZCBiZSBpbmRpY2F0ZWQgYnkgYSAq KmZsYWcqKiBvbiB0aGUgSGFzaCBvYmplY3Q7IHRoaXMgaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCBp biAyLjcgYW5kIGlzIHRoZSBhcHByb2FjaCBmYXZvcmVkIGJ5IE1hdHouIExldCdzIGNhbGwgdGhp cyBmbGFnZ2VkIGhhc2ggYSAiS3dIYXNoIiwgYW5kIGEgbm9uLWZsYWdnZWQgaGFzaCBpcyBqdXN0 IGEgIkhhc2giLiBOb3RlOiB0aGlzIGNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgdmlhIGEgKipz dWJjbGFzcyoqIG9mIEhhc2ggKEkgcGVyc29uYWxseSBmYXZvciB0aGlzIG9iamVjdC1vcmllbnRl ZCBhcHByb2FjaCkgd2hpY2ggd2FzIHRoZSBvcmlnaW5hbCBpZGVhIGluIHRoaXMgcHJvcG9zYWwu DQoNCkknbGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBpZGVhIGluIGRldGFpbCBieSBicmVha2luZyBp dCBkb3duIGludG8gZmlndXJhdGl2ZSBzdGVwcy4gKFNraXAgdG8gIlB1dHRpbmcgaXQgYWxsIHRv Z2V0aGVyIiBmb3IgdGhlIFRMO0RSIHZlcnNpb24uKSBJbWFnaW5lIHN0YXJ0aW5nIHdpdGggcnVi eSAyLjYgYW5kIHRoZW46DQoNCiMjIyBTdGVwIDENCg0KV2hlbiBhIGRvdWJsZS1zcGxhdCBvciBh IGJyYWNlLWxlc3MgaGFzaCBpcyB1c2VkLCBpbnN0ZWFkIG9mIGEgSGFzaCBpdCBjcmVhdGVzIGEg S3dIYXNoLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHgpIHggZW5kDQpmb28oazoxKS5jbGFzcyAgICAg ICM9PiBLd0hhc2gNCmZvbygqKmhhc2gpLmNsYXNzICAgIz0+IEt3SGFzaA0KW2s6MV0ubGFzdC5j bGFzcyAgICAjPT4gS3dIYXNoDQpbKipoYXNoXS5sYXN0LmNsYXNzICM9PiBLd0hhc2gNCnsqKmhh c2h9LmNsYXNzICAgICAgIz0+IEhhc2gNCmBgYA0KDQpBdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3Qg aW50cm9kdWNlZCBhbnkgcmVhbCBjaGFuZ2UuIEV2ZXJ5dGhpbmcgdGhhdCB3b3JrZWQgYmVmb3Jl IGlzIHN0aWxsIHdvcmtpbmcgdGhlIHNhbWUgd2F5Lg0KKFdpdGggYSBtaW5vciBleGNlcHRpb24g aWYgdXNpbmcgdGhlIHN1YmNsYXNzIGFwcHJvYWNoOiB1bnVzdWFsIGNvZGUgbGlrZSBga3cuY2xh c3MgPT0gSGFzaGAgd291bGQgbm93IHJldHVybiBmYWxzZS4pDQoNCiMjIyBTdGVwIDINCg0KV2hl biB0aGVyZSBpcyBhbWJpZ3VpdHkgZHVlIHRvIG9wdGlvbmFsIHZzIGtleXdvcmQgYXJndW1lbnQs IHdlIHJlbHkgb24gdGhlIGxhc3QgYXJndW1lbnQgYmVpbmcgSGFzaCBvciBLd0hhc2ggdG8gZGlz YW1iaWd1YXRlLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHg9bmlsLCAqKmt3KQ0KICBbeCxrd10NCmVu ZA0KZm9vKHtrOjF9KSAjPT4gW3trOjF9LHt9XQ0KZm9vKGs6MSkgICAjPT4gW25pbCx7azoxfV0N CmBgYA0KDQpUaGlzIGlzIHRoZSBfbWluaW11bV8gYW1vdW50IG9mIGluY29tcGF0aWJpbGl0eSBy ZXF1aXJlZCB0byBzb2x2ZSBBTEwgYnVncyBwcmV2aW91c2x5IHJlcG9ydGVkIHdpdGgga2V5d29y ZCBhcmd1bWVudHMuICgjODA0MCwgIzgzMTYsICM5ODk4LCAjMTA4NTYsICMxMTIzNiwgIzExOTY3 LCAjMTIxMDQsICMxMjcxNywgIzEyODIxLCAjMTMzMzYsICMxMzY0NywgIzE0MTMwLCBldGMuKSAN Cg0KVGhlIHdhcm5pbmdzIGZvciB0aGlzIHdvdWxkIGJlIGFib3V0IGFuIGltcGVuZGluZyBfY2hh bmdlIG9mIGJlaGF2aW9yXyBpbiB0aGUgX25leHQgcnVieSB2ZXJzaW9uXywgd2hlcmUgYGZvbyh7 azoxfSlgIGlzIG5vIGxvbmdlciBpbnRlcnByZXRlZCBhcyBrZXl3b3JkIGFyZ3VtZW50Lg0KDQoj IyMgU3RlcCAzDQoNCkludHJvZHVjZSBhZGRpdGlvbmFsIGluY29tcGF0aWJpbGl0eSB0byBpbXBy b3ZlIGNsYXJpdHkgb2YgZGVzaWduLiBIZXJlIHdlIGRlcHJlY2F0ZSB0aGUgYXV0b21hdGljIGNv bnZlcnNpb24gb2YgSGFzaCB0byBrZXl3b3JkIGFyZ3VtZW50OyBvbmx5IEt3SGFzaCBpcyBhY2Nl cHRlZC4gV2l0aCBhIGRlcHJlY2F0aW9uL3dhcm5pbmcgcGhhc2UsIG9mIGNvdXJzZS4gVGhlICJh dXRvbWF0aWMiIHByb21vdGlvbiBvZiBhIEt3SGFzaCB0byBhIGtleXdvcmQgYXJndW1lbnQgZm9s bG93cyB0aGUgc2FtZSBydWxlcyBhcyBhIEhhc2ggaW4gMi42OyBzaW5jZSB0aGUgS3dIYXNoIGlz IGNvbmNlcHR1YWxseSBpbnRlbmRlZCB0byByZXByZXNlbnQga2V5d29yZCBhcmd1bWVudHMsIHRo aXMgY29udmVyc2lvbiBtYWtlcyBzZW5zZSBpbiBhIHdheSB0aGF0IGEgbm9ybWFsIGRhdGEgSGFz aCBkb2Vzbid0LiBXZSd2ZSB0YWtlbiB0aGUgImxhc3QgcG9zaXRpb25hbCBoYXNoIiBjb25jZXB0 IGFuZCBzcGxpdCBpdCBpbnRvICJjb25jZXB0dWFsbHkgYSBoYXNoIiBhbmQgImNvbmNlcHR1YWxs eSBrZXl3b3JkIGFyZ3VtZW50cyIuIF9Nb3N0IGltcG9ydGFudGx5XywgYWxsIHRoZSBjaGFuZ2Vz IHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ugd2FybmluZ3MgYXJlIF9jb21wYXRpYmxlIHdpdGgg Mi42Xy4NCg0KYGBgcnVieQ0KZGVmIGZvbyh4LCAqKmt3KTsgZW5kDQpmb28oazoxKSAgICAgICMg QXJndW1lbnRFcnJvciBiZWNhdXNlIHggbm90IHNwZWNpZmllZA0KZm9vKDEsIHtrOjF9KSAjIEFy Z3VtZW50RXJyb3IgYmVjYXVzZSB0b28gbWFueSBhcmd1bWVudHM7IEhhc2ggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBLd0hhc2hzDQpvcHRzID0gW2s6MV0uZmlyc3QNCmZvbyhvcHRzKSAgICAgIyBv cHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnQ7IEFyZ3Vt ZW50RXJyb3IgYmVjYXVzZSB4IG5vdCBzcGVjaWZpZWQNCmZvbygxLCBvcHRzKSAgIyBvcHRzIGlz IGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnQNCmBgYA0KDQpUaGUg d2FybmluZ3MgZm9yIHRoaXMgd291bGQgYmUgYWJvdXQgdXBjb21pbmcgX2Vycm9yc18gZm9yIHBv c2l0aW9uYWwgYXJndW1lbnRzOiBgZm9vKHg6MSlgIHdpbGwgYmUgImdpdmVuIDAsIGV4cGVjdGVk IDEiIGFuZCBgZm9vKDEse3g6Mn0pYCB3aWxsIGJlICJnaXZlbiAyLCBleHBlY3RlZCAxIi4gU3Vj aCBlcnJvcnMgYXJlIHVzZWZ1bCB3aGVuIGRldmVsb3BpbmcsIGJ1dCB0aGVyZSBpcyBubyBuZXcg ZnVuY3Rpb25hbGl0eSBwZXIgc2UsIGp1c3QgYSBzdHJpY3RlciBzeW50YXguIFNvIGl0J3MgbGVz cyBpbXBvcnRhbnQgdG8gZXNjYWxhdGUgdG8gYW4gZXJyb3IgYW5kIHdlIGNhbiBrZWVwIHRoZSB3 YXJuaW5ncyBmb3IgbG9uZ2VyIHRoYW4gU3RlcCAyLg0KDQpBdCB0aGlzIHBvaW50IHdlIGhhdmUg YWNoaWV2ZWQgX2FsbW9zdC1mdWxsXyAqKmR5bmFtaWMqKiBrZXl3b3JkIHNlcGFyYXRpb24sIGFz IG9wcG9zZWQgdG8gdGhlIGN1cnJlbnQgX2FsbW9zdC1mdWxsXyAqKnN0YXRpYyoqIGFwcHJvYWNo LiBJIHdhbnQgdG8gbWFrZSB0aGUgcG9pbnQgaGVyZSB0aGF0LCB5ZXMsIGtleXdvcmQgYXJndW1l bnRzICoqYXJlKiogc2VwYXJhdGVkLCBpdCdzIGp1c3QgYSBkaWZmZXJlbnQgcGFyYWRpZ20uIFdp dGggc3RhdGljIHNlcGFyYXRpb24sIGEga2V5d29yZCBhcmd1bWVudCBpcyBkZWZpbmVkIGxleGlj YWxseSBieSBhIGRvdWJsZS1zcGxhdC4gV2l0aCBkeW5hbWljIHNlcGFyYXRpb24sIGEga2V5d29y ZCBhcmd1bWVudCBpcyB3aGVuIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgS3dIYXNoLiB7e05vdGU6 IEknbSBzYXlpbmcgImFsbW9zdC1mdWxsIiBiZWNhdXNlIEt3SGFzaCBpcyBub3QgcHJvbW90ZWQg dG8ga2V5d29yZHMgaW4gYGRlZiBmb28oYSwqKmt3KTtlbmQ7Zm9vKHg6MSlgIGFuZCBiZWNhdXNl IHN0YXRpYyBrZXl3b3JkcyBhcmUgYXV0by1kZW1vdGVkIHRvIHBvc2l0aW9uYWwgaW4gYGRlZiBm b28oYSk7ZW5kO2Zvbyh4OjEpYH19DQoNCkFueSBmb3JtIG9mIGRlbGVnYXRpb24gd29ya3Mgd2l0 aCBubyBjaGFuZ2UgcmVxdWlyZWQuIFRoaXMgcHJlc2VydmVzIHRoZSBiZWhhdmlvciBvZiAyLjYg YnV0IG9ubHkgZm9yIEt3SGFzaCBvYmplY3RzLiBUaGlzIGlzIHNpbWlsYXIgdG8gaGF2aW5nIDIu NyB3aXRoIGBydWJ5Ml9rZXl3b3Jkc2AgZW5hYmxlZCBieSBkZWZhdWx0LiBCdXQgYWxzbyBkaWZm ZXJlbnQgaW4gc29tZSB3YXlzOyBtb3N0IG5vdGFibHkgaXQgYWxsb3dzIHRoZSBjYXNlIHNob3du IGluICMxNjQ5NCB0byB3b3JrIGJ5IGRlZmF1bHQ6DQoNCmBgYHJ1YnkNCmFycmF5ID0gW3g6MV0N CmFycmF5LnB1c2goeDoyKQ0KYXJyYXkubWFweyB8eDp8IHggfSAjPT4gWzEsMl0NClt7eDozfV0u bWFweyB8eDp8IHggfSAjPT4gYnV0IHRoaXMgd2FybnMsIGFzIGl0IHNob3VsZA0KYGBgDQoNClRo ZSBjdXJyZW50IGFwcHJvYWNoIGRvZXMgbm90IGFsbG93IHRoaXMgdG8gd29yayBhdCBhbGwuIFRo ZSBzb2x1dGlvbiBwcm9wb3NlZCBpbiAjMTY0OTQgaGFzIGFsbCB0aGUgc2FtZSBmbGF3cyBhcyBI YXNoLWJhc2VkIGtleXdvcmQgYXJndW1lbnRzOyB3aGF0IGhhcHBlbnMgdG8gYGVhY2h7IHx4PW5p bCwqKmt3fCB9YCA/IFRoaXMgc29sdXRpb24gYWxsb3dzIGEgS3dIYXNoIHRvIGJlIGNvbnZlcnRl ZCB0by4uLiBrZXl3b3Jkcy4gVmVyeSB1bnN1cnByaXNpbmcuDQoNCkdpdmVuIHRoYXQgcnVieSBp cyBhIGR5bmFtaWNhbGx5LXR5cGVkIGxhbmd1YWdlIEkgZmVlbCB0aGF0IGR5bmFtaWMgdHlwaW5n IG9mIGtleXdvcmRzIGlmIGEgbW9yZSBuYXR1cmFsIGZpdCB0aGFuIHN0YXRpYyB0eXBpbmcuIEJ1 dCBJIHJlYWxpemUgdGhhdCBtYW55IGRpc2FncmVlIHdpdGggdGhhdCwgd2hpY2ggaXMgd2h5IHdl IGNvbnRpbnVlIHRvLi4uDQoNCiMjIyBTdGVwIDQNCg0KSW50cm9kdWNlIGFkZGl0aW9uYWwgaW5j b21wYXRpYmlsaXR5IHRvIHJlYWNoIHN0YXRpYy9sZXhpY2FsIHNlcGFyYXRpb24gb2Yga2V5d29y ZCBhcmd1bWVudHMuIEhlcmUgd2UgcmVxdWlyZSB0aGF0IGV2ZW4gYSBLd0hhc2ggc2hvdWxkIGJl IHBhc3NlZCB3aXRoIGEgZG91YmxlLXNwbGF0IGluIG9yZGVyIHRvIHF1YWxpZnkgYXMgYSBrZXl3 b3JkIGFyZ3VtZW50Lg0KDQpgYGBydWJ5DQpkZWYgYmFyKCoqa3cpDQplbmQNCmRlZiBmb28oKipr dykNCiAgYmFyKGt3KSAgICM9PiBlcnJvcjsgS3dIYXNoIHBhc3NlZCB3aXRob3V0ICoqDQogIGJh cigqKmt3KSAjPT4gb2sNCmVuZA0KYGBgDQoNCkF0IHRoaXMgcG9pbnQgd2UndmUgcmVhY2hlZCB0 aGUgc2FtZSBiZWhhdmlvciBhcyAyLjcuIERlbGVnYXRpb24gbmVlZHMgdG8gYmUgZml4ZWQsIGJ1 dCBhcyB3ZSBrbm93IHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ugd2Fybmlu Z3MgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIDIuNiBvciAyLjcuIFRoZSB3YXJuaW5ncyBm b3IgdGhpcyBhcmUgX2Z1bmRhbWVudGFsbHkgbm90IGZpeGFibGVfIGFzIGxvbmcgYXMgU3RlcCAy IGhhcyBub3QgYmVlbiBmaXhlZC4gVGhpcyBpcyB0aGUgY29yZSByZWFzb24gd2h5IGBydWJ5Ml9r ZXl3b3Jkc2AgaXMgY3VycmVudGx5IG5lY2Vzc2FyeSBpbiAyLjcuIFNvIGluIHRoZSB2ZXJzaW9u IGFmdGVyIDIuNyB3ZSBjYW4gZW5hYmxlIHRoZXNlIHdhcm5pbmdzIGJ5IGRlZmF1bHQgc2luY2Ug aXQncyBub3cgcG9zc2libGUgdG8gZml4IGRlbGVnYXRpb24gdG8gdXNlIHN0YXRpYyBrZXl3b3Jk cy4gRXhjZXB0IHRoYXQgZ2VtIGF1dGhvcnMgd2hvIG5lZWQgdG8gc3RheSBjb21wYXRpYmxlIHdp dGgg4omkMi43IGNhbm5vdCB5ZXQgbWFrZSB0aGVzZSBjaGFuZ2VzLCBzbyB3ZSBpbnRyb2R1Y2Ug YSB3YXkgdG8gX3NpbGVuY2UgKipvbmx5KiogdGhlc2UgIlN0ZXAgNCIgd2FybmluZ3NfLCBmb3Ig cGVvcGxlIHdobyBuZWVkIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGgg4omkMi43LiBBbmQgd2Ug a2VlcCB0aGVtIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgZXJyb3JzIHVudGlsIHJ1YnkgMi43IGlz IEVPTC4NCg0KU28gaW5zdGVhZCBvZiBoYXZpbmcgdG8gdXBkYXRlIGEgYnVuY2ggb2YgcGxhY2Vz IHdpdGggYHJ1YnkyX2tleXdvcmRzYCBqdXN0IHRvIHRlbXBvcmFyaWx5IHNpbGVuY2Ugd2Fybmlu Z3MsIGl0J3MgYSBzaW5nbGUgZmxhZyBsaWtlIGBXYXJuaW5nWzpydWJ5M19rZXl3b3Jkc11gLiBP bmNlIHJ1YnkgMi43IGlzIEVPTCB0aGVzZSBiZWNvbWUgY29udHJvbGxlZCBieSBgV2FybmluZ1s6 ZGVwcmVjYXRlZF1gIHdoaWNoIHRlbGxzIHBlb3BsZSB0aGV5ICoqaGF2ZSoqIHRvIGZpeCB0aGVp ciBjb2RlLiBXaGljaCBpcyBqdXN0IGxpa2UgdGhlIGV2ZW50dWFsIGRlcHJlY2F0aW9uIG9mIGBy dWJ5Ml9rZXl3b3Jkc2AsIGp1c3Qgd2l0aG91dCB0aGUgYnVzeSB3b3JrIG9mIGFkZGluZyBgcnVi eTJfa2V5d29yZHNgIHN0YXRlbWVudHMgaW4gdGhlIGZpcnN0IHBsYWNlLiBCdXQgYWdhaW4sIHRo aXMgaW50cm9kdWNlcyBubyBuZXcgZnVuY3Rpb25hbGl0eSwganVzdCBhIHN0cmljdGVyIHN5bnRh eC4gU28gd2UgY2FuIHBsYXkgbmljZSBhbmQgbGVhdmUgdGhlIHdhcm5pbmdzIGZvciBhIGZldyB5 ZWFycyBiZWZvcmUgY2hhbmdpbmcgdG8gZXJyb3JzLg0KDQpUaGUgcXVlc3Rpb24gcmVtYWlucyBv ZiBob3cgdG8gaGFuZGxlICMxNjQ5NCBoZXJlLiBFaXRoZXIgZGlzYWxsb3cgaXQgZW50aXJlbHks IGJ1dCBJIHRoaW5rIHRoYXQgd291bGQgYmUgYSBzaGFtZS4gT3IganVzdCBsaWtlICMxNjQ5NCBz dWdnZXN0cywgYWxsb3cgaGFzaCB1bnBhY2tpbmcgaW4gbm9uLWxhbWJkYSBQcm9jLiBFeGNlcHQg dGhhdCBub3cgaXQgY2FuIGJlIGEgS3dIYXNoIGluc3RlYWQgb2YgYSBIYXNoLCB3aGljaCBhdCBs ZWFzdCBwcmVzZXJ2ZXMgZHluYW1pYyBrZXl3b3JkIHNlcGFyYXRpb24uDQoNCiMjIFB1dHRpbmcg aXQgYWxsIHRvZ2V0aGVyIChUTDtEUikNCg0KVGhlIGlkZWEgaXMgX25vdF8gdG8gcmVpbXBsZW1l bnQga2V5d29yZCBhcmd1bWVudCBzZXBhcmF0aW9uOyBhbGwgdGhhdCBpcyBuZWVkZWQgaXMgdG8g aW1wbGVtZW50IHRoZSB0aGluZ3MgYWJvdmUgdGhhdCBhcmUgbm90IGluIDIuNzoNCiogQ3JlYXRl IGEgS3dIYXNoIG9iamVjdCBmb3IgYnJhY2UtbGVzcyBhbmQgZG91YmxlLXNwbGF0dGVkIGhhc2hl cy4NCiogRGlmZmVyZW50aWF0ZSB0aGUgdmFyaW91cyB0eXBlcyBvZiB3YXJuaW5ncyBhbmQgYWxs b3cgdG8gdG9nZ2xlIG9uL29mZiBzZXBhcmF0ZWx5DQogICogU3RlcCAyIHdhcm5pbmdzIF9tdXN0 XyBiZSBmaXhlZCBub3c7IGNhbm5vdCB0b2dnbGUgb2ZmDQogICogU3RlcCAzIHdhcm5pbmdzIF9z aG91bGRfIGJlIGZpeGVkIG5vdyBidXQgeW91IGRvbid0IGFic29sdXRlbHkgbmVlZCB0byB1cGdy YWRlIHlvdXIgZ2VtcyBqdXN0IGZvciB0aGF0DQogICogU3RlcCA0IHdhcm5pbmdzIF9zaG91bGRf IGJlIGZpeGVkIGluIG5leHQgdmVyc2lvbiB1bmxlc3MgeW91IG5lZWQgdG8gc3VwcG9ydCDiiaQy LjcNCg0KSSB0aGluayB0aGF0J3MgYWxsLCByZWFsbHkuLi4NCg0KIyMjIFByb3MNCiogQ2xlYW5l ciB3YXkgdG8gc29sdmUgIzE2NDk0DQoqIEJldHRlciBjb21wYXRpYmlsaXR5IChhdCBsZWFzdCB1 bnRpbCAyLjYgaXMgRU9MKQ0KICAgKiBkZWxlZ2F0aW9uDQogICAqIHN0b3JpbmcgYW4gYXJndW1l bnQgbGlzdCB0aGF0IGVuZHMgd2l0aCBhIEt3SGFzaA0KICAgKiBkZXN0cnVjdHVyaW5nIGl0ZXJh dGlvbiAoIzE2NDk0KQ0KKiBXZSBjYW4gYXZvaWQgdGhlICJ1bmZvcnR1bmF0ZSBjb3JuZXIgY2Fz ZSIgYXMgZGVzY3JpYmVkIGluIHRoZSBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly93d3cucnVieS1s YW5nLm9yZy9lbi9uZXdzLzIwMTkvMTIvMTIvc2VwYXJhdGlvbi1vZi1wb3NpdGlvbmFsLWFuZC1r ZXl3b3JkLWFyZ3VtZW50cy1pbi1ydWJ5LTMtMC8pDQogICAqIGluIDIuNyBvbmx5IGRvIG5vdCBv dXRwdXQgIlN0ZXAgNCIgd2FybmluZ3MsIGxlYXZlIGRlbGVnYXRpb24gbGlrZSBpdCB3YXMNCiAg ICogaW4gMi44IHRoZSAiU3RlcCAzIiB3YXJuaW5ncyBoYXZlIGJlZW4gZml4ZWQgYW5kIGEgSGFz aCB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgdG8ga2V5d29yZCBhcmd1bWVudHMNCiAgICogZGVsZWdh dGlvbiBjYW4gbm93IHNhZmVseSBiZSBmaXhlZCB0byB1c2UgdGhlIGAqKmAgc3ludGF4DQoqIHJ1 YnkyX2tleXdvcmRzIGlzIG5vdCByZXF1aXJlZCwgd2hpY2ggaXMgZGVzaXJhYmxlIGJlY2F1c2UN CiAgICogaXQncyBhIGhpZGRlbiBmbGFnIF9oYWNrXw0KICAgKiBpdCByZXF1aXJlcyB0byBjaGFu Z2UgdGhlIGNvZGUgbm93LCBhbmQgY2hhbmdlIGl0IF9hZ2Fpbl8gd2hlbiBydWJ5Ml9rZXl3b3Jk cyBpcyBkZXByZWNhdGVkOyB0d2ljZSB0aGUgd29yazsgdHdpY2UgdGhlIGdlbSB1cGdyYWRlcw0K ICAgKiBpdCB3YXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBvbmx5IGZvciBwZW9wbGUgd2hvIG5lZWQg dG8gc3VwcG9ydCAyLjYgb3IgYmVsb3csIGJ1dCBpdCdzIGJlaW5nIG1pc3VuZGVyc3Rvb2QgYXMg YW4gYWNjZXB0YWJsZSB3YXkgdG8gZml4IGRlbGVnYXRpb24gaW4gZ2VuZXJhbA0KICAgKiB0aGVy ZSdzIHRoZSBub24temVybyByaXNrIHRoYXQgcnVieTJfa2V5d29yZHMgd2lsbCBuZXZlciBiZSBy ZW1vdmVkLCBsZWF2aW5nIHVzIHdpdGggYSBwZXJtYW5lbnQgImhhY2sgbW9kZSINCiAgICAgICog ZHluYW1pYyBrZXl3b3JkcyBhcmUgYnkgZmFyIHByZWZlcmFibGUgdG8gc3VwcG9ydGluZyBydWJ5 Ml9rZXl3b3JkcyBmb3JldmVyDQoqIExpa2VseSBfYmV0dGVyIHBlcmZvcm1hbmNlXywgYXMgdGhl IEt3SGFzaCBjbGFzcyBjYW4gYmUgb3B0aW1pemVkIHNwZWNpZmljYWxseSBmb3IgdGhlIGNoYXJh Y3RlcmlzdGljcyBvZiBrZXl3b3JkIGFyZ3VtZW50cy4NCiogTW9yZSBmbGV4aWJsZSBtaWdyYXRp b24NCiAgICogQWxsb3cgbW9yZSB0aW1lIHRvIHVwZ3JhZGUgdGhlIGhhcmQgc3R1ZmYgaW4gU3Rl cCA0DQogICAqIENhbiByZWFjaCB0aGUgX3NhbWVfIGdvYWwgYXMgdGhlIGN1cnJlbnQgc3RhdGlj IGFwcHJvYWNoDQogICAqIExhcmdlciAic3VwcG9ydCB6b25lIiBodHRwczovL3hrY2QuY29tLzIy MjQvDQogICAqIEluc3RlYWQgb2Ygd2lkZS1yYW5naW5nIGluY29tcGF0aWJpbGl0aWVzIGFsbCBh dCBvbmNlLCB0aGVyZSdzIHRoZSBfcG9zc2liaWxpdHlfIG9mIG1ha2luZyBpdCBmaW5lci1ncmFp bmVkIGFuZCBtb3JlIGdyYWR1YWwNCiAgICAgICogcnVieWlzdHMgY2FuIF9jaG9vc2VfIHRvIG1p Z3JhdGUgYWxsIGF0IG9uY2Ugb3IgaW4gc21hbGxlciBjaHVua3MNCiAgICogSXQgaGVkZ2VzIHRo ZSByaXNrcyBieSBrZWVwaW5nIG1vcmUgcG9zc2liaWxpdGllcyBvcGVuIGZvciBub3cuDQogICAq IEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBo YXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0dWZmDQoNCiMjIyBDb25zDQoqIEl0IGFs bG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBoYXJkIGJl Y2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0dWZmDQoNCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvDQoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RA cnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFu Zy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=