[ruby-core:117507] [Ruby master Feature#20425] Optimize forwarding callers and callees
From:
"tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date:
2024-04-12 21:07:24 UTC
List:
ruby-core #117507
SXNzdWUgIzIwNDI1IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQp0ZW5kZXJsb3ZlbWFraW5nIChBYXJvbiBQYXR0ZXJzb24pIHdyb3Rl IGluICNub3RlLTQ6DQo+IGtvMSAoS29pY2hpIFNhc2FkYSkgd3JvdGUgaW4gI25vdGUtMjoNCj4g PiBJIHRoaW5rIGl0IGlzIGdvb2QgaWRlYSBidXQgSSdtIGNvbmNlcm5lZCB0aGF0IHRoZSBjb2Rl IG9uIGdpdGh1YiBtYXkgYWZmZWN0IG5vcm1hbCBjYXNlcyBiZWNhdXNlIG9mIGFkZGl0aW9uYWwg Y29kZSBwYXRoLg0KPiANCj4gSXQgb25seSBpbXBhY3RzIHRoZSBgc2VuZGAgaW5zdHJ1Y3Rpb24g YW5kIGBpbnZva2VzdXBlcmAgaW5zdHJ1Y3Rpb24uICBJZiB0aGVyZSBpcyBhIHNwZWVkIGltcGFj dCwgSSB0aGluayB3ZSBjb3VsZCBlbWl0ICJmb3J3YXJkaW5nX3NlbmQiIG9yICJmb3J3YXJkaW5n X3N1cGVyIiBpbnN0cnVjdGlvbnMgYW5kIGVsaW1pbmF0ZSB0aGUgY29kZSBwYXRoLiAgQWxzbywg YXMgeW91IG5vdGVkIG9uIHRoZSBQUiBtb3N0IGlzZXFzIGFyZSAic2ltcGxlIiBhbmQgd2UgYWxy ZWFkeSBoYXZlIHRvIGNoZWNrIHRoYXQuICBGb3J3YXJkYWJsZSBpc2VxcyBhcmUganVzdCBub3Qg Y29uc2lkZXJlZCAic2ltcGxlIiDwn5iGDQoNCkkgdHJpZWQgcnVubmluZyBgdm1fY2FsbGAgYmVu Y2htYXJrcy4gIEkgY2FuJ3QgdGVsbCBpZiB0aGVyZSBpcyBhbnkgaW1wYWN0LiBCZW5jaG1hcmsg cmVzdWx0cyBhcmUgW2hlcmVdKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RlbmRlcmxvdmUvZTQy Njc0NzczMzAwZTQwZDY4Yzc2NDg3NjUwOGFkOTMpDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNDI1OiBPcHRpbWl6ZSBmb3J3YXJkaW5nIGNh bGxlcnMgYW5kIGNhbGxlZXMNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8yMDQy NSNjaGFuZ2UtMTA3ODk0DQoNCiogQXV0aG9yOiB0ZW5kZXJsb3ZlbWFraW5nIChBYXJvbiBQYXR0 ZXJzb24pDQoqIFN0YXR1czogT3Blbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KW1RoaXMgUFJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC8xMDUx MCkgb3B0aW1pemVzIGZvcndhcmRpbmcgY2FsbGVycyBhbmQgY2FsbGVlcy4gSXQgb25seSBvcHRp bWl6ZXMgbWV0aG9kcyB0aGF0IG9ubHkgdGFrZSBgLi4uYCBhcyB0aGVpciBwYXJhbWV0ZXIsIGFu ZCB0aGVuIHBhc3MgYC4uLmAgdG8gb3RoZXIgY2FsbHMuDQoNCkNhbGxzIGl0IG9wdGltaXplcyBs b29rIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KZGVmIGJhcihhKSA9IGENCmRlZiBmb28oLi4uKSA9 IGJhciguLi4pICMgb3B0aW1pemVkDQpmb28oMTIzKQ0KYGBgDQoNCmBgYHJ1YnkNCmRlZiBiYXIo YSkgPSBhDQpkZWYgZm9vKC4uLikgPSBiYXIoMSwgMiwgLi4uKSAjIG9wdGltaXplZA0KZm9vKDEy MykNCmBgYA0KDQpgYGBydWJ5DQpkZWYgYmFyKCphKSA9IGENCg0KZGVmIGZvbyguLi4pDQogIGxp c3QgPSBbMSwgMl0NCiAgYmFyKCpsaXN0LCAuLi4pICMgb3B0aW1pemVkDQplbmQNCmZvbygxMjMp DQpgYGANCg0KQWxsIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSBidXQgdXNpbmcgYHN1cGVyYCBhcmUg YWxzbyBvcHRpbWl6ZWQsIGluY2x1ZGluZyBhIGJhcmUgc3VwZXIgbGlrZSB0aGlzOg0KDQpgYGBy dWJ5DQpkZWYgZm9vKC4uLikNCiAgc3VwZXINCmVuZA0KYGBgDQoNClRoaXMgcGF0Y2ggZWxpbWlu YXRlcyBpbnRlcm1lZGlhdGUgYWxsb2NhdGlvbnMgbWFkZSB3aGVuIGNhbGxpbmcgbWV0aG9kcyB0 aGF0IGFjY2VwdCBgLi4uYC4NCldlIGNhbiBvYnNlcnZlIGFsbG9jYXRpb24gZWxpbWluYXRpb24g bGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgbQ0KICB4ID0gR0Muc3RhdCg6dG90YWxfYWxsb2Nh dGVkX29iamVjdHMpDQogIHlpZWxkDQogIEdDLnN0YXQoOnRvdGFsX2FsbG9jYXRlZF9vYmplY3Rz KSAtIHgNCmVuZA0KDQpkZWYgYmFyKGEpID0gYQ0KZGVmIGZvbyguLi4pID0gYmFyKC4uLikNCg0K ZGVmIHRlc3QNCiAgbSB7IGZvbygxMjMpIH0NCmVuZA0KDQp0ZXN0DQpwIHRlc3QgIyBhbGxvY2F0 ZXMgMSBvYmplY3Qgb24gbWFzdGVyLCBidXQgMCBvYmplY3RzIHdpdGggdGhpcyBwYXRjaA0KYGBg DQoNCmBgYHJ1YnkNCmRlZiBiYXIoYSwgYjopID0gYSArIGINCmRlZiBmb28oLi4uKSA9IGJhcigu Li4pDQoNCmRlZiB0ZXN0DQogIG0geyBmb28oMSwgYjogMikgfQ0KZW5kDQoNCnRlc3QNCnAgdGVz dCAjIGFsbG9jYXRlcyAyIG9iamVjdHMgb24gbWFzdGVyLCBidXQgMCBvYmplY3RzIHdpdGggdGhp cyBwYXRjaA0KYGBgDQoNCiMjIEhvdyBkb2VzIGl0IHdvcms/DQoNClRoaXMgcGF0Y2ggd29ya3Mg YnkgdXNpbmcgYSBkeW5hbWljIHN0YWNrIHNpemUgd2hlbiBwYXNzaW5nIGZvcndhcmRlZCBwYXJh bWV0ZXJzIHRvIGNhbGxlZXMuDQpUaGUgY2FsbGVyJ3MgaW5mbyBvYmplY3QgKGtub3duIGFzIHRo ZSAiQ0kiKSBjb250YWlucyB0aGUgc3RhY2sgc2l6ZSBvZiB0aGUNCnBhcmFtZXRlcnMsIHNvIHdl IHBhc3MgdGhlIENJIG9iamVjdCBpdHNlbGYgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGNhbGxlZS4N CldoZW4gZm9yd2FyZGluZyBwYXJhbWV0ZXJzLCB0aGUgZm9yd2FyZGluZyBJU2VxIHVzZXMgdGhl IGNhbGxlcidzIENJIHRvIGRldGVybWluZSBob3cgbXVjaCBzdGFjayB0byBjb3B5LCB0aGVuIGNv cGllcyB0aGUgY2FsbGVyJ3Mgc3RhY2sgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxlZS4NClRoZSBD SSBhdCB0aGUgZm9yd2FyZGVkIGNhbGwgc2l0ZSBpcyBhZGp1c3RlZCB1c2luZyBpbmZvcm1hdGlv biBmcm9tIHRoZSBjYWxsZXIncyBDSS4NCg0KSSB0aGluayB0aGlzIGRlc2NyaXB0aW9uIGlzIGtp bmQgb2YgY29uZnVzaW5nLCBzbyBsZXQncyB3YWxrIHRocm91Z2ggYW4gZXhhbXBsZSB3aXRoIGNv ZGUuDQoNCmBgYHJ1YnkNCmRlZiBkZWxlZ2F0ZWUoYSwgYikgPSBhICsgYg0KDQpkZWYgZGVsZWdh dG9yKC4uLikNCiAgZGVsZWdhdGVlKC4uLikgICMgQ0kyIChGT1JXQVJESU5HKQ0KZW5kDQoNCmRl ZiBjYWxsZXINCiAgZGVsZWdhdG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKQ0KZW5kDQpgYGANCg0K QmVmb3JlIHdlIGNhbGwgdGhlIGRlbGVnYXRvciBtZXRob2QsIHRoZSBzdGFjayBsb29rcyBsaWtl IHRoaXM6DQoNCmBgYA0KRXhlY3V0aW5nIExpbmUgfCBDb2RlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgU3RhY2sNCi0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0NCiAgICAgICAgICAgICAgMXwgZGVmIGRlbGVn YXRlZShhLCBiKSA9IGEgKyBiICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAgICAgMnwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDENCiAgICAgICAgICAgICAgM3wg ZGVmIGRlbGVnYXRvciguLi4pICAgICAgICAgICAgICAgICAgICB8IDINCiAgICAgICAgICAgICAg NHwgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAg IDV8ICAgZGVsZWdhdGVlKC4uLikgICMgQ0kyIChGT1JXQVJESU5HKSAgfA0KICAgICAgICAgICAg ICA2fCBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAg ICAgN3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAg ICAgIDh8IGRlZiBjYWxsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgICAgICAg IC0+ICA5fCAgIGRlbGVnYXRvcigxLCAyKSAjIENJMSAoYXJnYzogMikgICAgIHwNCiAgICAgICAg ICAgICAxMHwgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQpgYGANCg0K VGhlIElTZXEgZm9yIGBkZWxlZ2F0b3JgIGlzIHRhZ2dlZCBhcyAiZm9yd2FyZGFibGUiLCBzbyB3 aGVuIGBjYWxsZXJgIGNhbGxzIGluDQp0byBgZGVsZWdhdG9yYCwgaXQgd3JpdGVzIGBDSTFgIG9u IHRvIHRoZSBzdGFjayBhcyBhIGxvY2FsIHZhcmlhYmxlIGZvciB0aGUNCmBkZWxlZ2F0b3JgIG1l dGhvZC4gIFRoZSBgZGVsZWdhdG9yYCBtZXRob2QgaGFzIGEgc3BlY2lhbCBsb2NhbCBjYWxsZWQg YC4uLmANCnRoYXQgaG9sZHMgdGhlIGNhbGxlcidzIENJIG9iamVjdC4NCg0KSGVyZSBpcyB0aGUg SVNlcSBkaXNhc20gZm8gYGRlbGVnYXRvcmA6DQoNCmBgYA0KPT0gZGlzYXNtOiAjPElTZXE6ZGVs ZWdhdG9yQC1lOjEgKDEsMCktKDEsMzkpPg0KbG9jYWwgdGFibGUgKHNpemU6IDEsIGFyZ2M6IDAg W29wdHM6IDAsIHJlc3Q6IC0xLCBwb3N0OiAwLCBibG9jazogLTEsIGt3OiAtMUAtMSwga3dyZXN0 OiAtMV0pDQpbIDFdICIuLi4iQDANCjAwMDAgcHV0c2VsZiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgMSlbTGlDYV0NCjAwMDEgZ2V0 bG9jYWxfV0NfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uLiJAMA0KMDAwMyBzZW5kICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2FsbGRhdGEhbWlkOmRlbGVnYXRlZSwg YXJnYzowLCBGQ0FMTHxGT1JXQVJESU5HPiwgbmlsDQowMDA2IGxlYXZlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFtSZV0NCmBgYA0KDQpUaGUgbG9jYWwgY2FsbGVkIGAuLi5gIHdp bGwgY29udGFpbiB0aGUgY2FsbGVyJ3MgQ0k6IENJMS4NCg0KSGVyZSBpcyB0aGUgc3RhY2sgd2hl biB3ZSBlbnRlciBgZGVsZWdhdG9yYDoNCg0KDQpgYGANCkV4ZWN1dGluZyBMaW5lIHwgQ29kZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFN0YWNrDQotLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tDQogICAgICAg ICAgICAgIDF8IGRlZiBkZWxlZ2F0ZWUoYSwgYikgPSBhICsgYiAgICAgICAgICAgfCBzZWxmDQog ICAgICAgICAgICAgIDJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAx DQogICAgICAgICAgICAgIDN8IGRlZiBkZWxlZ2F0b3IoLi4uKSAgICAgICAgICAgICAgICAgICAg fCAyDQogICAgICAgICAgIC0+IDR8ICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCBDSTEgKGFyZ2M6IDIpDQogICAgICAgICAgICAgIDV8ICAgZGVsZWdhdGVlKC4uLikgICMg Q0kyIChGT1JXQVJESU5HKSAgfCBjcmVmX29yX21lDQogICAgICAgICAgICAgIDZ8IGVuZCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGVjdmFsDQogICAgICAgICAgICAgIDd8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlDQogICAgICAgICAg ICAgIDh8IGRlZiBjYWxsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgICAgICAg ICAgICA5fCAgIGRlbGVnYXRvcigxLCAyKSAjIENJMSAoYXJnYzogMikgICAgIHwNCiAgICAgICAg ICAgICAxMHwgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQpgYGANCg0K VGhlIENJIGF0IGBkZWxlZ2F0ZWVgIG9uIGxpbmUgNSBpcyB0YWdnZWQgYXMgIkZPUldBUkRJTkci LCBzbyBpdCBrbm93cyB0bw0KbWVtY29weSB0aGUgY2FsbGVyJ3Mgc3RhY2sgYmVmb3JlIGNhbGxp bmcgYGRlbGVnYXRlZWAuICBJbiB0aGlzIGNhc2UsIGl0IHdpbGwNCm1lbWNvcHkgc2VsZiwgMSwg YW5kIDIgdG8gdGhlIHN0YWNrIGJlZm9yZSBjYWxsaW5nIGBkZWxlZ2F0ZWVgLiAgSXQga25vd3Mg aG93IG11Y2gNCm1lbW9yeSB0byBjb3B5IGZyb20gdGhlIGNhbGxlciBiZWNhdXNlIGBDSTFgIGNv bnRhaW5zIHN0YWNrIHNpemUgaW5mb3JtYXRpb24NCihhcmdjOiAyKS4NCg0KQmVmb3JlIGV4ZWN1 dGluZyB0aGUgYHNlbmRgIGluc3RydWN0aW9uLCB3ZSBwdXNoIGAuLi5gIG9uIHRoZSBzdGFjay4g IFRoZQ0KYHNlbmRgIGluc3RydWN0aW9uIHBvcHMgYC4uLmAsIGFuZCBiZWNhdXNlIGl0IGlzIHRh Z2dlZCB3aXRoIGBGT1JXQVJESU5HYCwgaXQNCmtub3dzIHRvIG1lbWNvcHkgKHVzaW5nIHRoZSBp bmZvcm1hdGlvbiBpbiB0aGUgQ0kgaXQganVzdCBwb3BwZWQpOg0KDQpgYGANCj09IGRpc2FzbTog IzxJU2VxOmRlbGVnYXRvckAtZToxICgxLDApLSgxLDM5KT4NCmxvY2FsIHRhYmxlIChzaXplOiAx LCBhcmdjOiAwIFtvcHRzOiAwLCByZXN0OiAtMSwgcG9zdDogMCwgYmxvY2s6IC0xLCBrdzogLTFA LTEsIGt3cmVzdDogLTFdKQ0KWyAxXSAiLi4uIkAwDQowMDAwIHB1dHNlbGYgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgIDEpW0xpQ2Fd DQowMDAxIGdldGxvY2FsX1dDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICIuLi4iQDANCjAw MDMgc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhbGxkYXRhIW1pZDpk ZWxlZ2F0ZWUsIGFyZ2M6MCwgRkNBTEx8Rk9SV0FSRElORz4sIG5pbA0KMDAwNiBsZWF2ZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmVdDQpgYGANCg0KSW5zdHJ1Y3Rpb24gMDAx IHB1dHMgdGhlIGNhbGxlcidzIENJIG9uIHRoZSBzdGFjay4gIGBzZW5kYCBpcyB0YWdnZWQgd2l0 aA0KRk9SV0FSRElORywgc28gaXQgcmVhZHMgdGhlIENJIGFuZCBfY29waWVzXyB0aGUgY2FsbGVy cyBzdGFjayB0byB0aGlzIHN0YWNrOg0KDQpgYGANCkV4ZWN1dGluZyBMaW5lIHwgQ29kZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFN0YWNrDQotLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tDQogICAgICAgICAg ICAgIDF8IGRlZiBkZWxlZ2F0ZWUoYSwgYikgPSBhICsgYiAgICAgICAgICAgfCBzZWxmDQogICAg ICAgICAgICAgIDJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxDQog ICAgICAgICAgICAgIDN8IGRlZiBkZWxlZ2F0b3IoLi4uKSAgICAgICAgICAgICAgICAgICAgfCAy DQogICAgICAgICAgICAgIDR8ICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBDSTEgKGFyZ2M6IDIpDQogICAgICAgICAgIC0+IDV8ICAgZGVsZWdhdGVlKC4uLikgICMgQ0ky IChGT1JXQVJESU5HKSAgfCBjcmVmX29yX21lDQogICAgICAgICAgICAgIDZ8IGVuZCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcGVjdmFsDQogICAgICAgICAgICAgIDd8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlDQogICAgICAgICAgICAg IDh8IGRlZiBjYWxsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWxmDQogICAgICAg ICAgICAgIDl8ICAgZGVsZWdhdG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKSAgICAgfCAxDQogICAg ICAgICAgICAgMTB8IGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyDQpg YGANCg0KVGhlICJGT1JXQVJESU5HIiBjYWxsIHNpdGUgY29tYmluZXMgaW5mb3JtYXRpb24gZnJv bSBDSTEgd2l0aCBDSTIgaW4gb3JkZXINCnRvIHN1cHBvcnQgcGFzc2luZyBvdGhlciB2YWx1ZXMg aW4gYWRkaXRpb24gdG8gdGhlIGAuLi5gIHZhbHVlLCBhcyB3ZWxsIGFzDQpwZXJmZWN0bHkgZm9y d2FyZCBzcGxhdCBhcmdzLCBrd2FyZ3MsIGV0Yy4NCg0KU2luY2Ugd2UncmUgYWJsZSB0byBjb3B5 IHRoZSBzdGFjayBmcm9tIGBjYWxsZXJgIGluIHRvIGBkZWxlZ2F0b3JgJ3Mgc3RhY2ssIHdlDQpj YW4gYXZvaWQgYWxsb2NhdGluZyBvYmplY3RzLg0KDQojIyBXaHk/DQoNCkkgd2FudCB0byBkbyB0 aGlzIHRvIGVsaW1pbmF0ZSBvYmplY3QgYWxsb2NhdGlvbnMgZm9yIGRlbGVnYXRlIG1ldGhvZHMu DQpNeSBsb25nIHRlcm0gZ29hbCBpcyB0byBpbXBsZW1lbnQgYENsYXNzI25ld2AgaW4gUnVieSBh bmQgaXQgdXNlcyBgLi4uYC4NCg0KSSB3YXMgYWJsZSB0byBpbXBsZW1lbnQgYENsYXNzI25ld2Ag aW4gUnVieQ0KW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC85Mjg5KS4N CklmIHdlIGFkb3B0IHRoZSB0ZWNobmlxdWUgaW4gdGhpcyBwYXRjaCwgdGhlbiB3ZSBjYW4gb3B0 aW1pemUgYWxsb2NhdGluZw0Kb2JqZWN0cyB0aGF0IHRha2Uga2V5d29yZCBwYXJhbWV0ZXJzIGZv ciBgaW5pdGlhbGl6ZWAuDQoNCkZvciBleGFtcGxlLCB0aGlzIGNvZGUgd2lsbCBhbGxvY2F0ZSAy IG9iamVjdHM6IG9uZSBmb3IgYFNvbWVPYmplY3RgLCBhbmQgb25lDQpmb3IgdGhlIGt3YXJnczoN Cg0KYGBgcnVieQ0KU29tZU9iamVjdC5uZXcoZm9vOiAxKQ0KYGBgDQoNCklmIHdlIGNvbWJpbmUg dGhpcyB0ZWNobmlxdWUsIHBsdXMgaW1wbGVtZW50IGBDbGFzcyNuZXdgIGluIFJ1YnksIHRoZW4g d2UgY2FuDQpyZWR1Y2UgYWxsb2NhdGlvbnMgZm9yIHRoaXMgY29tbW9uIG9wZXJhdGlvbi4NCg0K DQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQogX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwogcnVieS1jb3JlIG1haWxpbmcgbGlzdCAtLSBy dWJ5LWNvcmVAbWwucnVieS1sYW5nLm9yZwogVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0 byBydWJ5LWNvcmUtbGVhdmVAbWwucnVieS1sYW5nLm9yZwogcnVieS1jb3JlIGluZm8gLS0gaHR0 cHM6Ly9tbC5ydWJ5LWxhbmcub3JnL21haWxtYW4zL3Bvc3Rvcml1cy9saXN0cy9ydWJ5LWNvcmUu bWwucnVieS1sYW5nLm9yZy8=