LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCi8qCiAqIEJhc2VkIG9uIG1zYmlvcy5jIGZyb20gcm9sbyAxLjY6CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAoQykgQ29weXJpZ2h0IDIwMDAKICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucyBHbWJICiAqIEtsZWluLVdpbnRlcm5oZWltLCBHZXJtYW55CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KCiNpbmNsdWRlICJiaW9zLmgiCgovKgogKiBEdXJpbmcgaXQncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgYmVmb3JlIHN3aXRjaGluZyB0byBwcm90ZWN0ZWQKICogbW9kZSwgdGhlIExpbnV4IEtlcm5lbCBtYWtlcyBhIGZldyBCSU9TIGNhbGxzLiBUaGlzIHdvbid0IHdvcmsKICogaWYgdGhlIGJvYXJkIGRvZXMgbm90IGhhdmUgYSBCSU9TLgogKgogKiBUaGlzIGlzIGEgdmVyeSBtaW5pbWFsaXNpYyBCSU9TIHRoYXQgc3VwcGxpZXMganVzdCBlbm91Z2gKICogZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRoZSBMaW51eCBLZXJuZWwgaGFwcHkuIEl0IGlzIE5PVAogKiBhIGdlbmVyYWwgcHVycG9zZSByZXBsYWNlbWVudCBmb3IgYSByZWFsIEJJT1MgISEKICovCgoKLnNlY3Rpb24gLmJpb3MsICJheCIKLmNvZGUxNgoub3JnIDAKCS8qIGEgY2FsbCB0byBmMDAwOjAgc2hvdWxkIHdhcm1ib290ICovCglqbXAJcmVhbG1vZGVfcmVzZXQKCi5nbG9ibCBybV9pbnQwMApybV9pbnQwMDoKCXB1c2h3CSQwCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwMQpybV9pbnQwMToKCXB1c2h3CSQxCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwMgpybV9pbnQwMjoKCXB1c2h3CSQyCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwMwpybV9pbnQwMzoKCXB1c2h3CSQzCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNApybV9pbnQwNDoKCXB1c2h3CSQ0CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNQpybV9pbnQwNToKCXB1c2h3CSQ1CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNgpybV9pbnQwNjoKCXB1c2h3CSQ2CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNwpybV9pbnQwNzoKCXB1c2h3CSQ3CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwOApybV9pbnQwODoKCXB1c2h3CSQ4CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwOQpybV9pbnQwOToKCXB1c2h3CSQ5CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwYQpybV9pbnQwYToKCXB1c2h3CSQxMAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGIKcm1faW50MGI6CglwdXNodwkkMTEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBjCnJtX2ludDBjOgoJcHVzaHcJJDEyCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwZApybV9pbnQwZDoKCXB1c2h3CSQxMwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGUKcm1faW50MGU6CglwdXNodwkkMTQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBmCnJtX2ludDBmOgoJcHVzaHcJJDE1CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxMApybV9pbnQxMDoKCXB1c2h3CSQxNgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTEKcm1faW50MTE6CglwdXNodwkkMTcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEyCnJtX2ludDEyOgoJcHVzaHcJJDE4CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxMwpybV9pbnQxMzoKCXB1c2h3CSQxOQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTQKcm1faW50MTQ6CglwdXNodwkkMjAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE1CnJtX2ludDE1OgoJcHVzaHcJJDIxCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNgpybV9pbnQxNjoKCXB1c2h3CSQyMgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTcKcm1faW50MTc6CglwdXNodwkkMjMKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE4CnJtX2ludDE4OgoJcHVzaHcJJDI0CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxOQpybV9pbnQxOToKCXB1c2h3CSQyNQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWEKcm1faW50MWE6CglwdXNodwkkMjYKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFiCnJtX2ludDFiOgoJcHVzaHcJJDI3CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxYwpybV9pbnQxYzoKCXB1c2h3CSQyOAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWQKcm1faW50MWQ6CglwdXNodwkkMjkKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFlCnJtX2ludDFlOgoJcHVzaHcJJDMwCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxZgpybV9pbnQxZjoKCXB1c2h3CSQzMQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1fZGVmX2ludApybV9kZWZfaW50OgoJaXJldAoKCgkvKgoJICogQWxsIGludGVycnVwdCBqdW1wdGFibGUgZW50cmllcyBqdW1wIHRvIGhlcmUKCSAqIGFmdGVyIHB1c2hpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IgbnVtYmVyIG9udG8gdGhlCgkgKiBzdGFjay4KCSAqLwphbnlfaW50ZXJydXB0MTY6CglNQUtFX0JJT1NfU1RBQ0sKCmdzCW1vdncJT0ZGU19WRUNUT1IoJWJwKSwgJWF4CgljbXB3CSQweDEwLCAlYXgKCWplCUxpbnRfMTBoCgljbXB3CSQweDExLCAlYXgKCWplCUxpbnRfMTFoCgljbXB3CSQweDEyLCAlYXgKCWplCUxpbnRfMTJoCgljbXB3CSQweDEzLCAlYXgKCWplCUxpbnRfMTNoCgljbXB3CSQweDE1LCAlYXgKCWplCUxpbnRfMTVoCgljbXB3CSQweDE2LCAlYXgKCWplCUxpbnRfMTZoCgljbXB3CSQweDFhLCAlYXgKCWplCUxpbnRfMWFoCgltb3Z3CSQweGZmZmYsICVheAoJam1wCUxvdXQKTGludF8xMGg6CQkJCQkvKiBWR0EgQklPUyBzZXJ2aWNlcyAqLwoJY2FsbAliaW9zXzEwaAoJam1wCUxvdXQKTGludF8xMWg6CgljYWxsCWJpb3NfMTFoCglqbXAJTG91dApMaW50XzEyaDoKCWNhbGwJYmlvc18xMmgKCWptcAlMb3V0CkxpbnRfMTNoOgkJCQkJLyogQklPUyBkaXNrIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTNoCglqbXAJTG91dApMaW50XzE1aDoJCQkJCS8qIE1pc2MuIEJJT1Mgc2VydmljZXMgKi8KCWNhbGwJYmlvc18xNWgKCWptcAlMb3V0CkxpbnRfMTZoOgkJCQkJLyoga2V5Ym9hcmQgc2VydmljZXMgKi8KCWNhbGwJYmlvc18xNmgKCWptcAlMb3V0CkxpbnRfMWFoOgkJCQkJLyogUENJIGJpb3MgKi8KCWNhbGwJYmlvc18xYWgKCWptcAlMb3V0CkxvdXQ6CgljbXB3CSQwLCAlYXgKCWplCUxoYW5kZWxlZAoKCS8qIEluc2VydCBjb2RlIGZvciB1bmhhbmRlbGVkIElOVHMgaGVyZS4KCSAqCgkgKiBST0xPIHByaW50cyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUKCSAqICh3ZSBjb3VsZCBkbyB0aGF0IGJ1dCB0aGVuIHdlJ3JlIGluIDE2Yml0IG1vZGUKCSAqIHNvIHdlJ2xsIGhhdmUgdG8gZ2V0IGJhY2sgaW50byAzMmJpdCBtb2RlCgkgKiB0byB1c2UgdGhlIGNvbnNvbGUgSS9PIHJvdXRpbmVzIChpZiB3ZSBkbyB0aGlzCgkgKiB3ZSBzaHVscyBtYWtlIGludCAweDEwIGFuZCBpbnQgMHgxNiB3b3JrIGFzIHdlbGwpKQoJICovCkxoYW5kZWxlZDoKCVJFU1RPUkVfQ0FMTEVSU19TVEFDSwoJYWRkdwkkMiwlc3AJCQkJLyogZHVtcCB2ZWN0b3IgbnVtYmVyICovCglpcmV0CQkJCQkvKiByZXR1cm4gZnJvbSBpbnRlcnJ1cHQgKi8KCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgCWludGVycnVwdCAxMGggLS0gVkdBIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTBoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4MywgJWF4CglqZQlMY3VyX3BvcwoJY21wdwkkMHhmLCAlYXgKCWplCUx2aWRfc3RhdGUKCWNtcHcJJDB4MTIsICVheAoJamUJTHZpZF9jZmcKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGN1cl9wb3M6CQkJCQkvKiBSZWFkIEN1cnNvciBQb3NpdGlvbiBhbmQgU2l6ZSAqLwpncwltb3Z3CSQwLCBPRkZTX0NYKCVicCkKZ3MJbW92dwkkMCwgT0ZGU19EWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKTHZpZF9zdGF0ZToJCQkJCS8qIEdldCBWaWRlbyBTdGF0ZSAqLwpncwltb3Z3CSQoODAgPDwgOHwweDAzKSwgT0ZGU19BWCglYnApCS8qIDgwIGNvbHVtbnMsIDgweDI1LCAxNiBjb2xvcnMgKi8KZ3MJbW92dwkkMCwgT0ZGU19CWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKTHZpZF9jZmc6CS8qIFZpZGVvIFN1YnN5c3RlbSBDb25maWd1cmF0aW9uIChFR0EvVkdBKSAqLwpncwltb3Z3CSQweDEwLCBPRkZTX0JYKCVicCkJCS8qIGluZGljYXRlIENHQS9NREEvSEdBICovCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDExaCAtLSBFcXVpcG1lbnQgZGV0ZXJtaW5hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKYmlvc18xMWg6CmNzCW1vdncJYmlvc19lcXVpcG1lbnQsICVheApncwltb3Z3CSVheCwgT0ZGU19BWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgCWludGVycnVwdCAxMmggLS0gR2V0IE1lbW9yeSBTaXplCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTJoOgpjcwltb3Z3CXJhbV9pbl82NGtiX2NodW5rcywgJWF4CgljbXB3CSQweGEsICVheAoJamEJYjEyX21vcmVfdGhhbl82NDBrCglzaGx3CSQ2LCAlYXgKCWptcAliMTJfcmV0dXJuCmIxMl9tb3JlX3RoYW5fNjQwazoKCW1vdncJJDB4MjgwLCAlYXgKYjEyX3JldHVybjoKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIG51bWJlciBvZiBraWxvYnl0ZXMgaW4gYXggKi8KCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDEzaCAtLSBEaXNrIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTNoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4MTUsICVheAoJamUJTGZ1bmNfMTVoCgltb3Z3CSQweGZmZmYsICVheAoJcmV0CkxmdW5jXzE1aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJYW5kdwkkMHhmZiwgJWF4CQkJLyogcmV0dXJuIEFIPTAtPmRyaXZlIG5vdCBwcmVzZW50ICovCmdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxNWggLS0gTWlzY2VsbGFuZW91cyBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTVoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4YzAsICVheAoJamUJTGZ1bmNfYzBoCgljbXB3CSQweGU4LCAlYXgKCWplCUxmdW5jX2U4aAoJY21wdwkkMHg4OCwgJWF4CglqZQlMZnVuY184OGgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKCkxmdW5jX2MwaDogCQkJCQkvKiBSZXR1cm4gU3lzdGVtIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycyAoUFMyIG9ubHkpICovCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCW9ydwkkMSwgJWF4CQkJCS8qIHJldHVybiBjYXJyeSAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKTGZ1bmNfZThoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglhbmR3CSQweGZmLCAlYXgKCWNtcHcJJDEsICVheAoJamUJTGZ1bmNfZTgwMWgKZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJb3J3CSQxLCAlYXgJCQkJLyogcmV0dXJuIGNhcnJ5IC0tIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgpMZnVuY19lODAxaDoJCQkJCS8qIEdldCBtZW1vcnkgc2l6ZSBmb3IgPjY0TSBDb25maWd1cmF0aW9ucyAqLwpjcwltb3Z3CXJhbV9pbl82NGtiX2NodW5rcywgJWF4CgljbXB3CSQweDEwMCwgJWF4CglqYQllODAxX21vcmVfdGhhbl8xNm1iCglzaGx3CSQ2LCAlYXgJCQkJLyogbXVsdGlwbHkgYnkgNjQgKi8KCXN1YncJJDB4NDAwLCAlYXgJCQkvKiAxc3QgbWVnIGRvZXMgbm90IGNvdW50ICovCgpncwltb3Z3CSVheCwgT0ZGU19BWCglYnApICAgCQkvKiByZXR1cm4gbWVtb3J5IHNpemUgYmV0d2VlbiAxTSBhbmQgMTZNIGluIDFrYiBjaHVua3MgaW4gQVggYW5kIENYICovCmdzCW1vdncJJWF4LCBPRkZTX0NYKCVicCkKZ3MJbW92dwkkMCwgT0ZGU19CWCglYnApCQkvKiBzZXQgQlggYW5kIERYIHRvIDAqLwpncwltb3Z3CSQwLCBPRkZTX0RYKCVicCkKZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJYW5kdwkkMHhmZmZlLCAlYXgJCQkvKiBjbGVhciBjYXJyeSAtLSBmdW5jdGlvbiBzdWNjZWVkZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgplODAxX21vcmVfdGhhbl8xNm1iOgoJc3VidwkkMHgxMDAsICVheAkJCS8qIHN1YnRyYWN0IDE2TUIgKi8KCmdzCW1vdncJJDB4M2MwMCwgT0ZGU19BWCglYnApCQkvKiByZXR1cm4gMHgzYzAwICgxNk1CLTFNQikgaW4gQVggYW5kIENYICovCmdzCW1vdncJJDB4M2MwMCwgT0ZGU19DWCglYnApCmdzCW1vdncJJWF4LCBPRkZTX0JYKCVicCkJCS8qIHNldCBCWCBhbmQgRFggdG8gbnVtYmVyIG9mIDY0a2IgY2h1bmtzIGFib3ZlIDE2TUIgKi8KZ3MJbW92dwklYXgsIE9GRlNfRFgoJWJwKQoKZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJYW5kdwkkMHhmZmZlLCAlYXgJCQkvKiBjbGVhciBjYXJyeSAtLSBmdW5jdGlvbiBzdWNjZWVkZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgpMZnVuY184OGg6CmNzCW1vdncJcmFtX2luXzY0a2JfY2h1bmtzLCAlYXgKCWNtcHcJJDB4MTAwLCAlYXgKCWpuYQliODhfbm90X21vcmVfdGhhbjE2Cgltb3Z3CSQweDEwMCwgJWF4CmI4OF9ub3RfbW9yZV90aGFuMTY6CglzaGx3CSQ2LCAlYXgKCXN1YncJJDB4NDAwLCAlYXgJCQkvKiAxc3QgbWVnIGRvZXMgbm90IGNvdW50ICovCgpncwltb3Z3CSVheCwgT0ZGU19BWCglYnApCQkvKiByZXR1cm4gbnVtYmVyIG9mIGtpbG9ieXRlcyBiZXR3ZWVuIDE2TUIgYW5kIDE2TUIgaW4gYXggKi8KCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDE2aCAtLSBrZXlib2FyZCBzZXJ2aWNlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpiaW9zXzE2aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJc2hydwkkOCwgJWF4CgljbXB3CSQweDAzLCAlYXgKCWplCUxmdW5jXzAzaAoJbW92dwkkMHhmZmZmLCAlYXgKCXJldApMZnVuY18wM2g6Cgl4b3J3CSVheCwgJWF4CQkJLyogZG8gbm90aGluZyAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCglyZXQKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyBpbnRlcnJ1cHQgMWFoIC0tIFBDSSBiaW9zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMWFoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CgljbXBiCSQweGIxLCAlYWgKCWplCUxmdW5jX2IxaAoJbW92dwkkMHhmZmZmLCAlYXgKCXJldApMZnVuY19iMWg6CgljYWxsCXJlYWxtb2RlX3BjaV9iaW9zCgl4b3J3CSVheCwgJWF4CQkJLyogZG8gbm90aGluZyAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCglyZXQKCgouZ2xvYmwgcmFtX2luXzY0a2JfY2h1bmtzCnJhbV9pbl82NGtiX2NodW5rczoKCS53b3JkIAkwCgouZ2xvYmwgYmlvc19lcXVpcG1lbnQKYmlvc19lcXVpcG1lbnQ6Cgkud29yZCAJMAo=