[ruby-core:105669] [Ruby master Feature#18020] Introduce `IO::Buffer` for fiber scheduler.
From:
"ko1 (Koichi Sasada)" <noreply@...>
Date:
2021-10-19 05:11:04 UTC
List:
ruby-core #105669
SXNzdWUgIzE4MDIwIGhhcyBiZWVuIHVwZGF0ZWQgYnkga28xIChLb2ljaGkgU2FzYWRhKS4NCg0K DQpUb2RheSB3ZSByZWFkIHRoZSB0aWNrZXQgKG5vdCBhbGwgY29tbWVudHMsIHNvcnJ5KSBhbmQg bWFtZSwga28xIGhhcyBjb21tZW50Og0KDQptYW1lOiBJIGNhbm5vdCB1bmRlcnN0YW5kIHdoYXQg aXMgZmluYWxseSBuZWVkZWQuIERvZXNu4oCZdCBTdHJpbmcgd2l0aCBBU0NJSS04QklUIHdvcms/ DQprbzE6IEkgY2Fu4oCZdCB1bmRlcnN0YW5kIGhvdyB0byB1c2UgaXQgd2l0aCBJTz8gT25seSBm b3Igc2NoZWR1bGVyPw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpGZWF0dXJlICMxODAyMDogSW50cm9kdWNlIGBJTzo6QnVmZmVyYCBmb3IgZmliZXIgc2NoZWR1 bGVyLg0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4MDIwI2NoYW5nZS05NDE2 OA0KDQoqIEF1dGhvcjogaW9xdWF0aXggKFNhbXVlbCBXaWxsaWFtcykNCiogU3RhdHVzOiBPcGVu DQoqIFByaW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCkFmdGVyIGNvbnRpbnVpbmcgdG8gYnVpbGQgb3V0IHRoZSBmaWJlciBzY2hlZHVsZXIg aW50ZXJmYWNlIGFuZCB0aGUgc3BlY2lmaWMgaG9va3MgcmVxdWlyZWQgZm9yIGBpb191cmluZ2As IEkgZm91bmQgc29tZSB0cm91YmxlIHdpdGhpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYElPYC4N Cg0KSSBmb3VuZCB0aGF0IGluIHNvbWUgY2FzZXMsIHdlIG5lZWQgdG8gcmVhZCBpbnRvIHRoZSBp bnRlcm5hbCBJTyBidWZmZXJzIGRpcmVjdGx5LiBJIHRyaWVkIGNyZWF0aW5nIGEgImZha2Ugc3Ry aW5nIiBpbiBvcmRlciB0byB0cmFuc2l0IGJhY2sgaW50byB0aGUgUnVieSBmaWJlciBzY2hlZHVs ZXIgaW50ZXJmYWNlIGFuZCB0aGlzIGRpZCB3b3JrIHRvIGEgY2VydGFpbiBleHRlbnQsIGJ1dCBJ IHdhcyB0b2xkIHdlIGNhbm5vdCBleHBvc2UgZmFrZSBzdHJpbmcgdG8gUnVieSBzY2hlZHVsZXIg aW50ZXJmYWNlLg0KDQpTbywgYWZ0ZXIgdGhpcywgYW5kIG1hbnkgb3RoZXIgZnJ1c3RyYXRpb25z IHdpdGggdXNpbmcgYFN0cmluZ2AgYXMgYSBJTyBidWZmZXIsIEkgZGVjaWRlZCB0byBpbXBsZW1l bnQgYSBsb3cgbGV2ZWwgYElPOjpCdWZmZXJgIGJhc2VkIG9uIG15IG5lZWRzIGZvciBoaWdoIHBl cmZvcm1hbmNlIElPLCBhbmQgYXMgcGFydCBvZiB0aGUgZmliZXIgc2NoZWR1bGVyIGludGVyZmFj ZS4NCg0KSGVyZSBpcyByb3VnaGx5IHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgdGhlIHNj aGVkdWxlciB3LnIudC4gdGhlIGJ1ZmZlcjoNCg0KYGBgcnVieQ0KY2xhc3MgU2NoZWR1bGVyDQog ICMgQHBhcmFtZXRlciBidWZmZXIgW0lPOjpCdWZmZXJdIEJ1ZmZlciBmb3IgcmVhZGluZyBpbnRv Lg0KICBkZWYgaW9fcmVhZChpbywgYnVmZmVyLCBsZW5ndGgpDQogICAgIyBpbXBsZW1lbnRhdGlv biBwcm92aWRlZCBieSBgcmVhZGAgc3lzdGVtIGNhbGwsIElPX1VSSU5HX1JFQURWLCBldGMuDQog IGVuZA0KDQogICMgQHBhcmFtZXRlciBidWZmZXIgW0lPOjpCdWZmZXJdIEJ1ZmZlciBmb3Igd3Jp dGluZyBmcm9tLg0KICBkZWYgaW9fd3JpdGUoaW8sIGJ1ZmZlciwgbGVuZ3RoKQ0KICAgICMgaW1w bGVtZW50YXRpb24gcHJvdmlkZWQgYnkgYHdyaXRlYCBzeXN0ZW0gY2FsbCwgSU9fVVJJTkdfV1JJ VEVWLCBldGMuDQogIGVuZA0KDQogICMgUG90ZW50aWFsIG5ldyBob29rcyAoU29ja2V0I3JlY3Zt c2csIHNlbmRtc2csIGV0Yyk6DQogIGRlZiBpb19yZWN2bXNnKGlvLCBidWZmZXIsIGxlbmd0aCkN CiAgZW5kDQplbmQNCmBgYA0KDQpJbiByZXZpZXdpbmcgb3RoZXIgbGFuZ3VhZ2UgZGVzaWducywg SSBmb3VuZCB0aGF0IHRoaXMgZGVzaWduIGlzIHZlcnkgc2ltaWxhciB0byBDcnlzdGFsJ3MgSU8g YnVmZmVyaW5nIHN0cmF0ZWd5Lg0KDQpUaGUgcHJvcG9zZWQgaW1wbGVtZW50YXRpb24gcHJvdmlk ZXMgZW5vdWdoIG9mIGFuIGludGVyZmFjZSB0byBpbXBsZW1lbnQgYm90aCBuYXRpdmUgc2NoZWR1 bGVycyBhcyB3ZWxsIGFzIHB1cmUgUnVieSBzY2hlZHVsZXJzLiBJdCBhbHNvIHByb3ZpZGVzIHNv bWUgZXh0cmEgZnVuY3Rpb25hbGl0eSBmb3IgaW50ZXJwcmV0aW5nIHRoZSBkYXRhIGluIHRoZSBi dWZmZXIuIFRoaXMgaXMgbW9zdGx5IGZvciB0ZXN0aW5nIGFuZCBleHBlcmltZW50YXRpb24sIGFs dGhvdWdoIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZXhwb3NlIHRoaXMgaW50ZXJmYWNlIGZvciBi aW5hcnkgcHJvdG9jb2xzIGxpa2UgSFRUUC8yLCBRVUlDLCBXZWJTb2NrZXRzLCBldGMuDQoNCiMj IFByb3Bvc2VkIFNvbHV0aW9uDQoNCldlIGludHJvZHVjZSBuZXcgY2xhc3MgYElPOjpCdWZmZXJg Lg0KDQpgYGBydWJ5DQpjbGFzcyBJTzo6QnVmZmVyDQogICMgQHJldHVybnMgW0lPOjpCdWZmZXJd IEEgYnVmZmVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgZGF0YS4NCiAgZGVmIHNl bGYuZm9yKHN0cmluZykNCiAgZW5kDQoNCiAgUEFHRV9TSVpFID0gIyAuLi4gb3BlcmF0aW5nIHN5 c3RlbSBwYWdlIHNpemUNCg0KICAjIEByZXR1cm5zIFtJTzo6QnVmZmVyXSBBIGJ1ZmZlciB3aXRo IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBtYXBwZWQgdG8gbWVtb3J5Lg0KICBkZWYgc2VsZi5t YXAoZmlsZSkNCiAgZW5kDQoNCiAgIyBGbGFncyBmb3IgYnVmZmVyIHN0YXRlLg0KICBFWFRFUk5B TCA9ICMgVGhlIGJ1ZmZlciBpcyBmcm9tIGV4dGVybmFsIG1lbW9yeS4NCiAgSU5URVJOQUwgPSAj IFRoZSBidWZmZXIgaXMgZnJvbSBpbnRlcm5hbCBtZW1vcnkgKG1hbGxvYykuDQogIE1BUFBFRCA9 ICMgVGhlIGJ1ZmZlciBpcyBmcm9tIG1hcHBlZCBtZW1vcnkgKG1tYXAsIFZpcnR1YWxBbGxvYywg ZXRjKQ0KICBMT0NLRUQgPSAjIFRoZSBidWZmZXIgaXMgbG9ja2VkIGZvciB1c2FnZSAoY2Fubm90 IGJlIHJlc2l6ZWQpDQogIFBSSVZBVEUgPSAjIFRoZSBidWZmZXIgaXMgbWFwcGVkIGFzIGNvcHkt b24td3JpdGUuDQogIElNTVVUQUJMRSA9ICMgVGhlIGJ1ZmZlciBjYW5ub3QgYmUgbW9kaWZpZWQu DQoNCiAgIyBAcmV0dXJucyBbSU86OkJ1ZmZlcl0gQSBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVk IHNpemUsIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZsYWdzLg0KICBkZWYgaW5p dGlhbGl6ZShzaXplLCBmbGFncykNCiAgZW5kDQoNCiAgIyBAcmV0dXJucyBbSW50ZWdyYWxdIFRo ZSBzaXplIG9mIHRoZSBidWZmZXINCiAgYXR0ciA6c2l6ZQ0KDQogICMgQHJldHVybnMgW1N0cmlu Z10gQSBicmllZiBzdW1tYXJ5IGFuZCBoZXggZHVtcCBvZiB0aGUgYnVmZmVyLg0KICBkZWYgaW5z cGVjdA0KICBlbmQNCg0KICAjIEByZXR1cm5zIFtTdHJpbmddIEEgYnJpZWYgc3VtbWFyeSBvZiB0 aGUgYnVmZmVyLg0KICBkZWYgdG9fcw0KICBlbmQNCg0KICAjIEZsYWcgcHJlZGljYXRlczoNCiAg ZGVmIGV4dGVybmFsPw0KICBlbmQNCg0KICBkZWYgaW50ZXJuYWw/DQogIGVuZA0KDQogIGRlZiBt YXBwZWQ/DQogIGVuZA0KDQogIGRlZiBsb2NrZWQ/DQogIGVuZA0KDQogIGRlZiBpbW11dGFibGU/ DQogIGVuZA0KDQogICMgRmxhZ3MgZm9yIGVuZGlhbi9ieXRlIG9yZGVyOg0KICBMSVRUTEVfRU5E SUFOID0gIyAuLi4NCiAgQklHX0VORElBTiA9ICMgLi4uDQogIEhPU1RfRU5ESUFOID0gIyAuLi4N CiAgTkVUV09SS19FTkRJQU49ICMgLi4uDQoNCiAgIyBMb2NrIHRoZSBidWZmZXIgKHByZXZlbnQg cmVzaXplLCB1bm1hcCwgY2hhbmdlcyB0byBiYXNlIGFuZCBzaXplKS4NCiAgZGVmIGxvY2sNCiAg ICByYWlzZSAiQWxyZWFkeSBsb2NrZWQhIiBpZiBmbGFncyAmIExPQ0tFRA0KICAgIA0KICAgIGZs YWdzIHw9IExPQ0tFRA0KICBlbmQNCg0KICAjIFVubG9jayB0aGUgYnVmZmVyLg0KICBkZWYgdW5s b2NrDQogICAgcmFpc2UgIk5vdCBsb2NrZWQhIiB1bmxlc3MgZmxhZ3MgJiBMT0NLRUQNCiAgICAN CiAgICBmbGFncyB8PSB+TE9DS0VEDQogIGVuZA0KDQogIC8vIE1hbmlwdWxhdGlvbjoNCiAgIyBA cmV0dXJucyBbSU86OkJ1ZmZlcl0gQSBzbGljZSBvZiB0aGUgYnVmZmVyJ3MgZGF0YS4gRG9lcyBu b3QgY29weS4NCiAgZGVmIHNsaWNlKG9mZnNldCwgbGVuZ3RoKQ0KICBlbmQNCg0KICAjIEByZXR1 cm5zIFtTdHJpbmddIEEgYmluYXJ5IHN0cmluZyBzdGFydGluZyBhdCBvZmZzZXQsIGxlbmd0aCBi eXRlcy4NCiAgZGVmIHRvX3N0cihvZmZzZXQsIGxlbmd0aCkNCiAgZW5kDQoNCiAgIyBDb3B5IHRo ZSBzcGVjaWZpZWQgc3RyaW5nIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0Lg0K ICBkZWYgY29weShzdHJpbmcsIG9mZnNldCkNCiAgZW5kDQoNCiAgIyBDb21wYXJlIHR3byBidWZm ZXJzLg0KICBkZWYgPD0+KG90aGVyKQ0KICBlbmQNCg0KICBpbmNsdWRlIENvbXBhcmFibGUNCg0K ICAjIFJlc2l6ZSB0aGUgYnVmZmVyLCBwcmVzZXJ2aW5nIHRoZSBnaXZlbiBsZW5ndGggKGlmIG5v bi16ZXJvKS4NCiAgZGVmIHJlc2l6ZShzaXplLCBwcmVzZXJ2ZSA9IDApDQogIGVuZA0KDQogICMg Q2xlYXIgdGhlIGJ1ZmZlciB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLg0KICBkZWYgY2xlYXIodmFs dWUgPSAwLCBvZmZzZXQgPSAwLCBsZW5ndGggPSAoQHNpemUgLSBvZmZzZXQpKQ0KICBlbmQNCg0K ICAjIERhdGEgVHlwZXM6DQogICMgTG93ZXIgY2FzZTogbGl0dGxlIGVuZGlhbi4NCiAgIyBVcHBl ciBjYXNlOiBiaWcgZW5kaWFuIChuZXR3b3JrIGVuZGlhbikuDQogICMNCiAgIyA6VTggICAgICAg IHwgdW5zaWduZWQgOC1iaXQgaW50ZWdlci4NCiAgIyA6UzggICAgICAgIHwgc2lnbmVkIDgtYml0 IGludGVnZXIuDQogICMNCiAgIyA6dTE2LCA6VTE2IHwgdW5zaWduZWQgMTYtYml0IGludGVnZXIu DQogICMgOnMxNiwgOlMxNiB8IHNpZ25lZCAxNi1iaXQgaW50ZWdlci4NCiAgIw0KICAjIDp1MzIs IDpVMzIgfCB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4NCiAgIyA6czMyLCA6UzMyIHwgc2lnbmVk IDMyLWJpdCBpbnRlZ2VyLg0KICAjDQogICMgOnU2NCwgOlU2NCB8IHVuc2lnbmVkIDY0LWJpdCBp bnRlZ2VyLg0KICAjIDpzNjQsIDpTNjQgfCBzaWduZWQgNjQtYml0IGludGVnZXIuDQogICMNCiAg IyA6ZjMyLCA6RjMyIHwgMzItYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci4NCiAgIyA6ZjY0LCA6 RjY0IHwgNjQtYml0IGZsb2F0aW5nIHBvaW50IG51bWJlci4NCg0KICAjIEdldCB0aGUgZ2l2ZW4g ZGF0YSB0eXBlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0Lg0KICBkZWYgZ2V0KHR5cGUsIG9mZnNl dCkNCiAgZW5kDQoNCiAgIyBTZXQgdGhlIGdpdmVuIHZhbHVlIGFzIHRoZSBzcGVjaWZpZWQgZGF0 YSB0eXBlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0Lg0KICBkZWYgc2V0KHR5cGUsIG9mZnNldCwg dmFsdWUpDQogIGVuZA0KZW5kDQpgYGANCg0KVGhlIEMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgZmV3 IGNvbnZlbmllbnQgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgYnVm ZmVyOg0KDQpgYGBjDQp2b2lkIHJiX2lvX2J1ZmZlcl9nZXRfbXV0YWJsZShWQUxVRSBzZWxmLCB2 b2lkICoqYmFzZSwgc2l6ZV90ICpzaXplKTsNCnZvaWQgcmJfaW9fYnVmZmVyX2dldF9pbW11dGFi bGUoVkFMVUUgc2VsZiwgY29uc3Qgdm9pZCAqKmJhc2UsIHNpemVfdCAqc2l6ZSk7DQpgYGANCg0K SW4gdGhlIGZpYmVyIHNjaGVkdWxlciwgaXQgaXMgdXNlZCBsaWtlIHRoaXM6DQoNCmBgYGMNClZB TFVFDQpyYl9maWJlcl9zY2hlZHVsZXJfaW9fcmVhZF9tZW1vcnkoVkFMVUUgc2NoZWR1bGVyLCBW QUxVRSBpbywgdm9pZCAqYmFzZSwgc2l6ZV90IHNpemUsIHNpemVfdCBsZW5ndGgpDQp7DQogICAg VkFMVUUgYnVmZmVyID0gcmJfaW9fYnVmZmVyX25ldyhiYXNlLCBzaXplLCBSQl9JT19CVUZGRVJf TE9DS0VEKTsNCg0KICAgIFZBTFVFIHJlc3VsdCA9IHJiX2ZpYmVyX3NjaGVkdWxlcl9pb19yZWFk KHNjaGVkdWxlciwgaW8sIGJ1ZmZlciwgbGVuZ3RoKTsNCg0KICAgIHJiX2lvX2J1ZmZlcl9mcmVl KGJ1ZmZlcik7DQoNCiAgICByZXR1cm4gcmVzdWx0Ow0KfQ0KYGBgDQoNClRoaXMgZnVuY3Rpb24g aXMgaW52b2tlZCBmcm9tIGBpby5jYCBhdCB2YXJpb3VzIHBsYWNlcyB0byBmaWxsIHRoZSBidWZm ZXIuIFdlIHNwZWNpZmljYWxseSB0aGUgYChiYXNlLCBzaXplKWAgdHVwbGUsIGFsb25nIHdpdGgg YGxlbmd0aGAgd2hpY2ggaXMgdGhlICptaW5pbXVtKiBsZW5ndGggcmVxdWlyZWQgYW5kIGFzc2lz dHMgd2l0aCBlZmZpY2llbnQgbm9uLWJsb2NraW5nIGltcGxlbWVudGF0aW9uLg0KDQpUaGUgYHVy aW5nLmNgIGltcGxlbWVudGF0aW9uIGluIHRoZSBldmVudCBnZW0gdXNlcyB0aGlzIGludGVyZmFj ZSBsaWtlIHNvOg0KDQpgYGBjDQpWQUxVRSBFdmVudF9CYWNrZW5kX1VSaW5nX2lvX3JlYWQoVkFM VUUgc2VsZiwgVkFMVUUgZmliZXIsIFZBTFVFIGlvLCBWQUxVRSBidWZmZXIsIFZBTFVFIF9sZW5n dGgpIHsNCglzdHJ1Y3QgRXZlbnRfQmFja2VuZF9VUmluZyAqZGF0YSA9IE5VTEw7DQoJVHlwZWRE YXRhX0dldF9TdHJ1Y3Qoc2VsZiwgc3RydWN0IEV2ZW50X0JhY2tlbmRfVVJpbmcsICZFdmVudF9C YWNrZW5kX1VSaW5nX1R5cGUsIGRhdGEpOw0KCQ0KCWludCBkZXNjcmlwdG9yID0gUkJfTlVNMklO VChyYl9mdW5jYWxsKGlvLCBpZF9maWxlbm8sIDApKTsNCgkNCgl2b2lkICpiYXNlOw0KCXNpemVf dCBzaXplOw0KCXJiX2lvX2J1ZmZlcl9nZXRfbXV0YWJsZShidWZmZXIsICZiYXNlLCAmc2l6ZSk7 DQoJDQoJc2l6ZV90IG9mZnNldCA9IDA7DQoJc2l6ZV90IGxlbmd0aCA9IE5VTTJTSVpFVChfbGVu Z3RoKTsNCgkNCgl3aGlsZSAobGVuZ3RoID4gMCkgew0KCQlzaXplX3QgbWF4aW11bV9zaXplID0g c2l6ZSAtIG9mZnNldDsNCgkJaW50IHJlc3VsdCA9IGlvX3JlYWQoZGF0YSwgZmliZXIsIGRlc2Ny aXB0b3IsIChjaGFyKiliYXNlK29mZnNldCwgbWF4aW11bV9zaXplKTsNCgkJDQoJCWlmIChyZXN1 bHQgPT0gMCkgew0KCQkJYnJlYWs7DQoJCX0gZWxzZSBpZiAocmVzdWx0ID4gMCkgew0KCQkJb2Zm c2V0ICs9IHJlc3VsdDsNCgkJCWlmICgoc2l6ZV90KXJlc3VsdCA+IGxlbmd0aCkgYnJlYWs7DQoJ CQlsZW5ndGggLT0gcmVzdWx0Ow0KCQl9IGVsc2UgaWYgKC1yZXN1bHQgPT0gRUFHQUlOIHx8IC1y ZXN1bHQgPT0gRVdPVUxEQkxPQ0spIHsNCgkJCUV2ZW50X0JhY2tlbmRfVVJpbmdfaW9fd2FpdChz ZWxmLCBmaWJlciwgaW8sIFJCX0lOVDJOVU0oUkVBREFCTEUpKTsNCgkJfSBlbHNlIHsNCgkJCXJi X3N5c2Vycl9mYWlsKC1yZXN1bHQsIHN0cmVycm9yKC1yZXN1bHQpKTsNCgkJfQ0KCX0NCgkNCgly ZXR1cm4gU0laRVQyTlVNKG9mZnNldCk7DQp9DQpgYGANCg0KIyMgQnVmZmVyIEFsbG9jYXRpb24N Cg0KVGhlIExpbnV4IGtlcm5lbCBwcm92aWRlcyBzb21lIGFkdmFuY2VkIG1lY2hhbmlzbXMgZm9y IHJlZ2lzdGVyaW5nIGJ1ZmZlcnMgZm9yIGFzeW5jaHJvbm91cyBJL08gdG8gcmVkdWNlIHBlci1v cGVyYXRpb24gb3ZlcmhlYWQuDQoNCj4gVGhlIGlvX3VyaW5nX3JlZ2lzdGVyKCkgc3lzdGVtIGNh bGwgcmVnaXN0ZXJzIHVzZXIgYnVmZmVycyBvciBmaWxlcyBmb3IgdXNlIGluIGFuIGlvX3VyaW5n KDcpIGluc3RhbmNlIHJlZmVyZW5jZWQgYnkgZmQuIFJlZ2lzdGVyaW5nIGZpbGVzIG9yIHVzZXIg YnVmZmVycyBhbGxvd3MgdGhlIGtlcm5lbCB0byB0YWtlIGxvbmcgdGVybSByZWZlcmVuY2VzIHRv IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBvciBjcmVhdGUgbG9uZyB0ZXJtIG1hcHBpbmdzIG9m IGFwcGxpY2F0aW9uIG1lbW9yeSwgZ3JlYXRseSByZWR1Y2luZyBwZXItSS9PIG92ZXJoZWFkLg0K DQpXaXRoIGFwcHJvcHJpYXRlIHN1cHBvcnQsIHdlIGNhbiB1c2UgYElPUklOR19PUF9QUk9WSURF X0JVRkZFUlNgIHRvIGVmZmljaWVudGx5IG1hbmFnZSBidWZmZXJzIGluIGFwcGxpY2F0aW9ucyB3 aGljaCBhcmUgZGVhbGluZyB3aXRoIGxvdHMgb2Ygc29ja2V0cy4gU2VlIDxodHRwczovL2xvcmUu a2VybmVsLm9yZy9pby11cmluZy8yMDIwMDIyODIwMzA1My4yNTAyMy0xLWF4Ym9lQGtlcm5lbC5k ay9ULz4gZm9yIG1vcmUgZGV0YWlscyBhYm91dCBob3cgaXQgd29ya3MuIEknbSBzdGlsbCBleHBs b3JpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBidXQgdGhlIHByb3Bv c2VkIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIHN1ZmZpY2llbnQgbWV0YS1kYXRhIGZvciB1cyB0 byBleHBsb3JlIHRoaXMgaW4gcmVhbCB3b3JsZCBzY2hlZHVsZXJzLg0KDQoNCg0KDQotLSANCmh0 dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29y ZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0 cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K