[kaffe] [PATCH] IA-64 fixes (take 2)

Gwenole Beauchesne gbeauchesne@mandrakesoft.com
Fri May 16 02:07:01 2003


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1463777692-1344520555-1053076195=:3796
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Fri, 16 May 2003, Gwenole Beauchesne wrote:

> On Thu, 15 May 2003, Gwenole Beauchesne wrote:
> 
> > The sysdepCallMethod() tester I posted earlier triggered a few bugs in the 
> > IA-64 version. Fixed hereunder among other fixlets. Patch against 1.1 CVS 
> > (2003/05/14). No regressions, no improvement either. :-(
> 
> Hmm sorry, sysdepCallMethod() did regress at -O2. I will fix that 
> tomorrow.

Attached the new patch which also contains the intrinsics change. I will 
make another patch with the sysdepCallMethod tester merged into 
test/regression/TestNative.java.

Bye,
Gwenole.

---1463777692-1344520555-1053076195=:3796
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="kaffe-1.1-ia64.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0305161109550.3796@thalys.mandrakesoft.com>
Content-Description: ia64 fixes (take 2)
Content-Disposition: attachment; filename="kaffe-1.1-ia64.patch"

MjAwMy0wNS0xNiAgR3dlbm9sZSBCZWF1Y2hlc25lICA8Z2JlYXVjaGVzbmVA
bWFuZHJha2Vzb2Z0LmNvbT4NCg0KCSogY29uZmlnL2lhNjQvc3lzZGVwQ2Fs
bE1ldGhvZC5oIChzeXNkZXBDYWxsTWV0aG9kKTogRml4IHRvIHJlYWxseQ0K
CW1hdGNoIHJlZ2lzdGVyIHBhc3NpbmcgY29udmVudGlvbnMuIE9ubHkgdGhl
IGZpcnN0IGVpZ3RoIHBhcmFtZXRlcg0KCXNsb3RzIGFyZSBwYXNzZWQgaW4g
cmVnaXN0ZXJzLiBUaGlzIGNvbmNlcm5zIGJvdGggaW50ZWdlciBhbmQNCglm
bG9hdGluZy1wb2ludCB2YWx1ZXMuDQoNCjIwMDMtMDUtMTUgIEd3ZW5vbGUg
QmVhdWNoZXNuZSAgPGdiZWF1Y2hlc25lQG1hbmRyYWtlc29mdC5jb20+DQoN
CgkqIGNvbmZpZy9pYTY0L2xpbnV4L21kLmggKENPTVBBUkVfQU5EX0VYQ0hB
TkdFKTogTW92ZSB0by4uLg0KCSogY29uZmlnL2lhNjQvY29tbW9uLmg6IC4u
LiBoZXJlLg0KDQoJVGhlIEludGVsIEl0YW5pdW0gUHJvY2Vzc29yLXNwZWNp
ZmljIEFCSSBkZWZpbmVzDQoJX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dh
cCBwcmltaXRpdmUgKDcuNC4zKS4NCg0KMjAwMy0wNS0xNSAgR3dlbm9sZSBC
ZWF1Y2hlc25lICA8Z2JlYXVjaGVzbmVAbWFuZHJha2Vzb2Z0LmNvbT4NCg0K
CSogY29uZmlnL2NvbmZpZy1zZXRqbXAuaCAoSlRIUkVBRF9ERUNMQVJFX0pN
UEJVRiwNCglKVEhSRUFEX0FDQ0VTU19KTVBCVUYpOiBLaWxsLg0KCSoga2Fm
ZmUva2FmZmV2bS9leGNlcHRpb24uYyAoZGlzcGF0Y2hFeGNlcHRpb24pOiBM
aWtld2lzZS4NCgkqIGthZmZlL2thZmZldm0vZXhjZXB0aW9uLmggKHZtRXhj
ZXB0X2p1bXBUb0hhbmRsZXIpOiBMaWtld2lzZS4NCgkqIGthZmZlL2thZmZl
dm0vam5pLmMgKEJFR0lOX0VYQ0VQVElPTl9IQU5ETElORyopOiBMaWtld2lz
ZS4NCgkNCglJbnN0ZWFkLCB0aGUganRocmVhZCBzdHJ1Y3QgY29udGFpbmlu
ZyBhIGptcF9idWYgbXVzdCBiZSBhbGlnbmVkDQoJb25jZSBpdCBpcyBhbGxv
Y2F0ZWQuIE90aGVyIG9jY3VycmVuY2VzIHdlcmUgYWxyZWFkeSBhbGlnbmVk
IHBlcg0KCW5hdHVyYWwgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBpbiBzdGFj
ay4NCg0KCSogY29uZmlnL2lhNjQvbGludXgvbWQuYyAoSUE2NF9jb250ZXh0
XyopOiBVcGRhdGUgdG8gbWF0Y2ggY3VycmVudA0KCXN0YXRlLXRocmVhZHMg
djEuNCBjb2RlIGZyb20gU0dJLg0KDQoJKiBjb25maWcvaWE2NC9zeXNkZXBD
YWxsTWV0aG9kLmggKHN5c2RlcENhbGxNZXRob2QpOiBSZWFsbHkgbWF0Y2gN
CgljYWxsaW5nIGNvbnZlbnRpb25zLiBXZSBub3cgY2FuIGRlYWwgd2l0aCBh
IG1peCBvZiBpbnRzLCBsb25ncywNCglmbG9hdHMgYW5kIGRvdWJsZXMgY29y
cmVjdGx5LiBSZWluZGVudC4NCg0KCSoga2FmZmUva2FmZmV2bS9zeXN0ZW1z
L3VuaXgtanRocmVhZHMvanRocmVhZC5jDQoJKEpUSFJFQURfQ09OVEVYVF9T
QVZFLCBKVEhSRUFEX0NPTlRFWFRfUkVTVE9SRSk6IE5ldyBtYWNyb3MNCglz
cGVjaWZpYyB0byBjb250ZXh0IHN3aXRjaGVzLg0KCShuZXdUaHJlYWRDdHgp
OiBBbGlnbiBqdGhyZWFkIHN0cnVjdCBvbiAxNi1ieXRlIGJvdW5kYXJpZXMg
Zm9yDQoJam1wX2J1Zi4gTW92ZSBkb3duIHN0YWNrIGFkanVzdGluZy4NCg0K
LS0tIGthZmZlLTEuMS9jb25maWcvaWE2NC9saW51eC9tZC5jLmlhNjQJMjAw
Mi0wNS0yOSAyMTo0OTo1OC4wMDAwMDAwMDAgKzAyMDANCisrKyBrYWZmZS0x
LjEvY29uZmlnL2lhNjQvbGludXgvbWQuYwkyMDAzLTA1LTE2IDAzOjU2OjUw
LjAwMDAwMDAwMCArMDIwMA0KQEAgLTI5LDcgKzI5LDggQEAgaW5pdF9tZCh2
b2lkKQ0KIH0NCiANCiAvKg0KLSAqIENvcHlyaWdodCAoQykgMjAwMCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKyAq
IFBvcnRpb25zIGNyZWF0ZWQgYnkgU0dJIGFyZSBDb3B5cmlnaHQgKEMpIDIw
MDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLg0KKyAqIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuDQogICoNCiAgKiBUaGUgaW50ZXJuYWwgX19qbXBfYnVmIGxheW91
dCBpcyBkaWZmZXJlbnQgZnJvbSBvbmUgdXNlZA0KICAqIGJ5IHNldGptcCgp
L2xvbmdqbXAoKS4NCkBAIC05Miw4ICs5Myw4IEBAIGluaXRfbWQodm9pZCkN
CiAgICAgICAgIGFzbSgiDQogICAgICAgICAudGV4dA0KICAgICAgICAgLmFs
aWduIDMyDQotICAgICAgICAuZ2xvYmFsIElBNjRfY29udGV4dF9zYXZlIw0K
LSAgICAgICAgLnByb2MgSUE2NF9jb250ZXh0X3NhdmUjDQorICAgICAgICAu
Z2xvYmFsIElBNjRfY29udGV4dF9zYXZlDQorICAgICAgICAucHJvYyBJQTY0
X2NvbnRleHRfc2F2ZQ0KIElBNjRfY29udGV4dF9zYXZlOg0KICAgICAgICAg
YWxsb2MgcjE0ID0gYXIucGZzLDEsMCwwLDANCiAgICAgICAgIG1vdiByMTYg
PSBhci51bmF0DQpAQCAtMTAzLDYgKzEwNCw3IEBAIElBNjRfY29udGV4dF9z
YXZlOg0KICAgICAgICAgYWRkIHIzID0gOCxpbjANCiAgICAgICAgIDs7DQog
ICAgICAgICBzdDguc3BpbGwubnRhIFtyMl0gPSBzcCwxNiAgICAvLyByMTIg
KHNwKQ0KKyAgICAgICAgOzsNCiAgICAgICAgIHN0OC5zcGlsbC5udGEgW3Iz
XSA9IGdwLDE2ICAgIC8vIHIxICAoZ3ApDQogICAgICAgICA7Ow0KICAgICAg
ICAgc3Q4Lm50YSBbcjJdID0gcjE2LDE2ICAgICAgICAgLy8gc2F2ZSBjYWxs
ZXIncyB1bmF0DQpAQCAtMTEwLDYgKzExMiw3IEBAIElBNjRfY29udGV4dF9z
YXZlOg0KICAgICAgICAgYWRkIHI4ID0gMHhiMCxpbjANCiAgICAgICAgIDs7
ICAgDQogICAgICAgICBzdDguc3BpbGwubnRhIFtyMl0gPSByNCwxNiAgICAv
LyByNA0KKyAgICAgICAgOzsNCiAgICAgICAgIHN0OC5zcGlsbC5udGEgW3Iz
XSA9IHI1LDE2ICAgIC8vIHI1DQogICAgICAgICBhZGQgcjkgPSAweGMwLGlu
MA0KICAgICAgICAgOzsNCkBAIC0xNTAsMTEgKzE1MywxNCBAQCBJQTY0X2Nv
bnRleHRfc2F2ZToNCiAgICAgICAgIDs7DQogICAgICAgICBzdGYuc3BpbGwu
bnRhIFtyOF0gPSBmMzANCiAgICAgICAgIHN0Zi5zcGlsbC5udGEgW3I5XSA9
IGYzMQ0KKw0KICAgICAgICAgc3Q4LnNwaWxsLm50YSBbcjJdID0gcjYsMTYg
ICAgLy8gcjYNCisgICAgICAgIDs7DQogICAgICAgICBzdDguc3BpbGwubnRh
IFtyM10gPSByNywxNiAgICAvLyByNw0KICAgICAgICAgOzsNCiAgICAgICAg
IG1vdiByMjMgPSBhci5ic3ANCiAgICAgICAgIG1vdiByMjUgPSBhci51bmF0
DQorDQogICAgICAgICBzdDgubnRhIFtyMl0gPSByMTUsMTYgICAgICAgICAv
LyBiMA0KICAgICAgICAgc3Q4Lm50YSBbcjNdID0gcjE3LDE2ICAgICAgICAg
Ly8gYjENCiAgICAgICAgIDs7DQpAQCAtMTg5LDE1ICsxOTUsMTcgQEAgSUE2
NF9jb250ZXh0X3NhdmU6DQogICAgICAgICA7Ow0KICAgICAgICAgbW92IHI4
ID0gMA0KICAgICAgICAgYnIucmV0LnNwdGsuZmV3IGIwDQotICAgICAgICAu
ZW5kcCBJQTY0X2NvbnRleHRfc2F2ZSMNCisgICAgICAgIC5lbmRwIElBNjRf
Y29udGV4dF9zYXZlDQogICAgICAgICAiKTsNCiANCisNCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8NCisNCiAgICAgICAgIC8qIElBNjRfY29udGV4dF9yZXN0
b3JlKF9fam1wX2J1ZiBlbnYsIGludCB2YWwpICovDQogICAgICAgICBhc20o
Ig0KICAgICAgICAgLnRleHQNCi0gICAgICAgIC5hbGlnbiAzMg0KLSAgICAg
ICAgLmdsb2JhbCBJQTY0X2NvbnRleHRfcmVzdG9yZSMNCi0gICAgICAgIC5w
cm9jIElBNjRfY29udGV4dF9yZXN0b3JlIw0KKyAgICAgICAgLmdsb2JhbCBJ
QTY0X2NvbnRleHRfcmVzdG9yZQ0KKyAgICAgICAgLnByb2MgSUE2NF9jb250
ZXh0X3Jlc3RvcmUNCiBJQTY0X2NvbnRleHRfcmVzdG9yZToNCiAgICAgICAg
IGFsbG9jIHI4ID0gYXIucGZzLDIsMCwwLDANCiAgICAgICAgIGFkZCByMiA9
IDB4ODgsaW4wICAgICAgICAgICAgIC8vIHIyIDwtICZqbXBidWYuYXJfYnNw
DQpAQCAtMjk2LDcgKzMwNCwxMCBAQCBJQTY0X2NvbnRleHRfcmVzdG9yZToN
CiAgICAgICAgIGxkZi5maWxsLm50YSBmMzEgPSBbcjNdDQogKHA2KSAgICBt
b3YgcjggPSAxDQogKHA3KSAgICBtb3YgcjggPSBpbjENCisNCiAgICAgICAg
IG1vdiBwciA9IHIyNCwtMQ0KICAgICAgICAgYnIucmV0LnNwdGsuZmV3IGIw
DQotICAgICAgICAuZW5kcCBJQTY0X2NvbnRleHRfcmVzdG9yZSMNCisgICAg
ICAgIC5lbmRwIElBNjRfY29udGV4dF9yZXN0b3JlDQogICAgICAgICAiKTsN
CisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0tLSBrYWZmZS0xLjEvY29u
ZmlnL2lhNjQvbGludXgvbWQuaC5pYTY0CTIwMDItMDUtMjkgMjE6NDk6NTgu
MDAwMDAwMDAwICswMjAwDQorKysga2FmZmUtMS4xL2NvbmZpZy9pYTY0L2xp
bnV4L21kLmgJMjAwMy0wNS0xNiAxNDo1MjozOC4wMDAwMDAwMDAgKzAyMDAN
CkBAIC0yNywxMCArMjcsMTAgQEAgZXh0ZXJuIGludCBJQTY0X2NvbnRleHRf
c2F2ZShqbXBfYnVmIGVudg0KIGV4dGVybiB2b2lkIElBNjRfY29udGV4dF9y
ZXN0b3JlKGptcF9idWYgZW52LCBpbnQgdmFsKTsNCiANCiAjaWYgMA0KLSN1
bmRlZiBKVEhSRUFEX1NFVEpNUA0KLSNkZWZpbmUgSlRIUkVBRF9TRVRKTVAo
ZW52KQkJCUlBNjRfY29udGV4dF9zYXZlKChlbnYpKQ0KLSN1bmRlZiBKVEhS
RUFEX0xPTkdKTVANCi0jZGVmaW5lIEpUSFJFQURfTE9OR0pNUChlbnYsIHZh
bCkJCUlBNjRfY29udGV4dF9yZXN0b3JlKChlbnYpLCAodmFsKSkNCisjdW5k
ZWYgIEpUSFJFQURfQ09OVEVYVF9TQVZFDQorI2RlZmluZSBKVEhSRUFEX0NP
TlRFWFRfU0FWRShlbnYpCQlJQTY0X2NvbnRleHRfc2F2ZSgoZW52KSkNCisj
dW5kZWYgIEpUSFJFQURfQ09OVEVYVF9SRVNUT1JFDQorI2RlZmluZSBKVEhS
RUFEX0NPTlRFWFRfUkVTVE9SRShlbnYsIHZhbCkJSUE2NF9jb250ZXh0X3Jl
c3RvcmUoKGVudiksICh2YWwpKQ0KICNlbmRpZg0KIA0KICNkZWZpbmUgU0lH
TkFMX0FSR1Moc2lnLCBzY3ApCQkJaW50IHNpZywgc2lnaW5mb190ICpzaXAs
IHN0cnVjdCBzaWdjb250ZXh0ICpzY3ANCkBAIC0zOCwyMCArMzgsNCBAQCBl
eHRlcm4gdm9pZCBJQTY0X2NvbnRleHRfcmVzdG9yZShqbXBfYnVmDQogI2Rl
ZmluZSBHRVRfU0lHTkFMX0NPTlRFWFRfUE9JTlRFUihzYykJCShzYykNCiAj
ZGVmaW5lIFNJR05BTF9QQyhzY3ApCQkJCSgoc2NwKS0+c2NfaXAgJiB+MHgz
VUxMKQ0KIA0KLSNpZmRlZiBIQVZFX0lBNjRJTlRSSU5fSA0KLQ0KLSNpbmNs
dWRlIDxpYTY0aW50cmluLmg+DQotI3VuZGVmIENPTVBBUkVfQU5EX0VYQ0hB
TkdFDQotI2RlZmluZSBDT01QQVJFX0FORF9FWENIQU5HRShBLCBPLCBOKSBc
DQotCV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoKEEpLCAoTyksIChO
KSkNCi0NCi0jZWxzZQ0KLQ0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+DQot
I3VuZGVmIENPTVBBUkVfQU5EX0VYQ0hBTkdFDQotI2RlZmluZSBDT01QQVJF
X0FORF9FWENIQU5HRShBLCBPLCBOKSBcDQotCShjbXB4Y2hnKChBKSwgKE8p
LCAoTikpID09IChPKSkNCi0JCQ0KLSNlbmRpZiAvKiBIQVZFX0lBNjRJTlRS
SU5fSCAqLw0KLQ0KICNlbmRpZg0KLS0tIGthZmZlLTEuMS9jb25maWcvaWE2
NC9zeXNkZXBDYWxsTWV0aG9kLmguaWE2NAkyMDAyLTA1LTI5IDIxOjQ5OjU4
LjAwMDAwMDAwMCArMDIwMA0KKysrIGthZmZlLTEuMS9jb25maWcvaWE2NC9z
eXNkZXBDYWxsTWV0aG9kLmgJMjAwMy0wNS0xNiAxNDo1MTozMC4wMDAwMDAw
MDAgKzAyMDANCkBAIC0yLDcgKzIsNyBAQA0KICAqIGlhNjQvc3lzZGVwQ2Fs
bE1ldGhvZC5oDQogICogRHluYW1pY2FsbHkgYnVpbGQgZnVuY3Rpb24gY2Fs
bHMgdXNpbmcgSUEtNjQgU1ZSNCBBQkkuDQogICoNCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDENCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMw0KICAqCU1h
bmRyYWtlU29mdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICoNCiAgKiBT
ZWUgdGhlIGZpbGUgImxpY2Vuc2UudGVybXMiIGZvciBpbmZvcm1hdGlvbiBv
biB1c2FnZSBhbmQgcmVkaXN0cmlidXRpb24NCkBAIC0yMiw3ICsyMiw3IEBA
DQogI2lmbmRlZiBQUk9NT1RFX1RPXzY0Yml0cw0KICMgZGVmaW5lIFBST01P
VEVfVE9fNjRiaXRzIDENCiAjZW5kaWYNCi0gDQorDQogI2lmbmRlZiBQUk9N
T1RFX2pmbG9hdDJqZG91YmxlDQogIyBkZWZpbmUgUFJPTU9URV9qZmxvYXQy
amRvdWJsZSAwDQogI2VuZGlmDQpAQCAtNDUsMTEgKzQ1LDYgQEANCiAgICBh
cmd1bWVudHMuICAqLw0KICNkZWZpbmUgRlBSX0FSR1MJOA0KIA0KLS8qIEFS
R19ESVNQTEFDRU1FTlQgaXMgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBiZWdp
bm5pbmcgb2YgYQ0KLSAgIHZhcmlhYmxlLXNpemVkIGFycmF5LCBhbGxvY2F0
ZWQgaW4gdGhlIHN0YWNrLCBhbmQgdGhlIHBvc2l0aW9uIG9mDQotICAgdGhl
IGZpcnN0IGFyZ3VtZW50IHRoYXQgY2FuJ3QgYmUgcGFzc2VkIGluIGEgcmVn
aXN0ZXIuICAqLw0KLSNkZWZpbmUgQVJHX0RJU1BMQUNFTUVOVAkwDQotDQog
LyogQVJHX0dQUiBhIGNhc2UgbGFiZWwgYW5kIGEgc3RhdGVtZW50IHRoYXQg
YXJyYW5nZXMgZm9yIG9uZSBpbnRlZ2VyDQogICAgYXJndW1lbnQgdG8gYmUg
cGFzc2VkLiAqLw0KICNkZWZpbmUgQVJHX0dQUihOKSBcDQpAQCAtNjcsMTc2
ICs2MiwxNzggQEANCiAgICBmb3IgYm90aCBKSVQgYW5kIEludGVycHJldGVy
IChzaW5jZSBzdHVicyBoYXZlIG5vdyBiZWVuIGRlcHJlY2F0ZWQpLiAgKi8N
CiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZGVwQ2FsbE1ldGhvZChjYWxsTWV0
aG9kSW5mbyogY2FsbCkNCiB7DQotICAgIHZvaWQgKmZ1bmMgPSBjYWxsLT5m
dW5jdGlvbjsNCi0gICAganZhbHVlICpjYWxsYXJncyA9IGNhbGwtPmFyZ3M7
DQotICAgIGNoYXIgKmNhbGx0eXBlID0gY2FsbC0+Y2FsbHR5cGU7DQotICAg
IGp2YWx1ZSAqYXJncyA9IGNhbGxhcmdzOw0KLSAgICBqdmFsdWUgKmxhc3Qg
PSAmY2FsbGFyZ3NbY2FsbC0+bnJhcmdzXTsNCi0gICAgaW50IG5yX2dwciA9
IDA7DQotICAgIGludCBucl9mcHIgPSAwOw0KLSAgICBpbnQgbnJfc3RhY2sg
PSAwOw0KLQ0KLSAgICB1bnNpZ25lZCBsb25nICpzdGFjazsNCi0gICAgdW5z
aWduZWQgbG9uZyAqZ3ByOw0KLSAgICBkb3VibGUgKmZwcjsNCi0NCi0gICAg
LyogQ29tcHV0ZSBncHJbXSwgZnByW10gYW5kIHN0YWNrW10gYXJyYXlzJyBz
aXplICovDQotICAgIHdoaWxlIChhcmdzICE9IGxhc3QpIHsNCi0JICBzd2l0
Y2ggKGNhbGx0eXBlWyhhcmdzKyspIC0gY2FsbGFyZ3NdKSB7DQotCSAgY2Fz
ZSAnRic6DQotCSAgY2FzZSAnRCc6DQotCQlpZiAobnJfZnByIDwgRlBSX0FS
R1MpIHsNCi0JCSAgbnJfZnByKys7DQotCQkgIG5yX2dwcisrOw0KLQkJfQ0K
LQkJZWxzZQ0KLQkJICBucl9zdGFjaysrOw0KLQkJYnJlYWs7DQotCQkNCi0J
ICBkZWZhdWx0Og0KLQkJaWYgKG5yX2dwciA8IEdQUl9BUkdTKQ0KLQkJICBu
cl9ncHIrKzsNCi0JCWVsc2UNCi0JCSAgbnJfc3RhY2srKzsNCi0JCWJyZWFr
Ow0KLQkgIH0NCi0JfQ0KLQ0KLSAgICAvKiBBbGxvY2F0ZSBhbGwgYXJyYXlz
IHdpdGggb25lIGJpZyBhbGxvY2EoKSAqLw0KLSAgICB7DQotCSAgaW50IG5y
ID0gbnJfZ3ByICsgbnJfZnByICsgbnJfc3RhY2s7DQotCSAgDQotCSAgLyog
c3RhY2ssIGlmIHVzZWQsIG11c3QgYmUgMTYgYnl0ZXMgYWxpZ25lZCAqLw0K
LQkgIGlmIChucl9zdGFjaykNCi0JCW5yID0gKG5yICsgMSkgJiB+MTsNCi0N
Ci0JICAvKiBzdGFja1tdIGlzIGluIGNhbGxlZCBwYXJhbWV0ZXJzIGFyZWEu
ICAqLw0KLQkgIHN0YWNrID0gX19idWlsdGluX2FsbG9jYSAoOCAqIG5yKTsN
Ci0NCi0JICAvKiBncHJbXSBhbmQgZnByW10gYXJlIGluIGNhbGxlZSBsb2Nh
bCB2YXJpYWJsZSBhcmVhLiAgKi8NCi0JICBncHIgPSBzdGFjayArIG5yX3N0
YWNrOw0KLQkgIGZwciA9IChkb3VibGUgKikoZ3ByICsgbnJfZ3ByKTsNCi0J
ICANCi0JICAvKiBpZiBfX2J1aWxkaW5fYWxsb2MoKSBkb2VzIG5vdCBoYW5k
bGUgbGluay1hcmVhLCBza2lwIGl0LiAgKi8NCi0JICBzdGFjayArPSBBUkdf
RElTUExBQ0VNRU5UOw0KKyAgdm9pZCAqZnVuYyA9IGNhbGwtPmZ1bmN0aW9u
Ow0KKyAganZhbHVlICpjYWxsYXJncyA9IGNhbGwtPmFyZ3M7DQorICBjaGFy
ICpjYWxsdHlwZSA9IGNhbGwtPmNhbGx0eXBlOw0KKyAganZhbHVlICphcmdz
ID0gY2FsbGFyZ3M7DQorICBqdmFsdWUgKmxhc3QgPSAmY2FsbGFyZ3NbY2Fs
bC0+bnJhcmdzXTsNCisgIGludCBucl9ncHIgPSAwOw0KKyAgaW50IG5yX2Zw
ciA9IDA7DQorICBpbnQgbnJfc3RhY2sgPSAwOw0KKw0KKyAgdW5zaWduZWQg
bG9uZyAqc3RhY2s7DQorICB1bnNpZ25lZCBsb25nIGdwcltHUFJfQVJHU107
DQorICBkb3VibGUgZnByW0ZQUl9BUkdTXTsNCisNCisgIC8qIENvbXB1dGUg
Z3ByW10sIGZwcltdIGFuZCBzdGFja1tdIGFycmF5cycgc2l6ZSAqLw0KKyAg
d2hpbGUgKGFyZ3MgIT0gbGFzdCkgew0KKyAgICBzd2l0Y2ggKGNhbGx0eXBl
WyhhcmdzKyspIC0gY2FsbGFyZ3NdKSB7DQorICAgIGNhc2UgJ0YnOg0KKyAg
ICBjYXNlICdEJzoNCisgICAgICBpZiAobnJfZ3ByIDwgR1BSX0FSR1MpIHsN
CisJbnJfZnByKys7DQorCW5yX2dwcisrOw0KKyAgICAgIH0NCisgICAgICBl
bHNlDQorCW5yX3N0YWNrKys7DQorICAgICAgYnJlYWs7DQorDQorICAgIGRl
ZmF1bHQ6DQorICAgICAgaWYgKG5yX2dwciA8IEdQUl9BUkdTKQ0KKwlucl9n
cHIrKzsNCisgICAgICBlbHNlDQorCW5yX3N0YWNrKys7DQorICAgICAgYnJl
YWs7DQorICAgIH0NCisgIH0NCisNCisgIC8qIEFsbG9jYXRlIGFsbCBhcnJh
eXMgd2l0aCBvbmUgYmlnIGFsbG9jYSgpICovDQorICB7DQorICAgIGludCBu
ciA9IG5yX3N0YWNrOw0KKw0KKyAgICAvKiBzdGFjaywgaWYgdXNlZCwgbXVz
dCBiZSAxNiBieXRlcyBhbGlnbmVkICovDQorICAgIGlmIChucl9zdGFjaykN
CisgICAgICBuciA9IChuciArIDEpICYgfjE7DQorDQorICAgIC8qIHN0YWNr
W10gaXMgaW4gY2FsbGVkIHBhcmFtZXRlcnMgYXJlYS4gICovDQorICAgIHN0
YWNrID0gX19idWlsdGluX2FsbG9jYSAoOCAqIG5yKTsNCisgIH0NCisNCisg
IC8qIGJ1aWxkIGdwcltdLCBmcHJbXSBhbmQgc3RhY2tbXSBhcnJheXMgKi8N
CisgIG5yX2dwciA9IDA7DQorICBucl9mcHIgPSAwOw0KKyAgbnJfc3RhY2sg
PSAwOw0KKw0KKyAgYXJncyA9IGNhbGxhcmdzOw0KKyAgd2hpbGUgKGFyZ3Mg
IT0gbGFzdCkgew0KKyAgICBzd2l0Y2ggKGNhbGx0eXBlW2FyZ3MgLSBjYWxs
YXJnc10pIHsNCisgICAgY2FzZSAnRic6DQorICAgICAgLyogUGFyYW1ldGVy
cyBhbGxvY2F0ZWQgYmV5b25kIHRoZSBlaWdodGggcGFyYW1ldGVyIHNsb3Qg
YXJlDQorCSBuZXZlciBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBldmVuIGlmIGZs
b2F0aW5nLXBvaW50IHBhcmFtZXRlcg0KKwkgcmVnaXN0ZXJzIHJlbWFpbiB1
bnVzZWQuIChJQS02NCBTb2Z0d2FyZSBDb252ZW50aW9ucyBhbmQNCisJIFJ1
bnRpbWUgQXJjaGl0ZWN0dXJlIEd1aWRlIC0gOC41LjIpICovDQorICAgICAg
IGlmIChucl9ncHIgPCBHUFJfQVJHUykgew0KKwlmcHJbbnJfZnByKytdID0g
YXJncy0+ZjsNCisJLyogQWxzbyBwYXNzIHRoZSBGUCBzbG90IGluIEdQUiBz
byB0aGF0IGNhbGxlZSBrbm93cw0KKwkgICBhYm91dCBpdCBpbiBjYXNlIGl0
IHdhcyBub3QgcHJvdG90eXBlZCBiZWZvcmVoYW5kLiAqLw0KKwlncHJbbnJf
Z3ByKytdID0gYXJncy0+ajsNCisgICAgICB9DQorICAgICAgZWxzZSB7DQor
CSooZmxvYXQgKilzdGFjayA9IGFyZ3MtPmY7DQorCXN0YWNrKys7DQorICAg
ICAgfQ0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlICdEJzoNCisgICAg
ICAvKiBQYXJhbWV0ZXJzIGFsbG9jYXRlZCBiZXlvbmQgdGhlIGVpZ2h0aCBw
YXJhbWV0ZXIgc2xvdCBhcmUNCisJIG5ldmVyIHBhc3NlZCBpbiByZWdpc3Rl
cnMsIGV2ZW4gaWYgZmxvYXRpbmctcG9pbnQgcGFyYW1ldGVyDQorCSByZWdp
c3RlcnMgcmVtYWluIHVudXNlZC4gKElBLTY0IFNvZnR3YXJlIENvbnZlbnRp
b25zIGFuZA0KKwkgUnVudGltZSBBcmNoaXRlY3R1cmUgR3VpZGUgLSA4LjUu
MikgKi8NCisgICAgICBpZiAobnJfZ3ByIDwgR1BSX0FSR1MpIHsNCisJZnBy
W25yX2ZwcisrXSA9IGFyZ3MtPmQ7DQorCS8qIEFsc28gcGFzcyB0aGUgRlAg
c2xvdCBpbiBHUFIgc28gdGhhdCBjYWxsZWUga25vd3MNCisJICAgYWJvdXQg
aXQgaW4gY2FzZSBpdCB3YXMgbm90IHByb3RvdHlwZWQgYmVmb3JlaGFuZC4g
Ki8NCisJZ3ByW25yX2dwcisrXSA9IGFyZ3MtPmo7DQorICAgICAgfQ0KKyAg
ICAgIGVsc2Ugew0KKwkqKGRvdWJsZSAqKXN0YWNrID0gYXJncy0+ZDsNCisJ
c3RhY2srKzsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorDQorICAgIGRl
ZmF1bHQ6DQorICAgICAgaWYgKG5yX2dwciA8IEdQUl9BUkdTKQ0KKwlncHJb
bnJfZ3ByKytdID0gYXJncy0+ajsNCisgICAgICBlbHNlDQorCSpzdGFjaysr
ID0gYXJncy0+ajsNCisgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBhcmdz
Kys7DQorICB9DQorDQorICB7DQorICAgIHJlZ2lzdGVyIEFSR19UWVBFIGEw
IGFzbSgib3V0MCIpOw0KKyAgICByZWdpc3RlciBBUkdfVFlQRSBhMSBhc20o
Im91dDEiKTsNCisgICAgcmVnaXN0ZXIgQVJHX1RZUEUgYTIgYXNtKCJvdXQy
Iik7DQorICAgIHJlZ2lzdGVyIEFSR19UWVBFIGEzIGFzbSgib3V0MyIpOw0K
KyAgICByZWdpc3RlciBBUkdfVFlQRSBhNCBhc20oIm91dDQiKTsNCisgICAg
cmVnaXN0ZXIgQVJHX1RZUEUgYTUgYXNtKCJvdXQ1Iik7DQorICAgIHJlZ2lz
dGVyIEFSR19UWVBFIGE2IGFzbSgib3V0NiIpOw0KKyAgICByZWdpc3RlciBB
UkdfVFlQRSBhNyBhc20oIm91dDciKTsNCisNCisgICAgcmVnaXN0ZXIgZG91
YmxlIGQwIGFzbSgiZjgiKTsNCisgICAgcmVnaXN0ZXIgZG91YmxlIGQxIGFz
bSgiZjkiKTsNCisgICAgcmVnaXN0ZXIgZG91YmxlIGQyIGFzbSgiZjEwIik7
DQorICAgIHJlZ2lzdGVyIGRvdWJsZSBkMyBhc20oImYxMSIpOw0KKyAgICBy
ZWdpc3RlciBkb3VibGUgZDQgYXNtKCJmMTIiKTsNCisgICAgcmVnaXN0ZXIg
ZG91YmxlIGQ1IGFzbSgiZjEzIik7DQorICAgIHJlZ2lzdGVyIGRvdWJsZSBk
NiBhc20oImYxNCIpOw0KKyAgICByZWdpc3RlciBkb3VibGUgZDcgYXNtKCJm
MTUiKTsNCisNCisgICAgLyogbG9hZCBGUFIgcmVnaXN0ZXJzIGZyb20gZnBy
W10gKi8NCisgICAgc3dpdGNoIChucl9mcHIpIHsNCisgICAgICBBUkdfRlBS
KDcpOw0KKyAgICAgIEFSR19GUFIoNik7DQorICAgICAgQVJHX0ZQUig1KTsN
CisgICAgICBBUkdfRlBSKDQpOw0KKyAgICAgIEFSR19GUFIoMyk7DQorICAg
ICAgQVJHX0ZQUigyKTsNCisgICAgICBBUkdfRlBSKDEpOw0KKyAgICAgIEFS
R19GUFIoMCk7DQorICAgIGNhc2UgMDo7DQogICAgIH0NCiANCi0gICAgLyog
YnVpbGQgZ3ByW10sIGZwcltdIGFuZCBzdGFja1tdIGFycmF5cyAqLw0KLSAg
ICBucl9ncHIgPSAwOw0KLQlucl9mcHIgPSAwOw0KLQlucl9zdGFjayA9IDA7
DQotCQ0KLSAgICBhcmdzID0gY2FsbGFyZ3M7DQotICAgIHdoaWxlIChhcmdz
ICE9IGxhc3QpIHsNCi0JICBzd2l0Y2ggKGNhbGx0eXBlW2FyZ3MgLSBjYWxs
YXJnc10pIHsNCi0JICBjYXNlICdGJzogew0KLQkJanZhbHVlIHZhbHVlID0g
eyAuZCA9IChkb3VibGUpYXJncy0+ZiB9Ow0KLQkJaWYgKG5yX2ZwciA8IEZQ
Ul9BUkdTKSB7DQotCQkgIGZwcltucl9mcHIrK10gPSB2YWx1ZS5kOw0KLQkJ
ICBncHJbbnJfZ3ByKytdID0gdmFsdWUuajsNCi0JCX0NCi0JCWVsc2Ugew0K
LQkJICAqKGZsb2F0ICopc3RhY2sgPSB2YWx1ZS5kOw0KLQkJICBzdGFjaysr
Ow0KLQkJfQ0KLQkJYnJlYWs7DQotCSAgfQ0KLQkgIA0KLQkgIGNhc2UgJ0Qn
OiB7DQotCQlqdmFsdWUgdmFsdWUgPSB7IC5kID0gYXJncy0+ZCB9Ow0KLQkg
ICAgaWYgKG5yX2ZwciA8IEZQUl9BUkdTKSB7DQotCQkgIGZwcltucl9mcHIr
K10gPSB2YWx1ZS5kOw0KLQkJICBncHJbbnJfZ3ByKytdID0gdmFsdWUuajsN
Ci0JICAgIH0NCi0JCWVsc2Ugew0KLQkJICAqKGRvdWJsZSAqKXN0YWNrID0g
dmFsdWUuZDsNCi0JCSAgc3RhY2srKzsNCi0JCX0NCi0JCWJyZWFrOw0KLQkg
IH0NCi0JICANCi0JICBkZWZhdWx0Og0KLQkJaWYgKG5yX2dwciA8IEdQUl9B
UkdTKQ0KLQkJICBncHJbbnJfZ3ByKytdID0gYXJncy0+ajsNCi0JCWVsc2UN
Ci0JCSAgKnN0YWNrKysgPSBhcmdzLT5qOw0KLQkgIH0NCi0JICBhcmdzKys7
DQorICAgIC8qIGxvYWQgR1BSIHJlZ2lzdGVycyBmcm9tIGdwcltdICovDQor
ICAgIHN3aXRjaCAobnJfZ3ByKSB7DQorICAgICAgQVJHX0dQUig3KTsNCisg
ICAgICBBUkdfR1BSKDYpOw0KKyAgICAgIEFSR19HUFIoNSk7DQorICAgICAg
QVJHX0dQUig0KTsNCisgICAgICBBUkdfR1BSKDMpOw0KKyAgICAgIEFSR19H
UFIoMik7DQorICAgICAgQVJHX0dQUigxKTsNCisgICAgICBBUkdfR1BSKDAp
Ow0KKyAgICBjYXNlIDA6Ow0KICAgICB9DQogDQotICAgIHsNCi0JICByZWdp
c3RlciBBUkdfVFlQRSBhMCBhc20oIm91dDAiKTsNCi0JICByZWdpc3RlciBB
UkdfVFlQRSBhMSBhc20oIm91dDEiKTsNCi0JICByZWdpc3RlciBBUkdfVFlQ
RSBhMiBhc20oIm91dDIiKTsNCi0JICByZWdpc3RlciBBUkdfVFlQRSBhMyBh
c20oIm91dDMiKTsNCi0JICByZWdpc3RlciBBUkdfVFlQRSBhNCBhc20oIm91
dDQiKTsNCi0JICByZWdpc3RlciBBUkdfVFlQRSBhNSBhc20oIm91dDUiKTsN
Ci0JICByZWdpc3RlciBBUkdfVFlQRSBhNiBhc20oIm91dDYiKTsNCi0JICBy
ZWdpc3RlciBBUkdfVFlQRSBhNyBhc20oIm91dDciKTsNCi0JICANCi0JICBy
ZWdpc3RlciBkb3VibGUgZDAgYXNtKCJmOCIpOw0KLQkgIHJlZ2lzdGVyIGRv
dWJsZSBkMSBhc20oImY5Iik7DQotCSAgcmVnaXN0ZXIgZG91YmxlIGQyIGFz
bSgiZjEwIik7DQotCSAgcmVnaXN0ZXIgZG91YmxlIGQzIGFzbSgiZjExIik7
DQotCSAgcmVnaXN0ZXIgZG91YmxlIGQ0IGFzbSgiZjEyIik7DQotCSAgcmVn
aXN0ZXIgZG91YmxlIGQ1IGFzbSgiZjEzIik7DQotCSAgcmVnaXN0ZXIgZG91
YmxlIGQ2IGFzbSgiZjE0Iik7DQotCSAgcmVnaXN0ZXIgZG91YmxlIGQ3IGFz
bSgiZjE1Iik7DQotCSAgDQotCSAgLyogbG9hZCBGUFIgcmVnaXN0ZXJzIGZy
b20gZnByW10gKi8NCi0JICBzd2l0Y2ggKG5yX2Zwcikgew0KLQkJQVJHX0ZQ
Uig3KTsNCi0JCUFSR19GUFIoNik7DQotCQlBUkdfRlBSKDUpOw0KLQkJQVJH
X0ZQUig0KTsNCi0JCUFSR19GUFIoMyk7DQotCQlBUkdfRlBSKDIpOw0KLQkJ
QVJHX0ZQUigxKTsNCi0JCUFSR19GUFIoMCk7DQotCSAgY2FzZSAwOjsNCi0J
ICB9DQotDQotCSAgLyogbG9hZCBHUFIgcmVnaXN0ZXJzIGZyb20gZ3ByW10g
Ki8NCi0JICBzd2l0Y2ggKG5yX2dwcikgew0KLQkJQVJHX0dQUig3KTsNCi0J
CUFSR19HUFIoNik7DQotCQlBUkdfR1BSKDUpOw0KLQkJQVJHX0dQUig0KTsN
Ci0JCUFSR19HUFIoMyk7DQotCQlBUkdfR1BSKDIpOw0KLQkJQVJHX0dQUigx
KTsNCi0JCUFSR19HUFIoMCk7DQotCSAgY2FzZSAwOjsNCi0JICB9DQotCSAg
DQotCSAgLyogRW5zdXJlIHRoYXQgdGhlIGFzc2lnbm1lbnRzIHRvIGYqIHJl
Z2lzdGVycyB3b24ndCBiZSBvcHRpbWl6ZWQgYXdheS4gKi8NCi0JICBhc20g
KCIiIDo6DQotCQkgICAiZiIgKGQwKSwgImYiIChkMSksICJmIiAoZDIpLCAi
ZiIgKGQzKSwNCi0JCSAgICJmIiAoZDQpLCAiZiIgKGQ1KSwgImYiIChkNiks
ICJmIiAoZDcpKTsNCi0NCi0JICBzd2l0Y2goY2FsbC0+cmV0c2l6ZSkgew0K
LQkgIGNhc2UgMDoNCi0JICAgIC8qIE11c3QgYmUgdm9pZC4gICovDQotCSAg
ICAoKHZvaWQgKCopKEFSR19UWVBFUykpKGZ1bmMpKShBUkdfTElTVCk7DQot
CSAgICBicmVhazsNCi0JCQ0KLQkgIGNhc2UgMToNCi0JICAgIGlmIChjYWxs
LT5yZXR0eXBlID09ICdGJykNCi0JCSAgY2FsbC0+cmV0LT5mID0gKChqZmxv
YXQgKCopKEFSR19UWVBFUykpKGZ1bmMpKShBUkdfTElTVCk7DQotCSAgICBl
bHNlIC8qIE11c3QgYmUgMzItYml0IG9yIHNtYWxsZXIgaW50LiAgKi8NCi0J
CSAgY2FsbC0+cmV0LT5pID0gKChqaW50ICgqKShBUkdfVFlQRVMpKShmdW5j
KSkoQVJHX0xJU1QpOw0KLQkgICAgYnJlYWs7DQotDQotCSAgZGVmYXVsdDoN
Ci0JICAgIC8qIEl0IGNvdWxkJ3ZlIGJlZW4gYGNhc2UgMjsnLCBidXQgdGhl
biB3ZSdkIGdldCBhbiBhZGRpdGlvbmFsIGNtcA0KLQkgICAgICogdGhhdCB3
ZSBkb24ndCByZWFsbHkgbmVlZC4gICovDQotCSAgICBpZiAoY2FsbC0+cmV0
dHlwZSA9PSAnRCcpDQotCQkgIGNhbGwtPnJldC0+ZCA9ICgoamRvdWJsZSAo
KikoQVJHX1RZUEVTKSkoZnVuYykpKEFSR19MSVNUKTsNCi0JICAgIGVsc2Ug
LyogTXVzdCBiZSBqbG9uZy4gICovDQotCQkgIGNhbGwtPnJldC0+aiA9ICgo
amxvbmcgKCopKEFSR19UWVBFUykpKGZ1bmMpKShBUkdfTElTVCk7DQotCSAg
ICBicmVhazsNCi0JICB9DQorICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBhc3Np
Z25tZW50cyB0byBmKiByZWdpc3RlcnMgd29uJ3QgYmUgb3B0aW1pemVkIGF3
YXkuICovDQorICAgIGFzbSAoIiIgOjoNCisJICJmIiAoZDApLCAiZiIgKGQx
KSwgImYiIChkMiksICJmIiAoZDMpLA0KKwkgImYiIChkNCksICJmIiAoZDUp
LCAiZiIgKGQ2KSwgImYiIChkNykpOw0KKw0KKyAgICBzd2l0Y2goY2FsbC0+
cmV0c2l6ZSkgew0KKyAgICBjYXNlIDA6DQorICAgICAgLyogTXVzdCBiZSB2
b2lkLiAgKi8NCisgICAgICAoKHZvaWQgKCopKEFSR19UWVBFUykpKGZ1bmMp
KShBUkdfTElTVCk7DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgMToN
CisgICAgICBpZiAoY2FsbC0+cmV0dHlwZSA9PSAnRicpDQorCWNhbGwtPnJl
dC0+ZiA9ICgoamZsb2F0ICgqKShBUkdfVFlQRVMpKShmdW5jKSkoQVJHX0xJ
U1QpOw0KKyAgICAgIGVsc2UgLyogTXVzdCBiZSAzMi1iaXQgb3Igc21hbGxl
ciBpbnQuICAqLw0KKwljYWxsLT5yZXQtPmkgPSAoKGppbnQgKCopKEFSR19U
WVBFUykpKGZ1bmMpKShBUkdfTElTVCk7DQorICAgICAgYnJlYWs7DQorDQor
ICAgIGRlZmF1bHQ6DQorICAgICAgLyogSXQgY291bGQndmUgYmVlbiBgY2Fz
ZSAyOycsIGJ1dCB0aGVuIHdlJ2QgZ2V0IGFuIGFkZGl0aW9uYWwgY21wDQor
ICAgICAgICogdGhhdCB3ZSBkb24ndCByZWFsbHkgbmVlZC4gICovDQorICAg
ICAgaWYgKGNhbGwtPnJldHR5cGUgPT0gJ0QnKQ0KKwljYWxsLT5yZXQtPmQg
PSAoKGpkb3VibGUgKCopKEFSR19UWVBFUykpKGZ1bmMpKShBUkdfTElTVCk7
DQorICAgICAgZWxzZSAvKiBNdXN0IGJlIGpsb25nLiAgKi8NCisJY2FsbC0+
cmV0LT5qID0gKChqbG9uZyAoKikoQVJHX1RZUEVTKSkoZnVuYykpKEFSR19M
SVNUKTsNCisgICAgICBicmVhazsNCiAgICAgfQ0KKyAgfQ0KIH0NCiANCiAj
dW5kZWYgQVJHX1RZUEUNCi0tLSBrYWZmZS0xLjEvY29uZmlnL2lhNjQvY29t
bW9uLmguaWE2NAkyMDAyLTA1LTI5IDIxOjQ5OjU4LjAwMDAwMDAwMCArMDIw
MA0KKysrIGthZmZlLTEuMS9jb25maWcvaWE2NC9jb21tb24uaAkyMDAzLTA1
LTE2IDAzOjU2OjUwLjAwMDAwMDAwMCArMDIwMA0KQEAgLTE5LDQgKzE5LDIw
IEBADQogI2luY2x1ZGUgInN5c2RlcENhbGxNZXRob2QuaCINCiAjZW5kaWYN
CiANCisvKg0KKyAqIERvIGFuIGF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5n
ZS4gIFRoZSBhZGRyZXNzICdBJyBpcyBjaGVja2VkDQorICogYWdhaW5zdCB2
YWx1ZSAnTycgYW5kIGlmIHRoZXkgbWF0Y2ggaXQncyBleGNoYW5nZWQgd2l0
aCB2YWx1ZSAnTicuDQorICogV2UgcmV0dXJuICcxJyBpZiB0aGUgZXhjaGFu
Z2UgaXMgc3VjZXNzZnVsLCBvdGhlcndpc2UgMC4NCisgKi8NCisNCisjaWZk
ZWYgSEFWRV9JQTY0SU5UUklOX0gNCisjaW5jbHVkZSA8aWE2NGludHJpbi5o
Pg0KKyNlbmRpZg0KKw0KKy8qIEludGVsIEl0YW5pdW0gUHJvY2Vzc29yLXNw
ZWNpZmljIEFCSSBkZWZpbmVzDQorICAgX19zeW5jX2Jvb2xfY29tcGFyZV9h
bmRfc3dhcCBwcmltaXRpdmUgKDcuNC4zKS4gICovDQorI3VuZGVmIENPTVBB
UkVfQU5EX0VYQ0hBTkdFDQorI2RlZmluZSBDT01QQVJFX0FORF9FWENIQU5H
RShBLCBPLCBOKSBcDQorCV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAo
KEEpLCAoTyksIChOKSkNCisNCiAjZW5kaWYNCi0tLSBrYWZmZS0xLjEvY29u
ZmlnL2NvbmZpZy1zZXRqbXAuaC5pYTY0CTIwMDItMDUtMjkgMjE6NDY6MjMu
MDAwMDAwMDAwICswMjAwDQorKysga2FmZmUtMS4xL2NvbmZpZy9jb25maWct
c2V0am1wLmgJMjAwMy0wNS0xNiAwMzo1Njo1MC4wMDAwMDAwMDAgKzAyMDAN
CkBAIC05MCwxMiArOTAsNCBAQCB0eXBlZGVmIHZvaWQqIGthZmZlX2ptcF9i
dWZbSlRIUkVBRF9KQkxFDQogDQogI2VuZGlmDQogDQotI2lmIGRlZmluZWQo
X19pYTY0X18pDQotI2RlZmluZSBKVEhSRUFEX0RFQ0xBUkVfSk1QQlVGKHgp
CUpUSFJFQURfSk1QQlVGIHg7IHZvaWQgKiB4IyNfcGFkDQotI2RlZmluZSBK
VEhSRUFEX0FDQ0VTU19KTVBCVUYoeCwgeSkJKF9fdHlwZW9mX18oKHgpLT55
WzBdKSAqKSAoKCgodW5zaWduZWQgbG9uZykmKHgpLT55KSArIDE1KSAmIC0x
NikNCi0jZWxzZQ0KLSNkZWZpbmUgSlRIUkVBRF9ERUNMQVJFX0pNUEJVRih4
KQlKVEhSRUFEX0pNUEJVRiB4DQotI2RlZmluZSBKVEhSRUFEX0FDQ0VTU19K
TVBCVUYoeCwgeSkJKHgpLT55DQotI2VuZGlmDQotDQogI2VuZGlmDQotLS0g
a2FmZmUtMS4xL2thZmZlL2thZmZldm0vc3lzdGVtcy91bml4LWp0aHJlYWRz
L2p0aHJlYWQuYy5pYTY0CTIwMDMtMDMtMTEgMDk6MDA6MTkuMDAwMDAwMDAw
ICswMTAwDQorKysga2FmZmUtMS4xL2thZmZlL2thZmZldm0vc3lzdGVtcy91
bml4LWp0aHJlYWRzL2p0aHJlYWQuYwkyMDAzLTA1LTE2IDAzOjU2OjUxLjAw
MDAwMDAwMCArMDIwMA0KQEAgLTEyMyw2ICsxMjMsMTQgQEAgc3RhdGljIGlu
dCAgbWluX3ByaW9yaXR5OwkJLyogbWluaW11bSBzdQ0KIA0KIGp0aHJlYWQq
IGN1cnJlbnRKVGhyZWFkOw0KIA0KKy8qIENvbnRleHQgc3dpdGNoIHJlbGF0
ZWQgZnVuY3Rpb25zICovDQorI2lmbmRlZiBKVEhSRUFEX0NPTlRFWFRfU0FW
RQ0KKyNkZWZpbmUgSlRIUkVBRF9DT05URVhUX1NBVkUoYnVmKQkJSlRIUkVB
RF9TRVRKTVAoKGJ1ZikpDQorI2VuZGlmDQorI2lmbmRlZiBKVEhSRUFEX0NP
TlRFWFRfUkVTVE9SRQ0KKyNkZWZpbmUgSlRIUkVBRF9DT05URVhUX1JFU1RP
UkUoYnVmLCB2YWwpCUpUSFJFQURfTE9OR0pNUCgoYnVmKSwgKHZhbCkpDQor
I2VuZGlmDQorDQogLyogVGhlIGFyZ3VtZW50cyB0byBhIHNpZ25hbCBoYW5k
bGVyICovDQogI2lmbmRlZiBTSUdOQUxfQVJHUw0KICNkZWZpbmUgU0lHTkFM
X0FSR1Moc2lnLCBzYykgaW50IHNpZw0KQEAgLTg5OCwxMCArOTA2LDE0IEBA
IG5ld1RocmVhZEN0eChpbnQgc3RhY2tTaXplKQ0KIHsNCiAJanRocmVhZCAq
Y3Q7DQogDQotCWN0ID0gYWxsb2NhdG9yKHNpemVvZihqdGhyZWFkKSArIHN0
YWNrU2l6ZSk7DQorCWN0ID0gYWxsb2NhdG9yKHNpemVvZihqdGhyZWFkKSAr
IDE2ICsgc3RhY2tTaXplKTsNCiAJaWYgKGN0ID09IDApIHsNCiAJCXJldHVy
biAwOw0KIAl9DQorI2lmIGRlZmluZWQoX19pYTY0X18pDQorCS8qIChnYikg
QWxpZ24gam1wX2J1ZiBvbiAxNi1ieXRlIGJvdW5kYXJpZXMgKi8NCisJY3Qg
PSAoanRocmVhZCAqKSgoKCh1bnNpZ25lZCBsb25nKShjdCkpICYgMTUpIF4g
KHVuc2lnbmVkIGxvbmcpKGN0KSk7DQorI2VuZGlmDQogCWN0LT5zdGFja0Jh
c2UgPSAoY3QgKyAxKTsNCiAJY3QtPnN0YWNrRW5kID0gKGNoYXIgKikgY3Qt
PnN0YWNrQmFzZSArIHN0YWNrU2l6ZTsNCiAJY3QtPnJlc3RvcmVQb2ludCA9
IGN0LT5zdGFja0VuZDsNCkBAIC0xMjY5LDEyICsxMjgxLDYgQEAganRocmVh
ZF9jcmVhdGUodW5zaWduZWQgY2hhciBwcmksIHZvaWQgKA0KIAl2b2lkCSpv
bGRic3AsICpuZXdic3A7DQogI2VuZGlmDQogCXNpemVfdCAgIHBhZ2Vfc2l6
ZTsNCi0JDQotCS8qIEFkanVzdCBzdGFjayBzaXplICovDQotCXBhZ2Vfc2l6
ZSA9IGdldHBhZ2VzaXplKCk7DQotCWlmICh0aHJlYWRTdGFja1NpemUgPT0g
MCkNCi0JCXRocmVhZFN0YWNrU2l6ZSA9IFRIUkVBRFNUQUNLU0laRTsNCi0J
dGhyZWFkU3RhY2tTaXplID0gKHRocmVhZFN0YWNrU2l6ZSArIHBhZ2Vfc2l6
ZSAtIDEpICYgLXBhZ2Vfc2l6ZTsNCiANCiAJLyoNCiAJICogRGlzYWJsZSBz
dG9wIHRvIHByb3RlY3QgdGhlIHRocmVhZExvY2sgbG9jaywgYW5kIHByZXZl
bnQNCkBAIC0xMjgzLDYgKzEyODksMTIgQEAganRocmVhZF9jcmVhdGUodW5z
aWduZWQgY2hhciBwcmksIHZvaWQgKA0KIAkgKi8NCiAJanRocmVhZF9kaXNh
YmxlX3N0b3AoKTsNCiANCisJLyogQWRqdXN0IHN0YWNrIHNpemUgKi8NCisJ
cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsNCisJaWYgKHRocmVhZFN0YWNr
U2l6ZSA9PSAwKQ0KKwkJdGhyZWFkU3RhY2tTaXplID0gVEhSRUFEU1RBQ0tT
SVpFOw0KKwl0aHJlYWRTdGFja1NpemUgPSAodGhyZWFkU3RhY2tTaXplICsg
cGFnZV9zaXplIC0gMSkgJiAtcGFnZV9zaXplOw0KKw0KIAlqbXV0ZXhfbG9j
aygmdGhyZWFkTG9jayk7DQogCWp0aWQgPSBuZXdUaHJlYWRDdHgodGhyZWFk
U3RhY2tTaXplKTsNCiAJaWYgKCFqdGlkKSB7DQpAQCAtMTMxOSw3ICsxMzMx
LDcgQEAgREJHKEpUSFJFQUQsDQogCSAqDQogCSAqIFRvIGJlIHNhZmUsIHdl
IGltbWVkaWF0ZWx5IGNhbGwgYSBuZXcgZnVuY3Rpb24uDQogCSAqLw0KLSAg
ICAgICAgaWYgKEpUSFJFQURfU0VUSk1QKEpUSFJFQURfQUNDRVNTX0pNUEJV
RihqdGlkLCBlbnYpKSkgew0KKyAgICAgICAgaWYgKEpUSFJFQURfQ09OVEVY
VF9TQVZFKGp0aWQtPmVudikpIHsNCiAJCS8qIG5ldyB0aHJlYWQgKi8NCiAJ
CXN0YXJ0X3RoaXNfc3Vja2VyX29uX2FfbmV3X2ZyYW1lKCk7DQogCQlhc3Nl
cnQoISJOZXZlciEiKTsNCkBAIC0xMzMwLDkgKzEzNDIsOSBAQCBEQkcoSlRI
UkVBRCwNCiAJU0FWRV9GUChqdGlkLT5mcHN0YXRlKTsNCiAjZW5kaWYNCiAJ
Lyogc2V0IHVwIGNvbnRleHQgZm9yIG5ldyB0aHJlYWQgKi8NCi0Jb2xkc3Rh
Y2sgPSBHRVRfU1AoSlRIUkVBRF9BQ0NFU1NfSk1QQlVGKGp0aWQsIGVudikp
Ow0KKwlvbGRzdGFjayA9IEdFVF9TUChqdGlkLT5lbnYpOw0KICNpZiBkZWZp
bmVkKF9faWE2NF9fKQ0KLQlvbGRic3AgPSBHRVRfQlNQKEpUSFJFQURfQUND
RVNTX0pNUEJVRihqdGlkLCBlbnYpKTsNCisJb2xkYnNwID0gR0VUX0JTUChq
dGlkLT5lbnYpOw0KICNlbmRpZg0KIA0KICNpZiBkZWZpbmVkKFNUQUNLX0dS
T1dTX1VQKQ0KQEAgLTEzNDgsNyArMTM2MCw3IEBAIERCRyhKVEhSRUFELA0K
IAkgKiBncm93cyBkb3dud2FyZC4gQm90aCBzdGFja3Mgc3RhcnQgaW4gdGhl
IG1pZGRsZSBhbmQgZ3JvdyBvdXR3YXJkDQogCSAqIGZyb20gZWFjaCBvdGhl
ci4NCiAJICovDQotCW5ld3N0YWNrIC09ICh0aHJlYWRTdGFja1NpemUgPj4g
MSk7DQorCShjaGFyICopIG5ld3N0YWNrIC09ICh0aHJlYWRTdGFja1NpemUg
Pj4gMSk7DQogCW5ld2JzcCA9IG5ld3N0YWNrOw0KIAkvKiBNYWtlIHJlZ2lz
dGVyIHN0YWNrIDY0LWJ5dGUgYWxpZ25lZCAqLw0KIAlpZiAoKHVuc2lnbmVk
IGxvbmcpbmV3YnNwICYgMHgzZikNCkBAIC0xMzY0LDkgKzEzNzYsOSBAQCBE
QkcoSlRIUkVBRCwNCiAJbmV3c3RhY2sgPSAodm9pZCAqKSBTVEFDS19BTElH
TihuZXdzdGFjayk7DQogI2VuZGlmDQogDQotCVNFVF9TUChKVEhSRUFEX0FD
Q0VTU19KTVBCVUYoanRpZCwgZW52KSwgbmV3c3RhY2spOw0KKwlTRVRfU1Ao
anRpZC0+ZW52LCBuZXdzdGFjayk7DQogI2lmIGRlZmluZWQoX19pYTY0X18p
DQotCVNFVF9CU1AoSlRIUkVBRF9BQ0NFU1NfSk1QQlVGKGp0aWQsIGVudiks
IG5ld2JzcCk7DQorCVNFVF9CU1AoanRpZC0+ZW52LCBuZXdic3ApOw0KICNl
bmRpZg0KIA0KICNpZiBkZWZpbmVkKFNFVF9CUCkNCkBAIC0xMzc0LDEzICsx
Mzg2LDEzIEBAIERCRyhKVEhSRUFELA0KIAkgKiBDbGVhciB0aGUgYmFzZSBw
b2ludGVyIGluIHRoZSBuZXcgdGhyZWFkJ3Mgc3RhY2suDQogCSAqIE5pY2Ug
Zm9yIGRlYnVnZ2luZywgYnV0IG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuDQog
CSAqLw0KLQlTRVRfQlAoSlRIUkVBRF9BQ0NFU1NfSk1QQlVGKGp0aWQsIGVu
diksIDApOw0KKwlTRVRfQlAoanRpZC0+ZW52LCAwKTsNCiAjZW5kaWYNCiAN
CiANCiAjaWYgZGVmaW5lZChGUF9PRkZTRVQpDQogCS8qIG5lZWRlZCBmb3I6
IElSSVggKi8NCi0JU0VUX0ZQKEpUSFJFQURfQUNDRVNTX0pNUEJVRihqdGlk
LCBlbnYpLCBuZXdzdGFjayArICgodm9pZCAqKUdFVF9GUChKVEhSRUFEX0FD
Q0VTU19KTVBCVUYoanRpZCwgZW52KSkgLSBvbGRzdGFjaykpOw0KKwlTRVRf
RlAoanRpZC0+ZW52LCBuZXdzdGFjayArICgodm9pZCAqKUdFVF9GUChqdGlk
LT5lbnYpIC0gb2xkc3RhY2spKTsNCiAjZW5kaWYNCiANCiAgICAgICAgIHJl
c3VtZVRocmVhZChqdGlkKTsNCkBAIC0xNjI3LDkgKzE2MzksMTAgQEAgZHBy
aW50Zigic3dpdGNoIGZyb20gJXAgdG8gJXBcbiIsIGxhc3RUaA0KICNpZiBk
ZWZpbmVkKENPTlRFWFRfU1dJVENIKQ0KIAkJCQlDT05URVhUX1NXSVRDSChs
YXN0VGhyZWFkLCBjdXJyZW50SlRocmVhZCk7DQogI2Vsc2UNCi0JCQkJaWYg
KEpUSFJFQURfU0VUSk1QKEpUSFJFQURfQUNDRVNTX0pNUEJVRihsYXN0VGhy
ZWFkLCBlbnYpKSA9PSAwKSB7DQotCQkJCSAgICBsYXN0VGhyZWFkLT5yZXN0
b3JlUG9pbnQgPSBHRVRfU1AoSlRIUkVBRF9BQ0NFU1NfSk1QQlVGKGxhc3RU
aHJlYWQsIGVudikpOw0KLQkJCQkgICAgSlRIUkVBRF9MT05HSk1QKEpUSFJF
QURfQUNDRVNTX0pNUEJVRihjdXJyZW50SlRocmVhZCwgZW52KSwgMSk7DQor
CQkJCWlmIChKVEhSRUFEX0NPTlRFWFRfU0FWRShsYXN0VGhyZWFkLT5lbnYp
ID09IDApIHsNCisJCQkJICAgIGxhc3RUaHJlYWQtPnJlc3RvcmVQb2ludCA9
IA0KKwkJCQkJR0VUX1NQKGxhc3RUaHJlYWQtPmVudik7DQorCQkJCSAgICBK
VEhSRUFEX0NPTlRFWFRfUkVTVE9SRShjdXJyZW50SlRocmVhZC0+ZW52LCAx
KTsNCiAJCQkJfQ0KICNlbmRpZg0KICNpZiBkZWZpbmVkKExPQURfRlApDQot
LS0ga2FmZmUtMS4xL2thZmZlL2thZmZldm0vc3lzdGVtcy91bml4LWp0aHJl
YWRzL2p0aHJlYWQuaC5pYTY0CTIwMDItMTEtMjcgMTk6MzI6NTUuMDAwMDAw
MDAwICswMTAwDQorKysga2FmZmUtMS4xL2thZmZlL2thZmZldm0vc3lzdGVt
cy91bml4LWp0aHJlYWRzL2p0aHJlYWQuaAkyMDAzLTA1LTE2IDAzOjU2OjUx
LjAwMDAwMDAwMCArMDIwMA0KQEAgLTkwLDcgKzkwLDcgQEAgdHlwZWRlZiBz
dHJ1Y3QgX2p0aHJlYWQgew0KIAkgKiB1c2VkIHRvIGhvbGQgdGhlIGN1cnJl
bnQgSmF2YSB0aHJlYWQNCiAJICovDQogCXZvaWQqCQkJCWpsVGhyZWFkOw0K
LQlKVEhSRUFEX0RFQ0xBUkVfSk1QQlVGCQkoZW52KTsNCisJSlRIUkVBRF9K
TVBCVUYJCQllbnY7DQogI2lmIGRlZmluZWQoU0FWRURfRlBfU0laRSkNCiAJ
Y2hhcgkJCQlmcHN0YXRlW1NBVkVEX0ZQX1NJWkVdOw0KICNlbmRpZg0KLS0t
IGthZmZlLTEuMS9rYWZmZS9rYWZmZXZtL2V4Y2VwdGlvbi5jLmlhNjQJMjAw
Mi0xMC0xOCAxNTo1NDoxNC4wMDAwMDAwMDAgKzAyMDANCisrKyBrYWZmZS0x
LjEva2FmZmUva2FmZmV2bS9leGNlcHRpb24uYwkyMDAzLTA1LTE2IDAzOjU2
OjUxLjAwMDAwMDAwMCArMDIwMA0KQEAgLTQ1Miw3ICs0NTIsNyBAQCBEQkco
RUxPT0tVUCwNCiANCiAJCQkvKiBJZiBub3QgaGVyZSwgZXhpdCBtb25pdG9y
IGlmIHN5bmNocm9uaXNlZC4gKi8NCiAJCQlpZiAob2JqICE9IDAgJiYgKGVp
bmZvLm1ldGhvZC0+YWNjZmxhZ3MgJiBBQ0NfU1lOQ0hST05JU0VEKSAhPSAw
KSB7DQotCQkJCV9zbG93VW5sb2NrTXV0ZXhJZkhlbGQoJm9iai0+bG9jaywg
SlRIUkVBRF9BQ0NFU1NfSk1QQlVGKGZyYW1lLCBqYnVmKSk7DQorCQkJCV9z
bG93VW5sb2NrTXV0ZXhJZkhlbGQoJm9iai0+bG9jaywgZnJhbWUtPmpidWYp
Ow0KIAkJCX0NCiAJCX0NCiAJfQ0KLS0tIGthZmZlLTEuMS9rYWZmZS9rYWZm
ZXZtL2V4Y2VwdGlvbi5oLmlhNjQJMjAwMy0wMS0wNiAxODoxNDoxOS4wMDAw
MDAwMDAgKzAxMDANCisrKyBrYWZmZS0xLjEva2FmZmUva2FmZmV2bS9leGNl
cHRpb24uaAkyMDAzLTA1LTE2IDAzOjU2OjUxLjAwMDAwMDAwMCArMDIwMA0K
QEAgLTkyLDcgKzkyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVm1FeGNlcHRIYW5k
bGVyIHsNCiAJdTQJCQkJcGM7DQogCQl9IGludHJwOw0KIAl9IGZyYW1lOw0K
LQlKVEhSRUFEX0RFQ0xBUkVfSk1QQlVGCQkoamJ1Zik7DQorCUpUSFJFQURf
Sk1QQlVGCQlqYnVmOw0KIH0gVm1FeGNlcHRIYW5kbGVyOw0KIA0KICNkZWZp
bmUgVk1FWENFUFRIQU5ETEVSX0tBRkZFSk5JX0hBTkRMRVIgKChzdHJ1Y3Qg
X21ldGhvZHMqKTEpDQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZtRXhjZXB0X3Nl
dEpOSUZyYW1lKFZtRXhjZXB0SGFuZGxlciogZWgNCiBzdGF0aWMgaW5saW5l
IHZvaWQNCiB2bUV4Y2VwdF9qdW1wVG9IYW5kbGVyKFZtRXhjZXB0SGFuZGxl
ciogZnJhbWUpDQogew0KLQlKVEhSRUFEX0xPTkdKTVAoSlRIUkVBRF9BQ0NF
U1NfSk1QQlVGKGZyYW1lLCBqYnVmKSwgMSk7DQorCUpUSFJFQURfTE9OR0pN
UChmcmFtZS0+amJ1ZiwgMSk7DQogfQ0KIA0KICNpZiBkZWZpbmVkKElOVEVS
UFJFVEVSKQ0KLS0tIGthZmZlLTEuMS9rYWZmZS9rYWZmZXZtL2puaS5jLmlh
NjQJMjAwMy0wMS0wNiAxODoxNDoyMC4wMDAwMDAwMDAgKzAxMDANCisrKyBr
YWZmZS0xLjEva2FmZmUva2FmZmV2bS9qbmkuYwkyMDAzLTA1LTE2IDAzOjU2
OjUxLjAwMDAwMDAwMCArMDIwMA0KQEAgLTEzMSw3ICsxMzEsNyBAQCBnZXRN
ZXRob2RGdW5jIChNZXRob2QqIG1ldGgsIEhqYXZhX2xhbmdfDQogCVZtRXhj
ZXB0SGFuZGxlciBlYnVmOwkJCQlcDQogCUtBRkZFX0pOSV9TRVRFWENFUFRG
UCgmZWJ1Zik7IAkJCVwNCiAJZWJ1Zi5wcmV2ID0gKFZtRXhjZXB0SGFuZGxl
ciopKHVuaGFuZChnZXRDdXJyZW50VGhyZWFkKCkpLT5leGNlcHRQdHIpO1wN
Ci0JaWYgKEpUSFJFQURfU0VUSk1QKEpUSFJFQURfQUNDRVNTX0pNUEJVRigm
ZWJ1ZiwgamJ1ZikpICE9IDApIHsJCVwNCisJaWYgKEpUSFJFQURfU0VUSk1Q
KGVidWYuamJ1ZikgIT0gMCkgewkJXA0KIAkJdW5oYW5kKGdldEN1cnJlbnRU
aHJlYWQoKSktPmV4Y2VwdFB0ciA9IFwNCiAJCSAgKHN0cnVjdCBIa2FmZmVf
dXRpbF9QdHIqKWVidWYucHJldjsJXA0KIAkJcmV0dXJuIFg7CQkJCVwNCkBA
IC0xNDIsNyArMTQyLDcgQEAgZ2V0TWV0aG9kRnVuYyAoTWV0aG9kKiBtZXRo
LCBIamF2YV9sYW5nXw0KIAlWbUV4Y2VwdEhhbmRsZXIgZWJ1ZjsgCQkJCVwN
CiAJS0FGRkVfSk5JX1NFVEVYQ0VQVEZQKCZlYnVmKTsgCQkJXA0KIAllYnVm
LnByZXYgPSAoVm1FeGNlcHRIYW5kbGVyKikodW5oYW5kKGdldEN1cnJlbnRU
aHJlYWQoKSktPmV4Y2VwdFB0cik7XA0KLQlpZiAoSlRIUkVBRF9TRVRKTVAo
SlRIUkVBRF9BQ0NFU1NfSk1QQlVGKCZlYnVmLCBqYnVmKSkgIT0gMCkgewkJ
XA0KKwlpZiAoSlRIUkVBRF9TRVRKTVAoZWJ1Zi5qYnVmKSAhPSAwKSB7CQlc
DQogCQl1bmhhbmQoZ2V0Q3VycmVudFRocmVhZCgpKS0+ZXhjZXB0UHRyID0g
XA0KIAkJICAoc3RydWN0IEhrYWZmZV91dGlsX1B0ciopZWJ1Zi5wcmV2Owlc
DQogCQlyZXR1cm47CQkJCQlcDQo=
---1463777692-1344520555-1053076195=:3796--