From: Brian Durand Date: 2011-01-11T00:43:47+09:00 Subject: [ruby-core:34308] [Ruby 1.9-Bug#4168] WeakRef is unsafe to use in Ruby 1.9 --mimepart_4d2b292c7a428_1f28b4bc5fc425f Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Issue #4168 has been updated by Brian Durand. File weakref.rb added File weakref_patch.diff added After further review, I found the synchronization issue is definitely wit= h Rubinius and that not synchronizing breaks on other Rubies where hash o= perations are not atomic. Reverted patch files attached. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/4168 ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d2b292c7a428_1f28b4bc5fc425f Content-Type: text/x-ruby-script; name=weakref.rb Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=weakref.rb cmVxdWlyZSAnbW9uaXRvcicKCiMgV2Vha1JlZmVyZW5jZSBpcyBhIGNsYXNz IHRvIHJlcHJlc2VudCBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBp cyBub3Qgc2VlbiBieQojIHRoZSB0cmFjaW5nIHBoYXNlIG9mIHRoZSBnYXJi YWdlIGNvbGxlY3Rvci4gIFRoaXMgYWxsb3dzIHRoZSByZWZlcmVuY2VkCiMg b2JqZWN0IHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGFzIGlmIG5vdGhpbmcg aXMgcmVmZXJyaW5nIHRvIGl0LgojCiMgVGhlIGRpZmZlcmVuY2UgYmV0d2Vl biB0aGlzIGNsYXNzIGFuZCBXZWFrUmVmIGlzIHRoYXQgdGhpcyBjbGFzcyBk b2VzIG5vdAojIHVzZSB0aGUgZGVsZWdhdG9yIHBhdHRlcm4gYW5kIHNvIGhh cyBhbiBpbnRlcmZhY2UgbW9yZSBzdWl0ZWQgZm9yIGRldGVjdGluZwojIGlm IHRoZSByZWZlcmVuY2VkIG9iamVjdCBoYXMgYmVlbiByZWNsYWltZWQuCiMK IyBVc2FnZToKIwojICAgZm9vID0gT2JqZWN0Lm5ldwojICAgcmVmID0gV2Vh a1JlZmVyZW5jZS5uZXcoZm9vKQojICAgcmVmLm9iamVjdAkJCSMgc2hvdWxk IGJlIGZvbwojICAgT2JqZWN0U3BhY2UuZ2FyYmFnZV9jb2xsZWN0CiMgICBy ZWYub2JqZWN0CQkJIyBzaG91bGQgYmUgbmlsCmNsYXNzIFdlYWtSZWZlcmVu Y2UKICBhdHRyX3JlYWRlciA6cmVmZXJlbmNlZF9vYmplY3RfaWQKICAKICAj IE1hcCBvZiByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3RfaWQncyB0aGV5IHJl ZmVyIHRvLgogIEBAcmVmZXJlbmNlZF9vYmplY3RfaWRzID0ge30KCiAgIyBN YXAgb2Ygb2JqZWN0X2lkcyB0byByZWZlcmVuY2VzIHRvIHRoZW0uCiAgQEBv YmplY3RfaWRfcmVmZXJlbmNlcyA9IHt9CgogIEBAbW9uaXRvciA9IE1vbml0 b3IubmV3CgogICMgRmluYWxpemVyIHRoYXQgY2xlYW5zIHVwIHdlYWsgcmVm ZXJlbmNlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuCiAgQEBvYmpl Y3RfZmluYWxpemVyID0gbGFtYmRhIGRvIHxvYmplY3RfaWR8CiAgICBAQG1v bml0b3Iuc3luY2hyb25pemUgZG8KICAgICAgcmVmZXJlbmNlX2lkcyA9IEBA b2JqZWN0X2lkX3JlZmVyZW5jZXMuZGVsZXRlKG9iamVjdF9pZCkKICAgICAg aWYgcmVmZXJlbmNlX2lkcwogICAgCSAgcmVmZXJlbmNlX2lkcy5lYWNoIGRv IHxyZWZlcmVuY2Vfb2JqZWN0X2lkfAogICAgCSAgICBAQHJlZmVyZW5jZWRf b2JqZWN0X2lkcy5kZWxldGUocmVmZXJlbmNlX29iamVjdF9pZCkKICAgIAkg IGVuZAogIAkgIGVuZAoJICBlbmQKICBlbmQKCiAgIyBGaW5hbGl6ZXIgdGhh dCBjbGVhbnMgdXAgd2VhayByZWZlcmVuY2VzIHdoZW4gcmVmZXJlbmNlcyBh cmUgZGVzdHJveWVkLgogIEBAcmVmZXJlbmNlX2ZpbmFsaXplciA9IGxhbWJk YSBkbyB8b2JqZWN0X2lkfAogICAgQEBtb25pdG9yLnN5bmNocm9uaXplIGRv CiAgICAgIHJlZmVyZW5jZWRfaWQgPSBAQHJlZmVyZW5jZWRfb2JqZWN0X2lk cy5kZWxldGUob2JqZWN0X2lkKQogICAgICBpZiByZWZlcmVuY2VkX2lkCiAg ICAgICAgb2JqID0gT2JqZWN0U3BhY2UuX2lkMnJlZihyZWZlcmVuY2VkX29i amVjdF9pZCkgcmVzY3VlIG5pbAogICAgICAgIGlmIG9iagogICAgICAgICAg YmFja3JlZmVyZW5jZXMgPSBvYmouaW5zdGFuY2VfdmFyaWFibGVfZ2V0KDpA X193ZWFrX2JhY2tyZWZlcmVuY2VzX18pIGlmIG9iai5pbnN0YW5jZV92YXJp YWJsZV9kZWZpbmVkPyg6QF9fd2Vha19iYWNrcmVmZXJlbmNlc19fKQogICAg ICAgICAgaWYgYmFja3JlZmVyZW5jZXMKICAgICAgICAgICAgYmFja3JlZmVy ZW5jZXMuZGVsZXRlKG9iamVjdF9pZCkKICAgICAgICAgICAgb2JqLnNlbmQo OnJlbW92ZV9pbnN0YW5jZV92YXJpYWJsZSwgOkBfX3dlYWtfYmFja3JlZmVy ZW5jZXNfXykgaWYgYmFja3JlZmVyZW5jZXMuZW1wdHk/CiAgICAgICAgICBl bmQKICAgICAgICBlbmQKICAgICAgICByZWZlcmVuY2VzID0gQEBvYmplY3Rf aWRfcmVmZXJlbmNlc1tyZWZlcmVuY2VkX2lkXQogICAgICAgIGlmIHJlZmVy ZW5jZXMKICAgICAgICAgIHJlZmVyZW5jZXMuZGVsZXRlKG9iamVjdF9pZCkK ICAgICAgCSAgQEBvYmplY3RfaWRfcmVmZXJlbmNlcy5kZWxldGUocmVmZXJl bmNlZF9pZCkgaWYgcmVmZXJlbmNlcy5lbXB0eT8KICAgIAkgIGVuZAogIAkg IGVuZAoJICBlbmQKICBlbmQKCiAgIyBDcmVhdGUgYSBuZXcgd2VhayByZWZl cmVuY2UgdG8gYW4gb2JqZWN0LiBUaGUgZXhpc3RlbmNlIG9mIHRoZSB3ZWFr IHJlZmVyZW5jZQogICMgd2lsbCBub3QgcHJldmVudCB0aGUgZ2FyYmFnZSBj b2xsZWN0b3IgZnJvbSByZWNsYWltaW5nIHRoZSByZWZlcmVuY2VkIG9iamVj dC4KICBkZWYgaW5pdGlhbGl6ZShvYmopCiAgICBAcmVmZXJlbmNlZF9vYmpl Y3RfaWQgPSBvYmouX19pZF9fCiAgICBPYmplY3RTcGFjZS5kZWZpbmVfZmlu YWxpemVyKG9iaiwgQEBvYmplY3RfZmluYWxpemVyKQogICAgT2JqZWN0U3Bh Y2UuZGVmaW5lX2ZpbmFsaXplcihzZWxmLCBAQHJlZmVyZW5jZV9maW5hbGl6 ZXIpCiAgICBAQG1vbml0b3Iuc3luY2hyb25pemUgZG8KICAgICAgQEByZWZl cmVuY2VkX29iamVjdF9pZHNbc2VsZi5fX2lkX19dID0gb2JqLl9faWRfXwog ICAgICBhZGRfYmFja3JlZmVyZW5jZShvYmopCiAgICAgIHJlZmVyZW5jZXMg PSBAQG9iamVjdF9pZF9yZWZlcmVuY2VzW29iai5fX2lkX19dCiAgICAgIHVu bGVzcyByZWZlcmVuY2VzCiAgICAgICAgcmVmZXJlbmNlcyA9IFtdCiAgICAg ICAgQEBvYmplY3RfaWRfcmVmZXJlbmNlc1tvYmouX19pZF9fXSA9IHJlZmVy ZW5jZXMKICAgICAgZW5kCiAgICAgIHJlZmVyZW5jZXMucHVzaChzZWxmLl9f aWRfXykKICAgIGVuZAogIGVuZAoKICAjIEdldCB0aGUgcmVmZXJlbmNlIG9i amVjdC4gSWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGdhcmJhZ2Ug Y29sbGVjdGVkLAogICMgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBu aWwuCiAgZGVmIG9iamVjdAogICAgb2JqID0gbmlsCiAgICBiZWdpbgogICAg ICBpZiByZWZlcmVuY2VkX29iamVjdF9pZCA9PSBAQHJlZmVyZW5jZWRfb2Jq ZWN0X2lkc1tzZWxmLm9iamVjdF9pZF0KICAgICAgICBvYmogPSBPYmplY3RT cGFjZS5faWQycmVmKHJlZmVyZW5jZWRfb2JqZWN0X2lkKQogICAgICAgIG9i aiA9IG5pbCB1bmxlc3MgdmVyaWZ5X2JhY2tyZWZlcmVuY2VzKG9iaikKICAg ICAgZW5kCiAgICByZXNjdWUgUmFuZ2VFcnJvcgogICAgICAjIE9iamVjdCBo YXMgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KICAgIGVuZAogICAgb2JqCiAg ZW5kCgogIHByaXZhdGUKCiAgICBkZWYgYWRkX2JhY2tyZWZlcmVuY2Uob2Jq KQogICAgICBiYWNrcmVmZXJlbmNlcyA9IG9iai5pbnN0YW5jZV92YXJpYWJs ZV9nZXQoOkBfX3dlYWtfYmFja3JlZmVyZW5jZXNfXykgaWYgb2JqLmluc3Rh bmNlX3ZhcmlhYmxlX2RlZmluZWQ/KDpAX193ZWFrX2JhY2tyZWZlcmVuY2Vz X18pCiAgICAgIHVubGVzcyBiYWNrcmVmZXJlbmNlcwogICAgICAgIGJhY2ty ZWZlcmVuY2VzID0gW10KICAgICAgICBvYmouaW5zdGFuY2VfdmFyaWFibGVf c2V0KDpAX193ZWFrX2JhY2tyZWZlcmVuY2VzX18sIGJhY2tyZWZlcmVuY2Vz KQogICAgICBlbmQKICAgICAgYmFja3JlZmVyZW5jZXMgPDwgb2JqZWN0X2lk CiAgICBlbmQKCiAgICBkZWYgdmVyaWZ5X2JhY2tyZWZlcmVuY2VzKG9iaikK ICAgICAgYmFja3JlZmVyZW5jZXMgPSBvYmouaW5zdGFuY2VfdmFyaWFibGVf Z2V0KDpAX193ZWFrX2JhY2tyZWZlcmVuY2VzX18pIGlmIG9iai5pbnN0YW5j ZV92YXJpYWJsZV9kZWZpbmVkPyg6QF9fd2Vha19iYWNrcmVmZXJlbmNlc19f KQogICAgICBiYWNrcmVmZXJlbmNlcyAmJiBiYWNrcmVmZXJlbmNlcy5pbmNs dWRlPyhvYmplY3RfaWQpCiAgICBlbmQKZW5kCgpyZXF1aXJlICJkZWxlZ2F0 ZSIKCiMgV2Vha1JlZiBpcyBhIGNsYXNzIHRvIHJlcHJlc2VudCBhIHJlZmVy ZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBub3Qgc2VlbiBieSB0aGUgdHJh Y2luZwojIHBoYXNlIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBh bGxvd3MgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IHRvIGJlIGdhcmJhZ2UgY29s bGVjdGVkCiMgYXMgaWYgbm90aGluZyBpcyByZWZlcnJpbmcgdG8gaXQuIEJl Y2F1c2UgV2Vha1JlZiBkZWxlZ2F0ZXMgbWV0aG9kIGNhbGxzIHRvIHRoZSBy ZWZlcmVuY2VkCiMgb2JqZWN0LCBpdCBtYXkgYmUgdXNlZCBpbiBwbGFjZSBv ZiB0aGF0IG9iamVjdCwgaS5lLiBpdCBpcyBvZiB0aGUgc2FtZSBkdWNrIHR5 cGUuCiMKIyBJZiB5b3UgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIGRlbGVnYXRv ciBwYXR0ZXJuLCB5b3UgY2FuIHVzZSBXZWFrUmVmZXJlbmNlIGluc3RlYWQu CiMKIyBVc2FnZToKIyAgIGZvbyA9IE9iamVjdC5uZXcKIyAgIGZvbyA9IE9i amVjdC5uZXcKIyAgIHAgZm9vLnRvX3MJCQkjIG9yaWdpbmFsJ3MgY2xhc3MK IyAgIGZvbyA9IFdlYWtSZWYubmV3KGZvbykKIyAgIHAgZm9vLnRvX3MJCQkj IHNob3VsZCBiZSBzYW1lIGNsYXNzCiMgICBPYmplY3RTcGFjZS5nYXJiYWdl X2NvbGxlY3QKIyAgIHAgZm9vLnRvX3MJCQkjIHNob3VsZCByYWlzZSBleGNl cHRpb24gKHJlY3ljbGVkKQpjbGFzcyBXZWFrUmVmIDwgRGVsZWdhdG9yCiAg Y2xhc3MgUmVmRXJyb3IgPCBTdGFuZGFyZEVycm9yCiAgZW5kCiAgCiAgZGVm IGluaXRpYWxpemUob2JqKQogICAgc3VwZXIKICBlbmQKICAKICBkZWYgX19n ZXRvYmpfXwogICAgb2JqID0gQHJlZmVyZW5jZS5vYmplY3QKICAgIEtlcm5l bDo6cmFpc2UoUmVmRXJyb3IsICJJbnZhbGlkIFJlZmVyZW5jZSAtIHByb2Jh Ymx5IHJlY3ljbGVkIiwgS2VybmVsOjpjYWxsZXIoMSkpIHVubGVzcyBvYmoK ICAgIG9iagogIGVuZAogIAogIGRlZiBfX3NldG9ial9fKG9iaikKICAgIEBy ZWZlcmVuY2UgPSBXZWFrUmVmZXJlbmNlLm5ldyhvYmopCiAgZW5kCiAgCiAg ZGVmIHdlYWtyZWZfYWxpdmU/CiAgICAhIUByZWZlcmVuY2Uub2JqZWN0CiAg ZW5kCmVuZAoKaWYgX19GSUxFX18gPT0gJDAKICBmb28gPSBPYmplY3QubmV3 CiAgcCBmb28udG9fcwkJCSMgb3JpZ2luYWwncyBjbGFzcwogIGZvbyA9IFdl YWtSZWYubmV3KGZvbykKICBwIGZvby50b19zCQkJIyBzaG91bGQgYmUgc2Ft ZSBjbGFzcwogIE9iamVjdFNwYWNlLmdhcmJhZ2VfY29sbGVjdAogIE9iamVj dFNwYWNlLmdhcmJhZ2VfY29sbGVjdAogIHAgZm9vLnRvX3MJCQkjIHNob3Vs ZCByYWlzZSBleGNlcHRpb24gKHJlY3ljbGVkKQplbmQK --mimepart_4d2b292c7a428_1f28b4bc5fc425f Content-Type: application/octet-stream; name=weakref_patch.diff Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=weakref_patch.diff MTNjMTMKPCByZXF1aXJlICd0aHJlYWQnCi0tLQo+IHJlcXVpcmUgJ21vbml0 b3InCjIyLDI1YzIyLDI2CjwgICBAQG11dGV4ID0gTXV0ZXgubmV3CjwgICBA QGZpbmFsID0gbGFtYmRhIHt8aWR8CjwgICAgIEBAbXV0ZXguc3luY2hyb25p emUgewo8ICAgICAgIHJpZHMgPSBAQGlkX21hcFtpZF0KLS0tCj4gICBAQG1v bml0b3IgPSBNb25pdG9yLm5ldwo+IAo+ICAgQEBvYmplY3RfZmluYWxpemVy ID0gbGFtYmRhIGRvIHxpZHwKPiAgICAgQEBtb25pdG9yLnN5bmNocm9uaXpl IGRvCj4gICAgICAgcmlkcyA9IEBAaWRfbWFwLmRlbGV0ZShpZCkKMjcsMzBj MjgsMzAKPCAJZm9yIHJpZCBpbiByaWRzCjwgCSAgQEBpZF9yZXZfbWFwLmRl bGV0ZShyaWQpCjwgCWVuZAo8IAlAQGlkX21hcC5kZWxldGUoaWQpCi0tLQo+ ICAgICAgICAgcmlkcy5lYWNoIGRvIHxyaWR8Cj4gICAgICAgICAgIEBAaWRf cmV2X21hcC5kZWxldGUocmlkKQo+ICAgICAgICAgZW5kCjMyYzMyLDM3Cjwg ICAgICAgcmlkID0gQEBpZF9yZXZfbWFwW2lkXQotLS0KPiAgICAgZW5kCj4g ICBlbmQKPiAgIAo+ICAgQEByZWZlcmVuY2VfZmluYWxpemVyID0gbGFtYmRh IGRvIHxpZHwKPiAgICAgQEBtb25pdG9yLnN5bmNocm9uaXplIGRvCj4gICAg ICAgcmlkID0gQEBpZF9yZXZfbWFwLmRlbGV0ZShpZCkKMzQsMzZjMzksNTEK PCAJQEBpZF9yZXZfbWFwLmRlbGV0ZShpZCkKPCAJQEBpZF9tYXBbcmlkXS5k ZWxldGUoaWQpCjwgCUBAaWRfbWFwLmRlbGV0ZShyaWQpIGlmIEBAaWRfbWFw W3JpZF0uZW1wdHk/Ci0tLQo+ICAgICAgICAgb2JqID0gT2JqZWN0U3BhY2Uu X2lkMnJlZihyZWZlcmVuY2VkX29iamVjdF9pZCkgcmVzY3VlIG5pbAo+ICAg ICAgICAgaWYgb2JqCj4gICAgICAgICAgIGJhY2tyZWZlcmVuY2VzID0gb2Jq Lmluc3RhbmNlX3ZhcmlhYmxlX2dldCg6QF9fd2Vha19iYWNrcmVmZXJlbmNl c19fKSBpZiBvYmouaW5zdGFuY2VfdmFyaWFibGVfZGVmaW5lZD8oOkBfX3dl YWtfYmFja3JlZmVyZW5jZXNfXykKPiAgICAgICAgICAgaWYgYmFja3JlZmVy ZW5jZXMKPiAgICAgICAgICAgICBiYWNrcmVmZXJlbmNlcy5kZWxldGUob2Jq ZWN0X2lkKQo+ICAgICAgICAgICAgIG9iai5zZW5kKDpyZW1vdmVfaW5zdGFu Y2VfdmFyaWFibGUsIDpAX193ZWFrX2JhY2tyZWZlcmVuY2VzX18pIGlmIGJh Y2tyZWZlcmVuY2VzLmVtcHR5Pwo+ICAgICAgICAgICBlbmQKPiAgICAgICAg IGVuZAo+ICAgICAgICAgcmVmcyA9IEBAaWRfbWFwW3JpZF0KPiAgICAgICAg IGlmIHJlZnMKPiAgICAgICAgICAgcmVmcy5kZWxldGUoaWQpCj4gICAgICAg ICAgIEBAaWRfbWFwLmRlbGV0ZShyaWQpIGlmIHJlZnMuZW1wdHk/Cj4gICAg ICAgICBlbmQKMzgsMzljNTMsNTQKPCAgICAgfQo8ICAgfQotLS0KPiAgICAg ZW5kCj4gICBlbmQKNDIsNDVjNTcsNjAKPCAgICAgQF9faWQgPSBvcmlnLm9i amVjdF9pZAo8ICAgICBPYmplY3RTcGFjZS5kZWZpbmVfZmluYWxpemVyIG9y aWcsIEBAZmluYWwKPCAgICAgT2JqZWN0U3BhY2UuZGVmaW5lX2ZpbmFsaXpl ciBzZWxmLCBAQGZpbmFsCjwgICAgIEBAbXV0ZXguc3luY2hyb25pemUgewot LS0KPiAgICAgQF9faWQgPSBvcmlnLl9faWRfXwo+ICAgICBPYmplY3RTcGFj ZS5kZWZpbmVfZmluYWxpemVyIG9yaWcsIEBAb2JqZWN0X2ZpbmFsaXplcgo+ ICAgICBPYmplY3RTcGFjZS5kZWZpbmVfZmluYWxpemVyIHNlbGYsIEBAcmVm ZXJlbmNlX2ZpbmFsaXplcgo+ICAgICBAQG1vbml0b3Iuc3luY2hyb25pemUg ZG8KNDcsNDljNjIsNjUKPCAgICAgfQo8ICAgICBAQGlkX21hcFtAX19pZF0u cHVzaCBzZWxmLm9iamVjdF9pZAo8ICAgICBAQGlkX3Jldl9tYXBbc2VsZi5v YmplY3RfaWRdID0gQF9faWQKLS0tCj4gICAgICAgQEBpZF9tYXBbQF9faWRd LnB1c2ggc2VsZi5fX2lkX18KPiAgICAgICBAQGlkX3Jldl9tYXBbX19pZF9f XSA9IEBfX2lkCj4gICAgICAgX19hZGRfd2Vha3JlZl9iYWNrcmVmZXJlbmNl X18ob3JpZykKPiAgICAgZW5kCjU0LDU2YzcwCjwgICAgIHVubGVzcyBAQGlk X3Jldl9tYXBbc2VsZi5vYmplY3RfaWRdID09IEBfX2lkCjwgICAgICAgS2Vy bmVsOjpyYWlzZSBSZWZFcnJvciwgIkludmFsaWQgUmVmZXJlbmNlIC0gcHJv YmFibHkgcmVjeWNsZWQiLCBLZXJuZWw6OmNhbGxlcigyKQo8ICAgICBlbmQK LS0tCj4gICAgIG9iaiA9IG5pbAo1OGM3Miw3NQo8ICAgICAgIE9iamVjdFNw YWNlLl9pZDJyZWYoQF9faWQpCi0tLQo+ICAgICAgIGlmIEBAaWRfcmV2X21h cFtzZWxmLl9faWRfX10gPT0gQF9faWQKPiAgICAgICAgIG9iaiA9IE9iamVj dFNwYWNlLl9pZDJyZWYoQF9faWQpCj4gICAgICAgICBvYmogPSBuaWwgdW5s ZXNzIF9fdmVyaWZ5X3dlYWtyZWZfYmFja3JlZmVyZW5jZV9fKG9iaikKPiAg ICAgICBlbmQKNjBjNzcKPCAgICAgICBLZXJuZWw6OnJhaXNlIFJlZkVycm9y LCAiSW52YWxpZCBSZWZlcmVuY2UgLSBwcm9iYWJseSByZWN5Y2xlZCIsIEtl cm5lbDo6Y2FsbGVyKDIpCi0tLQo+ICAgICAgICMgT2JqZWN0IGhhcyBiZWVu IGdhcmJhZ2UgY29sbGVjdGVkLgo2MWE3OSw4MAo+ICAgICBLZXJuZWw6OnJh aXNlKFJlZkVycm9yLCAiSW52YWxpZCBSZWZlcmVuY2UgLSBwcm9iYWJseSBy ZWN5Y2xlZCIsIEtlcm5lbDo6Y2FsbGVyKDEpKSB1bmxlc3Mgb2JqCj4gICAg IG9iago2MmE4Mgo+ICAgCjY3Yzg3LDk0CjwgICAgIEBAaWRfcmV2X21hcFtz ZWxmLm9iamVjdF9pZF0gPT0gQF9faWQKLS0tCj4gICAgIGlmIEBAaWRfcmV2 X21hcFtzZWxmLl9faWRfX10gPT0gQF9faWQKPiAgICAgICBvYmogPSBPYmpl Y3RTcGFjZS5faWQycmVmKEBfX2lkKQo+ICAgICAgIF9fdmVyaWZ5X3dlYWty ZWZfYmFja3JlZmVyZW5jZV9fKG9iaikKPiAgICAgZWxzZQo+ICAgICAgIGZh bHNlCj4gICAgIGVuZAo+ICAgcmVzY3VlIFJhbmdlRXJyb3IKPiAgICAgZmFs c2UKNjhhOTYsMTE3Cj4gICAKPiAgIHByaXZhdGUKPiAKPiAgICAgIyBBZGQg YSBiYWNrcmVmZXJlbmNlIHRvIHRoZSB3ZWFrcmVmIG9iamVjdCBpZCBpbiB0 aGUgcmVmZXJlbmNlZCBvYmplY3QgdG8gcHJvdGVjdAo+ICAgICAjIGFnYWlu c3QgdGhlIG9iamVjdCBpZCBiZWluZyByZWN5Y2xlZCBiZWZvcmUgdGhlIGZp bmFsaXplcnMgaGF2ZSBhIGNoYW5jZSB0byBydW4uCj4gICAgIGRlZiBfX2Fk ZF93ZWFrcmVmX2JhY2tyZWZlcmVuY2VfXyhvYmopCj4gICAgICAgYmFja3Jl ZmVyZW5jZXMgPSBvYmouaW5zdGFuY2VfdmFyaWFibGVfZ2V0KDpAX193ZWFr X2JhY2tyZWZlcmVuY2VzX18pIGlmIG9iai5pbnN0YW5jZV92YXJpYWJsZV9k ZWZpbmVkPyg6QF9fd2Vha19iYWNrcmVmZXJlbmNlc19fKQo+ICAgICAgIHVu bGVzcyBiYWNrcmVmZXJlbmNlcwo+ICAgICAgICAgYmFja3JlZmVyZW5jZXMg PSBbXQo+ICAgICAgICAgb2JqLmluc3RhbmNlX3ZhcmlhYmxlX3NldCg6QF9f d2Vha19iYWNrcmVmZXJlbmNlc19fLCBiYWNrcmVmZXJlbmNlcykKPiAgICAg ICBlbmQKPiAgICAgICBiYWNrcmVmZXJlbmNlcyA8PCBvYmplY3RfaWQKPiAg ICAgZW5kCj4gCj4gICAgICMgVmVyaWZ5IHRoYXQgdGhlIG9iamVjdCBpcyB0 aGUgb25lIHRoZSB3ZWFrcmVmIHRoaW5rcyBpdCBpcy4gT24gcnVudGltZXMg d2hlcmUKPiAgICAgIyBvYmplY3QgaWRzIGFyZSByZWN5Y2xlZCBhZnRlciBn YXJiYWdlIGNvbGxlY3Rpb24gYW5kIHJlYWxsb2NhdGVkIHRvIG5ldyBvYmpl Y3RzLAo+ICAgICAjIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIHJlZmVy ZW5jZSBjb3VsZCBmaW5kIGFuIG9iamVjdCBhdCB0aGUgc3BlY2lmaWVkCj4g ICAgICMgbG9jYXRpb24gaW4gdGhlIE9iamVjdFNwYWNlIHRoYXQgaXMgbm90 IHRoZSBvbmUgaXQgb3JpZ2luYWxseSByZWZlcmVuY2VkLgo+ICAgICBkZWYg X192ZXJpZnlfd2Vha3JlZl9iYWNrcmVmZXJlbmNlX18ob2JqKQo+ICAgICAg IGJhY2tyZWZlcmVuY2VzID0gb2JqLmluc3RhbmNlX3ZhcmlhYmxlX2dldCg6 QF9fd2Vha19iYWNrcmVmZXJlbmNlc19fKSBpZiBvYmouaW5zdGFuY2VfdmFy aWFibGVfZGVmaW5lZD8oOkBfX3dlYWtfYmFja3JlZmVyZW5jZXNfXykKPiAg ICAgICBiYWNrcmVmZXJlbmNlcyAmJiBiYWNrcmVmZXJlbmNlcy5pbmNsdWRl PyhzZWxmLl9faWRfXykKPiAgICAgZW5kCjcyYzEyMQo8ICMgIHJlcXVpcmUg J3RocmVhZCcKLS0tCj4gICAjICByZXF1aXJlICd0aHJlYWQnCg== --mimepart_4d2b292c7a428_1f28b4bc5fc425f--