From: Roger Pack Date: 2009-03-15T13:46:42+09:00 Subject: [ruby-core:22898] Re: [Bug #1292] 1.8 compile time error with mingw gcc 4.3 --0016e64ca97e66f4770465210d47 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable > Seems extconf.rb failed to detect socklen_t. =A0Could you show > the mkmf.log? This part seems to be relevant: have_type: checking for socklen_t... -------------------- no "gcc -I../.. -I../../../ruby_1_8 -I../../../ruby_1_8/ext/socket -I. -g -O2 -c conftest.c" conftest.c:5: error: expected '=3D', ',', ';', 'asm' or '__attribute__' before 'conftest_type' conftest.c:6: error: expected '=3D', ',', ';', 'asm' or '__attribute__' before 'conftestval' checked program was: /* begin */ 1: #include 2: #include 3: 4: /*top*/ 5: typedef socklen_t conftest_type; 6: static conftest_type conftestval[sizeof(conftest_type)?1:-1]; /* end */ Thanks! -=3Dr --0016e64ca97e66f4770465210d47 Content-Type: application/octet-stream; name="mkmf.log" Content-Disposition: attachment; filename="mkmf.log" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fsb8ylqh0 aGF2ZV9saWJyYXJ5OiBjaGVja2luZyBmb3IgV1NBQ2xlYW51cCgpIGluIC1sd3MyXzMyLi4uIC0t LS0tLS0tLS0tLS0tLS0tLS0tIHllcw0KDQoiZ2NjIC1vIGNvbmZ0ZXN0IC1JLi4vLi4gLUkuLi8u Li8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2NrZXQgICAtZyAtTzIgIGNv bmZ0ZXN0LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgIC1sbXN2Y3J0LXJ1YnkxOC1zdGF0aWMgLWx3 czJfMzIgIC1sc2hlbGwzMiAtbHdzMl8zMiAgIg0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJl Z2luICovDQoxOiAjaW5jbHVkZSA8d2luZG93cy5oPg0KMjogI2luY2x1ZGUgPHdpbnNvY2suaD4N CjM6IA0KNDogLyp0b3AqLw0KNTogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQo2OiBpbnQgdCgp IHsgdm9pZCAoKCp2b2xhdGlsZSBwKSgpKTsgcCA9ICh2b2lkICgoKikoKSkpV1NBQ2xlYW51cDsg cmV0dXJuIDA7IH0NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX2hl YWRlcjogY2hlY2tpbmcgZm9yIGFycGEvaW5ldC5oLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIG5v DQoNCiJnY2MgLUUgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVieV8x XzgvZXh0L3NvY2tldCAgIC1nIC1PMiAgIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QuaSINCmNvbmZ0 ZXN0LmM6MToyMzogZXJyb3I6IGFycGEvaW5ldC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5 DQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDxhcnBhL2lu ZXQuaD4NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpjaGVja2luZyBmb3Ig aXB2Ni4uLiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBubw0KDQoiZ2NjIC1vIGNvbmZ0ZXN0IC1JLi4v Li4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2NrZXQgICAt ZyAtTzIgIGNvbmZ0ZXN0LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgLWx3czJfMzIgIC1sbXN2Y3J0 LXJ1YnkxOC1zdGF0aWMgIC1sc2hlbGwzMiAtbHdzMl8zMiAgIg0KY29uZnRlc3QuYzoyOjI0OiBl cnJvcjogc3lzL3NvY2tldC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5DQpjb25mdGVzdC5j OiBJbiBmdW5jdGlvbiAnbWFpbic6DQpjb25mdGVzdC5jOjU6IGVycm9yOiAnQUZfSU5FVDYnIHVu ZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29uZnRlc3QuYzo1OiBlcnJv cjogKEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQ0KY29u ZnRlc3QuYzo1OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pDQpjb25m dGVzdC5jOjU6IGVycm9yOiAnU09DS19TVFJFQU0nIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0 aGlzIGZ1bmN0aW9uKQ0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQoxOiAjaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQoyOiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KMzogbWFpbigp DQo0OiB7DQo1OiAgIHNvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOw0KNjogfQ0KLyog ZW5kICovDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmhhdmVfc3RydWN0X21lbWJlcjogY2hl Y2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbi5zaW5fbGVuLi4uIC0tLS0tLS0tLS0tLS0tLS0t LS0tIG5vDQoNCiJnY2MgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVi eV8xXzgvZXh0L3NvY2tldCAgIC1nIC1PMiAgICAtYyBjb25mdGVzdC5jIg0KY29uZnRlc3QuYzo2 OiBlcnJvcjogJ3N0cnVjdCBzb2NrYWRkcl9pbicgaGFzIG5vIG1lbWJlciBuYW1lZCAnc2luX2xl bicNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogI2luY2x1ZGUgPHdpbmRv d3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2NrLmg+DQozOiANCjQ6IC8qdG9wKi8NCjU6IGludCBt YWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50IHMgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRk cl9pbiopMCktPnNpbl9sZW4gLSAoY2hhciAqKTA7DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0NCg0KaGF2ZV9zdHJ1Y3RfbWVtYmVyOiBjaGVja2luZyBmb3Igc3RydWN0IHNvY2th ZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5Li4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHllcw0KDQoiZ2Nj IC1JLi4vLi4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2Nr ZXQgICAtZyAtTzIgICAgLWMgY29uZnRlc3QuYyINCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBi ZWdpbiAqLw0KMTogI2luY2x1ZGUgPHdpbmRvd3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2NrLmg+ DQozOiANCjQ6IC8qdG9wKi8NCjU6IGludCBtYWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50IHMg PSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKikwKS0+c3NfZmFtaWx5IC0gKGNo YXIgKikwOw0KLyogZW5kICovDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmhhdmVfc3RydWN0 X21lbWJlcjogY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkci5zYV9sZW4uLi4gLS0tLS0tLS0t LS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8u Li8uLi9ydWJ5XzFfOC9leHQvc29ja2V0ICAgLWcgLU8yICAgIC1jIGNvbmZ0ZXN0LmMiDQpjb25m dGVzdC5jOjY6IGVycm9yOiAnc3RydWN0IHNvY2thZGRyJyBoYXMgbm8gbWVtYmVyIG5hbWVkICdz YV9sZW4nDQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3 aW5kb3dzLmg+DQoyOiAjaW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBp bnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjY6IGludCBzID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29j a2FkZHIqKTApLT5zYV9sZW4gLSAoY2hhciAqKTA7DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0NCg0KaGF2ZV9oZWFkZXI6IGNoZWNraW5nIGZvciBuZXRpbmV0L3RjcC5oLi4uIC0t LS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoNCiJnY2MgLUUgLUkuLi8uLiAtSS4uLy4uLy4uL3J1Ynlf MV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAgIC1nIC1PMiAgIGNvbmZ0ZXN0LmMg LW8gY29uZnRlc3QuaSINCmNvbmZ0ZXN0LmM6MToyNTogZXJyb3I6IG5ldGluZXQvdGNwLmg6IE5v IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAq Lw0KMTogI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0NCg0KaGF2ZV9oZWFkZXI6IGNoZWNraW5nIGZvciBuZXRpbmV0L3VkcC5oLi4uIC0t LS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoNCiJnY2MgLUUgLUkuLi8uLiAtSS4uLy4uLy4uL3J1Ynlf MV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAgIC1nIC1PMiAgIGNvbmZ0ZXN0LmMg LW8gY29uZnRlc3QuaSINCmNvbmZ0ZXN0LmM6MToyNTogZXJyb3I6IG5ldGluZXQvdWRwLmg6IE5v IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAq Lw0KMTogI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0NCg0KaGF2ZV9mdW5jOiBjaGVja2luZyBmb3Igc2VuZG1zZygpLi4uIC0tLS0tLS0t LS0tLS0tLS0tLS0tIG5vDQoNCiJnY2MgLW8gY29uZnRlc3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1 YnlfMV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAgIC1nIC1PMiAgY29uZnRlc3Qu YyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAt bHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMyICAiDQpjb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAn dCc6DQpjb25mdGVzdC5jOjY6IGVycm9yOiAnc2VuZG1zZycgdW5kZWNsYXJlZCAoZmlyc3QgdXNl IGluIHRoaXMgZnVuY3Rpb24pDQpjb25mdGVzdC5jOjY6IGVycm9yOiAoRWFjaCB1bmRlY2xhcmVk IGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlDQpjb25mdGVzdC5jOjY6IGVycm9yOiBm b3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJzIGluLikNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQov KiBiZWdpbiAqLw0KMTogI2luY2x1ZGUgPHdpbmRvd3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2Nr Lmg+DQozOiANCjQ6IC8qdG9wKi8NCjU6IGludCBtYWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50 IHQoKSB7IHZvaWQgKCgqdm9sYXRpbGUgcCkoKSk7IHAgPSAodm9pZCAoKCopKCkpKXNlbmRtc2c7 IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4v Li4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0ICAgLWcgLU8yICBj b25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4gICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgt c3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIgLWx3czJfMzIgICINCkM6L1VzZXJzL0hvbWUvQXBw RGF0YS9Mb2NhbC9UZW1wL2NjaFZOM2p0Lm86IEluIGZ1bmN0aW9uIGB0JzoNCmM6XGRldlxydWJ5 aV80M1xzYW5kYm94XHJ1YnlfYnVpbGRcZXh0XHNvY2tldC9jb25mdGVzdC5jOjM6IHVuZGVmaW5l ZCByZWZlcmVuY2UgdG8gYHNlbmRtc2cnDQpjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0 YXR1cw0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQoxOiAvKnRvcCovDQoyOiBp bnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjM6IGludCB0KCkgeyBzZW5kbXNnKCk7IHJldHVybiAw OyB9DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9mdW5jOiBjaGVj a2luZyBmb3IgcmVjdm1zZygpLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoNCiJnY2MgLW8g Y29uZnRlc3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVieV8xXzgv ZXh0L3NvY2tldCAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdz Ml8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMy ICAiDQpjb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAndCc6DQpjb25mdGVzdC5jOjY6IGVycm9yOiAn cmVjdm1zZycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pDQpjb25mdGVz dC5jOjY6IGVycm9yOiAoRWFjaCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25s eSBvbmNlDQpjb25mdGVzdC5jOjY6IGVycm9yOiBmb3IgZWFjaCBmdW5jdGlvbiBpdCBhcHBlYXJz IGluLikNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogI2luY2x1ZGUgPHdp bmRvd3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2NrLmg+DQozOiANCjQ6IC8qdG9wKi8NCjU6IGlu dCBtYWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50IHQoKSB7IHZvaWQgKCgqdm9sYXRpbGUgcCko KSk7IHAgPSAodm9pZCAoKCopKCkpKXJlY3Ztc2c7IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0K ImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9y dWJ5XzFfOC9leHQvc29ja2V0ICAgLWcgLU8yICBjb25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4g ICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgtc3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIg LWx3czJfMzIgICINCkM6L1VzZXJzL0hvbWUvQXBwRGF0YS9Mb2NhbC9UZW1wL2NjcWFNcVZzLm86 IEluIGZ1bmN0aW9uIGB0JzoNCmM6XGRldlxydWJ5aV80M1xzYW5kYm94XHJ1YnlfYnVpbGRcZXh0 XHNvY2tldC9jb25mdGVzdC5jOjM6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJlY3Ztc2cnDQpj b2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cw0KY2hlY2tlZCBwcm9ncmFtIHdhczoN Ci8qIGJlZ2luICovDQoxOiAvKnRvcCovDQoyOiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjM6 IGludCB0KCkgeyByZWN2bXNnKCk7IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0t LS0tLS0tLS0tLS0NCg0KY2hlY2tpbmcgZm9yIHdpZGUgZ2V0YWRkcmluZm8uLi4gLS0tLS0tLS0t LS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVi eV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0ICAgLWcgLU8yICBjb25mdGVzdC5j ICAtTC4gLUwuLi8uLiAtTC4gICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgtc3RhdGljICAt bHNoZWxsMzIgLWx3czJfMzIgICINCmNvbmZ0ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoNCmNv bmZ0ZXN0LmM6MTc6IGVycm9yOiBzdG9yYWdlIHNpemUgb2YgJ2hpbnRzJyBpc24ndCBrbm93bg0K Y29uZnRlc3QuYzoxODogZXJyb3I6ICdJTkVUNl9BRERSU1RSTEVOJyB1bmRlY2xhcmVkIChmaXJz dCB1c2UgaW4gdGhpcyBmdW5jdGlvbikNCmNvbmZ0ZXN0LmM6MTg6IGVycm9yOiAoRWFjaCB1bmRl Y2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlDQpjb25mdGVzdC5jOjE4OiBl cnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pDQpjb25mdGVzdC5jOjIxOiB3 YXJuaW5nOiBpbmNvbXBhdGlibGUgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgYnVpbHQtaW4gZnVu Y3Rpb24gJ21lbXNldCcNCmNvbmZ0ZXN0LmM6MjI6IGVycm9yOiAnQUZfVU5TUEVDJyB1bmRlY2xh cmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikNCmNvbmZ0ZXN0LmM6MjM6IGVycm9yOiAn SVBQUk9UT19UQ1AnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29u ZnRlc3QuYzoyNDogZXJyb3I6ICdBSV9QQVNTSVZFJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4g dGhpcyBmdW5jdGlvbikNCmNvbmZ0ZXN0LmM6MjU6IGVycm9yOiAnU09DS19TVFJFQU0nIHVuZGVj bGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29uZnRlc3QuYzozMDogZXJyb3I6 IGRlcmVmZXJlbmNpbmcgcG9pbnRlciB0byBpbmNvbXBsZXRlIHR5cGUNCmNvbmZ0ZXN0LmM6MzE6 IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSB0eXBlDQpjb25mdGVz dC5jOjMxOiBlcnJvcjogJ0FGX1VOSVgnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1 bmN0aW9uKQ0KY29uZnRlc3QuYzozMjogZXJyb3I6IGRlcmVmZXJlbmNpbmcgcG9pbnRlciB0byBp bmNvbXBsZXRlIHR5cGUNCmNvbmZ0ZXN0LmM6NDI6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50 ZXIgdG8gaW5jb21wbGV0ZSB0eXBlDQpjb25mdGVzdC5jOjQzOiBlcnJvcjogZGVyZWZlcmVuY2lu ZyBwb2ludGVyIHRvIGluY29tcGxldGUgdHlwZQ0KY29uZnRlc3QuYzo0MzogZXJyb3I6IGRlcmVm ZXJlbmNpbmcgcG9pbnRlciB0byBpbmNvbXBsZXRlIHR5cGUNCmNvbmZ0ZXN0LmM6NDU6IGVycm9y OiAnTklfTlVNRVJJQ0hPU1QnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9u KQ0KY29uZnRlc3QuYzo0NTogZXJyb3I6ICdOSV9OVU1FUklDU0VSVicgdW5kZWNsYXJlZCAoZmly c3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pDQpjb25mdGVzdC5jOjUxOiBlcnJvcjogZGVyZWZlcmVu Y2luZyBwb2ludGVyIHRvIGluY29tcGxldGUgdHlwZQ0KY29uZnRlc3QuYzo1MjogZXJyb3I6ICdB Rl9JTkVUJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikNCmNvbmZ0ZXN0 LmM6NjQ6IGVycm9yOiAnQUZfSU5FVDYnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1 bmN0aW9uKQ0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQogMTogI2luY2x1ZGUg PHN0ZGxpYi5oPg0KIDI6IA0KIDM6ICNpZm5kZWYgRVhJVF9TVUNDRVNTDQogNDogI2RlZmluZSBF WElUX1NVQ0NFU1MgMA0KIDU6ICNlbmRpZg0KIDY6ICNpZm5kZWYgRVhJVF9GQUlMVVJFDQogNzog I2RlZmluZSBFWElUX0ZBSUxVUkUgMQ0KIDg6ICNlbmRpZg0KIDk6IA0KMTA6ICNpZm5kZWYgQUZf TE9DQUwNCjExOiAjZGVmaW5lIEFGX0xPQ0FMIEFGX1VOSVgNCjEyOiAjZW5kaWYNCjEzOiANCjE0 OiBtYWluKCkNCjE1OiB7DQoxNjogICBpbnQgcGFzc2l2ZSwgZ2FpZXJyLCBpbmV0NCA9IDAsIGlu ZXQ2ID0gMDsNCjE3OiAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqYWl0b3A7DQoxODog ICBjaGFyIHN0cmFkZHJbSU5FVDZfQUREUlNUUkxFTl0sIHN0cnBvcnRbMTZdOw0KMTk6IA0KMjA6 ICAgZm9yIChwYXNzaXZlID0gMDsgcGFzc2l2ZSA8PSAxOyBwYXNzaXZlKyspIHsNCjIxOiAgICAg bWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7DQoyMjogICAgIGhpbnRzLmFpX2ZhbWls eSA9IEFGX1VOU1BFQzsNCjIzOiAgICAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsN CjI0OiAgICAgaGludHMuYWlfZmxhZ3MgPSBwYXNzaXZlID8gQUlfUEFTU0lWRSA6IDA7DQoyNTog ICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07DQoyNjogICAgIGlmICgoZ2FpZXJy ID0gZ2V0YWRkcmluZm8oTlVMTCwgIjU0MzIxIiwgJmhpbnRzLCAmYWl0b3ApKSAhPSAwKSB7DQoy NzogICAgICAgKHZvaWQpZ2FpX3N0cmVycm9yKGdhaWVycik7DQoyODogICAgICAgZ290byBiYWQ7 DQoyOTogICAgIH0NCjMwOiAgICAgZm9yIChhaSA9IGFpdG9wOyBhaTsgYWkgPSBhaS0+YWlfbmV4 dCkgew0KMzE6ICAgICAgIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0xPQ0FMKSBjb250aW51ZTsN CjMyOiAgICAgICBpZiAoYWktPmFpX2FkZHIgPT0gTlVMTCkNCjMzOiAgICAgICAgIGdvdG8gYmFk Ow0KMzQ6ICNpZiBkZWZpbmVkKF9BSVgpDQozNTogICAgICAgaWYgKGFpLT5haV9mYW1pbHkgPT0g QUZfSU5FVDYgJiYgcGFzc2l2ZSkgew0KMzY6ICAgICAgICAgaW5ldDYrKzsNCjM3OiAgICAgICAg IGNvbnRpbnVlOw0KMzg6ICAgICAgIH0NCjM5OiAgICAgICBhaS0+YWlfYWRkci0+c2FfbGVuID0g YWktPmFpX2FkZHJsZW47DQo0MDogICAgICAgYWktPmFpX2FkZHItPnNhX2ZhbWlseSA9IGFpLT5h aV9mYW1pbHk7DQo0MTogI2VuZGlmDQo0MjogICAgICAgaWYgKGFpLT5haV9hZGRybGVuID09IDAg fHwNCjQzOiAgICAgICAgICAgZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVu LA0KNDQ6ICAgICAgICAgICAgICAgICAgICAgICBzdHJhZGRyLCBzaXplb2Yoc3RyYWRkciksIHN0 cnBvcnQsIHNpemVvZihzdHJwb3J0KSwNCjQ1OiAgICAgICAgICAgICAgICAgICAgICAgTklfTlVN RVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApIHsNCjQ2OiAgICAgICAgIGdvdG8gYmFkOw0K NDc6ICAgICAgIH0NCjQ4OiAgICAgICBpZiAoc3RyY21wKHN0cnBvcnQsICI1NDMyMSIpICE9IDAp IHsNCjQ5OiAgICAgICAgIGdvdG8gYmFkOw0KNTA6ICAgICAgIH0NCjUxOiAgICAgICBzd2l0Y2gg KGFpLT5haV9mYW1pbHkpIHsNCjUyOiAgICAgICBjYXNlIEFGX0lORVQ6DQo1MzogICAgICAgICBp ZiAocGFzc2l2ZSkgew0KNTQ6ICAgICAgICAgICBpZiAoc3RyY21wKHN0cmFkZHIsICIwLjAuMC4w IikgIT0gMCkgew0KNTU6ICAgICAgICAgICAgIGdvdG8gYmFkOw0KNTY6ICAgICAgICAgICB9DQo1 NzogICAgICAgICB9IGVsc2Ugew0KNTg6ICAgICAgICAgICBpZiAoc3RyY21wKHN0cmFkZHIsICIx MjcuMC4wLjEiKSAhPSAwKSB7DQo1OTogICAgICAgICAgICAgZ290byBiYWQ7DQo2MDogICAgICAg ICAgIH0NCjYxOiAgICAgICAgIH0NCjYyOiAgICAgICAgIGluZXQ0Kys7DQo2MzogICAgICAgICBi cmVhazsNCjY0OiAgICAgICBjYXNlIEFGX0lORVQ2Og0KNjU6ICAgICAgICAgaWYgKHBhc3NpdmUp IHsNCjY2OiAgICAgICAgICAgaWYgKHN0cmNtcChzdHJhZGRyLCAiOjoiKSAhPSAwKSB7DQo2Nzog ICAgICAgICAgICAgZ290byBiYWQ7DQo2ODogICAgICAgICAgIH0NCjY5OiAgICAgICAgIH0gZWxz ZSB7DQo3MDogICAgICAgICAgIGlmIChzdHJjbXAoc3RyYWRkciwgIjo6MSIpICE9IDApIHsNCjcx OiAgICAgICAgICAgICBnb3RvIGJhZDsNCjcyOiAgICAgICAgICAgfQ0KNzM6ICAgICAgICAgfQ0K NzQ6ICAgICAgICAgaW5ldDYrKzsNCjc1OiAgICAgICAgIGJyZWFrOw0KNzY6ICAgICAgIGNhc2Ug QUZfVU5TUEVDOg0KNzc6ICAgICAgICAgZ290byBiYWQ7DQo3ODogICAgICAgICBicmVhazsNCjc5 OiAgICAgICBkZWZhdWx0Og0KODA6ICAgICAgICAgLyogYW5vdGhlciBmYW1pbHkgc3VwcG9ydD8g Ki8NCjgxOiAgICAgICAgIGJyZWFrOw0KODI6ICAgICAgIH0NCjgzOiAgICAgfQ0KODQ6ICAgfQ0K ODU6IA0KODY6ICAgaWYgKCEoaW5ldDQgPT0gMCB8fCBpbmV0NCA9PSAyKSkNCjg3OiAgICAgZ290 byBiYWQ7DQo4ODogICBpZiAoIShpbmV0NiA9PSAwIHx8IGluZXQ2ID09IDIpKQ0KODk6ICAgICBn b3RvIGJhZDsNCjkwOiANCjkxOiAgIGlmIChhaXRvcCkNCjkyOiAgICAgZnJlZWFkZHJpbmZvKGFp dG9wKTsNCjkzOiAgIGV4aXQoRVhJVF9TVUNDRVNTKTsNCjk0OiANCjk1OiAgYmFkOg0KOTY6ICAg aWYgKGFpdG9wKQ0KOTc6ICAgICBmcmVlYWRkcmluZm8oYWl0b3ApOw0KOTg6ICAgZXhpdChFWElU X0ZBSUxVUkUpOw0KOTk6IH0NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpo YXZlX3N0cnVjdF9tZW1iZXI6IGNoZWNraW5nIGZvciBzdHJ1Y3QgaW42X2FkZHIuczZfYWRkcjgu Li4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtSS4uLy4uIC1JLi4vLi4vLi4vcnVi eV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0ICAgLWcgLU8yICAgIC1jIGNvbmZ0 ZXN0LmMiDQpjb25mdGVzdC5jOjY6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIgdG8gaW5j b21wbGV0ZSB0eXBlDQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNs dWRlIDx3aW5kb3dzLmg+DQoyOiAjaW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCov DQo1OiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjY6IGludCBzID0gKGNoYXIgKikmKChzdHJ1 Y3QgaW42X2FkZHIqKTApLT5zNl9hZGRyOCAtIChjaGFyICopMDsNCi8qIGVuZCAqLw0KDQotLS0t LS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX2Z1bmM6IGNoZWNraW5nIGZvciBpbmV0X250b3AoKS4u LiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBubw0KDQoiZ2NjIC1vIGNvbmZ0ZXN0IC1JLi4vLi4gLUku Li8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2NrZXQgLUkuICAgLWcg LU8yICBjb25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4gICAgIC1sd3MyXzMyICAtbG1zdmNydC1y dWJ5MTgtc3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIgLWx3czJfMzIgICINCmNvbmZ0ZXN0LmM6 IEluIGZ1bmN0aW9uICd0JzoNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6ICdpbmV0X250b3AnIHVuZGVj bGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29uZnRlc3QuYzo2OiBlcnJvcjog KEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQ0KY29uZnRl c3QuYzo2OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pDQpjaGVja2Vk IHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3aW5kb3dzLmg+DQoyOiAj aW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBpbnQgbWFpbigpIHsgcmV0 dXJuIDA7IH0NCjY6IGludCB0KCkgeyB2b2lkICgoKnZvbGF0aWxlIHApKCkpOyBwID0gKHZvaWQg KCgqKSgpKSlpbmV0X250b3A7IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0KImdjYyAtbyBjb25m dGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQv c29ja2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdz Ml8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMy ICAiDQpDOi9Vc2Vycy9Ib21lL0FwcERhdGEvTG9jYWwvVGVtcC9jY2tLdWZjSi5vOiBJbiBmdW5j dGlvbiBgdCc6DQpjOlxkZXZccnVieWlfNDNcc2FuZGJveFxydWJ5X2J1aWxkXGV4dFxzb2NrZXQv Y29uZnRlc3QuYzozOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBpbmV0X250b3AnDQpjb2xsZWN0 MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cw0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJl Z2luICovDQoxOiAvKnRvcCovDQoyOiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjM6IGludCB0 KCkgeyBpbmV0X250b3AoKTsgcmV0dXJuIDA7IH0NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0t LS0tLS0tLQ0KDQpoYXZlX2Z1bmM6IGNoZWNraW5nIGZvciBpbmV0X250b2EoKS4uLiAtLS0tLS0t LS0tLS0tLS0tLS0tLSB5ZXMNCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4v cnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1nIC1PMiAgY29u ZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0 YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMyICAiDQpjaGVja2VkIHByb2dyYW0gd2Fz Og0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3aW5kb3dzLmg+DQoyOiAjaW5jbHVkZSA8d2lu c29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjY6 IGludCB0KCkgeyB2b2lkICgoKnZvbGF0aWxlIHApKCkpOyBwID0gKHZvaWQgKCgqKSgpKSlpbmV0 X250b2E7IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K aGF2ZV9mdW5jOiBjaGVja2luZyBmb3IgaW5ldF9wdG9uKCkuLi4gLS0tLS0tLS0tLS0tLS0tLS0t LS0gbm8NCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUku Li8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwu IC1MLi4vLi4gLUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8z MiAgLWxzaGVsbDMyIC1sd3MyXzMyICAiDQpjb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAndCc6DQpj b25mdGVzdC5jOjY6IGVycm9yOiAnaW5ldF9wdG9uJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4g dGhpcyBmdW5jdGlvbikNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRl bnRpZmllciBpcyByZXBvcnRlZCBvbmx5IG9uY2UNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6IGZvciBl YWNoIGZ1bmN0aW9uIGl0IGFwcGVhcnMgaW4uKQ0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJl Z2luICovDQoxOiAjaW5jbHVkZSA8d2luZG93cy5oPg0KMjogI2luY2x1ZGUgPHdpbnNvY2suaD4N CjM6IA0KNDogLyp0b3AqLw0KNTogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQo2OiBpbnQgdCgp IHsgdm9pZCAoKCp2b2xhdGlsZSBwKSgpKTsgcCA9ICh2b2lkICgoKikoKSkpaW5ldF9wdG9uOyBy ZXR1cm4gMDsgfQ0KLyogZW5kICovDQoNCiJnY2MgLW8gY29uZnRlc3QgLUkuLi8uLiAtSS4uLy4u Ly4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAtSS4gICAtZyAtTzIg IGNvbmZ0ZXN0LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgLWx3czJfMzIgIC1sbXN2Y3J0LXJ1Ynkx OC1zdGF0aWMgLWx3czJfMzIgIC1sc2hlbGwzMiAtbHdzMl8zMiAgIg0KQzovVXNlcnMvSG9tZS9B cHBEYXRhL0xvY2FsL1RlbXAvY2N5YndPTVMubzogSW4gZnVuY3Rpb24gYHQnOg0KYzpcZGV2XHJ1 YnlpXzQzXHNhbmRib3hccnVieV9idWlsZFxleHRcc29ja2V0L2NvbmZ0ZXN0LmM6MzogdW5kZWZp bmVkIHJlZmVyZW5jZSB0byBgaW5ldF9wdG9uJw0KY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhp dCBzdGF0dXMNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogLyp0b3AqLw0K MjogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQozOiBpbnQgdCgpIHsgaW5ldF9wdG9uKCk7IHJl dHVybiAwOyB9DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9mdW5j OiBjaGVja2luZyBmb3IgaW5ldF9hdG9uKCkuLi4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0K ImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9y dWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4g LUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVs bDMyIC1sd3MyXzMyICAiDQpjb25mdGVzdC5jOiBJbiBmdW5jdGlvbiAndCc6DQpjb25mdGVzdC5j OjY6IGVycm9yOiAnaW5ldF9hdG9uJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5j dGlvbikNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBp cyByZXBvcnRlZCBvbmx5IG9uY2UNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6IGZvciBlYWNoIGZ1bmN0 aW9uIGl0IGFwcGVhcnMgaW4uKQ0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQox OiAjaW5jbHVkZSA8d2luZG93cy5oPg0KMjogI2luY2x1ZGUgPHdpbnNvY2suaD4NCjM6IA0KNDog Lyp0b3AqLw0KNTogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQo2OiBpbnQgdCgpIHsgdm9pZCAo KCp2b2xhdGlsZSBwKSgpKTsgcCA9ICh2b2lkICgoKikoKSkpaW5ldF9hdG9uOyByZXR1cm4gMDsg fQ0KLyogZW5kICovDQoNCiJnY2MgLW8gY29uZnRlc3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1Ynlf MV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAtSS4gICAtZyAtTzIgIGNvbmZ0ZXN0 LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgLWx3czJfMzIgIC1sbXN2Y3J0LXJ1YnkxOC1zdGF0aWMg LWx3czJfMzIgIC1sc2hlbGwzMiAtbHdzMl8zMiAgIg0KQzovVXNlcnMvSG9tZS9BcHBEYXRhL0xv Y2FsL1RlbXAvY2NBOUFYRlYubzogSW4gZnVuY3Rpb24gYHQnOg0KYzpcZGV2XHJ1YnlpXzQzXHNh bmRib3hccnVieV9idWlsZFxleHRcc29ja2V0L2NvbmZ0ZXN0LmM6MzogdW5kZWZpbmVkIHJlZmVy ZW5jZSB0byBgaW5ldF9hdG9uJw0KY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMN CmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogLyp0b3AqLw0KMjogaW50IG1h aW4oKSB7IHJldHVybiAwOyB9DQozOiBpbnQgdCgpIHsgaW5ldF9hdG9uKCk7IHJldHVybiAwOyB9 DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9mdW5jOiBjaGVja2lu ZyBmb3IgZ2V0c2VydmJ5cG9ydCgpLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHllcw0KDQoiZ2Nj IC1vIGNvbmZ0ZXN0IC1JLi4vLi4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1Ynlf MV84L2V4dC9zb2NrZXQgLUkuICAgLWcgLU8yICBjb25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4g ICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgtc3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIg LWx3czJfMzIgICINCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogI2luY2x1 ZGUgPHdpbmRvd3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2NrLmg+DQozOiANCjQ6IC8qdG9wKi8N CjU6IGludCBtYWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50IHQoKSB7IHZvaWQgKCgqdm9sYXRp bGUgcCkoKSk7IHAgPSAodm9pZCAoKCopKCkpKWdldHNlcnZieXBvcnQ7IHJldHVybiAwOyB9DQov KiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9oZWFkZXI6IGNoZWNraW5n IGZvciBhcnBhL25hbWVzZXIuaC4uLiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBubw0KDQoiZ2NjIC1F IC1JLi4vLi4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2Nr ZXQgLUkuICAgLWcgLU8yICAgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5pIg0KY29uZnRlc3QuYzox OjI2OiBlcnJvcjogYXJwYS9uYW1lc2VyLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkNCmNo ZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogI2luY2x1ZGUgPGFycGEvbmFtZXNl ci5oPg0KLyogZW5kICovDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmhhdmVfaGVhZGVyOiBj aGVja2luZyBmb3IgcmVzb2x2LmguLi4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0KImdjYyAt RSAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29j a2V0IC1JLiAgIC1nIC1PMiAgIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QuaSINCmNvbmZ0ZXN0LmM6 MToyMDogZXJyb3I6IHJlc29sdi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5DQpjaGVja2Vk IHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDxyZXNvbHYuaD4NCi8qIGVu ZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX3R5cGU6IGNoZWNraW5nIGZvciBz b2NrbGVuX3QuLi4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtSS4uLy4uIC1JLi4v Li4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1nIC1P MiAgICAtYyBjb25mdGVzdC5jIg0KY29uZnRlc3QuYzo1OiBlcnJvcjogZXhwZWN0ZWQgJz0nLCAn LCcsICc7JywgJ2FzbScgb3IgJ19fYXR0cmlidXRlX18nIGJlZm9yZSAnY29uZnRlc3RfdHlwZScN CmNvbmZ0ZXN0LmM6NjogZXJyb3I6IGV4cGVjdGVkICc9JywgJywnLCAnOycsICdhc20nIG9yICdf X2F0dHJpYnV0ZV9fJyBiZWZvcmUgJ2NvbmZ0ZXN0dmFsJw0KY2hlY2tlZCBwcm9ncmFtIHdhczoN Ci8qIGJlZ2luICovDQoxOiAjaW5jbHVkZSA8d2luZG93cy5oPg0KMjogI2luY2x1ZGUgPHdpbnNv Y2suaD4NCjM6IA0KNDogLyp0b3AqLw0KNTogdHlwZWRlZiBzb2NrbGVuX3QgY29uZnRlc3RfdHlw ZTsNCjY6IHN0YXRpYyBjb25mdGVzdF90eXBlIGNvbmZ0ZXN0dmFsW3NpemVvZihjb25mdGVzdF90 eXBlKT8xOi0xXTsNCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX2hl YWRlcjogY2hlY2tpbmcgZm9yIHN5cy91bi5oLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoN CiJnY2MgLUUgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVieV8xXzgv ZXh0L3NvY2tldCAtSS4gICAtZyAtTzIgICBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LmkiDQpjb25m dGVzdC5jOjE6MjA6IGVycm9yOiBzeXMvdW4uaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQ0K Y2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQoxOiAjaW5jbHVkZSA8c3lzL3VuLmg+ DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9oZWFkZXI6IGNoZWNr aW5nIGZvciBzeXMvdWlvLmguLi4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtRSAt SS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0 IC1JLiAgIC1nIC1PMiAgIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QuaSINCmNvbmZ0ZXN0LmM6MToy MTogZXJyb3I6IHN5cy91aW8uaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQ0KY2hlY2tlZCBw cm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQoxOiAjaW5jbHVkZSA8c3lzL3Vpby5oPg0KLyogZW5k ICovDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmhhdmVfZnVuYzogY2hlY2tpbmcgZm9yIFdT QUNsZWFudXAoKS4uLiAtLS0tLS0tLS0tLS0tLS0tLS0tLSB5ZXMNCg0KImdjYyAtbyBjb25mdGVz dCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29j a2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdzMl8z MiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMyICAi DQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3aW5kb3dz Lmg+DQoyOiAjaW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBpbnQgbWFp bigpIHsgcmV0dXJuIDA7IH0NCjY6IGludCB0KCkgeyB2b2lkICgoKnZvbGF0aWxlIHApKCkpOyBw ID0gKHZvaWQgKCgqKSgpKSlXU0FDbGVhbnVwOyByZXR1cm4gMDsgfQ0KLyogZW5kICovDQoNCi0t LS0tLS0tLS0tLS0tLS0tLS0tDQoNCmhhdmVfZnVuYzogY2hlY2tpbmcgZm9yIGhzdGVycm9yKCku Li4gLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm8NCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1J Li4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1n IC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQt cnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1sd3MyXzMyICAiDQpjb25mdGVzdC5j OiBJbiBmdW5jdGlvbiAndCc6DQpjb25mdGVzdC5jOjY6IGVycm9yOiAnaHN0ZXJyb3InIHVuZGVj bGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29uZnRlc3QuYzo2OiBlcnJvcjog KEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQ0KY29uZnRl c3QuYzo2OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pDQpjaGVja2Vk IHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3aW5kb3dzLmg+DQoyOiAj aW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBpbnQgbWFpbigpIHsgcmV0 dXJuIDA7IH0NCjY6IGludCB0KCkgeyB2b2lkICgoKnZvbGF0aWxlIHApKCkpOyBwID0gKHZvaWQg KCgqKSgpKSloc3RlcnJvcjsgcmV0dXJuIDA7IH0NCi8qIGVuZCAqLw0KDQoiZ2NjIC1vIGNvbmZ0 ZXN0IC1JLi4vLi4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9z b2NrZXQgLUkuICAgLWcgLU8yICBjb25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4gICAgIC1sd3My XzMyICAtbG1zdmNydC1ydWJ5MTgtc3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIgLWx3czJfMzIg ICINCkM6L1VzZXJzL0hvbWUvQXBwRGF0YS9Mb2NhbC9UZW1wL2NjcHNwblZtLm86IEluIGZ1bmN0 aW9uIGB0JzoNCmM6XGRldlxydWJ5aV80M1xzYW5kYm94XHJ1YnlfYnVpbGRcZXh0XHNvY2tldC9j b25mdGVzdC5jOjM6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGhzdGVycm9yJw0KY29sbGVjdDI6 IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMNCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdp biAqLw0KMTogLyp0b3AqLw0KMjogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQozOiBpbnQgdCgp IHsgaHN0ZXJyb3IoKTsgcmV0dXJuIDA7IH0NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQpoYXZlX2Z1bmM6IGNoZWNraW5nIGZvciBnZXRpcG5vZGVieW5hbWUoKS4uLiAtLS0t LS0tLS0tLS0tLS0tLS0tLSBubw0KDQoiZ2NjIC1vIGNvbmZ0ZXN0IC1JLi4vLi4gLUkuLi8uLi8u Li9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1YnlfMV84L2V4dC9zb2NrZXQgLUkuICAgLWcgLU8yICBj b25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4gICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgt c3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIgLWx3czJfMzIgICINCmNvbmZ0ZXN0LmM6IEluIGZ1 bmN0aW9uICd0JzoNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6ICdnZXRpcG5vZGVieW5hbWUnIHVuZGVj bGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQ0KY29uZnRlc3QuYzo2OiBlcnJvcjog KEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlzIHJlcG9ydGVkIG9ubHkgb25jZQ0KY29uZnRl c3QuYzo2OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rpb24gaXQgYXBwZWFycyBpbi4pDQpjaGVja2Vk IHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6ICNpbmNsdWRlIDx3aW5kb3dzLmg+DQoyOiAj aW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAvKnRvcCovDQo1OiBpbnQgbWFpbigpIHsgcmV0 dXJuIDA7IH0NCjY6IGludCB0KCkgeyB2b2lkICgoKnZvbGF0aWxlIHApKCkpOyBwID0gKHZvaWQg KCgqKSgpKSlnZXRpcG5vZGVieW5hbWU7IHJldHVybiAwOyB9DQovKiBlbmQgKi8NCg0KImdjYyAt byBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzggLUkuLi8uLi8uLi9ydWJ5XzFf OC9leHQvc29ja2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAgLUwuIC1MLi4vLi4gLUwuICAg ICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdzMl8zMiAgLWxzaGVsbDMyIC1s d3MyXzMyICAiDQpDOi9Vc2Vycy9Ib21lL0FwcERhdGEvTG9jYWwvVGVtcC9jY2U0YjdKZC5vOiBJ biBmdW5jdGlvbiBgdCc6DQpjOlxkZXZccnVieWlfNDNcc2FuZGJveFxydWJ5X2J1aWxkXGV4dFxz b2NrZXQvY29uZnRlc3QuYzozOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRpcG5vZGVieW5h bWUnDQpjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cw0KY2hlY2tlZCBwcm9ncmFt IHdhczoNCi8qIGJlZ2luICovDQoxOiAvKnRvcCovDQoyOiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7 IH0NCjM6IGludCB0KCkgeyBnZXRpcG5vZGVieW5hbWUoKTsgcmV0dXJuIDA7IH0NCi8qIGVuZCAq Lw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX2Z1bmM6IGNoZWNraW5nIGZvciBnZXRo b3N0YnluYW1lMigpLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoNCiJnY2MgLW8gY29uZnRl c3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3Nv Y2tldCAtSS4gICAtZyAtTzIgIGNvbmZ0ZXN0LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgLWx3czJf MzIgIC1sbXN2Y3J0LXJ1YnkxOC1zdGF0aWMgLWx3czJfMzIgIC1sc2hlbGwzMiAtbHdzMl8zMiAg Ig0KY29uZnRlc3QuYzogSW4gZnVuY3Rpb24gJ3QnOg0KY29uZnRlc3QuYzo2OiBlcnJvcjogJ2dl dGhvc3RieW5hbWUyJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikNCmNv bmZ0ZXN0LmM6NjogZXJyb3I6IChFYWNoIHVuZGVjbGFyZWQgaWRlbnRpZmllciBpcyByZXBvcnRl ZCBvbmx5IG9uY2UNCmNvbmZ0ZXN0LmM6NjogZXJyb3I6IGZvciBlYWNoIGZ1bmN0aW9uIGl0IGFw cGVhcnMgaW4uKQ0KY2hlY2tlZCBwcm9ncmFtIHdhczoNCi8qIGJlZ2luICovDQoxOiAjaW5jbHVk ZSA8d2luZG93cy5oPg0KMjogI2luY2x1ZGUgPHdpbnNvY2suaD4NCjM6IA0KNDogLyp0b3AqLw0K NTogaW50IG1haW4oKSB7IHJldHVybiAwOyB9DQo2OiBpbnQgdCgpIHsgdm9pZCAoKCp2b2xhdGls ZSBwKSgpKTsgcCA9ICh2b2lkICgoKikoKSkpZ2V0aG9zdGJ5bmFtZTI7IHJldHVybiAwOyB9DQov KiBlbmQgKi8NCg0KImdjYyAtbyBjb25mdGVzdCAtSS4uLy4uIC1JLi4vLi4vLi4vcnVieV8xXzgg LUkuLi8uLi8uLi9ydWJ5XzFfOC9leHQvc29ja2V0IC1JLiAgIC1nIC1PMiAgY29uZnRlc3QuYyAg LUwuIC1MLi4vLi4gLUwuICAgICAtbHdzMl8zMiAgLWxtc3ZjcnQtcnVieTE4LXN0YXRpYyAtbHdz Ml8zMiAgLWxzaGVsbDMyIC1sd3MyXzMyICAiDQpDOi9Vc2Vycy9Ib21lL0FwcERhdGEvTG9jYWwv VGVtcC9jY0dWMmo0OS5vOiBJbiBmdW5jdGlvbiBgdCc6DQpjOlxkZXZccnVieWlfNDNcc2FuZGJv eFxydWJ5X2J1aWxkXGV4dFxzb2NrZXQvY29uZnRlc3QuYzozOiB1bmRlZmluZWQgcmVmZXJlbmNl IHRvIGBnZXRob3N0YnluYW1lMicNCmNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVz DQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6IC8qdG9wKi8NCjI6IGludCBt YWluKCkgeyByZXR1cm4gMDsgfQ0KMzogaW50IHQoKSB7IGdldGhvc3RieW5hbWUyKCk7IHJldHVy biAwOyB9DQovKiBlbmQgKi8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaGF2ZV9mdW5jOiBj aGVja2luZyBmb3Igc29ja2V0cGFpcigpLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vDQoNCiJn Y2MgLW8gY29uZnRlc3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1YnlfMV84IC1JLi4vLi4vLi4vcnVi eV8xXzgvZXh0L3NvY2tldCAtSS4gICAtZyAtTzIgIGNvbmZ0ZXN0LmMgIC1MLiAtTC4uLy4uIC1M LiAgICAgLWx3czJfMzIgIC1sbXN2Y3J0LXJ1YnkxOC1zdGF0aWMgLWx3czJfMzIgIC1sc2hlbGwz MiAtbHdzMl8zMiAgIg0KY29uZnRlc3QuYzogSW4gZnVuY3Rpb24gJ3QnOg0KY29uZnRlc3QuYzo2 OiBlcnJvcjogJ3NvY2tldHBhaXInIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0 aW9uKQ0KY29uZnRlc3QuYzo2OiBlcnJvcjogKEVhY2ggdW5kZWNsYXJlZCBpZGVudGlmaWVyIGlz IHJlcG9ydGVkIG9ubHkgb25jZQ0KY29uZnRlc3QuYzo2OiBlcnJvcjogZm9yIGVhY2ggZnVuY3Rp b24gaXQgYXBwZWFycyBpbi4pDQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6 ICNpbmNsdWRlIDx3aW5kb3dzLmg+DQoyOiAjaW5jbHVkZSA8d2luc29jay5oPg0KMzogDQo0OiAv KnRvcCovDQo1OiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0NCjY6IGludCB0KCkgeyB2b2lkICgo KnZvbGF0aWxlIHApKCkpOyBwID0gKHZvaWQgKCgqKSgpKSlzb2NrZXRwYWlyOyByZXR1cm4gMDsg fQ0KLyogZW5kICovDQoNCiJnY2MgLW8gY29uZnRlc3QgLUkuLi8uLiAtSS4uLy4uLy4uL3J1Ynlf MV84IC1JLi4vLi4vLi4vcnVieV8xXzgvZXh0L3NvY2tldCAtSS4gICAtZyAtTzIgIGNvbmZ0ZXN0 LmMgIC1MLiAtTC4uLy4uIC1MLiAgICAgLWx3czJfMzIgIC1sbXN2Y3J0LXJ1YnkxOC1zdGF0aWMg LWx3czJfMzIgIC1sc2hlbGwzMiAtbHdzMl8zMiAgIg0KQzovVXNlcnMvSG9tZS9BcHBEYXRhL0xv Y2FsL1RlbXAvY2NDb1JqMFQubzogSW4gZnVuY3Rpb24gYHQnOg0KYzpcZGV2XHJ1YnlpXzQzXHNh bmRib3hccnVieV9idWlsZFxleHRcc29ja2V0L2NvbmZ0ZXN0LmM6MzogdW5kZWZpbmVkIHJlZmVy ZW5jZSB0byBgc29ja2V0cGFpcicNCmNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVz DQpjaGVja2VkIHByb2dyYW0gd2FzOg0KLyogYmVnaW4gKi8NCjE6IC8qdG9wKi8NCjI6IGludCBt YWluKCkgeyByZXR1cm4gMDsgfQ0KMzogaW50IHQoKSB7IHNvY2tldHBhaXIoKTsgcmV0dXJuIDA7 IH0NCi8qIGVuZCAqLw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpoYXZlX2Z1bmM6IGNoZWNr aW5nIGZvciBnZXRob3N0bmFtZSgpLi4uIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHllcw0KDQoiZ2Nj IC1vIGNvbmZ0ZXN0IC1JLi4vLi4gLUkuLi8uLi8uLi9ydWJ5XzFfOCAtSS4uLy4uLy4uL3J1Ynlf MV84L2V4dC9zb2NrZXQgLUkuICAgLWcgLU8yICBjb25mdGVzdC5jICAtTC4gLUwuLi8uLiAtTC4g ICAgIC1sd3MyXzMyICAtbG1zdmNydC1ydWJ5MTgtc3RhdGljIC1sd3MyXzMyICAtbHNoZWxsMzIg LWx3czJfMzIgICINCmNoZWNrZWQgcHJvZ3JhbSB3YXM6DQovKiBiZWdpbiAqLw0KMTogI2luY2x1 ZGUgPHdpbmRvd3MuaD4NCjI6ICNpbmNsdWRlIDx3aW5zb2NrLmg+DQozOiANCjQ6IC8qdG9wKi8N CjU6IGludCBtYWluKCkgeyByZXR1cm4gMDsgfQ0KNjogaW50IHQoKSB7IHZvaWQgKCgqdm9sYXRp bGUgcCkoKSk7IHAgPSAodm9pZCAoKCopKCkpKWdldGhvc3RuYW1lOyByZXR1cm4gMDsgfQ0KLyog ZW5kICovDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg== --0016e64ca97e66f4770465210d47--