> 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 <windows.h>
2: #include <winsock.h>
3:
4: /*top*/
5: typedef socklen_t conftest_type;
6: static conftest_type conftestval[sizeof(conftest_type)?1:-1];
/* end */

Thanks!
-=3Dr
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==