[Bf-committers] Rotational Limit Constraints

bf-committers@blender.org bf-committers@blender.org
Fri, 07 May 2004 22:32:00 -0500


--Message-Boundary-27507
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

Hey folks,

I have written a little rotational limits constraint. It allows you 
to set euler limits for global object rotations or quaternion limits 
for bone rotations in an armature. I'm submitting the patch in the 
hopes someone can help with a problem I have. the constraint seems to 
work as expected in every case except one. When you rotate a bone via 
the rkey. if you press the r key the bone will snap to your limits if 
your over then you can rotate past the limits all you want. the bone 
will snap back also if you apply rotation using nkey or if you change 
the limits of your constraint.

The best I can figure evaluate constraint is called once during the 
first iteration of the transform loop. via special_trans_object -> 
make_displists_by_armature and then never gets called again.

--Message-Boundary-27507
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any other MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  constraintpatch.txt
     Date:  7 May 2004, 22:21
     Size:  17833 bytes.
     Type:  Text

--Message-Boundary-27507
Content-type: Application/Octet-stream; name="constraintpatch.txt"; type=Text
Content-disposition: attachment; filename="constraintpatch.txt"
Content-transfer-encoding: BASE64

SW5kZXg6IHNvdXJjZS9ibGVuZGVyL2JsZW5rZXJuZWwvaW50ZXJuL2NvbnN0cmFpbnQuYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2JmLWJsZW5kZXIvYmxlbmRlci9z
b3VyY2UvYmxlbmRlci9ibGVua2VybmVsL2ludGVybi9jb25zdHJhaW50LmMsdg0KcmV0cmll
dmluZyByZXZpc2lvbiAxLjE0DQpkaWZmIC11IC1yMS4xNCBjb25zdHJhaW50LmMNCi0tLSBz
b3VyY2UvYmxlbmRlci9ibGVua2VybmVsL2ludGVybi9jb25zdHJhaW50LmMJNCBBcHIgMjAw
NCAxNzoxMzozNSAtMDAwMAkxLjE0DQorKysgc291cmNlL2JsZW5kZXIvYmxlbmtlcm5lbC9p
bnRlcm4vY29uc3RyYWludC5jCTggTWF5IDIwMDQgMDM6MjM6MDYgLTAwMDANCkBAIC0yMTQs
NiArMjE0LDMxIEBADQogCQkJcmVzdWx0ID0gZGF0YTsNCiAJCX0NCiAJCWJyZWFrOw0KKwlj
YXNlIENPTlNUUkFJTlRfVFlQRV9ST1RMSU1JVDoNCisJCXsNCisJCQliUm90YXRpb25MaW1p
dENvbnN0cmFpbnQgKmRhdGE7DQorCQkJZGF0YSA9IE1FTV9jYWxsb2NOKHNpemVvZihiUm90
YXRpb25MaW1pdENvbnN0cmFpbnQpLCAicm90bGltaXRDb25zdHJhaW50Iik7DQorCQkJDQor
CQkJDQorCQkJZGF0YS0+eG1pbiA9IDAuMDsNCisJCQlkYXRhLT54bWF4ID0gMzYwLjA7DQor
CQkJZGF0YS0+eW1pbiA9IDAuMDsNCisJCQlkYXRhLT55bWF4ID0gMzYwLjA7DQorCQkJZGF0
YS0+em1pbiA9IDAuMDsNCisJCQlkYXRhLT56bWF4ID0gMzYwLjA7DQorCQkJDQorCQkJZGF0
YS0+eHFtaW4gPSAtMTAwOw0KKwkJCWRhdGEtPnhxbWF4ID0gMTAwOw0KKwkJCWRhdGEtPnlx
bWluID0gLTEwMDsNCisJCQlkYXRhLT55cW1heCA9IDEwMDsNCisJCQlkYXRhLT56cW1pbiA9
IC0xMDA7DQorCQkJZGF0YS0+enFtYXggPSAxMDA7DQorCQkJZGF0YS0+d3FtaW4gPSAtMTAw
Ow0KKwkJCWRhdGEtPndxbWF4ID0gMTAwOw0KKwkJCQ0KKwkJCXJlc3VsdCA9IGRhdGE7DQor
CQl9DQorCQlicmVhazsNCiAJY2FzZSBDT05TVFJBSU5UX1RZUEVfTE9DTElLRToNCiAJCXsN
CiAJCQliTG9jYXRlTGlrZUNvbnN0cmFpbnQgKmRhdGE7DQpAQCAtNzk5LDYgKzgyNCwxNCBA
QA0KIAkJCQlkYXRhID0gKGJSb3RhdGVMaWtlQ29uc3RyYWludCopIGNvbi0+ZGF0YTsNCiAJ
CQl9DQogCQkJYnJlYWs7DQorCQljYXNlIENPTlNUUkFJTlRfVFlQRV9ST1RMSU1JVDoNCisJ
CQl7DQorCQkJCWJSb3RhdGlvbkxpbWl0Q29uc3RyYWludCAqZGF0YTsNCisJCQkJDQorCQkJ
CWNvbi0+ZGF0YSA9IE1FTV9kdXBhbGxvY04gKGNvbi0+ZGF0YSk7DQorCQkJCWRhdGEgPSAo
YlJvdGF0aW9uTGltaXRDb25zdHJhaW50KikgY29uLT5kYXRhOw0KKwkJCX0NCisJCQlicmVh
azsNCiAJCWNhc2UgQ09OU1RSQUlOVF9UWVBFX05VTEw6DQogCQkJew0KIAkJCQljb24tPmRh
dGEgPSBOVUxMOw0KQEAgLTgyNyw2ICs4NjAsMTA2IEBADQogCX0NCiB9DQogDQordm9pZCBl
dmFsdWF0ZV9yb3RsaW1pdHMgKE9iamVjdCAqb2IsIHNob3J0IHR5cGUsIHZvaWQgKm93bmVy
ZGF0YSwgYlJvdGF0aW9uTGltaXRDb25zdHJhaW50ICpkYXRhKSB7DQorCWZsb2F0CXJvdExp
bWl0c01pblszXTsNCisJZmxvYXQJcm90TGltaXRzTWF4WzNdOw0KKwlmbG9hdAlxdWF0TGlt
aXRzTWluWzRdOw0KKwlmbG9hdAlxdWF0TGltaXRzTWF4WzRdOw0KKwlmbG9hdAluZXdNYXRb
NF1bNF07DQorCWZsb2F0CXNpemVbM107DQorCWJQb3NlQ2hhbm5lbCAqY2hhbjsNCisJCQ0K
KwlpZiAodHlwZSA9PSBUQVJHRVRfQk9ORSAmJiBvd25lcmRhdGEpIHsNCisJCS8qIGhhbmRs
ZSBjb25zdHJhaW50cyBvbiBib25lcyBoZXJlICovDQorCQlCb25lICpjdXJib25lID0gKEJv
bmUqIClvd25lcmRhdGE7DQorCQkNCisJCWlmIChjdXJib25lKSB7DQorCQkJcHJpbnRmICgi
d2UgZW50ZXJlZCB0aGUgYm9uZSBzZWN0aW9uIFxuIik7DQorCQkJLyogcmV0cmlldmUgb3Vy
IGxpbWl0cyBmcm9tIHRoZSBjb25zdHJhaW50IGRhdGEgKi8NCisJCQlxdWF0TGltaXRzTWlu
WzBdID0gZGF0YS0+eHFtaW47DQorCQkJcXVhdExpbWl0c01pblsxXSA9IGRhdGEtPnlxbWlu
Ow0KKwkJCXF1YXRMaW1pdHNNaW5bMl0gPSBkYXRhLT56cW1pbjsNCisJCQlxdWF0TGltaXRz
TWluWzNdID0gZGF0YS0+d3FtaW47DQorCQkJDQorCQkJcXVhdExpbWl0c01heFswXSA9IGRh
dGEtPnhxbWF4Ow0KKwkJCXF1YXRMaW1pdHNNYXhbMV0gPSBkYXRhLT55cW1heDsNCisJCQlx
dWF0TGltaXRzTWF4WzJdID0gZGF0YS0+enFtYXg7DQorCQkJcXVhdExpbWl0c01heFszXSA9
IGRhdGEtPndxbWF4Ow0KKwkJCQ0KKwkJCS8qIGRvIG91ciBjb21wYXJpc29ucyBhbmQgYXBw
bHkgY29uc3RyYWludHMgKi8NCisJCQlpZiAoY3VyYm9uZS0+cXVhdFswXSA8IHF1YXRMaW1p
dHNNaW5bMF0pIA0KKwkJCQljdXJib25lLT5xdWF0WzBdID0gcXVhdExpbWl0c01pblswXTsN
CisJCQlpZiAoY3VyYm9uZS0+cXVhdFsxXSA8IHF1YXRMaW1pdHNNaW5bMV0pDQorCQkJCWN1
cmJvbmUtPnF1YXRbMV0gPSBxdWF0TGltaXRzTWluWzFdOw0KKwkJCWlmIChjdXJib25lLT5x
dWF0WzJdIDwgcXVhdExpbWl0c01pblsyXSkNCisJCQkJY3VyYm9uZS0+cXVhdFsyXSA9IHF1
YXRMaW1pdHNNaW5bMl07DQorCQkJaWYgKGN1cmJvbmUtPnF1YXRbM10gPCBxdWF0TGltaXRz
TWluWzNdKQ0KKwkJCQljdXJib25lLT5xdWF0WzNdID0gcXVhdExpbWl0c01pblszXTsNCisJ
CQkNCisJCQlpZiAoY3VyYm9uZS0+cXVhdFswXSA+IHF1YXRMaW1pdHNNYXhbMF0pDQorCQkJ
CWN1cmJvbmUtPnF1YXRbMF0gPSBxdWF0TGltaXRzTWF4WzBdOw0KKwkJCWlmIChjdXJib25l
LT5xdWF0WzFdID4gcXVhdExpbWl0c01heFsxXSkNCisJCQkJY3VyYm9uZS0+cXVhdFsxXSA9
IHF1YXRMaW1pdHNNYXhbMV07DQorCQkJaWYgKGN1cmJvbmUtPnF1YXRbMl0gPiBxdWF0TGlt
aXRzTWF4WzJdKQ0KKwkJCQljdXJib25lLT5xdWF0WzJdID0gcXVhdExpbWl0c01heFsyXTsN
CisJCQlpZiAoY3VyYm9uZS0+cXVhdFszXSA+IHF1YXRMaW1pdHNNYXhbM10pDQorCQkJCWN1
cmJvbmUtPnF1YXRbM10gPSBxdWF0TGltaXRzTWF4WzNdOw0KKwkJCQ0KKwkJCWlmIChHLm9i
cG9zZSkgeyAvKiByZXF1aXJlZCBjaGVjayBmb3Igd2hlbiByZWFkaW5nIGZyb20gZmlsZSBl
cnJvci4gKi8NCisJCQkJY2hhbiA9IE1FTV9jYWxsb2NOIChzaXplb2YgKGJQb3NlQ2hhbm5l
bCksICJ0cmFuc1Bvc2VDaGFubmVsIik7DQorCQkJCWNoYW4tPmZsYWcgfD0gUE9TRV9ST1Q7
DQorCQkJCW1lbWNweSAoY2hhbi0+cXVhdCwgY3VyYm9uZS0+cXVhdCwgc2l6ZW9mIChjaGFu
LT5xdWF0KSk7DQorCQkJCXN0cmNweSAoY2hhbi0+bmFtZSwgY3VyYm9uZS0+bmFtZSk7DQor
CQkJCWlmICghRy5vYnBvc2UtPnBvc2UpIEcub2Jwb3NlLT5wb3NlPSBNRU1fY2FsbG9jTihz
aXplb2YoYlBvc2UpLCAicG9zZSIpOw0KKwkJCQlzZXRfcG9zZV9jaGFubmVsIChHLm9icG9z
ZS0+cG9zZSwgY2hhbik7DQorCQkJfQ0KKwkJCQ0KKwkJCXByaW50ZiAoImN1cmJvbmUgWzBd
OiAlZiBbMV06ICVmIFsyXTogJWYgWzNdOiAlZiBcbiIsIGN1cmJvbmUtPnF1YXRbMF0sIGN1
cmJvbmUtPnF1YXRbMV0sIGN1cmJvbmUtPnF1YXRbMl0sIGN1cmJvbmUtPnF1YXRbM10pOw0K
KwkJCXByaW50ZiAoIm1pbiBbMF06ICVmIFsxXTogJWYgWzJdOiAlZiBbM106ICVmIFxuIiwg
cXVhdExpbWl0c01pblswXSwgcXVhdExpbWl0c01pblsxXSwgcXVhdExpbWl0c01pblsyXSwg
cXVhdExpbWl0c01pblszXSk7DQorCQkJcHJpbnRmICgibWF4IFswXTogJWYgWzFdOiAlZiBb
Ml06ICVmIFszXTogJWYgXG4iLCBxdWF0TGltaXRzTWF4WzBdLCBxdWF0TGltaXRzTWF4WzFd
LCBxdWF0TGltaXRzTWF4WzJdLCBxdWF0TGltaXRzTWF4WzNdKTsNCisJCQlwcmludGYgKCJv
dXIgYm9uZXMgbmFtZSBpczogJXMgXG4iLCBjdXJib25lLT5uYW1lKTsNCisJCX0NCisJCQkJ
CQ0KKwl9IGVsc2Ugew0KKwkJLyogaGFuZGxlIGNvbnN0cmFpbnRzIG9uIG9iamVjdHMgaGVy
ZSAqLw0KKwkJLyogcmV0cmlldmUgb3VyIGxpbWl0cyBmcm9tIHRoZSBjb25zdHJhaW50IGRh
dGEgKi8NCisJCS8qIGNvbnZlcnQgb3VyIGxpbWl0cyB0byB2YWx1ZXMgb2ItPnJvdCBjYW4N
CisJCSAqIHVuZGVyc3RhbmQgKi8NCisJCXJvdExpbWl0c01pblswXSA9IGRhdGEtPnhtaW4q
KGZsb2F0KShNX1BJLzE4MC4wKTsNCisJCXJvdExpbWl0c01pblsxXSA9IGRhdGEtPnltaW4q
KGZsb2F0KShNX1BJLzE4MC4wKTsNCisJCXJvdExpbWl0c01pblsyXSA9IGRhdGEtPnptaW4q
KGZsb2F0KShNX1BJLzE4MC4wKTsNCisJCQ0KKwkJcm90TGltaXRzTWF4WzBdID0gZGF0YS0+
eG1heCooZmxvYXQpKE1fUEkvMTgwLjApOw0KKwkJcm90TGltaXRzTWF4WzFdID0gZGF0YS0+
eW1heCooZmxvYXQpKE1fUEkvMTgwLjApOw0KKwkJcm90TGltaXRzTWF4WzJdID0gZGF0YS0+
em1heCooZmxvYXQpKE1fUEkvMTgwLjApOw0KKwkJDQorCQlpZiAob2ItPnJvdFswXSA8IHJv
dExpbWl0c01pblswXSkNCisJCQlvYi0+cm90WzBdID0gcm90TGltaXRzTWluWzBdOw0KKwkJ
aWYgKG9iLT5yb3RbMF0gPiByb3RMaW1pdHNNYXhbMF0pDQorCQkJb2ItPnJvdFswXSA9IHJv
dExpbWl0c01heFswXTsNCisJCQ0KKwkJaWYgKG9iLT5yb3RbMV0gPCByb3RMaW1pdHNNaW5b
MV0pDQorCQkJb2ItPnJvdFsxXSA9IHJvdExpbWl0c01pblsxXTsNCisJCWlmIChvYi0+cm90
WzFdID4gcm90TGltaXRzTWF4WzFdKQ0KKwkJCW9iLT5yb3RbMV0gPSByb3RMaW1pdHNNYXhb
MV07DQorCQkNCisJCWlmIChvYi0+cm90WzJdIDwgcm90TGltaXRzTWluWzJdKQ0KKwkJCW9i
LT5yb3RbMl0gPSByb3RMaW1pdHNNaW5bMl07DQorCQlpZiAob2ItPnJvdFsyXSA+IHJvdExp
bWl0c01heFsyXSkNCisJCQlvYi0+cm90WzJdID0gcm90TGltaXRzTWF4WzJdOw0KKwkJDQor
CX0NCisJDQorCS8qIGRlYnVnIHByaW50ZidzICovDQorCXByaW50ZiAoIm1pbmltdW0geCBy
b3RhdGlvbiBpcyA6ICVmIFxuIiwgcm90TGltaXRzTWluWzBdKTsJDQorCXByaW50ZiAoIm1p
bmltdW0geSByb3RhdGlvbiBpcyA6ICVmIFxuIiwgcm90TGltaXRzTWluWzFdKTsNCisJcHJp
bnRmICgibWluaW11bSB6IHJvdGF0aW9uIGlzIDogJWYgXG4iLCByb3RMaW1pdHNNaW5bMl0p
Ow0KKwkNCisJcHJpbnRmICgibWF4aW11bSB4IHJvdGF0aW9uIGlzIDogJWYgXG4iLCByb3RM
aW1pdHNNYXhbMF0pOwkNCisJcHJpbnRmICgibWF4aW11bSB5IHJvdGF0aW9uIGlzIDogJWYg
XG4iLCByb3RMaW1pdHNNYXhbMV0pOw0KKwlwcmludGYgKCJtYXhpbXVtIHogcm90YXRpb24g
aXMgOiAlZiBcbiIsIHJvdExpbWl0c01heFsyXSk7DQorfQ0KKw0KIHZvaWQgZXZhbHVhdGVf
Y29uc3RyYWludCAoYkNvbnN0cmFpbnQgKmNvbnN0cmFpbnQsIE9iamVjdCAqb2IsIHNob3J0
IG93bmVydHlwZSwgdm9pZCAqb3duZXJkYXRhLCBmbG9hdCB0YXJnZXRtYXRbXVs0XSkNCiAv
KiBvYiBpcyBsaWtlbHkgdG8gYmUgYSB3b3Jrb2IgKi8NCiB7DQpAQCAtODkwLDYgKzEwMjMs
MTQgQEANCiAJCW9iLT5vYm1hdFsyXVswXSA9IHRtYXRbMl1bMF0qc2l6ZVswXTsNCiAJCW9i
LT5vYm1hdFsyXVsxXSA9IHRtYXRbMl1bMV0qc2l6ZVsxXTsNCiAJCW9iLT5vYm1hdFsyXVsy
XSA9IHRtYXRbMl1bMl0qc2l6ZVsyXTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIENPTlNU
UkFJTlRfVFlQRV9ST1RMSU1JVDoNCisJCXsNCisJCQliUm90YXRpb25MaW1pdENvbnN0cmFp
bnQgKmRhdGE7DQorCQkJZGF0YSA9IGNvbnN0cmFpbnQtPmRhdGE7DQorCQkJDQorCQkJZXZh
bHVhdGVfcm90bGltaXRzKG9iLCBvd25lcnR5cGUsIG93bmVyZGF0YSwgZGF0YSk7DQogCQl9
DQogCQlicmVhazsNCiAJY2FzZSBDT05TVFJBSU5UX1RZUEVfTlVMTDoNCkluZGV4OiBzb3Vy
Y2UvYmxlbmRlci9ibGVubG9hZGVyL2ludGVybi9yZWFkZmlsZS5jDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3NvdXJjZS9ibGVuZGVy
L2JsZW5sb2FkZXIvaW50ZXJuL3JlYWRmaWxlLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx
LjU3DQpkaWZmIC11IC1yMS41NyByZWFkZmlsZS5jDQotLS0gc291cmNlL2JsZW5kZXIvYmxl
bmxvYWRlci9pbnRlcm4vcmVhZGZpbGUuYwkyOCBBcHIgMjAwNCAxODowODozMyAtMDAwMAkx
LjU3DQorKysgc291cmNlL2JsZW5kZXIvYmxlbmxvYWRlci9pbnRlcm4vcmVhZGZpbGUuYwk4
IE1heSAyMDA0IDAzOjIzOjI0IC0wMDAwDQpAQCAtMTIxOSw2ICsxMjE5LDEzIEBADQogCQkJ
CWRhdGEtPnRhciA9IG5ld2xpYmFkcihmZCwgaWQtPmxpYiwgZGF0YS0+dGFyKTsNCiAJCQl9
Ow0KIAkJCWJyZWFrOw0KKy8vCQljYXNlIENPTlNUUkFJTlRfVFlQRV9ST1RMSU1JVDoNCisv
LwkJCXsNCisvLwkJCQliUm90YXRpb25MaW1pdENvbnN0cmFpbnQgKmRhdGE7DQorLy8JCQkJ
ZGF0YT0oYlJvdGF0aW9uTGltaXRDb25zdHJhaW50Kiljb24tPmRhdGE7DQorLy8JCQkJDQor
Ly8JCQl9Ow0KKy8vCQkJYnJlYWs7DQogCQljYXNlIENPTlNUUkFJTlRfVFlQRV9LSU5FTUFU
SUM6DQogCQkJew0KIAkJCQliS2luZW1hdGljQ29uc3RyYWludCAqZGF0YTsNCkBAIC00NTYw
LDYgKzQ1NjcsMTEgQEANCiAJCQkJZXhwYW5kX2RvaXQoZmQsIG1haW52YXIsIGRhdGEtPnRh
cik7DQogCQkJCWJyZWFrOw0KIAkJCX0NCisvLwkJY2FzZSBDT05TVFJBSU5UX1RZUEVfUk9U
TElNSVQ6DQorLy8JCQl7DQorLy8JCQkJYlJvdGF0aW9uTGltaXRDb25zdHJhaW50ICpkYXRh
ID0gKGJSb3RhdGlvbkxpbWl0Q29uc3RyYWludCopY3VyY29uLT5kYXRhOw0KKy8vCQkJCWJy
ZWFrOw0KKy8vCQkJfQ0KIAkJY2FzZSBDT05TVFJBSU5UX1RZUEVfS0lORU1BVElDOg0KIAkJ
CXsNCiAJCQkJYktpbmVtYXRpY0NvbnN0cmFpbnQgKmRhdGEgPSAoYktpbmVtYXRpY0NvbnN0
cmFpbnQqKWN1cmNvbi0+ZGF0YTsNCkluZGV4OiBzb3VyY2UvYmxlbmRlci9ibGVubG9hZGVy
L2ludGVybi93cml0ZWZpbGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290
L2JmLWJsZW5kZXIvYmxlbmRlci9zb3VyY2UvYmxlbmRlci9ibGVubG9hZGVyL2ludGVybi93
cml0ZWZpbGUuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkNCmRpZmYgLXUgLXIxLjE5
IHdyaXRlZmlsZS5jDQotLS0gc291cmNlL2JsZW5kZXIvYmxlbmxvYWRlci9pbnRlcm4vd3Jp
dGVmaWxlLmMJMjAgQXByIDIwMDQgMTk6MTI6NDggLTAwMDAJMS4xOQ0KKysrIHNvdXJjZS9i
bGVuZGVyL2JsZW5sb2FkZXIvaW50ZXJuL3dyaXRlZmlsZS5jCTggTWF5IDIwMDQgMDM6MjM6
MzAgLTAwMDANCkBAIC01NzAsNiArNTcwLDkgQEANCiAJCWNhc2UgQ09OU1RSQUlOVF9UWVBF
X1JPVExJS0U6DQogCQkJd3JpdGVzdHJ1Y3Qod2QsIERBVEEsICJiUm90YXRlTGlrZUNvbnN0
cmFpbnQiLCAxLCBjb24tPmRhdGEpOw0KIAkJCWJyZWFrOw0KKwkJY2FzZSBDT05TVFJBSU5U
X1RZUEVfUk9UTElNSVQ6DQorCQkJd3JpdGVzdHJ1Y3Qod2QsIERBVEEsICJiUm90YXRpb25M
aW1pdENvbnN0cmFpbnQiLCAxLCBjb24tPmRhdGEpOw0KKwkJCWJyZWFrOw0KIAkJY2FzZSBD
T05TVFJBSU5UX1RZUEVfTE9DTElLRToNCiAJCQl3cml0ZXN0cnVjdCh3ZCwgREFUQSwgImJM
b2NhdGVMaWtlQ29uc3RyYWludCIsIDEsIGNvbi0+ZGF0YSk7DQogCQkJYnJlYWs7DQpJbmRl
eDogc291cmNlL2JsZW5kZXIvaW5jbHVkZS9idXRzcGFjZS5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS
Q1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3NvdXJjZS9ibGVuZGVyL2lu
Y2x1ZGUvYnV0c3BhY2UuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjENCmRpZmYgLXUg
LXIxLjIxIGJ1dHNwYWNlLmgNCi0tLSBzb3VyY2UvYmxlbmRlci9pbmNsdWRlL2J1dHNwYWNl
LmgJNiBBcHIgMjAwNCAxOToxNjoxNCAtMDAwMAkxLjIxDQorKysgc291cmNlL2JsZW5kZXIv
aW5jbHVkZS9idXRzcGFjZS5oCTggTWF5IDIwMDQgMDM6MjM6MzMgLTAwMDANCkBAIC01MTQs
MjAgKzUxNCwyMSBAQA0KICNkZWZpbmUgQl9DT05TVFJBSU5UQlVUUwkzMzAwDQogZW51bSB7
DQogCUJfQ09OU1RSQUlOVF9SRURSQVcgPSAzMjAxLA0KLQlCX0NPTlNUUkFJTlRfREVMLA0K
LQlCX0NPTlNUUkFJTlRfVEVTVCwNCi0JQl9DT05TVFJBSU5UX0NIQU5HRVRZUEUsDQotCUJf
Q09OU1RSQUlOVF9DSEFOR0VOQU1FLA0KLQlCX0NPTlNUUkFJTlRfQ0hBTkdFVEFSR0VULA0K
LQlCX0NPTlNUUkFJTlRfQUREX05VTEwsDQotCUJfQ09OU1RSQUlOVF9BRERfS0lORU1BVElD
LA0KLQlCX0NPTlNUUkFJTlRfQUREX1RSQUNLVE8sDQotCUJfQ09OU1RSQUlOVF9BRERfUk9U
TElLRSwNCi0JQl9DT05TVFJBSU5UX0FERF9MT0NMSUtFLA0KLQlCX0NPTlNUUkFJTlRfQURE
X0FDVElPTiwNCi0JQl9DT05TVFJBSU5UX0FERF9MT0NLVFJBQ0ssDQotCUJfQ09OU1RSQUlO
VF9BRERfRk9MTE9XUEFUSCwNCi0JQl9DT05TVFJBSU5UX0FERF9ESVNUQU5DRUxJTUlUDQor
CUJfQ09OU1RSQUlOVF9ERUwsIC8qMzIwMiAqLw0KKwlCX0NPTlNUUkFJTlRfVEVTVCwgLyoz
MjAzICovDQorCUJfQ09OU1RSQUlOVF9DSEFOR0VUWVBFLCAvKjMyMDQgKi8NCisJQl9DT05T
VFJBSU5UX0NIQU5HRU5BTUUsIC8qMzIwNSAqLw0KKwlCX0NPTlNUUkFJTlRfQ0hBTkdFVEFS
R0VULCAvKjMyMDYgKi8NCisJQl9DT05TVFJBSU5UX0FERF9OVUxMLCAvKjMyMDcgKi8NCisJ
Ql9DT05TVFJBSU5UX0FERF9LSU5FTUFUSUMsIC8qMzIwOCAqLw0KKwlCX0NPTlNUUkFJTlRf
QUREX1RSQUNLVE8sIC8qMzIwOSAqLw0KKwlCX0NPTlNUUkFJTlRfQUREX1JPVExJS0UsIC8q
MzIxMCAqLw0KKwlCX0NPTlNUUkFJTlRfQUREX0xPQ0xJS0UsIC8qMzIxMSAqLw0KKwlCX0NP
TlNUUkFJTlRfQUREX0FDVElPTiwgLyozMjEyICovDQorCUJfQ09OU1RSQUlOVF9BRERfTE9D
S1RSQUNLLCAvKjMyMTMgKi8NCisJQl9DT05TVFJBSU5UX0FERF9GT0xMT1dQQVRILCAvKjMy
MTQgKi8NCisJQl9DT05TVFJBSU5UX0FERF9ESVNUQU5DRUxJTUlULCAvKjMyMTUgKi8NCisJ
Ql9DT05TVFJBSU5UX0FERF9ST1RMSU1JVCAvKjMyMTYgKi8NCiB9Ow0KIA0KIC8qICoqKioq
KioqKioqKioqKioqKioqKioqICovDQpJbmRleDogc291cmNlL2JsZW5kZXIvbWFrZXNkbmEv
RE5BX2NvbnN0cmFpbnRfdHlwZXMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNy
b290L2JmLWJsZW5kZXIvYmxlbmRlci9zb3VyY2UvYmxlbmRlci9tYWtlc2RuYS9ETkFfY29u
c3RyYWludF90eXBlcy5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44DQpkaWZmIC11IC1y
MS44IEROQV9jb25zdHJhaW50X3R5cGVzLmgNCi0tLSBzb3VyY2UvYmxlbmRlci9tYWtlc2Ru
YS9ETkFfY29uc3RyYWludF90eXBlcy5oCTIyIE1hciAyMDA0IDIyOjAxOjIxIC0wMDAwCTEu
OA0KKysrIHNvdXJjZS9ibGVuZGVyL21ha2VzZG5hL0ROQV9jb25zdHJhaW50X3R5cGVzLmgJ
OCBNYXkgMjAwNCAwMzoyMzozNCAtMDAwMA0KQEAgLTEzOCwxMSArMTM4LDE2IEBADQogDQog
DQogLyogWmVyby10YXJnZXQgY29uc3RyYWludHMgKi8NCi10eXBlZGVmIHN0cnVjdCBiUm90
YXRpb25Db25zdHJhaW50ew0KK3R5cGVkZWYgc3RydWN0IGJSb3RhdGlvbkxpbWl0Q29uc3Ry
YWludHsNCiAJZmxvYXQgeG1pbiwgeG1heDsNCiAJZmxvYXQgeW1pbiwgeW1heDsNCiAJZmxv
YXQgem1pbiwgem1heDsNCi19IGJSb3RhdGlvbkNvbnN0cmFpbnQ7DQorCQ0KKwlmbG9hdCB4
cW1pbiwgeHFtYXg7DQorCWZsb2F0IHlxbWluLCB5cW1heDsNCisJZmxvYXQgenFtaW4sIHpx
bWF4Ow0KKwlmbG9hdCB3cW1pbiwgd3FtYXg7DQorfSBiUm90YXRpb25MaW1pdENvbnN0cmFp
bnQ7DQogDQogDQogDQpJbmRleDogc291cmNlL2JsZW5kZXIvc3JjL2J1dHRvbnNfb2JqZWN0
LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3Zzcm9vdC9iZi1ibGVuZGVyL2JsZW5k
ZXIvc291cmNlL2JsZW5kZXIvc3JjL2J1dHRvbnNfb2JqZWN0LmMsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjI4DQpkaWZmIC11IC1yMS4yOCBidXR0b25zX29iamVjdC5jDQotLS0gc291
cmNlL2JsZW5kZXIvc3JjL2J1dHRvbnNfb2JqZWN0LmMJMTYgQXByIDIwMDQgMDY6MDc6MDkg
LTAwMDAJMS4yOA0KKysrIHNvdXJjZS9ibGVuZGVyL3NyYy9idXR0b25zX29iamVjdC5jCTgg
TWF5IDIwMDQgMDM6MjM6NDQgLTAwMDANCkBAIC0yNzgsNiArMjc4LDkgQEANCiAJY2FzZSBD
T05TVFJBSU5UX1RZUEVfUk9UTElLRToNCiAJCXN0cmNweSAoc3RyLCAiQ29weSBSb3RhdGlv
biIpOw0KIAkJcmV0dXJuOw0KKwljYXNlIENPTlNUUkFJTlRfVFlQRV9ST1RMSU1JVDoNCisJ
CXN0cmNweSAoc3RyLCAiTGltaXQgUm90YXRpb24iKTsNCisJCXJldHVybjsNCiAJY2FzZSBD
T05TVFJBSU5UX1RZUEVfTE9DTElLRToNCiAJCXN0cmNweSAoc3RyLCAiQ29weSBMb2NhdGlv
biIpOw0KIAkJcmV0dXJuOw0KQEAgLTMwNyw2ICszMTAsOCBAQA0KIAkJcmV0dXJuIFRIX0JV
VF9TRVRUSU5HOw0KIAljYXNlIENPTlNUUkFJTlRfVFlQRV9ST1RMSUtFOg0KIAkJcmV0dXJu
IFRIX0JVVF9TRVRUSU5HMTsNCisJY2FzZSBDT05TVFJBSU5UX1RZUEVfUk9UTElNSVQ6DQor
CQlyZXR1cm4gVEhfQlVUX1NFVFRJTkcxOw0KIAljYXNlIENPTlNUUkFJTlRfVFlQRV9MT0NM
SUtFOg0KIAkJcmV0dXJuIFRIX0JVVF9QT1BVUDsNCiAJY2FzZSBDT05TVFJBSU5UX1RZUEVf
QUNUSU9OOg0KQEAgLTUwMCw2ICs1MDUsNjQgQEANCiAJCQkJdWlCbG9ja0VuZEFsaWduKGJs
b2NrKTsNCiAJCQl9DQogCQkJYnJlYWs7DQorCQljYXNlIENPTlNUUkFJTlRfVFlQRV9ST1RM
SU1JVDoNCisJCQl7DQorCQkJCXNob3J0IG9iamVjdFR5cGU7DQorCQkJCXZvaWQgKm9iamVj
dERhdGE9TlVMTDsNCisJCQkJYlJvdGF0aW9uTGltaXRDb25zdHJhaW50ICpkYXRhID0gY29u
LT5kYXRhOw0KKwkJCQkNCisJCQkJLypmaW5kIG91dCB3aGV0aGVyIGl0cyBmb3IgYSBib25l
IG9yIG5vdA0KKwkJCQkgKiB3ZSB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50IEdVSSBmb3Ig
DQorCQkJCSAqIEJvbmVzIHRvIHJlcHJlc2VudCBxdWF0ZXJuaW9uIGxpbWl0cw0KKwkJCQkg
KiBpbnN0ZWFkIG9mIEV1bGVyIGxpa2UgZm9yIE9iamVjdCBDb25zdHJhaW50cyAqLw0KKwkJ
CQkNCisJCQkJZ2V0X2NvbnN0cmFpbnRfY2xpZW50KE5VTEwsICZvYmplY3RUeXBlLCAmb2Jq
ZWN0RGF0YSk7DQorCQkJCQ0KKwkJCQlpZiAob2JqZWN0RGF0YSAmJiBvYmplY3RUeXBlPT1U
QVJHRVRfQk9ORSl7DQorCQkJCQloZWlnaHQgPSAyMjU7DQorCQkJCQkNCisJCQkJCUJJRl9U
aGVtZUNvbG9yKGN1ckNvbCk7DQorCQkJCQlnbFJlY3RzKCp4Y28rMywgKnljby1oZWlnaHQt
MzksICp4Y28rd2lkdGgrMzAsICp5Y28tMTgpOw0KKwkJCQkJDQorCQkJCQkvKiBUaGUgeCBx
dWF0IHJvdGF0aW9uIGxpbWl0cyAqLw0KKwkJCQkJdWlEZWZCdXRGKGJsb2NrLCBOVU0sIEJf
Q09OU1RSQUlOVF9SRURSQVcsICJNaW5YOiIsICp4Y28rNSwgKnljby00NCwgMTEzLCAxOCwg
JmRhdGEtPnhxbWluLCAtMTAwLCAxMDAsIDAsIDAsICJMb3dlciBsaW1pdCBmb3Igcm90YXRp
b24gb24gWCBheGlzIik7DQorCQkJCQl1aURlZkJ1dEYoYmxvY2ssIE5VTSwgQl9DT05TVFJB
SU5UX1JFRFJBVywgIk1heFg6IiwgKnhjbys1LCAqeWNvLTY0LCAxMTMsIDE4LCAmZGF0YS0+
eHFtYXgsIC0xMDAsIDEwMCwgMCwgMCwgIlVwcGVyIGxpbWl0IGZvciByb3RhdGlvbiBvbiBY
IGF4aXMiKTsNCisJCQkJCQ0KKwkJCQkJLyogVGhlIHkgcXVhdCByb3RhdGlvbiBsaW1pdHMg
Ki8NCisJCQkJCXVpRGVmQnV0RihibG9jaywgTlVNLCBCX0NPTlNUUkFJTlRfUkVEUkFXLCAi
TWluWToiLCAqeGNvKzUsICp5Y28tODksIDExMywgMTgsICZkYXRhLT55cW1pbiwgLTEwMCwg
MTAwLCAwLCAwLCAiTG93ZXIgbGltaXQgZm9yIHJvdGF0aW9uIG9uIFkgYXhpcyIpOw0KKwkJ
CQkJdWlEZWZCdXRGKGJsb2NrLCBOVU0sIEJfQ09OU1RSQUlOVF9SRURSQVcsICJNYXhZOiIs
ICp4Y28rNSwgKnljby0xMDksIDExMywgMTgsICZkYXRhLT55cW1heCwgLTEwMCwgMTAwLCAw
LCAwLCAiVXBwZXIgbGltaXQgZm9yIHJvdGF0aW9uIG9uIFkgYXhpcyIpOw0KKwkJCQkJDQor
CQkJCQkvKiBUaGUgeiBxdWF0IHJvdGF0aW9uIGxpbWl0cyAqLw0KKwkJCQkJdWlEZWZCdXRG
KGJsb2NrLCBOVU0sIEJfQ09OU1RSQUlOVF9SRURSQVcsICJNaW5aOiIsICp4Y28rNSwgKnlj
by0xMzQsIDExMywgMTgsICZkYXRhLT56cW1pbiwgLTEwMCwgMTAwLCAwLCAwLCAiTG93ZXIg
bGltaXQgZm9yIHJvdGF0aW9uIG9uIFogYXhpcyIpOw0KKwkJCQkJdWlEZWZCdXRGKGJsb2Nr
LCBOVU0sIEJfQ09OU1RSQUlOVF9SRURSQVcsICJNYXhaOiIsICp4Y28rNSwgKnljby0xNTQs
IDExMywgMTgsICZkYXRhLT56cW1heCwgLTEwMCwgMTAwLCAwLCAwLCAiVXBwZXIgbGltaXQg
Zm9yIHJvdGF0aW9uIG9uIFogYXhpcyIpOw0KKwkJCQkJDQorCQkJCQkvKiBUaGUgdyBxdWF0
IHJvdGF0aW9uIGxpbWl0cyAqLw0KKwkJCQkJdWlEZWZCdXRGKGJsb2NrLCBOVU0sIEJfQ09O
U1RSQUlOVF9SRURSQVcsICJNaW5XOiIsICp4Y28rNSwgKnljby0xNzksIDExMywgMTgsICZk
YXRhLT53cW1pbiwgLTEwMCwgMTAwLCAwLCAwLCAiTG93ZXIgbGltaXQgZm9yIHJvdGF0aW9u
IG9uIFkgYXhpcyIpOw0KKwkJCQkJdWlEZWZCdXRGKGJsb2NrLCBOVU0sIEJfQ09OU1RSQUlO
VF9SRURSQVcsICJNYXhXOiIsICp4Y28rNSwgKnljby0xOTksIDExMywgMTgsICZkYXRhLT53
cW1heCwgLTEwMCwgMTAwLCAwLCAwLCAiVXBwZXIgbGltaXQgZm9yIHJvdGF0aW9uIG9uIFkg
YXhpcyIpOw0KKwkJCQkJDQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCQloZWlnaHQgPSAx
NjU7DQorCQkJCQ0KKwkJCQlCSUZfVGhlbWVDb2xvcihjdXJDb2wpOw0KKwkJCQlnbFJlY3Rz
KCp4Y28rMywgKnljby1oZWlnaHQtMzksICp4Y28rd2lkdGgrMzAsICp5Y28tMTgpOw0KKwkJ
CQkJDQorCQkJCS8qIFRoZSB4IHJvdGF0aW9uIGxpbWl0cyAqLw0KKwkJCQl1aURlZkJ1dEYo
YmxvY2ssIE5VTSwgQl9DT05TVFJBSU5UX1JFRFJBVywgIk1pblg6IiwgKnhjbys1LCAqeWNv
LTQ0LCAxMTMsIDE4LCAmZGF0YS0+eG1pbiwgMCwgMzYwLCAwLCAwLCAiTG93ZXIgbGltaXQg
Zm9yIHJvdGF0aW9uIG9uIFggYXhpcyIpOw0KKwkJCQl1aURlZkJ1dEYoYmxvY2ssIE5VTSwg
Ql9DT05TVFJBSU5UX1JFRFJBVywgIk1heFg6IiwgKnhjbys1LCAqeWNvLTY0LCAxMTMsIDE4
LCAmZGF0YS0+eG1heCwgMCwgMzYwLCAwLCAwLCAiVXBwZXIgbGltaXQgZm9yIHJvdGF0aW9u
IG9uIFggYXhpcyIpOw0KKwkJCQkNCisJCQkNCisJCQkJLyogVGhlIHkgcm90YXRpb24gbGlt
aXRzICovDQorCQkJCXVpRGVmQnV0RihibG9jaywgTlVNLCBCX0NPTlNUUkFJTlRfUkVEUkFX
LCAiTWluWToiLCAqeGNvKzUsICp5Y28tODksIDExMywgMTgsICZkYXRhLT55bWluLCAwLCAz
NjAsIDAsIDAsICJMb3dlciBsaW1pdCBmb3Igcm90YXRpb24gb24gWSBheGlzIik7DQorCQkJ
CXVpRGVmQnV0RihibG9jaywgTlVNLCBCX0NPTlNUUkFJTlRfUkVEUkFXLCAiTWF4WToiLCAq
eGNvKzUsICp5Y28tMTA5LCAxMTMsIDE4LCAmZGF0YS0+eW1heCwgMCwgMzYwLCAwLCAwLCAi
VXBwZXIgbGltaXQgZm9yIHJvdGF0aW9uIG9uIFkgYXhpcyIpOw0KKwkJCQkNCisJCQkJDQor
CQkJCS8qIFRoZSB6IHJvdGF0aW9uIGxpbWl0cyAqLw0KKwkJCQl1aURlZkJ1dEYoYmxvY2ss
IE5VTSwgQl9DT05TVFJBSU5UX1JFRFJBVywgIk1pblo6IiwgKnhjbys1LCAqeWNvLTEzNCwg
MTEzLCAxOCwgJmRhdGEtPnptaW4sIDAsIDM2MCwgMCwgMCwgIkxvd2VyIGxpbWl0IGZvciBy
b3RhdGlvbiBvbiBaIGF4aXMiKTsNCisJCQkJdWlEZWZCdXRGKGJsb2NrLCBOVU0sIEJfQ09O
U1RSQUlOVF9SRURSQVcsICJNYXhaOiIsICp4Y28rNSwgKnljby0xNTQsIDExMywgMTgsICZk
YXRhLT56bWF4LCAwLCAzNjAsIDAsIDAsICJVcHBlciBsaW1pdCBmb3Igcm90YXRpb24gb24g
WiBheGlzIik7DQorCQkJCQ0KKwkJCX0NCisJCQlicmVhazsNCiAJCWNhc2UgQ09OU1RSQUlO
VF9UWVBFX0tJTkVNQVRJQzoNCiAJCQl7DQogCQkJCWJLaW5lbWF0aWNDb25zdHJhaW50ICpk
YXRhID0gY29uLT5kYXRhOw0KQEAgLTcwNCw2ICs3NjcsNyBAQA0KIA0KIAl1aURlZkJ1dChi
bG9jaywgQlVUTSwgQl9DT05TVFJBSU5UX0FERF9MT0NMSUtFLCJDb3B5IExvY2F0aW9uIiwJ
CTAsIHljby09MjAsIDE2MCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCAwLCAiIik7DQogCXVp
RGVmQnV0KGJsb2NrLCBCVVRNLCBCX0NPTlNUUkFJTlRfQUREX1JPVExJS0UsIkNvcHkgUm90
YXRpb24iLAkJMCwgeWNvLT0yMCwgMTYwLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDEsIDAsICIi
KTsNCisJdWlEZWZCdXQoYmxvY2ssIEJVVE0sIEJfQ09OU1RSQUlOVF9BRERfUk9UTElNSVQs
IkxpbWl0IFJvdGF0aW9uIiwJCTAsIHljby09MjAsIDE2MCwgMTksIE5VTEwsIDAuMCwgMC4w
LCAxLCAwLCAiTGltaXQgdGhlIHRoZSB0aHJlZSBheGVzIG9mIFJvdGF0aW9uIGZvciBvdXIg
b2JqZWN0Iik7DQogCQ0KIAl1aURlZkJ1dChibG9jaywgU0VQUiwgMCwgIiIsCQkJCQkwLCB5
Y28tPTYsIDEyMCwgNiwgTlVMTCwgMC4wLCAwLjAsIDAsIDAsICIiKTsNCiAJDQpAQCAtNzMz
LDI5ICs3OTcsMjkgQEANCiB2b2lkIGRvX2NvbnN0cmFpbnRidXRzKHVuc2lnbmVkIHNob3J0
IGV2ZW50KQ0KIHsNCiAJc3dpdGNoKGV2ZW50KSB7DQotCWNhc2UgQl9DT05TVFJBSU5UX0NI
QU5HRU5BTUU6DQorCWNhc2UgQl9DT05TVFJBSU5UX0NIQU5HRU5BTUU6LyozMjA1ICovDQog
CQlicmVhazsNCi0JY2FzZSBCX0NPTlNUUkFJTlRfVEVTVDoNCisJY2FzZSBCX0NPTlNUUkFJ
TlRfVEVTVDogLyozMjAzICovDQogCQl0ZXN0X3NjZW5lX2NvbnN0cmFpbnRzKCk7DQogCQlh
bGxxdWV1ZSAoUkVEUkFXVklFVzNELCAwKTsNCiAJCWFsbHF1ZXVlIChSRURSQVdCVVRTT0JK
RUNULCAwKTsNCiAJCWJyZWFrOw0KLQljYXNlIEJfQ09OU1RSQUlOVF9SRURSQVc6DQorCWNh
c2UgQl9DT05TVFJBSU5UX1JFRFJBVzogLyozMjAxICovDQogCQl0ZXN0X3NjZW5lX2NvbnN0
cmFpbnRzKCk7DQogCQlhbGxxdWV1ZSAoUkVEUkFXVklFVzNELCAwKTsNCiAJCWFsbHF1ZXVl
IChSRURSQVdCVVRTT0JKRUNULCAwKTsNCiAJCWJyZWFrOw0KLQljYXNlIEJfQ09OU1RSQUlO
VF9DSEFOR0VUQVJHRVQ6DQorCWNhc2UgQl9DT05TVFJBSU5UX0NIQU5HRVRBUkdFVDogLyoz
MjA2ICovDQogCQl0ZXN0X3NjZW5lX2NvbnN0cmFpbnRzKCk7DQogCQlhbGxxdWV1ZSAoUkVE
UkFXVklFVzNELCAwKTsNCiAJCWFsbHF1ZXVlIChSRURSQVdCVVRTT0JKRUNULCAwKTsNCiAJ
CWJyZWFrOw0KLQljYXNlIEJfQ09OU1RSQUlOVF9DSEFOR0VUWVBFOg0KKwljYXNlIEJfQ09O
U1RSQUlOVF9DSEFOR0VUWVBFOiAvKjMyMDQgKi8NCiAJCXRlc3Rfc2NlbmVfY29uc3RyYWlu
dHMoKTsNCiAJCWFsbHF1ZXVlIChSRURSQVdWSUVXM0QsIDApOw0KIAkJYWxscXVldWUgKFJF
RFJBV0JVVFNPQkpFQ1QsIDApOw0KIAkJYnJlYWs7DQotCWNhc2UgQl9DT05TVFJBSU5UX0FE
RF9OVUxMOg0KKwljYXNlIEJfQ09OU1RSQUlOVF9BRERfTlVMTDogLyozMjA3ICovDQogCQl7
DQogCQkJYkNvbnN0cmFpbnQgKmNvbjsNCiAJCQkNCkBAIC03NjcsNyArODMxLDcgQEANCiAJ
CQlhbGxxdWV1ZSAoUkVEUkFXQlVUU09CSkVDVCwgMCk7DQogCQl9DQogCQlicmVhazsNCi0J
Y2FzZSBCX0NPTlNUUkFJTlRfQUREX0tJTkVNQVRJQzoNCisJY2FzZSBCX0NPTlNUUkFJTlRf
QUREX0tJTkVNQVRJQzogLyozMjA4ICovDQogCQl7DQogCQkJYkNvbnN0cmFpbnQgKmNvbjsN
CiAJCQkNCkBAIC03NzksNyArODQzLDcgQEANCiAJCQlhbGxxdWV1ZSAoUkVEUkFXQlVUU09C
SkVDVCwgMCk7DQogCQl9DQogCQlicmVhazsNCi0JY2FzZSBCX0NPTlNUUkFJTlRfQUREX1RS
QUNLVE86DQorCWNhc2UgQl9DT05TVFJBSU5UX0FERF9UUkFDS1RPOiAvKjMyMDkgKi8NCiAJ
CXsNCiAJCQliQ29uc3RyYWludCAqY29uOw0KIA0KQEAgLTc5MSw3ICs4NTUsNyBAQA0KIAkJ
CWFsbHF1ZXVlIChSRURSQVdCVVRTT0JKRUNULCAwKTsNCiAJCX0NCiAJCWJyZWFrOw0KLQlj
YXNlIEJfQ09OU1RSQUlOVF9BRERfUk9UTElLRToNCisJY2FzZSBCX0NPTlNUUkFJTlRfQURE
X1JPVExJS0U6IC8qMzIxMCAqLw0KIAkJew0KIAkJCWJDb25zdHJhaW50ICpjb247DQogDQpA
QCAtODAzLDcgKzg2Nyw3IEBADQogCQkJYWxscXVldWUgKFJFRFJBV0JVVFNPQkpFQ1QsIDAp
Ow0KIAkJfQ0KIAkJYnJlYWs7DQotCWNhc2UgQl9DT05TVFJBSU5UX0FERF9MT0NMSUtFOg0K
KwljYXNlIEJfQ09OU1RSQUlOVF9BRERfTE9DTElLRTogLyozMjExICovDQogCQl7DQogCQkJ
YkNvbnN0cmFpbnQgKmNvbjsNCiANCkBAIC04MTUsNyArODc5LDcgQEANCiAJCQlhbGxxdWV1
ZSAoUkVEUkFXQlVUU09CSkVDVCwgMCk7DQogCQl9DQogCQlicmVhazsNCi0JY2FzZSBCX0NP
TlNUUkFJTlRfQUREX0FDVElPTjoNCisJY2FzZSBCX0NPTlNUUkFJTlRfQUREX0FDVElPTjog
LyozMjEyICovDQogCQl7DQogCQkJYkNvbnN0cmFpbnQgKmNvbjsNCiANCkBAIC04MjcsNyAr
ODkxLDcgQEANCiAJCQlhbGxxdWV1ZSAoUkVEUkFXQlVUU09CSkVDVCwgMCk7DQogCQl9DQog
CQlicmVhazsNCi0JY2FzZSBCX0NPTlNUUkFJTlRfQUREX0xPQ0tUUkFDSzoNCisJY2FzZSBC
X0NPTlNUUkFJTlRfQUREX0xPQ0tUUkFDSzogLyozMjEzICovDQogCQl7DQogCQkJYkNvbnN0
cmFpbnQgKmNvbjsNCiANCkBAIC04MzksNyArOTAzLDcgQEANCiAJCQlhbGxxdWV1ZSAoUkVE
UkFXQlVUU09CSkVDVCwgMCk7DQogCQl9DQogCQlicmVhazsNCi0JY2FzZSBCX0NPTlNUUkFJ
TlRfQUREX0ZPTExPV1BBVEg6DQorCWNhc2UgQl9DT05TVFJBSU5UX0FERF9GT0xMT1dQQVRI
OiAvKjMyMTQgKi8NCiAJCXsNCiAJCQliQ29uc3RyYWludCAqY29uOw0KIA0KQEAgLTg1MSwx
MCArOTE1LDIyIEBADQogCQkJYWxscXVldWUgKFJFRFJBV0JVVFNPQkpFQ1QsIDApOw0KIAkJ
fQ0KIAkJYnJlYWs7DQotCWNhc2UgQl9DT05TVFJBSU5UX0RFTDoNCisJY2FzZSBCX0NPTlNU
UkFJTlRfREVMOiAvKjMyMDIgKi8NCiAJCXRlc3Rfc2NlbmVfY29uc3RyYWludHMoKTsNCiAJ
CWFsbHF1ZXVlIChSRURSQVdWSUVXM0QsIDApOw0KIAkJYWxscXVldWUgKFJFRFJBV0JVVFNP
QkpFQ1QsIDApOw0KKwkJYnJlYWs7DQorCWNhc2UgQl9DT05TVFJBSU5UX0FERF9ST1RMSU1J
VDogLyozMjE2ICovDQorCQl7DQorCQkJYkNvbnN0cmFpbnQgKmNvbjsNCisNCisJCQljb24g
PSBhZGRfbmV3X2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UWVBFX1JPVExJTUlUKTsNCisJCQlh
ZGRfY29uc3RyYWludF90b19jbGllbnQoY29uKTsNCisNCisJCQl0ZXN0X3NjZW5lX2NvbnN0
cmFpbnRzKCk7DQorCQkJYWxscXVldWUgKFJFRFJBV1ZJRVczRCwgMCk7DQorCQkJYWxscXVl
dWUgKFJFRFJBV0JVVFNPQkpFQ1QsIDApOw0KKwkJfQ0KIAkJYnJlYWs7DQogCWRlZmF1bHQ6
DQogCQlicmVhazsNCg==

--Message-Boundary-27507--