[Bf-committers] My first oops patch

bf-committers@blender.org bf-committers@blender.org
Sat, 17 Apr 2004 22:30:14 -0500


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

This patch affects 4 files. BIF_oops.h, DNA_space_types.h, oops.c, 
header_oops.c.

It adds a viewtype to the spaceoops which hides unselected oops from 
view in the schematic. Only minimal functionality is implemented so 
this is certainly not to be considered a finished feature. I'm 
sending it out so anyone who wants to can see what I'm thinking as I 
go and give feedback. among the things **missing** elements are:

-automatic positioning of blocks while in dynamic selection mode.

-turn off oops_to_select_blocks functionality while in dynamic 
selection mode (it plays havoc with attempts to reposition linked 
blocks in the schematic)

-auto centering and zooming the schematic of the selected blocks for 
the best view.

Let me know if you have any comments and/or ideas.

Jeremy aka Zaphar_ps
Marzhill Studios, Inc. 
www.marzhillstudios.com

--Message-Boundary-17805
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:  patch.txt
     Date:  17 Apr 2004, 22:19
     Size:  26007 bytes.
     Type:  Text

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

SW5kZXg6IHNvdXJjZS9ibGVuZGVyL2luY2x1ZGUvQklGX29vcHMuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9jdnNyb290L2JmLWJsZW5kZXIvYmxlbmRlci9zb3VyY2UvYmxlbmRl
ci9pbmNsdWRlL0JJRl9vb3BzLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjUNCmRpZmYg
LXUgLXIxLjUgQklGX29vcHMuaA0KLS0tIHNvdXJjZS9ibGVuZGVyL2luY2x1ZGUvQklGX29v
cHMuaAkyNyBEZWMgMjAwMiAxMzoxMDoyMCAtMDAwMAkxLjUNCisrKyBzb3VyY2UvYmxlbmRl
ci9pbmNsdWRlL0JJRl9vb3BzLmgJMTggQXByIDIwMDQgMDM6MjE6MDcgLTAwMDANCkBAIC01
Myw3ICs1Myw3IEBADQogdm9pZCBhZGRfdGV4dHVyZV9vb3BzKHN0cnVjdCBNYXRlcmlhbCAq
bWEpOw0KIHZvaWQgYnVpbGRfb29wcyh2b2lkKTsNCiBzdHJ1Y3QgT29wcyAqZmluZF9vb3Bz
KElEICppZCk7DQotdm9pZCBmcmVlX29vcHMoc3RydWN0IE9vcHMgKm9vcHMpOwkvKiBvb2sg
b29wcyB6ZWxmICovDQordm9pZCBmcmVlX29vcHMoc3RydWN0IE9vcHMgKm9vcHMsIHN0cnVj
dCBTcGFjZU9vcHMgKnNvKTsJLyogb29rIG9vcHMgemVsZiAqLw0KIHZvaWQgZnJlZV9vb3Bz
cGFjZShzdHJ1Y3QgU3BhY2VPb3BzICpzbyk7DQogdm9pZCBuZXdfb29wc19sb2NhdGlvbihz
dHJ1Y3QgT29wcyAqKTsNCiBpbnQgb29wc190ZXN0X292ZXJsYXAoc3RydWN0IE9vcHMgKnRl
c3QpOw0KSW5kZXg6IHNvdXJjZS9ibGVuZGVyL21ha2VzZG5hL0ROQV9zcGFjZV90eXBlcy5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVy
L3NvdXJjZS9ibGVuZGVyL21ha2VzZG5hL0ROQV9zcGFjZV90eXBlcy5oLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xOA0KZGlmZiAtdSAtcjEuMTggRE5BX3NwYWNlX3R5cGVzLmgNCi0t
LSBzb3VyY2UvYmxlbmRlci9tYWtlc2RuYS9ETkFfc3BhY2VfdHlwZXMuaAkxIEFwciAyMDA0
IDEyOjU1OjExIC0wMDAwCTEuMTgNCisrKyBzb3VyY2UvYmxlbmRlci9tYWtlc2RuYS9ETkFf
c3BhY2VfdHlwZXMuaAkxOCBBcHIgMjAwNCAwMzoyMTowOSAtMDAwMA0KQEAgLTE5MCw2ICsx
OTAsOSBAQA0KIA0KIAlWaWV3MkQgdjJkOw0KIAkNCisJaW50IHZpZXdUeXBlOw0KKwlpbnQg
cGFkSmVyZW15OyAvKiBhZGRlZCB0byBrZWVwIHRoZSBzdHJ1Y3QgOCBieXRlcyBhbGlnbmVk
ICovDQorCQ0KIAlMaXN0QmFzZSBvb3BzOw0KIAlzaG9ydCBwaW4sIHZpc2lmbGFnLCBmbGFn
LCBydDsNCiAJdm9pZCAqbG9ja3BvaW47DQpAQCAtNDUzLDYgKzQ1NiwxMCBAQA0KICNkZWZp
bmUgT09QU19MQVkJMTAyNA0KICNkZWZpbmUgT09QU19MSQkJMjA0OA0KICNkZWZpbmUgT09Q
U19JTQkJNDA5Ng0KKw0KKy8qIFNwYWNlT29wZXMtPnZpZXdUeXBlICovDQorI2RlZmluZSBN
QU5VQUxfRFJBVyAJMQ0KKyNkZWZpbmUgU0VMRUNUSU9OX09OTFkJMg0KIA0KIC8qIGhlYWRl
cmJ1dHRvbnM6IDQ1MC00OTkgKi8NCiANCkluZGV4OiBzb3VyY2UvYmxlbmRlci9zcmMvaGVh
ZGVyX29vcHMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L2JmLWJsZW5k
ZXIvYmxlbmRlci9zb3VyY2UvYmxlbmRlci9zcmMvaGVhZGVyX29vcHMuYyx2DQpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNw0KZGlmZiAtdSAtcjEuNyBoZWFkZXJfb29wcy5jDQotLS0gc291
cmNlL2JsZW5kZXIvc3JjL2hlYWRlcl9vb3BzLmMJMjYgTWFyIDIwMDQgMDE6MTI6NDUgLTAw
MDAJMS43DQorKysgc291cmNlL2JsZW5kZXIvc3JjL2hlYWRlcl9vb3BzLmMJMTggQXByIDIw
MDQgMDM6MjE6MTIgLTAwMDANCkBAIC0xMDEsMjA5ICsxMDEsMjIyIEBADQogCQlicmVhazsN
CiAJfQ0KIH0NCi0NCi1zdGF0aWMgdm9pZCBkb19vb3BzX3ZpZXdtZW51KHZvaWQgKmFyZywg
aW50IGV2ZW50KQ0KLXsNCi0NCi0Jc3dpdGNoKGV2ZW50KSB7DQotCWNhc2UgMDogLyogU2h1
ZmZsZSBTZWxlY3RlZCBCbG9ja3MgKi8NCi0JCXNodWZmbGVfb29wcygpOw0KLQkJYnJlYWs7
DQotCWNhc2UgMTogLyogU2hyaW5rIFNlbGVjdGVkIEJsb2NrcyAqLw0KLSAgICAJc2hyaW5r
X29vcHMoKTsNCi0gICAgICAgIGJyZWFrOw0KLSAgICBjYXNlIDI6IC8qIFZpZXcgQWxsICov
DQotCQlkb19vb3BzX2J1dHRvbnMoQl9PT1BTSE9NRSk7DQotCQlicmVhazsNCi0JY2FzZSAz
OiAvKiBNYXhpbWl6ZSBXaW5kb3cgKi8NCi0JCS8qIHVzaW5nIGV2ZW50IEJfRlVMTCAqLw0K
LQkJYnJlYWs7DQotCX0NCi19CQkJDQotDQotc3RhdGljIHVpQmxvY2sgKm9vcHNfdmlld21l
bnUodm9pZCAqYXJnX3VudXNlZCkNCi17DQotLyoJc3RhdGljIHNob3J0IHRvZz0wOyAqLw0K
LQl1aUJsb2NrICpibG9jazsNCi0Jc2hvcnQgeWNvPSAwLCBtZW51d2lkdGg9MTIwOw0KLQkN
Ci0JYmxvY2s9IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tzLCAib29wc192aWV3bWVu
dSIsIFVJX0VNQk9TU1AsIFVJX0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KLQl1aUJsb2Nr
U2V0QnV0bUZ1bmMoYmxvY2ssIGRvX29vcHNfdmlld21lbnUsIE5VTEwpOw0KLQkJDQotCXVp
RGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiU2h1ZmZsZSBT
ZWxlY3RlZCBCbG9ja3N8U2hpZnQgUyIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5V
TEwsIDAuMCwgMC4wLCAxLCAwLCAiIik7DQotICAgIHVpRGVmSWNvblRleHRCdXQoYmxvY2ss
IEJVVE0sIDEsIElDT05fQkxBTksxLCAiU2hyaW5rIFNlbGVjdGVkIEJsb2Nrc3xBbHQgUyIs
IDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCAxLCAiIik7
DQogDQorc3RhdGljIHZvaWQgZG9fb29wc192aWV3bWVudSh2b2lkICphcmcsIGludCBldmVu
dCkNCit7DQorDQorCXN3aXRjaChldmVudCkgew0KKwljYXNlIDA6IC8qIFNodWZmbGUgU2Vs
ZWN0ZWQgQmxvY2tzICovDQorCQlzaHVmZmxlX29vcHMoKTsNCisJCWJyZWFrOw0KKwljYXNl
IDE6IC8qIFNocmluayBTZWxlY3RlZCBCbG9ja3MgKi8NCisgICAgCXNocmlua19vb3BzKCk7
DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSAyOiAvKiBWaWV3IEFsbCAqLw0KKwkJZG9f
b29wc19idXR0b25zKEJfT09QU0hPTUUpOw0KKwkJYnJlYWs7DQorCWNhc2UgMzogLyogTWF4
aW1pemUgV2luZG93ICovDQorCQkvKiB1c2luZyBldmVudCBCX0ZVTEwgKi8NCisJCWJyZWFr
Ow0KKwljYXNlIDQ6IC8qIE1hbnVhbCBNb2RlICovDQorCQlHLnNvb3BzLT52aWV3VHlwZSA9
IE1BTlVBTF9EUkFXOw0KKwkJYnVpbGRfb29wcygwKTsNCisJCWJyZWFrOw0KKwljYXNlIDU6
IC8qIER5bmFtaWM6c2VsZWN0aW9uIE1vZGUgKi8NCisJCUcuc29vcHMtPnZpZXdUeXBlID0g
U0VMRUNUSU9OX09OTFk7DQorCQlidWlsZF9vb3BzKDApOw0KKwkJYnJlYWs7DQorCX0NCit9
CQkJDQorDQorc3RhdGljIHVpQmxvY2sgKm9vcHNfdmlld21lbnUodm9pZCAqYXJnX3VudXNl
ZCkNCit7DQorLyoJc3RhdGljIHNob3J0IHRvZz0wOyAqLw0KKwl1aUJsb2NrICpibG9jazsN
CisJc2hvcnQgeWNvPSAwLCBtZW51d2lkdGg9MTIwOw0KKwkNCisJYmxvY2s9IHVpTmV3Qmxv
Y2soJmN1cmFyZWEtPnVpYmxvY2tzLCAib29wc192aWV3bWVudSIsIFVJX0VNQk9TU1AsIFVJ
X0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKwl1aUJsb2NrU2V0QnV0bUZ1bmMoYmxvY2ss
IGRvX29vcHNfdmlld21lbnUsIE5VTEwpOw0KKwkJDQorCXVpRGVmSWNvblRleHRCdXQoYmxv
Y2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiU2h1ZmZsZSBTZWxlY3RlZCBCbG9ja3N8U2hp
ZnQgUyIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCAw
LCAiIik7DQorICAgIHVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxB
TksxLCAiU2hyaW5rIFNlbGVjdGVkIEJsb2Nrc3xBbHQgUyIsIDAsIHljby09MjAsIG1lbnV3
aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAxLCAxLCAiIik7DQorCQ0KKwl1aURlZkJ1dChi
bG9jaywgU0VQUiwgMCwgIiIsICAgICAgICAwLCB5Y28tPTYsIG1lbnV3aWR0aCwgNiwgTlVM
TCwgMC4wLCAwLjAsIDAsIDAsICIiKTsgIA0KKw0KKwl1aURlZkljb25UZXh0QnV0KGJsb2Nr
LCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIlZpZXcgQWxsfEhvbWUiLCAwLCB5Y28tPTIwLCBt
ZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwgMSwgMiwgIiIpOw0KKwkJDQorCWlmKCFj
dXJhcmVhLT5mdWxsKSB1aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCBCX0ZVTEwsIElD
T05fQkxBTksxLCAiTWF4aW1pemUgV2luZG93fEN0cmwgVXBBcnJvdyIsIDAsIHljby09MjAs
IG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAwLCAzLCAiIik7DQorCWVsc2UgdWlE
ZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgQl9GVUxMLCBJQ09OX0JMQU5LMSwgIlRpbGUg
V2luZG93fEN0cmwgRG93bkFycm93IiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVM
TCwgMC4wLCAwLjAsIDAsIDMsICIiKTsNCisJDQogCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAw
LCAiIiwgICAgICAgIDAsIHljby09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwg
MCwgMCwgIiIpOyAgDQotDQotCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElD
T05fQkxBTksxLCAiVmlldyBBbGx8SG9tZSIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTks
IE5VTEwsIDAuMCwgMC4wLCAxLCAyLCAiIik7DQotCQkNCi0JaWYoIWN1cmFyZWEtPmZ1bGwp
IHVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIEJfRlVMTCwgSUNPTl9CTEFOSzEsICJN
YXhpbWl6ZSBXaW5kb3d8Q3RybCBVcEFycm93IiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAx
OSwgTlVMTCwgMC4wLCAwLjAsIDAsIDMsICIiKTsNCi0JZWxzZSB1aURlZkljb25UZXh0QnV0
KGJsb2NrLCBCVVRNLCBCX0ZVTEwsIElDT05fQkxBTksxLCAiVGlsZSBXaW5kb3d8Q3RybCBE
b3duQXJyb3ciLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAwLjAsIDAuMCwg
MCwgMywgIiIpOw0KLQkNCi0JaWYoY3VyYXJlYS0+aGVhZGVydHlwZT09SEVBREVSVE9QKSB7
DQotCQl1aUJsb2NrU2V0RGlyZWN0aW9uKGJsb2NrLCBVSV9ET1dOKTsNCi0JfQ0KLQllbHNl
IHsNCi0JCXVpQmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJX1RPUCk7DQotCQl1aUJsb2Nr
RmxpcE9yZGVyKGJsb2NrKTsNCi0JfQ0KLQ0KLQl1aVRleHRCb3VuZHNCbG9jayhibG9jaywg
NTApOw0KLQkNCi0JcmV0dXJuIGJsb2NrOw0KLX0NCi0NCi0NCi1zdGF0aWMgdm9pZCBkb19v
b3BzX3NlbGVjdG1lbnUodm9pZCAqYXJnLCBpbnQgZXZlbnQpDQotewkNCi0NCi0Jc3dpdGNo
KGV2ZW50KQ0KLQl7DQotCWNhc2UgMDogLyogQm9yZGVyIFNlbGVjdCAqLw0KLQkJYm9yZGVy
c2VsZWN0X29vcHMoKTsNCi0JCWJyZWFrOw0KLQljYXNlIDE6IC8qIFNlbGVjdC9EZXNlbGVj
dCBBbGwgKi8NCi0JCXN3YXBfc2VsZWN0X2FsbF9vb3BzKCk7DQotCQlicmVhazsNCi0JY2Fz
ZSAyOiAvKiBMaW5rZWQgdG8gU2VsZWN0ZWQgKi8NCi0JCXNlbGVjdF9saW5rZWRfb29wcygp
Ow0KLQkJYnJlYWs7DQotCWNhc2UgMzogLyogVXNlcnMgb2YgU2VsZWN0ZWQgKi8NCi0JCXNl
bGVjdF9iYWNrbGlua2VkX29vcHMoKTsNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLXN0YXRp
YyB1aUJsb2NrICpvb3BzX3NlbGVjdG1lbnUodm9pZCAqYXJnX3VudXNlZCkNCi17DQotCXVp
QmxvY2sgKmJsb2NrOw0KLQlzaG9ydCB5Y289IDAsIG1lbnV3aWR0aD0xMjA7DQotDQotCWJs
b2NrPSB1aU5ld0Jsb2NrKCZjdXJhcmVhLT51aWJsb2NrcywgIm9vcHNfc2VsZWN0bWVudSIs
IFVJX0VNQk9TU1AsIFVJX0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KLQl1aUJsb2NrU2V0
QnV0bUZ1bmMoYmxvY2ssIGRvX29vcHNfc2VsZWN0bWVudSwgTlVMTCk7DQotDQotCXVpRGVm
SWNvblRleHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiQm9yZGVyIFNlbGVj
dHxCIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDAs
ICIiKTsNCi0JDQotCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAwLCAiIiwgICAgICAgIDAsIHlj
by09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOw0KLQ0KLQl1
aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIlNlbGVjdC9E
ZXNlbGVjdCBBbGx8QSIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwg
MC4wLCAwLCAxLCAiIik7DQotDQotCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAwLCAiIiwgICAg
ICAgIDAsIHljby09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIp
OyAgICANCi0NCi0JdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFO
SzEsICJMaW5rZWQgdG8gU2VsZWN0ZWR8TCIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTks
IE5VTEwsIDAuMCwgMC4wLCAwLCAyLCAiIik7DQotCXVpRGVmSWNvblRleHRCdXQoYmxvY2ss
IEJVVE0sIDEsIElDT05fQkxBTksxLCAiVXNlcnMgb2YgU2VsZWN0ZWR8U2hpZnQgTCIsIDAs
IHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAwLCAzLCAiIik7DQot
DQotCWlmKGN1cmFyZWEtPmhlYWRlcnR5cGU9PUhFQURFUlRPUCkgew0KLQkJdWlCbG9ja1Nl
dERpcmVjdGlvbihibG9jaywgVUlfRE9XTik7DQotCX0NCi0JZWxzZSB7DQotCQl1aUJsb2Nr
U2V0RGlyZWN0aW9uKGJsb2NrLCBVSV9UT1ApOw0KLQkJdWlCbG9ja0ZsaXBPcmRlcihibG9j
ayk7DQotCX0NCi0NCi0JdWlUZXh0Qm91bmRzQmxvY2soYmxvY2ssIDUwKTsNCi0NCi0JcmV0
dXJuIGJsb2NrOw0KLX0NCi0NCi0NCi12b2lkIG9vcHNfYnV0dG9ucyh2b2lkKQ0KLXsJDQot
CVNwYWNlT29wcyAqc29vcHM7DQotCU9vcHMgKm9vcHM7DQotCXVpQmxvY2sgKmJsb2NrOw0K
LQlzaG9ydCB4Y28sIHhtYXg7DQotCWNoYXIgbmFhbVsyNTZdOw0KLQ0KLQlzb29wcz0gY3Vy
YXJlYS0+c3BhY2VkYXRhLmZpcnN0Ow0KLQ0KLQlzcHJpbnRmKG5hYW0sICJoZWFkZXIgJWQi
LCBjdXJhcmVhLT5oZWFkd2luKTsNCi0JYmxvY2s9IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVp
YmxvY2tzLCBuYWFtLCBVSV9FTUJPU1MsIFVJX0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0K
LQ0KLQlpZihhcmVhX2lzX2FjdGl2ZV9hcmVhKGN1cmFyZWEpKSB1aUJsb2NrU2V0Q29sKGJs
b2NrLCBUSF9IRUFERVIpOw0KLQllbHNlIHVpQmxvY2tTZXRDb2woYmxvY2ssIFRIX0hFQURF
UkRFU0VMKTsNCi0NCi0JY3VyYXJlYS0+YnV0c3BhY2V0eXBlPSBTUEFDRV9PT1BTOw0KLQ0K
LQl4Y28gPSA4Ow0KLQkNCi0JdWlEZWZJY29uVGV4dEJ1dEMoYmxvY2ssIElDT05URVhUUk9X
LEJfTkVXU1BBQ0UsIElDT05fVklFVzNELCB3aW5kb3d0eXBlX3B1cCgpLCB4Y28sMCxYSUMr
MTAsWUlDLCAmKGN1cmFyZWEtPmJ1dHNwYWNldHlwZSksIDEuMCwgU1BBQ0VJQ09OTUFYLCAw
LCAwLCAiRGlzcGxheXMgQ3VycmVudCBXaW5kb3cgVHlwZS4gQ2xpY2sgZm9yIG1lbnUgb2Yg
YXZhaWxhYmxlIHR5cGVzLiIpOw0KLQ0KLQl4Y28rPSBYSUMrMTQ7DQotDQotCXVpQmxvY2tT
ZXRFbWJvc3MoYmxvY2ssIFVJX0VNQk9TU04pOw0KLQlpZihjdXJhcmVhLT5mbGFnICYgSEVB
REVSX05PX1BVTExET1dOKSB7DQotCQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDAs
IEJfRkxJUElORk9NRU5VLCBJQ09OX0RJU0NMT1NVUkVfVFJJX1JJR0hULA0KLQkJCQl4Y28s
MixYSUMsWUlDLTIsDQotCQkJCSYoY3VyYXJlYS0+ZmxhZyksIDAsIDAsIDAsIDAsICJTaG93
IHB1bGxkb3duIG1lbnVzIik7DQotCX0gZWxzZSB7DQotCQl1aURlZkljb25CdXRTKGJsb2Nr
LCBUT0d8QklUfDAsIEJfRkxJUElORk9NRU5VLCBJQ09OX0RJU0NMT1NVUkVfVFJJX0RPV04s
DQotCQkJCXhjbywyLFhJQyxZSUMtMiwNCi0JCQkJJihjdXJhcmVhLT5mbGFnKSwgMCwgMCwg
MCwgMCwgIkhpZGUgcHVsbGRvd24gbWVudXMiKTsNCi0JfQ0KLQl1aUJsb2NrU2V0RW1ib3Nz
KGJsb2NrLCBVSV9FTUJPU1MpOw0KLQl4Y28rPVhJQzsNCi0NCi0JaWYoKGN1cmFyZWEtPmZs
YWcgJiBIRUFERVJfTk9fUFVMTERPV04pPT0wKSB7DQotCS8qIHB1bGwgZG93biBtZW51cyAq
Lw0KLQkJdWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTUCk7DQotCQ0KLQkJeG1h
eD0gR2V0QnV0U3RyaW5nTGVuZ3RoKCJWaWV3Iik7DQotCQl1aURlZkJsb2NrQnV0KGJsb2Nr
LCBvb3BzX3ZpZXdtZW51LCBOVUxMLCAiVmlldyIsIHhjbywgLTIsIHhtYXgtMywgMjQsICIi
KTsNCi0JCXhjbys9IHhtYXg7DQotCQkNCi0JCXhtYXg9IEdldEJ1dFN0cmluZ0xlbmd0aCgi
U2VsZWN0Iik7DQotCQl1aURlZkJsb2NrQnV0KGJsb2NrLCBvb3BzX3NlbGVjdG1lbnUsIE5V
TEwsICJTZWxlY3QiLCB4Y28sIC0yLCB4bWF4LTMsIDI0LCAiIik7DQotCQl4Y28rPSB4bWF4
Ow0KLQ0KLQl9DQotDQotCXVpQmxvY2tTZXRFbWJvc3MoYmxvY2ssIFVJX0VNQk9TU1gpOw0K
KwkNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJN
YW51YWwgQXJyYW5nZW1lbnQiLCAwLCB5Y28tPTIwLCBtZW51d2lkdGgsIDE5LCBOVUxMLCAw
LjAsIDAuMCwgMSwgNCwgIlNldCBPb3BzIHRvIG1hbnVhbCBhcnJhbmdlbWVudCIpOw0KKwl1
aURlZkljb25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIlNlbGVjdGlv
bjpEeW5hbWljIiwgMCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAs
IDEsIDUsICJTZXQgT29wcyB0byBkeW5hbWljIHNlbGVjdGlvbiBiYXNlZCBhcnJhbmdlbWVu
dCIpOw0KKwkNCisJaWYoY3VyYXJlYS0+aGVhZGVydHlwZT09SEVBREVSVE9QKSB7DQorCQl1
aUJsb2NrU2V0RGlyZWN0aW9uKGJsb2NrLCBVSV9ET1dOKTsNCisJfQ0KKwllbHNlIHsNCisJ
CXVpQmxvY2tTZXREaXJlY3Rpb24oYmxvY2ssIFVJX1RPUCk7DQorCQl1aUJsb2NrRmxpcE9y
ZGVyKGJsb2NrKTsNCisJfQ0KKw0KKwl1aVRleHRCb3VuZHNCbG9jayhibG9jaywgNTApOw0K
KwkNCisJcmV0dXJuIGJsb2NrOw0KK30NCisNCisNCitzdGF0aWMgdm9pZCBkb19vb3BzX3Nl
bGVjdG1lbnUodm9pZCAqYXJnLCBpbnQgZXZlbnQpDQorewkNCisNCisJc3dpdGNoKGV2ZW50
KQ0KKwl7DQorCWNhc2UgMDogLyogQm9yZGVyIFNlbGVjdCAqLw0KKwkJYm9yZGVyc2VsZWN0
X29vcHMoKTsNCisJCWJyZWFrOw0KKwljYXNlIDE6IC8qIFNlbGVjdC9EZXNlbGVjdCBBbGwg
Ki8NCisJCXN3YXBfc2VsZWN0X2FsbF9vb3BzKCk7DQorCQlicmVhazsNCisJY2FzZSAyOiAv
KiBMaW5rZWQgdG8gU2VsZWN0ZWQgKi8NCisJCXNlbGVjdF9saW5rZWRfb29wcygpOw0KKwkJ
YnJlYWs7DQorCWNhc2UgMzogLyogVXNlcnMgb2YgU2VsZWN0ZWQgKi8NCisJCXNlbGVjdF9i
YWNrbGlua2VkX29vcHMoKTsNCisJCWJyZWFrOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB1aUJs
b2NrICpvb3BzX3NlbGVjdG1lbnUodm9pZCAqYXJnX3VudXNlZCkNCit7DQorCXVpQmxvY2sg
KmJsb2NrOw0KKwlzaG9ydCB5Y289IDAsIG1lbnV3aWR0aD0xMjA7DQorDQorCWJsb2NrPSB1
aU5ld0Jsb2NrKCZjdXJhcmVhLT51aWJsb2NrcywgIm9vcHNfc2VsZWN0bWVudSIsIFVJX0VN
Qk9TU1AsIFVJX0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKwl1aUJsb2NrU2V0QnV0bUZ1
bmMoYmxvY2ssIGRvX29vcHNfc2VsZWN0bWVudSwgTlVMTCk7DQorDQorCXVpRGVmSWNvblRl
eHRCdXQoYmxvY2ssIEJVVE0sIDEsIElDT05fQkxBTksxLCAiQm9yZGVyIFNlbGVjdHxCIiwg
MCwgeWNvLT0yMCwgbWVudXdpZHRoLCAxOSwgTlVMTCwgMC4wLCAwLjAsIDAsIDAsICIiKTsN
CisJDQorCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAwLCAiIiwgICAgICAgIDAsIHljby09Niwg
bWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOw0KKw0KKwl1aURlZklj
b25UZXh0QnV0KGJsb2NrLCBCVVRNLCAxLCBJQ09OX0JMQU5LMSwgIlNlbGVjdC9EZXNlbGVj
dCBBbGx8QSIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAw
LCAxLCAiIik7DQorDQorCXVpRGVmQnV0KGJsb2NrLCBTRVBSLCAwLCAiIiwgICAgICAgIDAs
IHljby09NiwgbWVudXdpZHRoLCA2LCBOVUxMLCAwLjAsIDAuMCwgMCwgMCwgIiIpOyAgICAN
CisNCisJdWlEZWZJY29uVGV4dEJ1dChibG9jaywgQlVUTSwgMSwgSUNPTl9CTEFOSzEsICJM
aW5rZWQgdG8gU2VsZWN0ZWR8TCIsIDAsIHljby09MjAsIG1lbnV3aWR0aCwgMTksIE5VTEws
IDAuMCwgMC4wLCAwLCAyLCAiIik7DQorCXVpRGVmSWNvblRleHRCdXQoYmxvY2ssIEJVVE0s
IDEsIElDT05fQkxBTksxLCAiVXNlcnMgb2YgU2VsZWN0ZWR8U2hpZnQgTCIsIDAsIHljby09
MjAsIG1lbnV3aWR0aCwgMTksIE5VTEwsIDAuMCwgMC4wLCAwLCAzLCAiIik7DQorDQorCWlm
KGN1cmFyZWEtPmhlYWRlcnR5cGU9PUhFQURFUlRPUCkgew0KKwkJdWlCbG9ja1NldERpcmVj
dGlvbihibG9jaywgVUlfRE9XTik7DQorCX0NCisJZWxzZSB7DQorCQl1aUJsb2NrU2V0RGly
ZWN0aW9uKGJsb2NrLCBVSV9UT1ApOw0KKwkJdWlCbG9ja0ZsaXBPcmRlcihibG9jayk7DQor
CX0NCisNCisJdWlUZXh0Qm91bmRzQmxvY2soYmxvY2ssIDUwKTsNCisNCisJcmV0dXJuIGJs
b2NrOw0KK30NCisNCisNCit2b2lkIG9vcHNfYnV0dG9ucyh2b2lkKQ0KK3sJDQorCVNwYWNl
T29wcyAqc29vcHM7DQorCU9vcHMgKm9vcHM7DQorCXVpQmxvY2sgKmJsb2NrOw0KKwlzaG9y
dCB4Y28sIHhtYXg7DQorCWNoYXIgbmFhbVsyNTZdOw0KKw0KKwlzb29wcz0gY3VyYXJlYS0+
c3BhY2VkYXRhLmZpcnN0Ow0KKw0KKwlzcHJpbnRmKG5hYW0sICJoZWFkZXIgJWQiLCBjdXJh
cmVhLT5oZWFkd2luKTsNCisJYmxvY2s9IHVpTmV3QmxvY2soJmN1cmFyZWEtPnVpYmxvY2tz
LCBuYWFtLCBVSV9FTUJPU1MsIFVJX0hFTFYsIGN1cmFyZWEtPmhlYWR3aW4pOw0KKw0KKwlp
ZihhcmVhX2lzX2FjdGl2ZV9hcmVhKGN1cmFyZWEpKSB1aUJsb2NrU2V0Q29sKGJsb2NrLCBU
SF9IRUFERVIpOw0KKwllbHNlIHVpQmxvY2tTZXRDb2woYmxvY2ssIFRIX0hFQURFUkRFU0VM
KTsNCisNCisJY3VyYXJlYS0+YnV0c3BhY2V0eXBlPSBTUEFDRV9PT1BTOw0KKw0KKwl4Y28g
PSA4Ow0KKwkNCisJdWlEZWZJY29uVGV4dEJ1dEMoYmxvY2ssIElDT05URVhUUk9XLEJfTkVX
U1BBQ0UsIElDT05fVklFVzNELCB3aW5kb3d0eXBlX3B1cCgpLCB4Y28sMCxYSUMrMTAsWUlD
LCAmKGN1cmFyZWEtPmJ1dHNwYWNldHlwZSksIDEuMCwgU1BBQ0VJQ09OTUFYLCAwLCAwLCAi
RGlzcGxheXMgQ3VycmVudCBXaW5kb3cgVHlwZS4gQ2xpY2sgZm9yIG1lbnUgb2YgYXZhaWxh
YmxlIHR5cGVzLiIpOw0KKw0KKwl4Y28rPSBYSUMrMTQ7DQorDQorCXVpQmxvY2tTZXRFbWJv
c3MoYmxvY2ssIFVJX0VNQk9TU04pOw0KKwlpZihjdXJhcmVhLT5mbGFnICYgSEVBREVSX05P
X1BVTExET1dOKSB7DQorCQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDAsIEJfRkxJ
UElORk9NRU5VLCBJQ09OX0RJU0NMT1NVUkVfVFJJX1JJR0hULA0KKwkJCQl4Y28sMixYSUMs
WUlDLTIsDQorCQkJCSYoY3VyYXJlYS0+ZmxhZyksIDAsIDAsIDAsIDAsICJTaG93IHB1bGxk
b3duIG1lbnVzIik7DQorCX0gZWxzZSB7DQorCQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8
QklUfDAsIEJfRkxJUElORk9NRU5VLCBJQ09OX0RJU0NMT1NVUkVfVFJJX0RPV04sDQorCQkJ
CXhjbywyLFhJQyxZSUMtMiwNCisJCQkJJihjdXJhcmVhLT5mbGFnKSwgMCwgMCwgMCwgMCwg
IkhpZGUgcHVsbGRvd24gbWVudXMiKTsNCisJfQ0KKwl1aUJsb2NrU2V0RW1ib3NzKGJsb2Nr
LCBVSV9FTUJPU1MpOw0KKwl4Y28rPVhJQzsNCisNCisJaWYoKGN1cmFyZWEtPmZsYWcgJiBI
RUFERVJfTk9fUFVMTERPV04pPT0wKSB7DQorCS8qIHB1bGwgZG93biBtZW51cyAqLw0KKwkJ
dWlCbG9ja1NldEVtYm9zcyhibG9jaywgVUlfRU1CT1NTUCk7DQorCQ0KKwkJeG1heD0gR2V0
QnV0U3RyaW5nTGVuZ3RoKCJWaWV3Iik7DQorCQl1aURlZkJsb2NrQnV0KGJsb2NrLCBvb3Bz
X3ZpZXdtZW51LCBOVUxMLCAiVmlldyIsIHhjbywgLTIsIHhtYXgtMywgMjQsICIiKTsNCisJ
CXhjbys9IHhtYXg7DQorCQkNCisJCXhtYXg9IEdldEJ1dFN0cmluZ0xlbmd0aCgiU2VsZWN0
Iik7DQorCQl1aURlZkJsb2NrQnV0KGJsb2NrLCBvb3BzX3NlbGVjdG1lbnUsIE5VTEwsICJT
ZWxlY3QiLCB4Y28sIC0yLCB4bWF4LTMsIDI0LCAiIik7DQorCQl4Y28rPSB4bWF4Ow0KKw0K
Kwl9DQorDQorCXVpQmxvY2tTZXRFbWJvc3MoYmxvY2ssIFVJX0VNQk9TU1gpOw0KIA0KIAl4
Y28rPSA4Ow0KLQkNCisJDQogCS8qIFpPT00gYW5kIEJPUkRFUiAqLw0KLSAgICB1aUJsb2Nr
QmVnaW5BbGlnbihibG9jayk7DQotCXVpRGVmSWNvbkJ1dEkoYmxvY2ssIFRPRywgQl9WSUVX
MkRaT09NLCBJQ09OX1ZJRVdaT09NLAkoc2hvcnQpKHhjbyksMCxYSUMsWUlDLCAmdmlld21v
dmV0ZW1wLCAwLCAwLCAwLCAwLCAiWm9vbXMgdmlldyAoQ3RybCBNaWRkbGVNb3VzZSkiKTsN
Ci0JdWlEZWZJY29uQnV0KGJsb2NrLCBCVVQsIEJfSVBPQk9SREVSLCBJQ09OX0JPUkRFUk1P
VkUsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgMCwgMCwgMCwgMCwgMCwgIlpvb21z
IHZpZXcgdG8gYXJlYSIpOw0KLSAgICB1aUJsb2NrRW5kQWxpZ24oYmxvY2spOw0KLSAgICAN
CisgICAgdWlCbG9ja0JlZ2luQWxpZ24oYmxvY2spOw0KKwl1aURlZkljb25CdXRJKGJsb2Nr
LCBUT0csIEJfVklFVzJEWk9PTSwgSUNPTl9WSUVXWk9PTSwJKHNob3J0KSh4Y28pLDAsWElD
LFlJQywgJnZpZXdtb3ZldGVtcCwgMCwgMCwgMCwgMCwgIlpvb21zIHZpZXcgKEN0cmwgTWlk
ZGxlTW91c2UpIik7DQorCXVpRGVmSWNvbkJ1dChibG9jaywgQlVULCBCX0lQT0JPUkRFUiwg
SUNPTl9CT1JERVJNT1ZFLAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsIDAsIDAsIDAs
IDAsIDAsICJab29tcyB2aWV3IHRvIGFyZWEiKTsNCisgICAgdWlCbG9ja0VuZEFsaWduKGJs
b2NrKTsNCisgICAgDQogCXhjbys9IDg7DQotICAgIA0KLQkvKiBWSVNJQkxFICovDQotCXVp
QmxvY2tCZWdpbkFsaWduKGJsb2NrKTsNCi0JdWlEZWZCdXRTKGJsb2NrLCBUT0d8QklUfDEw
LEJfTkVXT09QUywgIkxheWVyIiwJCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDKzIwLFlJQywg
JnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIk9ubHkgc2hvdyBvYmplY3QgZGF0YWJs
b2NrcyBvbiB2aXNpYmxlIGxheWVycyIpOw0KLSAgICB4Y28rPSAyMDsNCi0JdWlEZWZJY29u
QnV0UyhibG9jaywgVE9HfEJJVHwwLCBCX05FV09PUFMsIElDT05fU0NFTkVfSExULAkoc2hv
cnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAs
ICJEaXNwbGF5cyBTY2VuZSBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ss
IFRPR3xCSVR8MSwgQl9ORVdPT1BTLCBJQ09OX09CSkVDVF9ITFQsCShzaG9ydCkoeGNvKz1Y
SUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlz
IE9iamVjdCBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8
MiwgQl9ORVdPT1BTLCBJQ09OX01FU0hfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZ
SUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBNZXNoIGRhdGFi
bG9ja3MiKTsNCi0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwzLCBCX05FV09PUFMs
IElDT05fQ1VSVkVfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+
dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBDdXJ2ZS9TdXJmYWNlL0ZvbnQgZGF0
YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDQsIEJfTkVXT09Q
UywgSUNPTl9NQkFMTF9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3Bz
LT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIE1ldGFiYWxsIGRhdGFibG9ja3Mi
KTsNCi0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw1LCBCX05FV09PUFMsIElDT05f
TEFUVElDRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3BzLT52aXNp
ZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIExhdHRpY2UgZGF0YWJsb2NrcyIpOw0KLQl1
aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDYsIEJfTkVXT09QUywgSUNPTl9MQU1QX0hM
VCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAw
LCAwLCAwLCAiRGlzcGxheXMgTGFtcCBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMo
YmxvY2ssIFRPR3xCSVR8NywgQl9ORVdPT1BTLCBJQ09OX01BVEVSSUFMX0hMVCwJKHNob3J0
KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAi
RGlzcGxheXMgTWF0ZXJpYWwgZGF0YWJsb2NrcyIpOw0KLQl1aURlZkljb25CdXRTKGJsb2Nr
LCBUT0d8QklUfDgsIEJfTkVXT09QUywgSUNPTl9URVhUVVJFX0hMVCwJKHNob3J0KSh4Y28r
PVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxh
eXMgVGV4dHVyZSBkYXRhYmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xC
SVR8OSwgQl9ORVdPT1BTLCBJQ09OX0lQT19ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElD
LFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIElwbyBkYXRh
YmxvY2tzIik7DQotCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MTIsIEJfTkVXT09Q
UywgSUNPTl9JTUFHRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3Bz
LT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIEltYWdlIGRhdGFibG9ja3MiKTsN
Ci0JdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHwxMSwgQl9ORVdPT1BTLCBJQ09OX0xJ
QlJBUllfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZs
YWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBMaWJyYXJ5IGRhdGFibG9ja3MiKTsNCi0NCi0g
ICAgdWlCbG9ja0VuZEFsaWduKGJsb2NrKTsNCi0gIA0KLQkvKiBuYW1lICovDQotCWlmKEcu
c29vcHMtPmxvY2twb2luKSB7DQotCQlvb3BzPSBHLnNvb3BzLT5sb2NrcG9pbjsNCi0JCWlm
KG9vcHMtPnR5cGU9PUlEX0xJKSBzdHJjcHkobmFhbSwgKChMaWJyYXJ5ICopb29wcy0+aWQp
LT5uYW1lKTsNCi0JCWVsc2Ugc3RyY3B5KG5hYW0sIG9vcHMtPmlkLT5uYW1lKTsNCi0JCQ0K
LQkJY3BhY2soMHgwKTsNCi0JCWdsUmFzdGVyUG9zMmkoeGNvKz1YSUMrMTAsCTUpOw0KLQkJ
Qk1GX0RyYXdTdHJpbmcodWlCbG9ja0dldEN1ckZvbnQoYmxvY2spLCBuYWFtKTsNCi0NCi0J
fQ0KKyAgICANCisJLyogVklTSUJMRSAqLw0KKwl1aUJsb2NrQmVnaW5BbGlnbihibG9jayk7
DQorCXVpRGVmQnV0UyhibG9jaywgVE9HfEJJVHwxMCxCX05FV09PUFMsICJMYXllciIsCQko
c2hvcnQpKHhjbys9WElDKSwwLFhJQysyMCxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAs
IDAsIDAsICJPbmx5IHNob3cgb2JqZWN0IGRhdGFibG9ja3Mgb24gdmlzaWJsZSBsYXllcnMi
KTsNCisgICAgeGNvKz0gMjA7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ssIFRPR3xCSVR8MCwg
Ql9ORVdPT1BTLCBJQ09OX1NDRU5FX0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlD
LCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxheXMgU2NlbmUgZGF0YWJs
b2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDEsIEJfTkVXT09QUywg
SUNPTl9PQkpFQ1RfSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+
dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNwbGF5cyBPYmplY3QgZGF0YWJsb2NrcyIpOw0K
Kwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDIsIEJfTkVXT09QUywgSUNPTl9NRVNI
X0hMVCwJKHNob3J0KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAw
LCAwLCAwLCAwLCAiRGlzcGxheXMgTWVzaCBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1
dFMoYmxvY2ssIFRPR3xCSVR8MywgQl9ORVdPT1BTLCBJQ09OX0NVUlZFX0hMVCwJKHNob3J0
KSh4Y28rPVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAi
RGlzcGxheXMgQ3VydmUvU3VyZmFjZS9Gb250IGRhdGFibG9ja3MiKTsNCisJdWlEZWZJY29u
QnV0UyhibG9jaywgVE9HfEJJVHw0LCBCX05FV09PUFMsIElDT05fTUJBTExfSExULAkoc2hv
cnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAs
ICJEaXNwbGF5cyBNZXRhYmFsbCBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxv
Y2ssIFRPR3xCSVR8NSwgQl9ORVdPT1BTLCBJQ09OX0xBVFRJQ0VfSExULAkoc2hvcnQpKHhj
bys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAsICJEaXNw
bGF5cyBMYXR0aWNlIGRhdGFibG9ja3MiKTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9H
fEJJVHw2LCBCX05FV09PUFMsIElDT05fTEFNUF9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAs
WElDLFlJQywgJnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIExhbXAg
ZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDcsIEJfTkVX
T09QUywgSUNPTl9NQVRFUklBTF9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywg
JnNvb3BzLT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIE1hdGVyaWFsIGRhdGFi
bG9ja3MiKTsNCisJdWlEZWZJY29uQnV0UyhibG9jaywgVE9HfEJJVHw4LCBCX05FV09PUFMs
IElDT05fVEVYVFVSRV9ITFQsCShzaG9ydCkoeGNvKz1YSUMpLDAsWElDLFlJQywgJnNvb3Bz
LT52aXNpZmxhZywgMCwgMCwgMCwgMCwgIkRpc3BsYXlzIFRleHR1cmUgZGF0YWJsb2NrcyIp
Ow0KKwl1aURlZkljb25CdXRTKGJsb2NrLCBUT0d8QklUfDksIEJfTkVXT09QUywgSUNPTl9J
UE9fSExULAkoc2hvcnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcs
IDAsIDAsIDAsIDAsICJEaXNwbGF5cyBJcG8gZGF0YWJsb2NrcyIpOw0KKwl1aURlZkljb25C
dXRTKGJsb2NrLCBUT0d8QklUfDEyLCBCX05FV09PUFMsIElDT05fSU1BR0VfSExULAkoc2hv
cnQpKHhjbys9WElDKSwwLFhJQyxZSUMsICZzb29wcy0+dmlzaWZsYWcsIDAsIDAsIDAsIDAs
ICJEaXNwbGF5cyBJbWFnZSBkYXRhYmxvY2tzIik7DQorCXVpRGVmSWNvbkJ1dFMoYmxvY2ss
IFRPR3xCSVR8MTEsIEJfTkVXT09QUywgSUNPTl9MSUJSQVJZX0hMVCwJKHNob3J0KSh4Y28r
PVhJQyksMCxYSUMsWUlDLCAmc29vcHMtPnZpc2lmbGFnLCAwLCAwLCAwLCAwLCAiRGlzcGxh
eXMgTGlicmFyeSBkYXRhYmxvY2tzIik7DQorDQorICAgIHVpQmxvY2tFbmRBbGlnbihibG9j
ayk7DQorICANCisJLyogbmFtZSAqLw0KKwlpZihHLnNvb3BzLT5sb2NrcG9pbikgew0KKwkJ
b29wcz0gRy5zb29wcy0+bG9ja3BvaW47DQorCQlpZihvb3BzLT50eXBlPT1JRF9MSSkgc3Ry
Y3B5KG5hYW0sICgoTGlicmFyeSAqKW9vcHMtPmlkKS0+bmFtZSk7DQorCQllbHNlIHN0cmNw
eShuYWFtLCBvb3BzLT5pZC0+bmFtZSk7DQorCQkNCisJCWNwYWNrKDB4MCk7DQorCQlnbFJh
c3RlclBvczJpKHhjbys9WElDKzEwLAk1KTsNCisJCUJNRl9EcmF3U3RyaW5nKHVpQmxvY2tH
ZXRDdXJGb250KGJsb2NrKSwgbmFhbSk7DQorDQorCX0NCiANCi0JLyogYWx3YXlzIGRvIGFz
IGxhc3QgKi8NCi0JY3VyYXJlYS0+aGVhZGJ1dGxlbj0geGNvKzIqWElDOw0KKwkvKiBhbHdh
eXMgZG8gYXMgbGFzdCAqLw0KKwljdXJhcmVhLT5oZWFkYnV0bGVuPSB4Y28rMipYSUM7DQog
DQotCXVpRHJhd0Jsb2NrKGJsb2NrKTsNCisJdWlEcmF3QmxvY2soYmxvY2spOw0KIH0NCiAN
CkluZGV4OiBzb3VyY2UvYmxlbmRlci9zcmMvb29wcy5jDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2N2c3Jvb3QvYmYtYmxlbmRlci9ibGVuZGVyL3NvdXJjZS9ibGVuZGVyL3NyYy9v
b3BzLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjYNCmRpZmYgLXUgLXIxLjYgb29wcy5j
DQotLS0gc291cmNlL2JsZW5kZXIvc3JjL29vcHMuYwk3IEphbiAyMDA0IDEyOjI2OjQwIC0w
MDAwCTEuNg0KKysrIHNvdXJjZS9ibGVuZGVyL3NyYy9vb3BzLmMJMTggQXByIDIwMDQgMDM6
MjE6MTUgLTAwMDANCkBAIC02MTgsOCArNjE4LDkgQEANCiB9DQogDQogDQotdm9pZCBmcmVl
X29vcHMoT29wcyAqb29wcykJLyogYWxzbyBvb3BzIGl0c2VsZiAqLw0KK3ZvaWQgZnJlZV9v
b3BzKE9vcHMgKm9vcHMsIFNwYWNlT29wcyAqc28pCS8qIGFsc28gb29wcyBpdHNlbGYgKi8N
CiB7DQorCUJMSV9yZW1saW5rKCZzby0+b29wcywgb29wcyk7DQogCUJMSV9mcmVlbGlzdE4o
Jm9vcHMtPmxpbmspOw0KIAlNRU1fZnJlZU4ob29wcyk7DQogfQ0KQEAgLTYyOSw4ICs2MzAs
NyBAQA0KIAlPb3BzICpvb3BzOw0KIA0KIAl3aGlsZSggKG9vcHM9IHNvLT5vb3BzLmZpcnN0
KSApIHsNCi0JCUJMSV9yZW1saW5rKCZzby0+b29wcywgb29wcyk7DQotCQlmcmVlX29vcHMo
b29wcyk7DQorCQlmcmVlX29vcHMob29wcywgc28pOw0KIAl9DQogfQ0KIA0KQEAgLTc2NCwx
MCArNzY0LDEwIEBADQogCQkJb29wcy0+ZmxhZyB8PSBTRUxFQ1Q7DQogCQl9DQogCX0NCi0J
DQogCXN3aXRjaCggR1MoICgoSUQgKilpZCktPm5hbWUpKSB7DQogCWNhc2UgSURfU0NFOg0K
LQkJYWRkX29vcHNsaW5rKCJzZXQiLCBvb3BzLCBJRF9TQ0UsICYoKFNjZW5lICopaWQpLT5z
ZXQsIChmbG9hdCkoLjUqT09QU1gpLCAoZmxvYXQpT09QU1kpOw0KKwkJaWYgKEcuc29vcHMt
PnZpZXdUeXBlID09IFNFTEVDVElPTl9PTkxZKSByZXR1cm4gTlVMTDsNCisJIAlhZGRfb29w
c2xpbmsoInNldCIsIG9vcHMsIElEX1NDRSwgJigoU2NlbmUgKilpZCktPnNldCwgKGZsb2F0
KSguNSpPT1BTWCksIChmbG9hdClPT1BTWSk7DQogCQlicmVhazsNCiAJY2FzZSBJRF9PQjoN
CiAJCW9iPSAoT2JqZWN0ICopaWQ7DQpAQCAtODI4LDYgKzgyOCw3IEBADQogDQogCWlmKEcu
c29vcHM9PTApIHJldHVybjsJDQogCQ0KKw0KIAkvKiBzZXQgaGlkZSBmbGFncyAqLw0KIAlv
b3BzPSBHLnNvb3BzLT5vb3BzLmZpcnN0Ow0KIAl3aGlsZShvb3BzKSB7DQpAQCAtODc2LDg0
ICs4NzcsMTEgQEANCiANCiAJCQl3aGlsZShvYikgew0KIAkJCQlvb3BzPSBhZGRfdGVzdF9v
b3BzKG9iKTsNCi0JCQkJb2I9IG9iLT5pZC5uZXh0Ow0KLQkJCX0NCi0JCX0NCi0JCWlmKEcu
c29vcHMtPnZpc2lmbGFnICYgT09QU19NRSkgew0KLQkJCU1lc2ggKm1lPSBHLm1haW4tPm1l
c2guZmlyc3Q7DQotCQkJd2hpbGUobWUpIHsNCi0JCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyht
ZSk7DQotCQkJCW1lPSBtZS0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQotCQ0KLQkJaWYoRy5z
b29wcy0+dmlzaWZsYWcgJiBPT1BTX0NVKSB7DQotCQkJQ3VydmUgKmN1PSBHLm1haW4tPmN1
cnZlLmZpcnN0Ow0KLQkJCXdoaWxlKGN1KSB7DQotCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMo
Y3UpOw0KLQkJCQljdT0gY3UtPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJaWYoRy5z
b29wcy0+dmlzaWZsYWcgJiBPT1BTX01CKSB7DQotCQkJTWV0YUJhbGwgKm1iPSBHLm1haW4t
Pm1iYWxsLmZpcnN0Ow0KLQkJCXdoaWxlKG1iKSB7DQotCQkJCW9vcHM9IGFkZF90ZXN0X29v
cHMobWIpOw0KLQkJCQltYj0gbWItPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0KLQkNCi0JCWlm
KEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19MQSkgew0KLQkJCUxhbXAgKmxhPSBHLm1haW4t
PmxhbXAuZmlyc3Q7DQotCQkJd2hpbGUobGEpIHsNCi0JCQkJb29wcz0gYWRkX3Rlc3Rfb29w
cyhsYSk7DQotCQkJCWxhPSBsYS0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQotCQkNCi0JCWlm
KEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19JUCkgew0KLQkJCUlwbyAqaXBvPSBHLm1haW4t
Pmlwby5maXJzdDsNCi0JCQl3aGlsZShpcG8pIHsNCi0JCQkJb29wcz0gYWRkX3Rlc3Rfb29w
cyhpcG8pOw0KLQkJCQlpcG89IGlwby0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQotCQkNCi0J
CWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19NQSkgew0KLQkJCU1hdGVyaWFsICptYT0g
Ry5tYWluLT5tYXQuZmlyc3Q7DQotCQkJd2hpbGUobWEpIHsNCi0JCQkJb29wcz0gYWRkX3Rl
c3Rfb29wcyhtYSk7DQotCQkJCW1hPSBtYS0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQotCQlp
ZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfVEUpIHsNCi0JCQlUZXggKnRleD0gRy5tYWlu
LT50ZXguZmlyc3Q7DQotCQkJd2hpbGUodGV4KSB7DQotCQkJCW9vcHM9IGFkZF90ZXN0X29v
cHModGV4KTsNCi0JCQkJdGV4PSB0ZXgtPmlkLm5leHQ7DQotCQkJfQ0KLQkJfQ0KLQkJaWYo
Ry5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX0lNKSB7DQotCQkJSW1hZ2UgKmltYT0gRy5tYWlu
LT5pbWFnZS5maXJzdDsNCi0JCQl3aGlsZShpbWEpIHsNCi0JCQkJb29wcz0gYWRkX3Rlc3Rf
b29wcyhpbWEpOw0KLQkJCQlpbWE9IGltYS0+aWQubmV4dDsNCi0JCQl9DQotCQl9DQotCQkN
Ci0JfQ0KLQllbHNlIHsNCi0JCQ0KLQkJLyogb25seSBibG9ja3MgZnJvbSB0aGlzIHNjZW5l
ICovDQotCQkNCi0JCWJhc2U9IEZJUlNUQkFTRTsNCi0JCXdoaWxlKGJhc2UpIHsNCi0JCQkN
Ci0JCQkvKiBsYXllcj8gKi8NCi0JCQlpZiggKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19M
QVkpPT0wIHx8IChiYXNlLT5sYXkgJiBHLnNjZW5lLT5sYXkpKSB7DQotCQkJCW9iPSBiYXNl
LT5vYmplY3Q7DQotCQkJCQ0KLQkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfT0Ip
IHsNCisJCQkJaWYgKChHLnNvb3BzLT52aWV3VHlwZSA9PSBTRUxFQ1RJT05fT05MWSkgJiYg
IShvYi0+ZmxhZyAmIFNFTEVDVCkpIHsNCisJCQkJCW9iPSBvYi0+aWQubmV4dDsNCisJCQkJ
CWNvbnRpbnVlOw0KKwkJCQl9DQorIAkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNf
T0IpIHsNCiAJCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMob2IpOw0KIAkJCQl9DQogCQkJCWlm
KEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19NQSkgew0KQEAgLTEwMjAsMjYgKzk0OCwxNzQg
QEANCiAJCQkJCQlvb3BzPSBhZGRfdGVzdF9vb3BzKG9iLT5kYXRhKTsNCiAJCQkJCX0NCiAJ
CQkJfQ0KKwkJCQlvYj0gb2ItPmlkLm5leHQ7DQogCQkJfQ0KLQkJCWJhc2U9IGJhc2UtPm5l
eHQ7DQogCQl9DQorLy8JCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19NRSkgew0KKy8v
CQkJTWVzaCAqbWU9IEcubWFpbi0+bWVzaC5maXJzdDsNCisvLwkJCXdoaWxlKG1lKSB7DQor
Ly8JCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhtZSk7DQorLy8JCQkJbWU9IG1lLT5pZC5uZXh0
Ow0KKy8vCQkJfQ0KKy8vCQl9DQorLy8JDQorLy8JCWlmKEcuc29vcHMtPnZpc2lmbGFnICYg
T09QU19DVSkgew0KKy8vCQkJQ3VydmUgKmN1PSBHLm1haW4tPmN1cnZlLmZpcnN0Ow0KKy8v
CQkJd2hpbGUoY3UpIHsNCisvLwkJCQlvb3BzPSBhZGRfdGVzdF9vb3BzKGN1KTsNCisvLwkJ
CQljdT0gY3UtPmlkLm5leHQ7DQorLy8JCQl9DQorLy8JCX0NCisvLw0KKy8vCQlpZihHLnNv
b3BzLT52aXNpZmxhZyAmIE9PUFNfTUIpIHsNCisvLwkJCU1ldGFCYWxsICptYj0gRy5tYWlu
LT5tYmFsbC5maXJzdDsNCisvLwkJCXdoaWxlKG1iKSB7DQorLy8JCQkJb29wcz0gYWRkX3Rl
c3Rfb29wcyhtYik7DQorLy8JCQkJbWI9IG1iLT5pZC5uZXh0Ow0KKy8vCQkJfQ0KKy8vCQl9
DQorLy8JDQorLy8JCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19MQSkgew0KKy8vCQkJ
TGFtcCAqbGE9IEcubWFpbi0+bGFtcC5maXJzdDsNCisvLwkJCXdoaWxlKGxhKSB7DQorLy8J
CQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhsYSk7DQorLy8JCQkJbGE9IGxhLT5pZC5uZXh0Ow0K
Ky8vCQkJfQ0KKy8vCQl9DQorLy8JCQ0KKy8vCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9P
UFNfSVApIHsNCisvLwkJCUlwbyAqaXBvPSBHLm1haW4tPmlwby5maXJzdDsNCisvLwkJCXdo
aWxlKGlwbykgew0KKy8vCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMoaXBvKTsNCisvLwkJCQlp
cG89IGlwby0+aWQubmV4dDsNCisvLwkJCX0NCisvLwkJfQ0KKy8vCQkNCisvLwkJaWYoRy5z
b29wcy0+dmlzaWZsYWcgJiBPT1BTX01BKSB7DQorLy8JCQlNYXRlcmlhbCAqbWE9IEcubWFp
bi0+bWF0LmZpcnN0Ow0KKy8vCQkJd2hpbGUobWEpIHsNCisvLwkJCQlvb3BzPSBhZGRfdGVz
dF9vb3BzKG1hKTsNCisvLwkJCQltYT0gbWEtPmlkLm5leHQ7DQorLy8JCQl9DQorLy8JCX0N
CisvLwkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX1RFKSB7DQorLy8JCQlUZXggKnRl
eD0gRy5tYWluLT50ZXguZmlyc3Q7DQorLy8JCQl3aGlsZSh0ZXgpIHsNCisvLwkJCQlvb3Bz
PSBhZGRfdGVzdF9vb3BzKHRleCk7DQorLy8JCQkJdGV4PSB0ZXgtPmlkLm5leHQ7DQorLy8J
CQl9DQorLy8JCX0NCisvLwkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX0lNKSB7DQor
Ly8JCQlJbWFnZSAqaW1hPSBHLm1haW4tPmltYWdlLmZpcnN0Ow0KKy8vCQkJd2hpbGUoaW1h
KSB7DQorLy8JCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhpbWEpOw0KKy8vCQkJCWltYT0gaW1h
LT5pZC5uZXh0Ow0KKy8vCQkJfQ0KKy8vCQl9DQorCQkNCiAJfQ0KK2Vsc2Ugew0KKwkJDQor
CS8qIG9ubHkgYmxvY2tzIGZyb20gdGhpcyBzY2VuZSAqLw0KIAkNCi0JDQotDQotDQotCS8q
IHRlc3QgbGlua3MgKi8NCi0Jb29wcz0gRy5zb29wcy0+b29wcy5maXJzdDsNCi0Jd2hpbGUo
b29wcykgew0KLQkJaWYob29wcy0+aGlkZT09MCkgewkNCi0JCQlvbD0gb29wcy0+bGluay5m
aXJzdDsNCi0JCQl3aGlsZShvbCkgew0KLQkJCQl0ZXN0X29vcHNsaW5rKG9sKTsNCi0JCQkJ
b2w9IG9sLT5uZXh0Ow0KKwliYXNlPSBGSVJTVEJBU0U7DQorCXdoaWxlKGJhc2UpIHsNCisJ
CQ0KKwkJLyogbGF5ZXI/ICovDQorCQkJaWYoIChHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNf
TEFZKT09MCB8fCAoYmFzZS0+bGF5ICYgRy5zY2VuZS0+bGF5KSkgew0KKwkJCQlvYj0gYmFz
ZS0+b2JqZWN0Ow0KKwkJCQlpZiAoKEcuc29vcHMtPnZpZXdUeXBlID09IFNFTEVDVElPTl9P
TkxZKSAmJiAhKG9iLT5mbGFnICYgU0VMRUNUKSkgew0KKwkJCQkJYmFzZT0gYmFzZS0+bmV4
dDsNCisJCQkJCWNvbnRpbnVlOw0KKwkJCQl9DQorCQkJCWlmKEcuc29vcHMtPnZpc2lmbGFn
ICYgT09QU19PQikgew0KKwkJCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhvYik7DQorCQkJCX0N
CisJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX01BKSB7DQorCQkJCQlmb3IoYT0w
OyBhPG9iLT50b3Rjb2w7IGErKykgew0KKwkJCQkJCWlmKG9iLT5tYXRbYV0pIHsNCisJCQkJ
CQkJb29wcz0gYWRkX3Rlc3Rfb29wcyhvYi0+bWF0W2FdKTsNCisJCQkJCQkJaWYoRy5zb29w
cy0+dmlzaWZsYWcgJiBPT1BTX1RFKSBhZGRfdGV4dHVyZV9vb3BzKG9iLT5tYXRbYV0pOw0K
KwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAm
IE9PUFNfSVApIG9vcHM9IGFkZF90ZXN0X29vcHMob2ItPmlwbyk7DQorCQkJCQ0KKwkJCQlp
ZD0gb2ItPmRhdGE7DQorCQkJaWYoaWQpIHsNCisJCQkJdHlwZT0gR1MoaWQtPm5hbWUpOw0K
KwkJCQkNCisJCQkJaWYodHlwZT09SURfTUUgJiYgRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BT
X01FKSB7DQorCQkJCQlNZXNoICptZT0gb2ItPmRhdGE7DQorCQkJCQlvb3BzPSBhZGRfdGVz
dF9vb3BzKG9iLT5kYXRhKTsNCisJCQkJCQ0KKwkJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcg
JiBPT1BTX01BKSB7DQorCQkJCQkJZm9yKGE9MDsgYTxtZS0+dG90Y29sOyBhKyspIHsNCisJ
CQkJCQkJaWYobWUtPm1hdFthXSkgew0KKwkJCQkJCQkJb29wcz0gYWRkX3Rlc3Rfb29wcyht
ZS0+bWF0W2FdKTsNCisJCQkJCQkJCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19URSkg
YWRkX3RleHR1cmVfb29wcyhtZS0+bWF0W2FdKTsNCisJCQkJCQkJfQ0KKwkJCQkJCX0NCisJ
CQkJCX0NCisJCQkJCWlmKEcuc29vcHMtPnZpc2lmbGFnICYgT09QU19JUCkgew0KKwkJCQkJ
CWlmKG1lLT5rZXkpIG9vcHM9IGFkZF90ZXN0X29vcHMobWUtPmtleS0+aXBvKTsNCisJCQkJ
CX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmKHR5cGU9PUlEX0NVICYmIEcuc29vcHMtPnZpc2lm
bGFnICYgT09QU19DVSkgew0KKwkJCQkJQ3VydmUgKmN1PSBvYi0+ZGF0YTsNCisJCQkJCW9v
cHM9IGFkZF90ZXN0X29vcHMob2ItPmRhdGEpOw0KKwkJCQkJDQorCQkJCQlpZihHLnNvb3Bz
LT52aXNpZmxhZyAmIE9PUFNfTUEpIHsNCisJCQkJCQlmb3IoYT0wOyBhPGN1LT50b3Rjb2w7
IGErKykgew0KKwkJCQkJCQlpZihjdS0+bWF0W2FdKSB7DQorCQkJCQkJCQlvb3BzPSBhZGRf
dGVzdF9vb3BzKGN1LT5tYXRbYV0pOw0KKwkJCQkJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcg
JiBPT1BTX1RFKSBhZGRfdGV4dHVyZV9vb3BzKGN1LT5tYXRbYV0pOw0KKwkJCQkJCQl9DQor
CQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJaWYoRy5zb29wcy0+dmlzaWZsYWcgJiBPT1BTX0lQ
KSB7DQorCQkJCQkJaWYoY3UtPmlwbykgb29wcz0gYWRkX3Rlc3Rfb29wcyhjdS0+aXBvKTsN
CisJCQkJCQlpZihjdS0+a2V5KSBvb3BzPSBhZGRfdGVzdF9vb3BzKGN1LT5rZXktPmlwbyk7
DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSBpZih0eXBlPT1JRF9NQiAmJiBHLnNvb3Bz
LT52aXNpZmxhZyAmIE9PUFNfTUIpIHsNCisJCQkJCW9vcHM9IGFkZF90ZXN0X29vcHMob2It
PmRhdGEpOw0KKwkJCQkJDQorCQkJCQlpZihHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTUEp
IHsNCisJCQkJCQlNZXRhQmFsbCAqbWI9IG9iLT5kYXRhOw0KKwkJCQkJCWZvcihhPTA7IGE8
bWItPnRvdGNvbDsgYSsrKSB7DQorCQkJCQkJCWlmKG1iLT5tYXRbYV0pIHsNCisJCQkJCQkJ
CW9vcHM9IGFkZF90ZXN0X29vcHMobWItPm1hdFthXSk7DQorCQkJCQkJCQlpZihHLnNvb3Bz
LT52aXNpZmxhZyAmIE9PUFNfVEUpIGFkZF90ZXh0dXJlX29vcHMobWItPm1hdFthXSk7DQor
CQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSBpZih0eXBl
PT1JRF9MQSAmJiBHLnNvb3BzLT52aXNpZmxhZyAmIE9PUFNfTEEpIHsNCisJCQkJCW9vcHM9
IGFkZF90ZXN0X29vcHMob2ItPmRhdGEpOw0KKwkJCQl9DQogCQkJfQ0KIAkJfQ0KLQkJb29w
cz0gb29wcy0+bmV4dDsNCisJCWJhc2U9IGJhc2UtPm5leHQ7DQogCX0NCit9DQorDQogCQ0K
LQlHLnNvb3BzLT5mbGFnICY9IH5TT19ORVdTRUxFQ1RFRDsNCisJCQ0KKwlpZiAoRy5zb29w
cy0+b29wcy5maXJzdCkgew0KKwkJb29wcz0gRy5zb29wcy0+b29wcy5maXJzdDsNCisJCS8q
IHRlc3QgbGlua3MgKi8NCisJCXdoaWxlKG9vcHMpIHsNCisJCQlpZihvb3BzLT5oaWRlPT0w
KSB7CQ0KKwkJCQlvbD0gb29wcy0+bGluay5maXJzdDsNCisJCQkJd2hpbGUob2wpIHsNCisJ
CQkJCXRlc3Rfb29wc2xpbmsob2wpOw0KKwkJCQkJb2w9IG9sLT5uZXh0Ow0KKwkJCQl9DQor
CQkJfQ0KKwkJCW9vcHM9IG9vcHMtPm5leHQ7DQorCQl9DQorCQkNCisJCUcuc29vcHMtPmZs
YWcgJj0gflNPX05FV1NFTEVDVEVEOw0KKwl9DQogfQ0K

--Message-Boundary-17805--