[ruby-core:117506] [Ruby master Feature#20425] Optimize forwarding callers and callees
From:
"tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date:
2024-04-12 16:10:20 UTC
List:
ruby-core #117506
SXNzdWUgIzIwNDI1IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQprbzEgKEtvaWNoaSBTYXNhZGEpIHdyb3RlIGluICNub3RlLTI6DQo+ IEkgdGhpbmsgaXQgaXMgZ29vZCBpZGVhIGJ1dCBJJ20gY29uY2VybmVkIHRoYXQgdGhlIGNvZGUg b24gZ2l0aHViIG1heSBhZmZlY3Qgbm9ybWFsIGNhc2VzIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBj b2RlIHBhdGguDQoNCkl0IG9ubHkgaW1wYWN0cyB0aGUgYHNlbmRgIGluc3RydWN0aW9uIGFuZCBg aW52b2tlc3VwZXJgIGluc3RydWN0aW9uLiAgSWYgdGhlcmUgaXMgYSBzcGVlZCBpbXBhY3QsIEkg dGhpbmsgd2UgY291bGQgZW1pdCAiZm9yd2FyZGluZ19zZW5kIiBvciAiZm9yd2FyZGluZ19zdXBl ciIgaW5zdHJ1Y3Rpb25zIGFuZCBlbGltaW5hdGUgdGhlIGNvZGUgcGF0aC4gIEFsc28sIGFzIHlv dSBub3RlZCBvbiB0aGUgUFIgbW9zdCBpc2VxcyBhcmUgInNpbXBsZSIgYW5kIHdlIGFscmVhZHkg aGF2ZSB0byBjaGVjayB0aGF0LiAgRm9yd2FyZGFibGUgaXNlcXMgYXJlIGp1c3Qgbm90IGNvbnNp ZGVyZWQgInNpbXBsZSIg8J+Yhg0KDQprbzEgKEtvaWNoaSBTYXNhZGEpIHdyb3RlIGluICNub3Rl LTM6DQo+IEluc3RlYWQgb2YgaW50cm9kdWNpbmcgbmV3IHJ1bGVzIGFuZCBjb21wbGV4IGNvZGUs IEkgdGhpbmsgcHJvdmlkaW5nIGxpZ2h0d2VpZ2h0IGNvbnRhaW5lciB0aGFuIEFycmF5L0hhc2gg aXMgYmV0dGVyLg0KPiANCj4gQ29uc2lkZXIgYGRlZiBmKC4uLikgPSBnKC4uLilgOg0KPiANCj4g KiBJbnRyb2R1Y2luZyBhcmd1bWVudCBvYmplY3QgKGxpa2UgSlMpIGJ5IGltZW1vIGFuZCBwYXNz IGl0IGFzIGEgdW5pcXVlIHBhcmFtZXRlciBmb3IgYSBtZXRob2QgYGRlZiBmKC4uLilgDQo+ICAg KiBvZiBjb3Vyc2Ugbm90IHZpc2libGUgb2JqZWN0cyBmcm9tIFJ1YnkgdXNlcnMuDQo+ICAgKiBh cmdvYmogaGFzIG1lbW9yeSBidWZmZXIgKGFyZ2J1ZmYpIGFuZCBjb3B5IGFsbCBhcmd1bWVudHMg KGFuZCBDSSkgdG8gYXJnYnVmZi4NCj4gICAqIGNhbGxpbmcgYW5vdGhlciBtZXRob2Qgd2l0aCBg ZyguLi4pYCBleHBhbmQgYWxsIGFyZ3VtZW50cyBmcm9tIGFyZ2J1ZmYuDQo+ICogYXJnYnVmZiBt ZW1vcnkgbWFuYWdlbWVudA0KPiAgICogYXJnYnVmZiBpcyBhbGxvY2F0ZWQgZnJvbSByYWN0b3Ig bG9jYWwgYXJnYnVmZiBoZWFwICg0S0IgZm9yIGV4YW1wbGUpIGJ5IGJ1bXAgYWxsb2NhdGlvbi4N Cj4gICAqIGlmIGFyZ2J1ZmYgaGVhcCBpcyBub3QgZW5vdWdoLCBhbGwgZXhpc3RpbmcgYXJnb2Jq IGNvcGllcyB0aGVpciBhcmd1YnVmZiB0byBtYWxsb2MgbWFuYWdlZCBtZW1vcnkgKGV2YWN1YXRp b24pDQo+IA0KPiBJdCB0YWtlcyAoMSkgYXJnb2JqIG9iamVjdCBhbGxvY2F0aW9uIGFuZCAoMikg MiBjb3BpZXMgKDEgZm9yIGFyZ2J1ZmYgYW5kIDEgZm9yIGNhbGxpbmcgZygpLCB0aGUgb3JpZ2lu YWwgcHJvcG9zYWwgb25seSBjb3BpZXMgb25jZSBhdCBjYWxsaW5nIGcoKSksIHNvIG5vdCB1bHRp bWF0ZSBsaWdodHdlaWdodCwgYnV0IHNpbXBsZS4NCg0KSSdtIG5vdCBzdXJlIGhvdyB0aGlzIGlz IG1vcmUgc2ltcGxlIHRoYW4gdGhlIGRlc2lnbiBJIHByb3Bvc2VkLiAgYC4uLmAgY2FsbGVlcyB3 aWxsIG5lZWQgdG8ga25vdyB0byBjb3B5IHRoZSBzdGFjaywgd2hpY2ggcmVxdWlyZXMgYSBmbGFn IChsaWtlIG15IHBhdGNoKS4gIENhbGwgc2l0ZXMgd2lsbCBuZWVkIHRvIGtub3cgdG8gZXhwYW5k IGAuLi5gLCBzbyB0aGV5IHdpbGwgbmVlZCBhIGZsYWcgKGxpa2UgbXkgcGF0Y2gpLiAgSXQgc3Rp bGwgcmVxdWlyZXMgc3BlY2lhbCBib29rIGtlZXBpbmcgb2YgdGhlIFNQIHdoZW4gZXhwYW5kaW5n IGAuLi5gLg0KDQpBbHNvIGl0IHNvdW5kcyBsaWtlIGl0IHJlcXVpcmVzIG1vcmUgbG9naWMgKGlu dHJvZHVjdGlvbiBvZiBhbm90aGVyIG1lbW9yeSBtYW5hZ2VyKSB0byBtYW5hZ2UgdGhlIGFyZ2J1 ZiBidWZmZXIsIGFuZCBtYXliZSBsb2dpYyB3aGVuIHRoZSBzdGFjayBlc2NhcGVzIChmb3IgZXhh bXBsZSBgZGVmIGYoLi4uKSA9IGxhbWJkYSB7IGcoLi4uKSB9YCkuDQogDQo+IEZvciBgbmV3YCBj YXNlLCBJIHRoaW5rIHByb3ZpZGluZyBuZXcgYFZNX01FVEhPRF9UWVBFX09QVElNSVpFRGAgbG9n aWMgaXMgYmV0dGVyLg0KDQpJIHdvdWxkIGxpa2UgdG8gdGVzdCB0aGlzIGJlY2F1c2UgSSBhbSBu b3Qgc3VyZS4gIE9wdGltaXppbmcgYC4uLmAgbGV0cyB1cyBpbXBsZW1lbnQgYENsYXNzI25ld2Ag YXMgYSAobW9zdGx5IHJlZ3VsYXIpIFJ1YnkgbWV0aG9kLCB3aGljaCBJIHRoaW5rIGlzIHZlcnkg YWR2YW50YWdlb3VzIGZvciBZSklULiAgQWxzbyBhZGRpbmcgYSBuZXcgaXNlcSB0eXBlIG1lYW5z IGFkZGluZyBtb3JlIGNvbXBsZXhpdHkgdGhhdCB3ZSBkb24ndCBuZWVkIChpZiB0aGlzIHBhdGNo IGlzIGFjY2VwdGVkKS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KRmVhdHVyZSAjMjA0MjU6IE9wdGltaXplIGZvcndhcmRpbmcgY2FsbGVycyBhbmQgY2FsbGVl cw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwNDI1I2NoYW5nZS0xMDc4OTMN Cg0KKiBBdXRob3I6IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9uIFBhdHRlcnNvbikNCiogU3RhdHVz OiBPcGVuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpbVGhpcyBQ Ul0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzEwNTEwKSBvcHRpbWl6ZXMgZm9y d2FyZGluZyBjYWxsZXJzIGFuZCBjYWxsZWVzLiBJdCBvbmx5IG9wdGltaXplcyBtZXRob2RzIHRo YXQgb25seSB0YWtlIGAuLi5gIGFzIHRoZWlyIHBhcmFtZXRlciwgYW5kIHRoZW4gcGFzcyBgLi4u YCB0byBvdGhlciBjYWxscy4NCg0KQ2FsbHMgaXQgb3B0aW1pemVzIGxvb2sgbGlrZSB0aGlzOg0K DQpgYGBydWJ5DQpkZWYgYmFyKGEpID0gYQ0KZGVmIGZvbyguLi4pID0gYmFyKC4uLikgIyBvcHRp bWl6ZWQNCmZvbygxMjMpDQpgYGANCg0KYGBgcnVieQ0KZGVmIGJhcihhKSA9IGENCmRlZiBmb28o Li4uKSA9IGJhcigxLCAyLCAuLi4pICMgb3B0aW1pemVkDQpmb28oMTIzKQ0KYGBgDQoNCmBgYHJ1 YnkNCmRlZiBiYXIoKmEpID0gYQ0KDQpkZWYgZm9vKC4uLikNCiAgbGlzdCA9IFsxLCAyXQ0KICBi YXIoKmxpc3QsIC4uLikgIyBvcHRpbWl6ZWQNCmVuZA0KZm9vKDEyMykNCmBgYA0KDQpBbGwgdmFy aWFudHMgb2YgdGhlIGFib3ZlIGJ1dCB1c2luZyBgc3VwZXJgIGFyZSBhbHNvIG9wdGltaXplZCwg aW5jbHVkaW5nIGEgYmFyZSBzdXBlciBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRlZiBmb28oLi4u KQ0KICBzdXBlcg0KZW5kDQpgYGANCg0KVGhpcyBwYXRjaCBlbGltaW5hdGVzIGludGVybWVkaWF0 ZSBhbGxvY2F0aW9ucyBtYWRlIHdoZW4gY2FsbGluZyBtZXRob2RzIHRoYXQgYWNjZXB0IGAuLi5g Lg0KV2UgY2FuIG9ic2VydmUgYWxsb2NhdGlvbiBlbGltaW5hdGlvbiBsaWtlIHRoaXM6DQoNCmBg YHJ1YnkNCmRlZiBtDQogIHggPSBHQy5zdGF0KDp0b3RhbF9hbGxvY2F0ZWRfb2JqZWN0cykNCiAg eWllbGQNCiAgR0Muc3RhdCg6dG90YWxfYWxsb2NhdGVkX29iamVjdHMpIC0geA0KZW5kDQoNCmRl ZiBiYXIoYSkgPSBhDQpkZWYgZm9vKC4uLikgPSBiYXIoLi4uKQ0KDQpkZWYgdGVzdA0KICBtIHsg Zm9vKDEyMykgfQ0KZW5kDQoNCnRlc3QNCnAgdGVzdCAjIGFsbG9jYXRlcyAxIG9iamVjdCBvbiBt YXN0ZXIsIGJ1dCAwIG9iamVjdHMgd2l0aCB0aGlzIHBhdGNoDQpgYGANCg0KYGBgcnVieQ0KZGVm IGJhcihhLCBiOikgPSBhICsgYg0KZGVmIGZvbyguLi4pID0gYmFyKC4uLikNCg0KZGVmIHRlc3QN CiAgbSB7IGZvbygxLCBiOiAyKSB9DQplbmQNCg0KdGVzdA0KcCB0ZXN0ICMgYWxsb2NhdGVzIDIg b2JqZWN0cyBvbiBtYXN0ZXIsIGJ1dCAwIG9iamVjdHMgd2l0aCB0aGlzIHBhdGNoDQpgYGANCg0K IyMgSG93IGRvZXMgaXQgd29yaz8NCg0KVGhpcyBwYXRjaCB3b3JrcyBieSB1c2luZyBhIGR5bmFt aWMgc3RhY2sgc2l6ZSB3aGVuIHBhc3NpbmcgZm9yd2FyZGVkIHBhcmFtZXRlcnMgdG8gY2FsbGVl cy4NClRoZSBjYWxsZXIncyBpbmZvIG9iamVjdCAoa25vd24gYXMgdGhlICJDSSIpIGNvbnRhaW5z IHRoZSBzdGFjayBzaXplIG9mIHRoZQ0KcGFyYW1ldGVycywgc28gd2UgcGFzcyB0aGUgQ0kgb2Jq ZWN0IGl0c2VsZiBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2FsbGVlLg0KV2hlbiBmb3J3YXJkaW5n IHBhcmFtZXRlcnMsIHRoZSBmb3J3YXJkaW5nIElTZXEgdXNlcyB0aGUgY2FsbGVyJ3MgQ0kgdG8g ZGV0ZXJtaW5lIGhvdyBtdWNoIHN0YWNrIHRvIGNvcHksIHRoZW4gY29waWVzIHRoZSBjYWxsZXIn cyBzdGFjayBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGVlLg0KVGhlIENJIGF0IHRoZSBmb3J3YXJk ZWQgY2FsbCBzaXRlIGlzIGFkanVzdGVkIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGNhbGxl cidzIENJLg0KDQpJIHRoaW5rIHRoaXMgZGVzY3JpcHRpb24gaXMga2luZCBvZiBjb25mdXNpbmcs IHNvIGxldCdzIHdhbGsgdGhyb3VnaCBhbiBleGFtcGxlIHdpdGggY29kZS4NCg0KYGBgcnVieQ0K ZGVmIGRlbGVnYXRlZShhLCBiKSA9IGEgKyBiDQoNCmRlZiBkZWxlZ2F0b3IoLi4uKQ0KICBkZWxl Z2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldBUkRJTkcpDQplbmQNCg0KZGVmIGNhbGxlcg0KICBkZWxl Z2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6IDIpDQplbmQNCmBgYA0KDQpCZWZvcmUgd2UgY2FsbCB0 aGUgZGVsZWdhdG9yIG1ldGhvZCwgdGhlIHN0YWNrIGxvb2tzIGxpa2UgdGhpczoNCg0KYGBgDQpF eGVjdXRpbmcgTGluZSB8IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBT dGFjaw0KLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQ0KICAgICAgICAgICAgICAxfCBkZWYgZGVsZWdhdGVlKGEsIGIpID0gYSAr IGIgICAgICAgICAgIHwgc2VsZg0KICAgICAgICAgICAgICAyfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMQ0KICAgICAgICAgICAgICAzfCBkZWYgZGVsZWdhdG9yKC4u LikgICAgICAgICAgICAgICAgICAgIHwgMg0KICAgICAgICAgICAgICA0fCAgICMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgNXwgICBkZWxlZ2F0ZWUo Li4uKSAgIyBDSTIgKEZPUldBUkRJTkcpICB8DQogICAgICAgICAgICAgIDZ8IGVuZCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgICAgICAgICAgICA3fCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgOHwgZGVmIGNhbGxl ciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgLT4gIDl8ICAgZGVsZWdh dG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKSAgICAgfA0KICAgICAgICAgICAgIDEwfCBlbmQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCmBgYA0KDQpUaGUgSVNlcSBmb3IgYGRl bGVnYXRvcmAgaXMgdGFnZ2VkIGFzICJmb3J3YXJkYWJsZSIsIHNvIHdoZW4gYGNhbGxlcmAgY2Fs bHMgaW4NCnRvIGBkZWxlZ2F0b3JgLCBpdCB3cml0ZXMgYENJMWAgb24gdG8gdGhlIHN0YWNrIGFz IGEgbG9jYWwgdmFyaWFibGUgZm9yIHRoZQ0KYGRlbGVnYXRvcmAgbWV0aG9kLiAgVGhlIGBkZWxl Z2F0b3JgIG1ldGhvZCBoYXMgYSBzcGVjaWFsIGxvY2FsIGNhbGxlZCBgLi4uYA0KdGhhdCBob2xk cyB0aGUgY2FsbGVyJ3MgQ0kgb2JqZWN0Lg0KDQpIZXJlIGlzIHRoZSBJU2VxIGRpc2FzbSBmbyBg ZGVsZWdhdG9yYDoNCg0KYGBgDQo9PSBkaXNhc206ICM8SVNlcTpkZWxlZ2F0b3JALWU6MSAoMSww KS0oMSwzOSk+DQpsb2NhbCB0YWJsZSAoc2l6ZTogMSwgYXJnYzogMCBbb3B0czogMCwgcmVzdDog LTEsIHBvc3Q6IDAsIGJsb2NrOiAtMSwga3c6IC0xQC0xLCBrd3Jlc3Q6IC0xXSkNClsgMV0gIi4u LiJAMA0KMDAwMCBwdXRzZWxmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICggICAxKVtMaUNhXQ0KMDAwMSBnZXRsb2NhbF9XQ18wICAgICAg ICAgICAgICAgICAgICAgICAgICAiLi4uIkAwDQowMDAzIHNlbmQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDxjYWxsZGF0YSFtaWQ6ZGVsZWdhdGVlLCBhcmdjOjAsIEZDQUxMfEZP UldBUkRJTkc+LCBuaWwNCjAwMDYgbGVhdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgW1JlXQ0KYGBgDQoNClRoZSBsb2NhbCBjYWxsZWQgYC4uLmAgd2lsbCBjb250YWluIHRoZSBj YWxsZXIncyBDSTogQ0kxLg0KDQpIZXJlIGlzIHRoZSBzdGFjayB3aGVuIHdlIGVudGVyIGBkZWxl Z2F0b3JgOg0KDQoNCmBgYA0KRXhlY3V0aW5nIExpbmUgfCBDb2RlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgU3RhY2sNCi0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0NCiAgICAgICAgICAgICAgMXwgZGVmIGRl bGVnYXRlZShhLCBiKSA9IGEgKyBiICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAgICAgMnwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDENCiAgICAgICAgICAgICAg M3wgZGVmIGRlbGVnYXRvciguLi4pICAgICAgICAgICAgICAgICAgICB8IDINCiAgICAgICAgICAg LT4gNHwgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENJMSAoYXJnYzog MikNCiAgICAgICAgICAgICAgNXwgICBkZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldBUkRJTkcp ICB8IGNyZWZfb3JfbWUNCiAgICAgICAgICAgICAgNnwgZW5kICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IHNwZWN2YWwNCiAgICAgICAgICAgICAgN3wgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUNCiAgICAgICAgICAgICAgOHwgZGVmIGNhbGxl ciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgIDl8ICAgZGVsZWdh dG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKSAgICAgfA0KICAgICAgICAgICAgIDEwfCBlbmQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCmBgYA0KDQpUaGUgQ0kgYXQgYGRlbGVn YXRlZWAgb24gbGluZSA1IGlzIHRhZ2dlZCBhcyAiRk9SV0FSRElORyIsIHNvIGl0IGtub3dzIHRv DQptZW1jb3B5IHRoZSBjYWxsZXIncyBzdGFjayBiZWZvcmUgY2FsbGluZyBgZGVsZWdhdGVlYC4g IEluIHRoaXMgY2FzZSwgaXQgd2lsbA0KbWVtY29weSBzZWxmLCAxLCBhbmQgMiB0byB0aGUgc3Rh Y2sgYmVmb3JlIGNhbGxpbmcgYGRlbGVnYXRlZWAuICBJdCBrbm93cyBob3cgbXVjaA0KbWVtb3J5 IHRvIGNvcHkgZnJvbSB0aGUgY2FsbGVyIGJlY2F1c2UgYENJMWAgY29udGFpbnMgc3RhY2sgc2l6 ZSBpbmZvcm1hdGlvbg0KKGFyZ2M6IDIpLg0KDQpCZWZvcmUgZXhlY3V0aW5nIHRoZSBgc2VuZGAg aW5zdHJ1Y3Rpb24sIHdlIHB1c2ggYC4uLmAgb24gdGhlIHN0YWNrLiAgVGhlDQpgc2VuZGAgaW5z dHJ1Y3Rpb24gcG9wcyBgLi4uYCwgYW5kIGJlY2F1c2UgaXQgaXMgdGFnZ2VkIHdpdGggYEZPUldB UkRJTkdgLCBpdA0Ka25vd3MgdG8gbWVtY29weSAodXNpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBDSSBpdCBqdXN0IHBvcHBlZCk6DQoNCmBgYA0KPT0gZGlzYXNtOiAjPElTZXE6ZGVsZWdhdG9y QC1lOjEgKDEsMCktKDEsMzkpPg0KbG9jYWwgdGFibGUgKHNpemU6IDEsIGFyZ2M6IDAgW29wdHM6 IDAsIHJlc3Q6IC0xLCBwb3N0OiAwLCBibG9jazogLTEsIGt3OiAtMUAtMSwga3dyZXN0OiAtMV0p DQpbIDFdICIuLi4iQDANCjAwMDAgcHV0c2VsZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgMSlbTGlDYV0NCjAwMDEgZ2V0bG9jYWxf V0NfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uLiJAMA0KMDAwMyBzZW5kICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2FsbGRhdGEhbWlkOmRlbGVnYXRlZSwgYXJnYzow LCBGQ0FMTHxGT1JXQVJESU5HPiwgbmlsDQowMDA2IGxlYXZlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFtSZV0NCmBgYA0KDQpJbnN0cnVjdGlvbiAwMDEgcHV0cyB0aGUgY2FsbGVy J3MgQ0kgb24gdGhlIHN0YWNrLiAgYHNlbmRgIGlzIHRhZ2dlZCB3aXRoDQpGT1JXQVJESU5HLCBz byBpdCByZWFkcyB0aGUgQ0kgYW5kIF9jb3BpZXNfIHRoZSBjYWxsZXJzIHN0YWNrIHRvIHRoaXMg c3RhY2s6DQoNCmBgYA0KRXhlY3V0aW5nIExpbmUgfCBDb2RlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgU3RhY2sNCi0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0NCiAgICAgICAgICAgICAgMXwgZGVmIGRlbGVn YXRlZShhLCBiKSA9IGEgKyBiICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAgICAgMnwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDENCiAgICAgICAgICAgICAgM3wg ZGVmIGRlbGVnYXRvciguLi4pICAgICAgICAgICAgICAgICAgICB8IDINCiAgICAgICAgICAgICAg NHwgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENJMSAoYXJnYzogMikN CiAgICAgICAgICAgLT4gNXwgICBkZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldBUkRJTkcpICB8 IGNyZWZfb3JfbWUNCiAgICAgICAgICAgICAgNnwgZW5kICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IHNwZWN2YWwNCiAgICAgICAgICAgICAgN3wgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHR5cGUNCiAgICAgICAgICAgICAgOHwgZGVmIGNhbGxlciAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAgICAgOXwgICBkZWxl Z2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6IDIpICAgICB8IDENCiAgICAgICAgICAgICAxMHwgZW5k ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDINCmBgYA0KDQpUaGUgIkZPUldB UkRJTkciIGNhbGwgc2l0ZSBjb21iaW5lcyBpbmZvcm1hdGlvbiBmcm9tIENJMSB3aXRoIENJMiBp biBvcmRlcg0KdG8gc3VwcG9ydCBwYXNzaW5nIG90aGVyIHZhbHVlcyBpbiBhZGRpdGlvbiB0byB0 aGUgYC4uLmAgdmFsdWUsIGFzIHdlbGwgYXMNCnBlcmZlY3RseSBmb3J3YXJkIHNwbGF0IGFyZ3Ms IGt3YXJncywgZXRjLg0KDQpTaW5jZSB3ZSdyZSBhYmxlIHRvIGNvcHkgdGhlIHN0YWNrIGZyb20g YGNhbGxlcmAgaW4gdG8gYGRlbGVnYXRvcmAncyBzdGFjaywgd2UNCmNhbiBhdm9pZCBhbGxvY2F0 aW5nIG9iamVjdHMuDQoNCiMjIFdoeT8NCg0KSSB3YW50IHRvIGRvIHRoaXMgdG8gZWxpbWluYXRl IG9iamVjdCBhbGxvY2F0aW9ucyBmb3IgZGVsZWdhdGUgbWV0aG9kcy4NCk15IGxvbmcgdGVybSBn b2FsIGlzIHRvIGltcGxlbWVudCBgQ2xhc3MjbmV3YCBpbiBSdWJ5IGFuZCBpdCB1c2VzIGAuLi5g Lg0KDQpJIHdhcyBhYmxlIHRvIGltcGxlbWVudCBgQ2xhc3MjbmV3YCBpbiBSdWJ5DQpbaGVyZV0o aHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzkyODkpLg0KSWYgd2UgYWRvcHQgdGhl IHRlY2huaXF1ZSBpbiB0aGlzIHBhdGNoLCB0aGVuIHdlIGNhbiBvcHRpbWl6ZSBhbGxvY2F0aW5n DQpvYmplY3RzIHRoYXQgdGFrZSBrZXl3b3JkIHBhcmFtZXRlcnMgZm9yIGBpbml0aWFsaXplYC4N Cg0KRm9yIGV4YW1wbGUsIHRoaXMgY29kZSB3aWxsIGFsbG9jYXRlIDIgb2JqZWN0czogb25lIGZv ciBgU29tZU9iamVjdGAsIGFuZCBvbmUNCmZvciB0aGUga3dhcmdzOg0KDQpgYGBydWJ5DQpTb21l T2JqZWN0Lm5ldyhmb286IDEpDQpgYGANCg0KSWYgd2UgY29tYmluZSB0aGlzIHRlY2huaXF1ZSwg cGx1cyBpbXBsZW1lbnQgYENsYXNzI25ld2AgaW4gUnVieSwgdGhlbiB3ZSBjYW4NCnJlZHVjZSBh bGxvY2F0aW9ucyBmb3IgdGhpcyBjb21tb24gb3BlcmF0aW9uLg0KDQoNCg0KLS0gDQpodHRwczov L2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5 LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2 ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFu Zy5vcmcvbWFpbG1hbjMvcG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5LWxhbmcub3Jn Lw==