[Jsdoc-user] fix for objects that are extended with this.base member
Status: Inactive
Brought to you by:
mmathews
From: Justin E. <ear...@gm...> - 2005-09-01 01:55:33
|
cGFja2FnZSBKU0RvYzsNCg0KPWhlYWQxIE5BTUUNCg0KSlNEb2MgLSBwYXJzZSBKYXZhU2NyaXB0 IHNvdXJjZSBmaWxlIGZvciBKU0RvYyBjb21tZW50cw0KDQo9aGVhZDEgU1lOT1BTSVMNCg0KQ3Jl YXRlIEphdmFTY3JpcHQgc291cmNlZmlsZXMgY29tbWVudGVkIGluIGEgbWFubmVyIHNpbWlsYXIg dG8gamF2YWRvYw0KKGllLiB3aXRoIGRvY3VtZW50YXRpb24gc3RhcnRpbmcgd2l0aCAnLyoqJyBh bmQgdGhlbiBwYXNzIGEgbGlzdCBvZiByZWZlcmVuY2VzIA0KdG8gSmF2YVNjcmlwdCBzb3VyY2Ug dG8gcGFyc2VfY29kZV90cmVlOg0KDQogICAvKioNCiAgICAqIFRoaXMgaXMgYSBjbGFzcyBmb3Ig ZXhhbXBsZSBwdXJwb3Nlcw0KICAgICogQHBhcmFtIG5hbWUgTmFtZSBmb3IgdGhlIG5ldyBvYmpl Y3QNCiAgICAqIEBjb25zdHJ1Y3Rvcg0KICAgICovDQogICAgZnVuY3Rpb24gTXlDbGFzcyhuYW1l KXsNCiAgICAgIHRoaXMubmFtZSA9IG5hbWU7DQogICAgfQ0KDQogICAkY29kZV90cmVlID0gcGFy c2VfY29kZV90cmVlKEBzcmNfcmVmcyk7DQoNCkEgdHJlZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0 aGUgY29kZSBsYXlvdXQsIGluaGVyaXRhbmNlIGFuZCBkb2N1bWVudGF0aW9uDQppcyByZXR1cm5l ZA0KDQpUbyBjbGVhciB0aGUgY2FjaGUgb2YgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGluIHRoZSBw YXJzZXI6DQoNCiAgIHJlc2V0X3BhcnNlcigpOw0KICAgIA0KDQo9aGVhZDEgREVTQ1JJUFRJT04N Cg0KVGhlIEM8cGFyc2VfY29kZV90cmVlPiBmdW5jdGlvbiByZXF1aXJlcyBhIHJlZiB0byBhIHN0 cmluZyBob2xkaW5nIHRoZQ0Kc291Y2UgY29kZSBvZiBhIGphdmFzY3JpcHQgb2JqZWN0IGZpbGUg b3IgZmlsZXMuIEl0IHJldHVybnMgYSBkYXRhIHN0cnVjdHVyZQ0KdGhhdCBkZXNjcmliZXMgdGhl IG9iamVjdCBoaWVyYXJjaHkgY29udGFpbmVkIGluIHRoZSBzb3VyY2UgZmlsZSwgYXMgd2VsbA0K YXMgaW5jbHVkZWQgZG9jdW1lbnRhdGlvbiBmb3IgYWxsIGZpZWxkcyBhbmQgbWV0aG9kcy4gVGhl IHJlc3VsdGluZw0KZGF0YSBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybSAoZm9yIGVh Y2ggY2xhc3MpOg0KDQogICBDbGFzcw0KICAgICAgfA0KICAgICAgKy0gY2xhc3NuYW1lDQogICAg ICB8DQogICAgICArLSBjb25zdHJ1Y3Rvcl9hcmdzDQogICAgICB8DQogICAgICArLSBleHRlbmRz ICANCiAgICAgIHwNCiAgICAgICstIGNvbnN0cnVjdG9yX2RldGFpbA0KICAgICAgfA0KICAgICAg Ky0gY29uc3RydWN0b3JfdmFycw0KICAgICAgfA0KICAgICAgKy0gY2xhc3NfbWV0aG9kcw0KICAg ICAgfCAgfA0KICAgICAgfCAgKy0gZGVzY3JpcHRpb24NCiAgICAgIHwgIHwNCiAgICAgIHwgICst IG1hcHBlZF9uYW1lDQogICAgICB8ICB8DQogICAgICB8ICArLSBhcmd1bWVudF9saXN0DQogICAg ICB8ICB8DQogICAgICB8ICArLSB2YXJzIA0KICAgICAgfA0KICAgICAgKy0gaW5zdGFuY2VfbWV0 aG9kcw0KICAgICAgfCAgfA0KICAgICAgfCAgKy0gZGVzY3JpcHRpb24NCiAgICAgIHwgIHwNCiAg ICAgIHwgICstIG1hcHBlZF9uYW1lDQogICAgICB8ICB8DQogICAgICB8ICArLSBhcmd1bWVudF9s aXN0DQogICAgICB8ICB8DQogICAgICB8ICArLSB2YXJzIA0KICAgICAgfCANCiAgICAgICstIGNs YXNzX2ZpZWxkcw0KICAgICAgfCAgfA0KICAgICAgfCAgKy0gZmllbGRfZGVzY3JpcHRpb24NCiAg ICAgIHwgIHwNCiAgICAgIHwgICstIGZpZWxkX25hbWUNCiAgICAgIHwgIHwNCiAgICAgIHwgICst IGZpZWxkX3ZhbHVlDQogICAgICB8ICB8DQogICAgICB8ICArLSBmaWVsZF92YXJzDQogICAgICB8 DQogICAgICArLSBpbnN0YW5jZV9maWVsZHMNCiAgICAgIHwgIHwNCiAgICAgIHwgICstIGZpZWxk X2Rlc2NyaXB0aW9uDQogICAgICB8ICB8DQogICAgICB8ICArLSBmaWVsZF9uYW1lDQogICAgICB8 ICB8DQogICAgICB8ICArLSBmaWVsZF92YWx1ZQ0KICAgICAgfCAgfA0KICAgICAgfCAgKy0gZmll bGRfdmFycw0KICAgICAgfA0KICAgICAgKy0gaW5uZXJfY2xhc3Nlcw0KICAgICAgfCAgfA0KICAg ICAgfCAgKy0gY2xhc3NfbmFtZQ0KICAgICAgfA0KICAgICAgKy0gaW5oZXJpdHMNCiAgICAgICAg IHwNCiAgICAgICAgICstIENsYXNzDQogICAgICAgICAgICB8DQogICAgICAgICAgICArLSBpbnN0 YW5jZV9maWVsZHMNCiAgICAgICAgICAgIHwNCiAgICAgICAgICAgICstIGluc3RhbmNlX21ldGhv ZHMNCg0KDQpUaGVyZSBpcyBhbHNvIGFuIGFkZGl0aW9uYWwgZW50cnkgdW5kZXIgdGhlIGtleSBf X0ZJTEVTX18gdGhhdCBjb250YWlucw0Ka2V5ZWQgZW50cmllcyBmb3IgZWFjaCBAdGFnIHRoYXQg d2FzIGRlZmluZWQgaW4gdGhlIGZpcnN0IEpTRG9jIGNvbW1lbnQNCmJsb2NrIHdpdGggYSBAZmls ZW92ZXJ2aWV3IHRhZy4gRWFjaCBlbnRyeSB1bmRlciBfX0ZJTEVTX18gaXMga2V5ZWQgYnkNCmZp bGVuYW1lLCBhbmQgaXMgYSBoYXNoIHJlZmVyZW5jZS4NCg0KPWhlYWQxIEFVVEhPUlMNCg0KR2Fi cmllbCBSZWlkIGdhYl9yZWlkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCwNCk1pY2hhZWwgTWF0aGV3 cyBtaWNoYWVsQG1hdGhld3MubmV0DQoNCj1jdXQNCg0KcmVxdWlyZSA1LjAwMDsNCnVzZSBzdHJp Y3Q7DQp1c2Ugd2FybmluZ3M7DQp1c2UgRXhwb3J0ZXI7DQoNCiMgUmVjdXJzaW9uIGxpbWl0IGZv ciByZWN1cnNpdmUgcmVnZXhlcw0KdXNlIGNvbnN0YW50IFJFQ1VSU0lPTiAgPT4gMTA7DQoNCnVz ZSB2YXJzIHF3LyBASVNBIEBFWFBPUlQgLzsNCg0KQElTQSA9IHF3KEV4cG9ydGVyKTsNCkBFWFBP UlQgPSBxdyhwYXJzZV9jb2RlX3RyZWUgY29uZmlndXJlX3BhcnNlciByZXNldF9wYXJzZXIpOw0K DQojIFN0YXRlDQp1c2UgdmFycyBxdy8gJUNMQVNTRVMgJUZVTkNUSU9OUyAlQ09ORklHICRDVFhf RklMRSAvOw0KDQojIFJlZ2V4ZXMNCnVzZSB2YXJzIHF3LyAkQkFMX1BBUkVOICRCQUxfQlJBQ0Ug JFNRVU9URSAkRFFVT1RFICROT05RVU9URSANCiAgICAgICAgICAgICAgICRGVU5DX0RFRiAkUkVU X0ZVTkNfREVGICRBTk9OX0ZVTkNUSU9OICRMSVRFUkFMICRGVU5DX0NBTEwgDQogICAgICAgICAg ICAgICAkSlNET0NfQ09NTUVOVCAkTUxJTkVfQ09NTUVOVCAkU0xJTkVfQ09NTUVOVCAvOw0KDQoj IFRoaXMgbGltaXRzIG5lc3RlZCBicmFjZXMgdG8gMzAgbGV2ZWxzLCBidXQgaXMgbXVjaCBtb3Jl IA0KIyBzdGFibGUgdGhhbiB1c2luZyBhIGR5bmFtaWMgcmVnZXgNCiRCQUxfQlJBQ0UgICAgICA9 IHFyL1x7KD86W15ce1x9XSkqXH0vOw0KJEJBTF9QQVJFTiAgICAgID0gcXIvXCgoPzpbXigpXSkq XCkvOw0KZm9yICgxLi5SRUNVUlNJT04pew0KICAgICRCQUxfQlJBQ0UgID0gcXIvXHsoPzpbXlx7 XH1dfCRCQUxfQlJBQ0UpKlx9LzsNCiAgICAkQkFMX1BBUkVOICA9IHFyL1woKD86W14oKV18JEJB TF9QQVJFTikqXCkvOw0KfQ0KJFNRVU9URSAgICAgICAgID0gcXJ7J1teJ1xcXSooPzpcXC5bXidc XF0qKSonfTsNCiREUVVPVEUgICAgICAgICA9IHFyeyJbXiJcXF0qKD86XFwuW14iXFxdKikqIn07 DQokTk9OUVVPVEUgICAgICAgPSBxcntbXiInL119Ow0KJEZVTkNfREVGICAgICAgID0gcXIvZnVu Y3Rpb25ccytcdysoPzpcLlx3KykqXHMqJEJBTF9QQVJFTlxzKiRCQUxfQlJBQ0UvOw0KJFJFVF9G VU5DX0RFRiAgID0gcXIvZnVuY3Rpb25ccysoXHcrKD86XC5cdyspKilccyooJEJBTF9QQVJFTilc cyooJEJBTF9CUkFDRSkvOw0KJEFOT05fRlVOQ1RJT04gID0gcXIvZnVuY3Rpb25ccyokQkFMX1BB UkVOXHMqJEJBTF9CUkFDRS87DQokTElURVJBTCAgICAgICAgPSBxci8kRFFVT1RFfCRTUVVPVEV8 XGQrLzsNCiRGVU5DX0NBTEwgICAgICA9IHFyLyg/Om5ld1xzKyk/XHcrKD86XC5cdyspKlxzKiRC QUxfUEFSRU4vOw0KJEpTRE9DX0NPTU1FTlQgID0gcXJ7L1wqXCpbXipdKlwqKyg/OlteLypdW14q XSpcKispKi99Ow0KJE1MSU5FX0NPTU1FTlQgID0gcXJ7L1wqW14qXSpcKisoPzpbXi8qXVteKl0q XCorKSovfTsNCiRTTElORV9DT01NRU5UICA9IHFyey8vW15cbl0qfTsNCg0KDQojDQojIFB1Ymxp YyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBkYXRhc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUg SlMgY2xhc3Nlcw0KIyBhbmQgdGhlaXIgZG9jdW1lbnRhdGlvbg0KIw0Kc3ViIHBhcnNlX2NvZGVf dHJlZSB7DQoNCiAgICAmaW5pdGlhbGl6ZV9wYXJzZXI7DQoNCiAgICAjDQogICAgIyBUaGlzIChJ IG1lYW4gdGhlICI8PCRfPj4iKSBpcyBwcmV0dHkgaGFja3ksIGJ1dCBJJ3ZlIG1hZGUgaXQgdGhp cyANCiAgICAjIHdheSB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGFu eW9uZSB3aG8ncyBhdXRvbWF0aWNhbGx5IA0KICAgICMgZXhwZWN0aW5nIHRoaXMgdG8gd29yayB3 aGVuIHRoZXkgdGhyb3cgYW4gYXJyYXkgb2YgcmVmcyB0byBpdC4gSWYgeW91J3JlDQogICAgIyB1 c2luZyB0aGlzIGZvciB5b3VyIG93biB3b3JrLCBwbGVhc2UgZG9uJ3QgZXhwZWN0IHRvIGJlIGFi bGUgdG8gDQogICAgIyBwdXQgdGhlIGNvbnRleHQgZmlsZSBpbiBsaWtlIHRoaXMgaW4gdGhlIGZ1 dHVyZQ0KICAgICMNCiAgICBmb3IgbXkgJGpzX3NyYyAobWFwIHsgcmVmIGFuZCAkeyRffSBvciAi PDwkXz4+IiB9IEBfKXsNCiAgICAgICAgaWYgKCRqc19zcmMgPX4gL148PCguKyk+PiQvKXsNCiAg ICAgICAgICAgICRDVFhfRklMRSA9ICQxOw0KICAgICAgICAgICAgbmV4dDsNCiAgICAgICAgfQ0K DQogICAgICAgICMgcGVybGlmeSBvcyBsaW5lLWVuZGluZ3MNCiAgICAgICAgJGpzX3NyYyA9fiBz LyhcclxufFxyKS9cbi9nOw0KDQogICAgICAgICZwYXJzZV9maWxlX2luZm8oJGpzX3NyYyk7DQog ICAgICAgICRqc19zcmMgPSAmcHJlcHJvY2Vzc19zb3VyY2UoJGpzX3NyYyk7DQogICAgICAgICZm ZXRjaF9mdW5jc19hbmRfY2xhc3NlcygkanNfc3JjKTsNCiAgICB9DQoNCiAgICAmbWFwX2FsbF9w cm9wZXJ0aWVzKCk7DQogICAgJmJ1aWxkX2NsYXNzX2hpZXJhcmNoeSgpOyANCiAgICAmc2V0X2Ns YXNzX2NvbnN0cnVjdG9ycygpOw0KICAgICZmaWx0ZXJfZ2xvYmFsczsNCg0KICAgIHdoaWxlICht eSAoJGNsYXNzbmFtZSwgJGNsYXNzKSA9IGVhY2ggJUNMQVNTRVMpew0KICAgICAgICBkZWxldGUg JGNsYXNzLT57X2NsYXNzX3Byb3BlcnRpZXN9Ow0KICAgICAgICBkZWxldGUgJGNsYXNzLT57X2lu c3RhbmNlX3Byb3BlcnRpZXN9Ow0KICAgICAgICAkY2xhc3MtPntjbGFzc25hbWV9ID0gJGNsYXNz bmFtZSB1bmxlc3MgJGNsYXNzbmFtZSBlcSAnX19GSUxFU19fJzsNCiAgICB9DQogICAgcmV0dXJu IFwlQ0xBU1NFUzsNCn0NCg0KIw0KIyBQYXJzZXMgdXAgYSBhIGpzZG9jIGNvbW1lbnQgaW50byBp dHMgY29tcG9uZW50IHBhcnRzDQojIFBBUkFNOiBUaGUgZG9jdW1lbnQgc3RyaW5nIHRvIGJlIHBh cnNlZA0KIw0Kc3ViIHBhcnNlX2pzZG9jX2NvbW1lbnQgew0KICAgIG15ICgkZG9jLCAkcmF3KSA9 IEBfOyANCiAgICANCiAgICAjIFJlbW92ZSBleGNlc3MgJyonIGNoYXJhY3RlcnMNCiAgICAkZG9j ID1+IHMvXlsqXHNdKihbXipdLio/KVsqXHNdKiQvJDEvczsNCiAgICAkZG9jID1+IHMvXlxzKlwq Ly9nbTsNCg0KICAgIG15ICVwYXJzZWQgPSAoKTsgIyByZW1lbWJlciBlYWNoIHBhcnQgdGhhdCBp cyBwYXJzZWQNCg0KICAgICMgdGhlIGZpcnN0IHBhcmFncmFwaCBjb3VsZCBiZSBhIHN1bW1hcnkg c3RhdGVtZW50DQogICAgIyBhIHBhcmFncmFwaCBtYXkgZm9sbG93IG9mIHZhcmlhYmxlIGRlZnMg KHZhcmlhYmxlIG5hbWVzIHN0YXJ0IHdpdGggIkAiKQ0KICAgIG15ICgkc3VtbWFyeSwgJHZhcmlh YmxlX3N0cikgPSAkZG9jID1+IA0KICAgICAgICAvXlxzKg0KICAgICAgICAoDQogICAgICAgICAg ICAoPzpbXntAXXwoPzpce1teQF0pKSoNCiAgICAgICAgICAgICg/Olx7XEANCiAgICAgICAgICAg ICg/Oltee0BdfCg/Olx7W15AXSkpKikqDQogICAgICAgICkNCiAgICAgICAgXHMqDQogICAgICAg ICguKikNCiAgICAgICAgJC94czsNCiAgICAkc3VtbWFyeSA9fiBzL15ccyooXFMuKj8pXHMqJC8k MS9zOw0KICAgICRwYXJzZWR7c3VtbWFyeX0gPSAkc3VtbWFyeTsNCg0KICAgICMgdHdvIHR5cGVz IG9mIHZhcmlhYmxlIGRlZiBjYW4gYmUgZGVhbHQgd2l0aCBoZXJlOg0KICAgICMgYSBAYXJndW1l bnQgaGFzIGEgdHdvLXBhcnQgdmFsdWUgLS0gdGhlIGFyZyBuYW1lIGFuZCBhIGRlc2NyaXB0aW9u DQogICAgIyBhbGwgb3RoZXIgQDx2YXJpYWJsZXM+IG9ubHkgaGF2ZSBhIHNpbmdsZSB2YWx1ZSBl YWNoIChhbHRob3VnaCB0aGVyZSBtYXkNCiAgICAjIGJlIG1hbnkgdmFyaWFibGVzIHdpdGggdGhl IHNhbWUgbmFtZSkNCiAgICBpZigkdmFyaWFibGVfc3RyKSB7DQogICAgICAgIG15ICV2YXJzID0g KCk7DQogICAgICAgIHdoaWxlICgkdmFyaWFibGVfc3RyID1+IC8NCiAgICAgICAgICAgICg/PCFb XHtcd10pXEAoXHcrKSAgICAgICMgVGhlIEBhdHRyaWJ1dGUsIGJ1dCBub3QgYSB7QGxpbmt9DQog ICAgICAgICAgICBccyoNCiAgICAgICAgICAgICgoPzpce1xAfFx3XEB8W15cQF0pKikgICAjIEV2 ZXJ5dGhpbmcgdXAgdG8gdGhlIG5leHQgQGF0dHJpYnV0ZQ0KICAgICAgICAgICAgL2dzeCkgew0K ICAgICAgICAgICAgbXkgKCRuYW1lLCAkdmFsKSA9ICgkMSwgJDIpOw0KICAgICAgICAgICAgJHZh cnN7JG5hbWV9ID0gW10gdW5sZXNzIGRlZmluZWQgJHZhcnN7JG5hbWV9Ow0KICAgICAgICAgICAg JHZhbCA9fiBzL1xuLyAvZyB1bmxlc3MgJHJhdyBvciAkbmFtZSBlcSAnY2xhc3MnOw0KICAgICAg ICAgICAgcHVzaChAeyR2YXJzeyRuYW1lfX0sICgkdmFsID1+IC9eXHMqKC4qKVxzKiQvcylbMF0p Ow0KICAgICAgICB9DQogICAgICAgICRwYXJzZWR7dmFyc30gPSBcJXZhcnM7DQogICAgfQ0KICAg IHJldHVybiBcJXBhcnNlZDsNCn0NCg0KIw0KIyBCdWlsZHMgdXAgdGhlIGdsb2JhbCBGVU5DVElP TiBhbmQgQ0xBU1NFUyBoYXNoZXMNCiMgd2l0aCB0aGUgbmFtZXMgb2YgZnVuY3Rpb25zIGFuZCBj bGFzc2VzDQojDQpzdWIgZmV0Y2hfZnVuY3NfYW5kX2NsYXNzZXMgew0KICAgIG15ICRqc19zcmMg PSBzaGlmdDsNCiAgIA0KICAgIHdoaWxlICgkanNfc3JjID1+IG0hDQogICAgICAgICMgRG9jdW1l bnRhdGlvbg0KICAgICAgICAoPzoNCiAgICAgICAgICAgIC9cKlwqICAgICAgICAgICAgICAgICAg ICAgICAgICMgT3BlbmluZyBvZiBkb2NzDQogICAgICAgICAgICAgICAgKFteL10rDQogICAgICAg ICAgICAgICAgICAgICg/Oig/OlteKl0vKStbXi9dKykqDQogICAgICAgICAgICAgICAgKQ0KICAg ICAgICAgICAgXCovXHMqXG5ccyogICAgICAgICAgICAgICAgICAgIyBDbG9zaW5nIG9mIGRvY3MN CiAgICAgICAgKT8NCiAgICAgICAgIA0KICAgICAgIA0KICAgICAgICAgDQogICAgICAgICMgRnVu Y3Rpb24NCiAgICAgICAgKD86KD86ZnVuY3Rpb25ccysoXHcrKVxzKihcKC4qP1wpKVxzKlx7KXwg ICAgICAgICANCiAgICAgICAgIA0KICAgICAgICAjIEFub255bW91cyBmdW5jdGlvbg0KICAgICAg ICAoPzooXHcrKD86XC5cdyspKj8pKFwucHJvdG90eXBlKT9cLihcdyspXHMqPVxzKmZ1bmN0aW9u XHMqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICg/Olx3K1xzKik/KFwoLio/XCkpKXwgIA0KDQogICAgICAgICMgSW5zdGFuY2UgcHJvcGVy dHkgDQogICAgICAgICg/OihcdysoPzpcLlx3KykqPylcLnByb3RvdHlwZVwuKFwkP1x3Kylccyo9 XHMqKC4qPylccypbO1xuXSl8ICAgIA0KDQogICAgICAgICNJbmhlcml0YW5jZQ0KICAgICAgICAo PzooXHcrKD86XC5cdyspKj8pXC5wcm90b3R5cGVccyo9DQogICAgICAgICAgICAgICAgICAgICAg ICAgICBccypuZXdccyooXHcrKD86XC5cdyspKj8pKD86XCguKj9cKSk/XHMqWztcbl0pfCANCg0K ICAgICAgICAjIENsYXNzIHByb3BlcnR5DQogICAgICAgICg/OihcdysoPzpcLlx3KykqPylcLihc JD9cdyspXHMqPVxzKiguKj8pXHMqWztcbl0pKSAgICAgICAgDQogICAgIWdzeCl7DQogICAgCQ0K ICAgICAgICBteSAoJGRvYywgJGZuYW1lMSwgICRhcmdsaXN0MSwgJGNuYW1lMSwgJHByb3RvdHlw ZSwgJGZuYW1lMiwgJGFyZ2xpc3QyKQ0KICAgICAgICAgICAgPSAoJDEgfHwgJycsICQyLCAkMywg JDQsICQ1LCAkNiwgJDcpOw0KICAgICAgICBteSAoJGNuYW1lMiwgJHByb3BuYW1lMSwgJHByb3B2 YWwxKSA9ICgkOCwgJDksICQxMCk7DQogICAgICAgIG15ICgkY25hbWUzLCAkYmFzZWNsYXNzKSA9 ICgkMTEsICQxMik7DQogICAgICAgIG15ICgkY25hbWU0LCAkcHJvcG5hbWUyLCAkcHJvcHZhbDIp ID0gKCQxMywgJDE0LCAkMTUpOw0KICAgICAgICAgDQogICAgICAgIG5leHQgaWYgJGRvYyA9fiAv XEBpZ25vcmVcYi87DQoNCiAgICAgICAgDQoNCg0KICAgICAgICBpZiAoJGZuYW1lMSl7DQogICAg ICAgICAgICAmYWRkX2Z1bmN0aW9uKCRkb2MsICRmbmFtZTEsICRhcmdsaXN0MSk7DQogICAgICAg ICAgICBpZiAoJGRvYyA9fiAvXEAoPzpjb25zdHJ1Y3RvcnxjbGFzc3xiYXNlKVxiLyl7DQogICAg ICAgICAgICAgICAgIyBBZGQgYWxsIEBjb25zdHJ1Y3RvciBhbmQgQGNsYXNzIG1ldGhvZHMgYXMg Y2xhc3Nlcw0KICAgICAgICAgICAgICAgICZhZGRfY2xhc3MoJGZuYW1lMSwgJGRvYyk7DQogICAg ICAgICAgICB9IA0KICAgICAgICB9IGVsc2lmICgkY25hbWUxICYmICRmbmFtZTIgJiYgJEZVTkNU SU9OU3skY25hbWUxfSl7DQogICAgICAgICAgICAjIEFub255bW91cyBmdW5jdGlvbnMgYWRkZWQg b250byBhIGNsYXNzIG9yIGNsYXNzIHByb3RvdHlwZQ0KICAgICAgICAgICAgCQ0KICAgICAgICAg ICAgJmFkZF9hbm9ueW1vdXNfZnVuY3Rpb24oJGRvYywgJGNuYW1lMSwgJGZuYW1lMiwgDQogICAg ICAgICAgICAgICAgJGFyZ2xpc3QyLCBub3QgZGVmaW5lZCgkcHJvdG90eXBlKSk7DQoNCiAgICAg ICAgfSBlbHNpZiAoJGNuYW1lMSAmJiAkZm5hbWUyICYmIG5vdCBkZWZpbmVkKCRGVU5DVElPTlN7 JGNuYW1lMX0pKXsNCiAgICAgICAgICAgIGlmICgkZG9jID1+IC9cQChhZGRvbnxiYXNlfGNvbnN0 cnVjdG9yKVxiLyANCiAgICAgICAgICAgICAgICAgICAgfHwgJHByb3RvdHlwZSB8fCAkQ0xBU1NF U3skY25hbWUxfSl7DQogICAgICAgICAgICAgICAgIyBDYWxsZWQgZm9yIG1ldGhvZHMgYWRkZWQg dG8gdGhlIHByb3RvdHlwZSBvZiBjb3JlIGNsYXNzZXMNCiAgICAgICAgICAgICAgICAmYWRkX2Fu b255bW91c19mdW5jdGlvbigkZG9jLCAkY25hbWUxLCAkZm5hbWUyLCANCiAgICAgICAgICAgICAg ICAgICAgJGFyZ2xpc3QyLCBub3QgZGVmaW5lZCgkcHJvdG90eXBlKSk7DQogICAgICAgICAgICB9 DQoNCiAgICAgICAgfSBlbHNpZiAoJGNuYW1lMiAmJiAkcHJvcG5hbWUxPX4gL2Jhc2UvICYmIGRl ZmluZWQoJHByb3B2YWwxKSkgew0KICAgICAgICAJCSNiYXNlIHByb3BlcnR5IGNvcnJlY3Rpb24N CiAgICAgICAgICAgIAkmc2V0X2Jhc2VfY2xhc3MoJGNuYW1lMiwgJHByb3B2YWwxKTsNCiAgICAg ICAgfSBlbHNpZiAoJGNuYW1lMiAmJiAkcHJvcG5hbWUxICYmIGRlZmluZWQoJHByb3B2YWwxKSkg ew0KICAgICAgICAJIA0KICAgICAgICAgICAgJmFkZF9wcm9wZXJ0eSgkZG9jLCAkY25hbWUyLCAk cHJvcG5hbWUxLCAkcHJvcHZhbDEsIDApOw0KICAgICAgICB9IGVsc2lmICgkY25hbWUzICYmICRi YXNlY2xhc3Mpew0KICAgICAgICAjCXByaW50ICJbVEVTVF0gNDQ0NCAiIC4gJGNuYW1lMyAuICIg IiAuICRiYXNlY2xhc3MgLiAiXG4iOw0KICAgICAgICAgICAgJnNldF9iYXNlX2NsYXNzKCRjbmFt ZTMsICRiYXNlY2xhc3MpOw0KICAgICAgICB9IGVsc2lmICgkY25hbWU0ICYmICRwcm9wbmFtZTIg JiYgZGVmaW5lZCgkcHJvcHZhbDIpIA0KICAgICAgICAgICAgICAgICAgICAmJiAkcHJvcG5hbWUy IG5lICdwcm90b3R5cGUnIA0KICAgICAgICAgICAgICAgICAgICAmJiAkY25hbWU0IG5lICd0aGlz Jyl7DQogICAgICAgICMgcHJpbnQgIltURVNUXSA1NTU1ICIgLiAkY25hbWU0IC4gIiAiIC4gJHBy b3BuYW1lMiAuICIgIiAuICRwcm9wdmFsMiAuICJcbiI7DQogICAgICAgICAgICBpZiAoJEZVTkNU SU9OU3skY25hbWU0fSANCiAgICAgICAgICAgICAgICB8fCAkQ0xBU1NFU3skY25hbWU0fSANCiAg ICAgICAgICAgICAgICB8fCAkanNfc3JjID1+IC9mdW5jdGlvblxzKlxRJGNuYW1lNFxFXGIvKXsN CiAgICAgICAgICAgICAgICAgICAgJmFkZF9wcm9wZXJ0eSgkZG9jLCAkY25hbWU0LCAkcHJvcG5h bWUyLCAkcHJvcHZhbDIsIDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0K DQojDQojIEFkZCBhIGZ1bmN0aW9uIHRoYXQgaXMgZ2l2ZW4gYXMgQ2xhc3MucHJvdG90eXBlLmJs YWggPSBmdW5jdGlvbigpey4uLn0NCiMNCnN1YiBhZGRfYW5vbnltb3VzX2Z1bmN0aW9uIHsNCiAg ICBteSAoJGRvYywgJGNsYXNzLCAkZnVuY3Rpb25fbmFtZSwgJGFyZ19saXN0LCAkaXNfY2xhc3Nf cHJvcCkgPSBAXzsNCg0KICAgICMgSnVzdCBnZXQgb3V0IGlmIHRoZSBjbGFzcyBpcyBjYWxsZWQg J3RoaXMnLiBSZWFzb24gZm9yIHRoaXMgaXMgdGhhdA0KICAgICMgYmluZGluZyBtZXRob2RzIHRv ICd0aGlzJyBzaG91bGQgYWxyZWFkeSBiZSBjb252ZXJ0ZWQgdG8gYmluZGluZyBtZXRob2RzDQog ICAgIyB0byB0aGUgcHJvdG90eXBlLCB0aGVyZWZvcmUgYmluZGluZyB0byAndGhpcycgaXMgb25s eSBwb3NzaWJsZSBpbg0KICAgICMgbWVtYmVyIGZ1bmN0aW9ucywgYW5kIGlzIHRoZXJlZm9yZSBu b3QgY29uc2lkZXJlZCBzdGF0aWMgb3IgY29uc2lzdGVudA0KICAgICMgZW5vdWdoIHRvIGJlIGRv Y3VtZW50ZWQuDQogICAgcmV0dXJuIHVubGVzcyAkY2xhc3MgbmUgJ3RoaXMnOw0KICAgICZhZGRf Y2xhc3MoJGNsYXNzKTsNCiAgICBteSAkZmFrZV9uYW1lID0gIl9fJGNsYXNzLiRmdW5jdGlvbl9u YW1lIjsNCiAgIA0KICAgICMgVGhpcyBpcyBkaXJ0eQ0KICAgIG15ICRpc19wcml2YXRlID0gJGRv YyA9fiAvXEBwcml2YXRlXGIvOw0KDQogICAgJmFkZF9mdW5jdGlvbigkZG9jLCAkZmFrZV9uYW1l LCAkYXJnX2xpc3QsICRpc19wcml2YXRlKSBhbmQNCiAgICAgICAgJmFkZF9wcm9wZXJ0eSgkZG9j LCAkY2xhc3MsICRmdW5jdGlvbl9uYW1lLCAkZmFrZV9uYW1lLCAkaXNfY2xhc3NfcHJvcCk7DQog ICAgDQogICAgJmFkZF9jbGFzcygiJGNsYXNzLiRmdW5jdGlvbl9uYW1lIiwgJGRvYykgDQogICAg ICAgIGlmICRkb2MgPX4gL1xAKD86Y29uc3RydWN0b3J8Y2xhc3MpXGIvOw0KfQ0KDQoNCiMgDQoj IEFkZCBhIGNsYXNzIHRvIHRoZSBnbG9iYWwgQ0xBU1NFUyBoYXNoDQojDQpzdWIgYWRkX2NsYXNz IHsNCiAgICBteSAkY2xhc3MgPSBzaGlmdDsNCiAgICB3YXJuICJDYW4ndCBhZGQgJ3RoaXMnIGFz IGEgY2xhc3MsIHBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCEiIA0KICAgICAgICBpZiAkY2xhc3Mg ZXEgJ3RoaXMnOw0KICAgIG15ICRjbGFzc19kb2MgPSBzaGlmdCB8fCAnJzsNCiAgICBpZiAoISRD TEFTU0VTeyRjbGFzc30pew0KICAgICAgICAkQ0xBU1NFU3skY2xhc3N9ID0ge307DQogICAgICAg ICRDTEFTU0VTeyRjbGFzc30tPnskX30gPSBbXSBmb3IgcXcoaW5zdGFuY2VfZmllbGRzIGNsYXNz X2ZpZWxkcyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z dGFuY2VfbWV0aG9kcyBjbGFzc19tZXRob2RzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlubmVyX2NsYXNzZXMpOw0KICAgIH0NCiAgICB1bmxlc3MgKCRDTEFT U0VTeyRjbGFzc30tPntleHRlbmRzfSl7DQogICAgICAgICZzZXRfYmFzZV9jbGFzcygkY2xhc3Ms ICQxKSANCiAgICAgICAgICAgIGlmICRjbGFzc19kb2MgPX4gL1xAYmFzZVxzKyhcdysoPzpcLlx3 KykqKS87DQogICAgfQ0KfQ0KDQojDQojIFNldCB0aGUgYmFzZSBjbGFzcyBmb3IgYSBnaXZlbiBj bGFzcw0KIw0Kc3ViIHNldF9iYXNlX2NsYXNzIHsNCiAgICBteSAoJGNsYXNzLCAkYmFzZV9jbGFz cykgPSBAXzsNCiAgICAmYWRkX2NsYXNzKCRjbGFzcyk7DQogICAgJENMQVNTRVN7JGNsYXNzfS0+ e2V4dGVuZHN9ID0gJGJhc2VfY2xhc3MNCiAgICAgICAgdW5sZXNzICRDTEFTU0VTeyRjbGFzc30t PntleHRlbmRzfTsNCn0NCg0KIw0KIyBBZGQgYSBwcm9wZXJ0eSwgZWl0aGVyIGEgY2xhc3Mgb3Ig aW5zdGFuY2UgbWV0aG9kIG9yIGZpZWxkDQojDQpzdWIgYWRkX3Byb3BlcnR5IHsNCiAgICBteSAo JGRvYywgJGNsYXNzLCAkcHJvcGVydHksICR2YWx1ZSwgJGlzX2NsYXNzX3Byb3BlcnR5KSA9IEBf Ow0KICAgICZhZGRfY2xhc3MoJGNsYXNzKTsNCiAgICByZXR1cm4gaWYgJHByb3BlcnR5IGVxICdj b25zdHJ1Y3Rvcic7DQogICAgbXkgJHBhcnNlZF9kb2MgPSAmcGFyc2VfanNkb2NfY29tbWVudCgk ZG9jKTsNCiAgICAkZG9jID0gJHBhcnNlZF9kb2MtPntzdW1tYXJ5fTsNCiAgICBteSAka2V5ID0g JGlzX2NsYXNzX3Byb3BlcnR5ID8gJ19jbGFzc19wcm9wZXJ0aWVzJyA6ICdfaW5zdGFuY2VfcHJv cGVydGllcyc7DQogICAgZm9yIG15ICRjbGFzc3JlZiAoQHskQ0xBU1NFU3skY2xhc3N9LT57JGtl eX19KXsNCiAgICAgICAgaWYgKCRjbGFzc3JlZi0+e3Byb3BlcnR5X25hbWV9IGVxICRwcm9wZXJ0 eSl7DQogICAgICAgICAgICAjIFdoaW5lIGFib3V0IHJlYmluZGluZyBmdW5jdGlvbnMgdG8gY2xh c3Nlcw0KICAgICAgICAgICAgaWYgKCRGVU5DVElPTlN7JHZhbHVlfSl7DQogICAgICAgICAgICAg ICAgd2FybiAiQWxyZWFkeSBib3VuZCBwcm9wZXJ0eSAnJHByb3BlcnR5JyB0byAnJGNsYXNzJ1xu IjsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAN CiAgICAgICAgICAgICMgT25seSB0YWtlIG9uIG5ldyBhdHRyaWJ1dGVzIA0KICAgICAgICAgICAg JGNsYXNzcmVmLT57cHJvcGVydHlfZG9jfSB8fD0gJGRvYzsNCiAgICAgICAgICAgICRjbGFzc3Jl Zi0+e3Byb3BlcnR5X3ZhcnN9IHx8PSAkcGFyc2VkX2RvYy0+e3ZhcnN9Ow0KICAgICAgICAgICAg cmV0dXJuOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVzaCBAeyRDTEFTU0VTeyRjbGFzc30t Pnska2V5fX0sIHsNCiAgICAgICAgcHJvcGVydHlfZG9jID0+ICRkb2MsDQogICAgICAgIHByb3Bl cnR5X25hbWUgPT4gJHByb3BlcnR5LA0KICAgICAgICBwcm9wZXJ0eV92YWx1ZSA9PiAkdmFsdWUs DQogICAgICAgIHByb3BlcnR5X3ZhcnMgPT4gJHBhcnNlZF9kb2MtPnt2YXJzfSANCiAgICB9Ow0K fQ0KDQoNCiMNCiMgQWRkIGEgZnVuY3Rpb24gYW5kIGl0cyBkb2N1bWVudGF0aW9uIHRvIHRoZSBn bG9iYWwgRlVOQ1RJT04gaGFzaA0KIw0Kc3ViIGFkZF9mdW5jdGlvbiB7DQogICAgbXkgKCRkb2Ms ICRmdW5jdGlvbiwgJGFyZ19saXN0LCAkaXNfcHJpdmF0ZSkgPSBAXzsNCg0KICAgICMgY2xlYW4g cmVtYWluaW5nIGNvbW1lbnRzIG91dCBvZiBhcmcgbGlzdA0KICAgICMgKGFsbCBvdGhlcnMgYXJl IGFscmVhZHkgZ29uZSkNCiAgICAjIEFnYWluLCB0YWtlbiBmcm9tIEplZmZyZXkgRnJpZWRsJ3Mg Ik1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zIg0KICAgIHsNCiAgICAgICAgbm8gd2Fybmlu Z3M7DQogICAgICAgICRhcmdfbGlzdCA9fiBzLw0KICAgICAgICAgICAgKCROT05RVU9URSt8DQog ICAgICAgICAgICAkRFFVT1RFJE5PTlFVT1RFKnwNCiAgICAgICAgICAgICRTUVVPVEUkTk9OUVVP VEUqKQ0KICAgICAgICAgICAgfCRNTElORV9DT01NRU5UfCRTTElORV9DT01NRU5ULyQxL2d4Ow0K ICAgIH0NCg0KICAgIGlmICgkRlVOQ1RJT05TeyRmdW5jdGlvbn0pew0KICAgICAgICB3YXJuICJG dW5jdGlvbiAnJGZ1bmN0aW9uJyBhbHJlYWR5IGRlY2xhcmVkXG4iOw0KICAgICAgICB1bmxlc3Mg KCRkb2MgJiYgISRGVU5DVElPTlN7JGZ1bmN0aW9ufS0+e2RvY3VtZW50YXRpb259LT57c3VtbWFy eX0pew0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICB9DQogICAgJEZVTkNU SU9OU3skZnVuY3Rpb259ID0ge307DQogICAgbXkgJGZ1bmMgPSAkRlVOQ1RJT05TeyRmdW5jdGlv bn07DQogICAgJGFyZ19saXN0IGFuZCAkZnVuYy0+e2FyZ3VtZW50X2xpc3R9ID0gam9pbigiICIs IHNwbGl0KCJcXHMrIiwgJGFyZ19saXN0KSkNCiAgICAgICAgb3IgJGZ1bmMtPnthcmd1bWVudF9s aXN0fSA9ICIoKSI7DQoNCiAgICBteSAkZG9jdW1lbnRhdGlvbiA9IHBhcnNlX2pzZG9jX2NvbW1l bnQoJGRvYyk7DQogICAgaWYgKCRkb2N1bWVudGF0aW9uLT57dmFyc30tPnttZW1iZXJ9KXsNCiAg ICAgICAgbXkgKCRjbGFzc25hbWUpID0gbWFwIHsgcy9eXHMqKFxTKilccyokLyQxLzsgJF8gfSAN CiAgICAgICAgICAgIEB7JGRvY3VtZW50YXRpb24tPnt2YXJzfS0+e21lbWJlcn19Ow0KICAgICAg ICAmYWRkX3Byb3BlcnR5KCRkb2MsICRjbGFzc25hbWUsICRmdW5jdGlvbiwgJGZ1bmN0aW9uLCAw KQ0KICAgICAgICAgICAgaWYgJGNsYXNzbmFtZSA9fiAvXHcrLzsNCiAgICB9DQogICAgbXkgJGZ1 bmN0aW9uX3JlZiA9ICRGVU5DVElPTlN7JGZ1bmN0aW9ufTsNCg0KICAgICRmdW5jdGlvbl9yZWYt Pntkb2N1bWVudGF0aW9ufSA9ICRkb2N1bWVudGF0aW9uOw0KICAgICRmdW5jdGlvbl9yZWYtPntk ZXNjcmlwdGlvbn0gPSAkZG9jdW1lbnRhdGlvbi0+e3N1bW1hcnl9Ow0KICAgICRmdW5jdGlvbl9y ZWYtPnt2YXJzfSA9ICRmdW5jdGlvbl9yZWYtPntkb2N1bWVudGF0aW9ufS0+e3ZhcnN9Ow0KICAg ICRmdW5jdGlvbl9yZWYtPnt2YXJzfS0+e2ZpbGVuYW1lfSA9ICRDVFhfRklMRTsNCiAgICAkZnVu Y3Rpb25fcmVmLT57dmFyc30tPntwcml2YXRlfSA9IDEgaWYgJGlzX3ByaXZhdGU7DQogICAgMTsN Cn0NCg0KDQojDQojIE1hcCBhbGwgdGhlIGNsYXNzIGFuZCBpbnN0YW5jZSBwcm9wZXJ0aWVzIHRv IHRoZWlyIGltcGxlbWVudGF0aW9uDQojDQpzdWIgbWFwX2FsbF9wcm9wZXJ0aWVzIHsNCiAgICBm b3IgbXkgJHR5cGUgKHF3KF9jbGFzc19wcm9wZXJ0aWVzIF9pbnN0YW5jZV9wcm9wZXJ0aWVzKSl7 DQogICAgICAgIGZvciBteSAkY2xhc3MgKGtleXMgJUNMQVNTRVMpew0KICAgICAgICAgICAgJm1h cF9zaW5nbGVfcHJvcGVydHkoDQogICAgICAgICAgICAgICAgJGNsYXNzLA0KICAgICAgICAgICAg ICAgICRfLT57cHJvcGVydHlfbmFtZX0sDQogICAgICAgICAgICAgICAgJF8tPntwcm9wZXJ0eV92 YWx1ZX0sDQogICAgICAgICAgICAgICAgJF8tPntwcm9wZXJ0eV9kb2N9LA0KICAgICAgICAgICAg ICAgICRfLT57cHJvcGVydHlfdmFyc30sICR0eXBlIGVxICdfY2xhc3NfcHJvcGVydGllcycpIA0K ICAgICAgICAgICAgICAgICAgICBmb3IgQHskQ0xBU1NFU3skY2xhc3N9LT57JHR5cGV9fQ0KICAg ICAgICB9DQogICAgfQ0KDQogICAgIyBNYXAgYWxsIHRoZSB1bmF0dGFjaGVkIGZ1bmN0aW9ucw0K ICAgIG15ICRjbGFzc25hbWUgPSAkQ09ORklHe0dMT0JBTFNfTkFNRX0gfHwgJ0dMT0JBTFMnOw0K ICAgICZhZGRfY2xhc3MoJGNsYXNzbmFtZSk7DQogICAgZm9yIG15ICRmdW5jdGlvbiANCiAgICAg ICAgKGdyZXAgISgkRlVOQ1RJT05TeyRffS0+e2lzX21hcHBlZH0gfHwgJENMQVNTRVN7JF99KSwg a2V5cyAlRlVOQ1RJT05TKXsNCiAgICAgICAgICAgICZtYXBfc2luZ2xlX3Byb3BlcnR5KA0KICAg ICAgICAgICAgICAgICRjbGFzc25hbWUsICRmdW5jdGlvbiwgJGZ1bmN0aW9uLCAnJywgdW5kZWYs IDEpOw0KICAgIH0NCg0KICAgICMgTWFwIHN0YXRpYyBpbm5lciBjbGFzc2VzDQogICAgZm9yICRj bGFzc25hbWUgKGtleXMgJUNMQVNTRVMpew0KICAgICAgICBteSAkaSA9IDA7DQogICAgICAgIG15 IEB0b19yZW1vdmU7DQogICAgICAgIGZvciBteSAkY3Byb3AgKEB7JENMQVNTRVN7JGNsYXNzbmFt ZX0tPntjbGFzc19tZXRob2RzfX0pew0KICAgICAgICAgICAgbXkgJHByb3BuYW1lID0gJGNwcm9w LT57bWFwcGVkX25hbWV9Ow0KICAgICAgICAgICAgaWYgKCRDTEFTU0VTeyIkY2xhc3NuYW1lLiRw cm9wbmFtZSJ9KXsNCiAgICAgICAgICAgICAgICBwdXNoIEB0b19yZW1vdmUsICRpOw0KICAgICAg ICAgICAgICAgIHB1c2ggQHskQ0xBU1NFU3skY2xhc3NuYW1lfS0+e2lubmVyX2NsYXNzZXN9fSwg DQogICAgICAgICAgICAgICAgICAgIHtjbGFzc19uYW1lID0+ICIkY2xhc3NuYW1lLiIgLiAkY3By b3AtPnttYXBwZWRfbmFtZX19Ow0KICAgICAgICAgICAgICAgICRGVU5DVElPTlN7IiRjbGFzc25h bWUuJHByb3BuYW1lIn0gPSANCiAgICAgICAgICAgICAgICBkZWxldGUgJEZVTkNUSU9OU3siX18k Y2xhc3NuYW1lLiRwcm9wbmFtZSJ9Ow0KICAgICAgICAgICAgfSANCiAgICAgICAgICAgICRpKys7 DQogICAgICAgIH0NCiAgICAgICAgc3BsaWNlKEB7JENMQVNTRVN7JGNsYXNzbmFtZX0tPntjbGFz c19tZXRob2RzfX0sICRfLCAxKSANCiAgICAgICAgICAgIGZvciByZXZlcnNlIEB0b19yZW1vdmU7 DQogICAgfQ0KfQ0KDQojDQojIE1hcCBhIHNpbmdsZSBpbnN0YW5jZSBvciBjbGFzcyBmaWVsZCBv ciBtZXRob2QgDQojDQpzdWIgbWFwX3NpbmdsZV9wcm9wZXJ0eSB7DQogICAgbXkgKCRjbGFzcywg JHByb3BfbmFtZSwgJHByb3BfdmFsLCANCiAgICAkZGVzY3JpcHRpb24sICR2YXJzLCAkaXNfY2xh c3NfcHJvcCkgPSBAXzsNCiAgICBpZiAoISRGVU5DVElPTlN7JHByb3BfdmFsfSl7DQogICAgICAg IHB1c2ggQHskQ0xBU1NFU3skY2xhc3N9LT57JGlzX2NsYXNzX3Byb3AgDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA/ICdjbGFzc19maWVsZHMnIDogJ2luc3RhbmNlX2ZpZWxk cyd9fSwgeyANCiAgICAgICAgICAgIGZpZWxkX25hbWUgICAgICAgICAgPT4gJHByb3BfbmFtZSwN CiAgICAgICAgICAgIGZpZWxkX2Rlc2NyaXB0aW9uICAgPT4gJGRlc2NyaXB0aW9uLA0KICAgICAg ICAgICAgZmllbGRfdmFsdWUgICAgICAgICA9PiAkcHJvcF92YWwsDQogICAgICAgICAgICBmaWVs ZF92YXJzICAgICAgICAgID0+ICR2YXJzIH07DQogICAgICAgICAgICByZXR1cm47DQogICAgfQ0K ICAgIG15ICVtZXRob2Q7DQogICAgbXkgJGZ1bmN0aW9uID0gJEZVTkNUSU9OU3skcHJvcF92YWx9 Ow0KICAgICRmdW5jdGlvbi0+e2lzX21hcHBlZH0gPSAxOw0KICAgICRtZXRob2R7bWFwcGVkX25h bWV9ID0gJHByb3BfbmFtZTsNCg0KICAgICRtZXRob2R7JF99ID0gJGZ1bmN0aW9uLT57JF99IGZv ciANCiAgICAgICAgcXcvIGFyZ3VtZW50X2xpc3QgZGVzY3JpcHRpb24gdmFycyAvOw0KDQogICAg cHVzaCBAeyRDTEFTU0VTeyRjbGFzc30tPnskaXNfY2xhc3NfcHJvcCANCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICA/ICdjbGFzc19tZXRob2RzJyANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6ICdpbnN0YW5jZV9tZXRob2RzJ319LCBcJW1ldGhvZDsNCn0NCg0KDQoNCiMNCiMgQnVp bGQgdXAgdGhlIGZ1bGwgaGllcmFyY2h5IG9mIGNsYXNzZXMsIGluY2x1ZGluZyBmaWd1cmluZyBv dXQNCiMgd2hhdCBtZXRob2RzIGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMsIGV0Yw0KIyBQ QVJBTTogVGhlIEpTIHNvdXJjZSBjb2RlDQojDQpzdWIgYnVpbGRfY2xhc3NfaGllcmFyY2h5IHsN CiAgICAjIEZpbmQgb3V0IHdoYXQgaXMgaW5oZXJpdGVkDQogICAgZm9yIG15ICRjbGFzcyAobWFw KCRDTEFTU0VTeyRffSwgc29ydCBrZXlzICVDTEFTU0VTKSl7DQogICAgICAgIG15ICRzdXBlcmNs YXNzbmFtZSA9ICRjbGFzcy0+e2V4dGVuZHN9Ow0KICAgICAgICAhJHN1cGVyY2xhc3NuYW1lIGFu ZCBuZXh0Ow0KICAgICAgICBteSAkc3VwZXJjbGFzcyA9ICRDTEFTU0VTeyRzdXBlcmNsYXNzbmFt ZX07DQogICAgICAgICRjbGFzcy0+e2luaGVyaXRzfSA9IHt9Ow0KICAgICAgICB3aGlsZSAoJHN1 cGVyY2xhc3Mpew0KICAgICAgICAgICAgJGNsYXNzLT57aW5oZXJpdHN9LT57JHN1cGVyY2xhc3Nu YW1lfSA9IHt9Ow0KICAgICAgICAgICAgbXkgQGluc3RhbmNlX2ZpZWxkczsNCiAgICAgICAgICAg IG15IEBpbnN0YW5jZV9tZXRob2RzOw0KDQogICAgICAgICAgICAmaGFuZGxlX2luc3RhbmNlX21l dGhvZHMoJHN1cGVyY2xhc3MsICRzdXBlcmNsYXNzbmFtZSwgDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJGNsYXNzLCBcQGluc3RhbmNlX21ldGhvZHMpOw0KDQogICAg ICAgICAgICAmaGFuZGxlX2luc3RhbmNlX2ZpZWxkcygkc3VwZXJjbGFzcywgJHN1cGVyY2xhc3Nu YW1lLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjbGFzcywgXEBpbnN0 YW5jZV9maWVsZHMpOw0KDQogICAgICAgICAgICAkc3VwZXJjbGFzc25hbWUgPSAkc3VwZXJjbGFz cy0+e2V4dGVuZHN9Ow0KICAgICAgICAgICAgJHN1cGVyY2xhc3MgPSAkc3VwZXJjbGFzc25hbWUg PyAkQ0xBU1NFU3skc3VwZXJjbGFzc25hbWV9IDogdW5kZWY7DQogICAgICAgIH0NCiAgICB9DQp9 DQoNCiMNCiMgVGhpcyBpcyBqdXN0IGEgaGVscGVyIGZ1bmN0aW9uIGZvciBidWlsZF9jbGFzc19o aWVyYXJjaHkNCiMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHdhcyBnZXR0aW5nIHdheSBvdmVyc2l6 ZWQgDQojDQpzdWIgaGFuZGxlX2luc3RhbmNlX21ldGhvZHMgew0KICAgIG15ICgkc3VwZXJjbGFz cywgJHN1cGVyY2xhc3NuYW1lLCAkY2xhc3MsICRpbnN0YW5jZV9tZXRob2RzKSA9IEBfOw0KICAg IGlmICgkc3VwZXJjbGFzcy0+e2luc3RhbmNlX21ldGhvZHN9KXsNCiAgICAgICAgSU5TVEFOQ0Vf TUVUSE9EUzogDQogICAgICAgIGZvciBteSAkYmFzZV9tZXRob2QgKEB7JHN1cGVyY2xhc3MtPntp bnN0YW5jZV9tZXRob2RzfX0pew0KICAgICAgICAgICAgZm9yIG15ICRtZXRob2QgKEB7JGNsYXNz LT57aW5zdGFuY2VfbWV0aG9kc319KXsNCiAgICAgICAgICAgICAgICBpZiAoJCRiYXNlX21ldGhv ZHttYXBwZWRfbmFtZX0gZXEgJCRtZXRob2R7bWFwcGVkX25hbWV9KXsNCg0KICAgICAgICAgICAg ICAgICAgICAjIENhcnJ5IG92ZXIgdGhlIGRlc2NyaXB0aW9uIGZvciBvdmVycmlkZGVuIG1ldGhv ZHMgd2l0aA0KICAgICAgICAgICAgICAgICAgICAjIG5vIGRlc2NyaXB0aW9uICh0byBiZSBqYXZh ZG9jIGNvbXBsaWFudCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCgkYmFzZV9tZXRob2QtPntk ZXNjcmlwdGlvbn0gb3IgJGJhc2VfbWV0aG9kLT57dmFyc30pIA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFuZCBub3QgJG1ldGhvZC0+e2Rlc2NyaXB0aW9ufSl7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICRtZXRob2QtPntkZXNjcmlwdGlvbn0gPSAkYmFzZV9tZXRob2QtPntkZXNj cmlwdGlvbn07DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJHZhcmtleSAoa2V5cygl eyRiYXNlX21ldGhvZC0+e3ZhcnN9fSkpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRt ZXRob2QtPnt2YXJzfS0+eyR2YXJrZXl9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9ICRiYXNlX21ldGhvZC0+e3ZhcnN9LT57JHZhcmtleX0NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVubGVzcyAkbWV0aG9kLT57dmFyc30tPnskdmFya2V5fTsNCiAgICAg ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgICAgICBuZXh0IElOU1RBTkNFX01FVEhPRFM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgZm9yIChrZXlzICV7JGNsYXNzLT57aW5oZXJpdHN9fSl7DQog ICAgICAgICAgICAgICAgbXkgJGluaGVyaXRlZCA9ICRjbGFzcy0+e2luaGVyaXRzfS0+eyRffTsN CiAgICAgICAgICAgICAgICBmb3IgbXkgJG1ldGhvZCAoQHskaW5oZXJpdGVkLT57aW5zdGFuY2Vf bWV0aG9kc319KXsNCiAgICAgICAgICAgICAgICAgICAgbmV4dCBJTlNUQU5DRV9NRVRIT0RTIA0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgJCRiYXNlX21ldGhvZHttYXBwZWRfbmFtZX0gZXEg JG1ldGhvZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBw dXNoIEAkaW5zdGFuY2VfbWV0aG9kcywgJCRiYXNlX21ldGhvZHttYXBwZWRfbmFtZX07DQogICAg ICAgIH0NCiAgICAgICAgJGNsYXNzLT57aW5oZXJpdHN9LT57JHN1cGVyY2xhc3NuYW1lfS0+e2lu c3RhbmNlX21ldGhvZHN9IA0KICAgICAgICAgICAgPSAkaW5zdGFuY2VfbWV0aG9kczsNCiAgICB9 DQp9DQoNCiMNCiMgVGhpcyBpcyBqdXN0IGEgaGVscGVyIGZ1bmN0aW9uIGZvciBidWlsZF9jbGFz c19oaWVyYXJjaHkNCiMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHdhcyBnZXR0aW5nIHdheSBvdmVy c2l6ZWQgDQojDQpzdWIgaGFuZGxlX2luc3RhbmNlX2ZpZWxkcyB7DQogICAgbXkgKCRzdXBlcmNs YXNzLCAkc3VwZXJjbGFzc25hbWUsICRjbGFzcywgJGluc3RhbmNlX2ZpZWxkcykgPSBAXzsNCiAg ICBpZiAoJHN1cGVyY2xhc3MtPntpbnN0YW5jZV9maWVsZHN9KXsNCiAgICAgICAgSU5TVEFOQ0Vf RklFTERTOiANCiAgICAgICAgZm9yIG15ICRiYXNlX2ZpZWxkICAoQHskc3VwZXJjbGFzcy0+e2lu c3RhbmNlX2ZpZWxkc319KXsNCiAgICAgICAgICAgIGZvciBteSAkZmllbGQgKEB7JGNsYXNzLT57 aW5zdGFuY2VfZmllbGRzfX0pew0KICAgICAgICAgICAgICAgIG5leHQgSU5TVEFOQ0VfRklFTERT IGlmICRmaWVsZCBlcSAkYmFzZV9maWVsZDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHB1 c2ggQCRpbnN0YW5jZV9maWVsZHMsICRiYXNlX2ZpZWxkLT57ZmllbGRfbmFtZX07DQogICAgICAg IH0NCiAgICAgICAgJGNsYXNzLT57aW5oZXJpdHN9LT57JHN1cGVyY2xhc3NuYW1lfS0+e2luc3Rh bmNlX2ZpZWxkc30gDQogICAgICAgICAgICA9ICRpbnN0YW5jZV9maWVsZHM7DQogICAgfQ0KfQ0K DQojDQojIFNldCBhbGwgdGhlIGNsYXNzIGNvbnN0cnVjdG9ycw0KIw0Kc3ViIHNldF9jbGFzc19j b25zdHJ1Y3RvcnMgew0KICAgIGZvciBteSAkY2xhc3NuYW1lIChrZXlzICVDTEFTU0VTKXsNCiAg ICAgICAgbXkgJGNvbnN0cnVjdG9yID0gJEZVTkNUSU9OU3skY2xhc3NuYW1lfTsNCiAgICAgICAg JENMQVNTRVN7JGNsYXNzbmFtZX0tPntjb25zdHJ1Y3Rvcl9hcmdzfSA9IA0KICAgICAgICAkY29u c3RydWN0b3ItPnthcmd1bWVudF9saXN0fTsNCiAgICAgICAgJENMQVNTRVN7JGNsYXNzbmFtZX0t Pntjb25zdHJ1Y3Rvcl9kZXRhaWx9IA0KICAgICAgICAgICAgPSAkY29uc3RydWN0b3ItPntkZXNj cmlwdGlvbn07DQoNCiAgICAgICAgJENMQVNTRVN7JGNsYXNzbmFtZX0tPntjb25zdHJ1Y3Rvcl92 YXJzfSA9ICRjb25zdHJ1Y3Rvci0+e3ZhcnN9IHx8IHt9Ow0KICAgIH0NCn0NCg0KIyANCiMgQ2xl YXIgb3V0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcGFyc2VkIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucw0K Iw0Kc3ViIHJlc2V0X3BhcnNlciB7DQogICAgJUNMQVNTRVMgPSAoKTsNCiAgICAlRlVOQ1RJT05T ID0gKCk7DQp9DQoNCiMNCiMgU2V0IGdsb2JhbCBwYXJhbWV0ZXJzIGZvciB0aGUgcGFyc2VyDQoj DQpzdWIgY29uZmlndXJlX3BhcnNlciB7DQogICAgJUNPTkZJRyA9IEBfOw0KfQ0KDQojDQojIFNl dCB0aGUgaW5pdGlhbCBkZWZhdWx0cyBmb3IgdGhlIHBhcnNlcg0KIw0Kc3ViIGluaXRpYWxpemVf cGFyc2VyIHsNCiAgICAkQ09ORklHe0dMT0JBTFNfTkFNRX0gfHw9ICdHTE9CQUxTJzsNCn0NCg0K Iw0KIyBSdW4gdGhyb3VnaCB0aGUgc291cmNlIGFuZCBjb252ZXJ0ICdjb25mdXNpbmcnIEphdmFT Y3JpcHQgY29uc3RydWN0cw0KIyBpbnRvIG9uZXMgdGhhdCBhcmUgdW5kZXJzdG9vZCBieSB0aGUg cGFyc2VyLCBhcyB3ZWxsIGFzIHN0cmlwcGluZw0KIyBvdXQgdW53YW50ZWQgY29tbWVudCBibG9j a3MuIA0KIw0KIyBGb3IgZXhhbXBsZToNCiMgIA0KIyAgRm9vLnByb3RvdHlwZSA9IHsgDQojICAg ICBiYXI6IGZ1bmN0aW9uKCl7IHJldHVybiAiRWVwISI7IH0sDQojICAgICBiYXo6ICJIYSEiDQoj ICB9IA0KIw0KIyAgYmVjb21lcw0KIw0KIyAgRm9vLnByb3RvdHlwZS5iYXIgPSBmdW5jdGlvbigp eyByZXR1cm4gIkVlcCEiOyB9Ow0KIyAgRm9vLnByb3RvdHlwZS5iYXogPSAiSGEhIjsNCiMNCnN1 YiBwcmVwcm9jZXNzX3NvdXJjZSB7DQogICAgbXkgKCRzcmMpID0gQF87DQoNCiAgICAjIE1ha2Ug YWxsIHRoZSBAZXh0ZW5kcyB0YWdzIGludG8gQGJhc2UgdGFncw0KICAgICRzcmMgPX4gcy9cQGV4 dGVuZHNcYi9cQGJhc2UvZzsNCg0KICAgICMgVGhpcyBoYWQgYmV0dGVyIG5vdCBicmVhayBhbnl0 aGluZyENCiAgICAkc3JjID0gJmRlY29uc3RydWN0X2dldHNldCgkc3JjKTsNCiAgIA0KICAgICMg Q29udmVydDoNCiAgICAjICAgICAvKiogQGNvbnN0cnVjdG9yICovDQogICAgIyAgICAgRm9vLkJh ciA9IGZ1bmN0aW9uKCl7Li4ufQ0KICAgICMgdG86DQogICAgIyAgICAgLyoqIEBjb25zdHJvY3Rv ciAqLw0KICAgICMgICAgIEZvby5CYXIgPSBmdW5jdGlvbigpe30NCiAgICAjICAgICAvKiogQGNv bnN0cnVjdG9yICovDQogICAgIyAgICAgZnVuY3Rpb24gRm9vLkJhcigpey4uLn0NCiAgICAjDQog ICAgIyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBrZWVwIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBz byB0aGF0IEZvby5CYXINCiAgICAjIGNhbiBiZSByZWNvZ25pemVkIGFzIGEgbmVzdGVkIGNsYXNz LiBZZXMsIEkga25vdyBpdCdzIGJhZC4uLg0KICAgICRzcmMgPX4gcyENCiAgICAgICAgKCRKU0RP Q19DT01NRU5UXHMqKQ0KICAgICAgICAoPzp2YXJccyopPyhcdysoPzpcLlx3KykqPykNCiAgICAg ICAgXHMqPQ0KICAgICAgICAoXHMqZnVuY3Rpb24pKD89XHMqJEJBTF9QQVJFTlxzKlx7KQ0KICAg ICAgICAhaW5kZXgoJDEsICdAY29uc3RydWN0b3InKSA9PSAtMSA/ICIkMSQyID0gJDMiIDogIiQx JDIgPSBmdW5jdGlvbigpe307XG4kMSQzICQyIiFlZ3g7DQoNCiAgICAjIHJlbW92ZSBhbGwgdW5p bnRlcmVzdGluZyBjb21tZW50cywgYnV0IG9ubHkgaWYgdGhleSdyZSBub3QgaW5zaWRlDQogICAg IyBvZiBvdGhlciBjb21tZW50cyAgICAgDQogICAgIyAoYWRhcHRlZCBmcm9tIEplZmZyZXkgRnJp ZWRsJ3MgIk1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zIg0KICAgIHsNCiAgICAgICBubyB3 YXJuaW5nczsNCiAgICAgICAkc3JjID1+IHMvDQogICAgICAgICAgKCROT05RVU9URSt8DQogICAg ICAgICAgICAgJEpTRE9DX0NPTU1FTlQkTk9OUVVPVEUqfA0KICAgICAgICAgICAgICREUVVPVEUk Tk9OUVVPVEUqfA0KICAgICAgICAgICAgICRTUVVPVEUkTk9OUVVPVEUqKQ0KICAgICAgICAgIHwk TUxJTkVfQ09NTUVOVHwkU0xJTkVfQ09NTUVOVC8kMS9neDsNCg0KICAgICAgICAxIHdoaWxlICRz cmMgPX4gcy8kSlNET0NfQ09NTUVOVFxzKigkSlNET0NfQ09NTUVOVCkvJDEvZzsNCiAgICB9DQoN CiAgICAjIENvbGxhcHNlIGFsbCBzdHJpbmcgbGl0ZXJhbHMgaW50byBzaW5nbGUtY2hhcmFjdGVy IHN0cmluZ3MNCiAgICB7DQogICAgICAgIG5vIHdhcm5pbmdzOw0KICAgICAgICAkc3JjID1+IHMv DQogICAgICAgICAgICgkTk9OUVVPVEUrfA0KICAgICAgICAgICAgICRKU0RPQ19DT01NRU5UJE5P TlFVT1RFKil8DQogICAgICAgICAgICAgKCREUVVPVEUpfA0KICAgICAgICAgICAgICgkU1FVT1RF KQ0KICAgICAgICAgIC8kMSA/ICQxIDogJDIgPyAnInMiJyA6ICIncyciL2VneDsNCiAgICB9DQoN CiAgICANCg0KICAgICMgQWx0ZXIgdGhlIHByb3RvdHlwZS1pbml0aWFsaXphdGlvbiBibG9ja3MN CiAgICAkc3JjID1+IHMvDQogICAgICAgKFx3Kyg/OlwuXHcrKSopXC5wcm90b3R5cGUNCiAgICAg ICBccyo9XHMqKCRCQUxfQlJBQ0UpL2RlY29uc3RydWN0X3Byb3RvdHlwZSgkMSwgJDIpL2VneDsN Cg0KICAgICMgTWFyayBhbGwgY29uc3RydWN0b3JzIGJhc2VkIG9uICduZXcnIHN0YXRlbWVudHMN CiAgICBteSAlc2VlbjsNCiAgICBteSBAY2xhc3NuYW1lcyA9ICBncmVwIHsgbm90ICRzZWVueyRf fSsrIH0gDQogICAgICAgICRzcmMgPX4gL1xibmV3XHMrKFx3Kyg/OlwuXHcrKSopXHMqXCgvZzsN CiAgICBmb3IgbXkgJGNuYW1lIChAY2xhc3NuYW1lcyl7DQogICAgICAgICRzcmMgPX4gcy8oJEpT RE9DX0NPTU1FTlQ/KQ0KICAgICAgICAgICAgICAgICAgICAoPz1ccypmdW5jdGlvblxzK1xRJGNu YW1lXEVccyokQkFMX1BBUkVODQogICAgICAgICAgICAgICAgICAgIFxzKiRCQUxfQlJBQ0UpDQog ICAgICAgICAgICAgICAgLyZhbm5vdGF0ZV9jb21tZW50KCQxLCAnQGNvbnN0cnVjdG9yJykvZXg7 DQogICAgfQ0KDQogICAgJHNyYyA9fiBzLw0KICAgICAgICgkSlNET0NfQ09NTUVOVD8pXHMqDQog ICAgICAgKGZ1bmN0aW9uXHMrXHcrKD86XC5cdyspKlxzKiRCQUxfUEFSRU5ccyopDQogICAgICAg KCRCQUxfQlJBQ0UpDQogICAgICAgLyZkZWNvbnN0cnVjdF9jb25zdHJ1Y3RvcigkMSwgIiQyJDMi KS9lZ3g7DQoNCiAgICAkc3JjID1+IHMhDQogICAgICAgKD86dmFyXHMrKT8oXHcrKD86XC5cdysp KikNCiAgICAgICBccyo9XHMqDQogICAgICAgbmV3XHMrDQogICAgICAgKCRBTk9OX0ZVTkNUSU9O KSEmZGVjb25zdHJ1Y3Rfc2luZ2xldG9uKCQxLCAkMikhZWd4Ow0KDQogICAgJHNyYyA9ICZyZW1v dmVfZHluYW1pY19iaW5kaW5ncygkc3JjKTsNCg0KICAgICMgTWFyayBhbGwgdm9pZCBtZXRob2Rz IHdpdGggIkB0eXBlIHZvaWQiDQogICAgJHNyYyA9fiBzLygkSlNET0NfQ09NTUVOVD8pXHMqDQog ICAgICAgKCg/Og0KICAgICAgICAgICg/OmZ1bmN0aW9uXHMrXHcrKD86XC5cdyspKlxzKiRCQUxf UEFSRU5ccyopDQogICAgICAgICAgfA0KICAgICAgICAgICg/Olx3Kyg/OlwuXHcrKSpccyo9XHMq ZnVuY3Rpb25ccyooPzpcdytccyopPyRCQUxfUEFSRU5ccyopDQogICAgICAgKSRCQUxfQlJBQ0Up DQogICAgICAgLyZtYXJrX3ZvaWRfbWV0aG9kKCQxLCAkMikvZWd4Ow0KICAgIA0KICAgICRzcmM7 DQp9DQoNCiMNCiMgUmVtb3ZlIGR5bmFtaWMgYmluZGluZy4NCiMgQ2hhbmdlIHRoaXM6DQojDQoj ICAgZnVuY3Rpb24gTXlGdW5jKGNsYXNzKXsNCiMgICAgICAgdmFyIHggPSAyOw0KIyAgICAgICBj bGFzcy5wcm90b3R5cGUuZnVuYyA9IGZ1bmN0aW9uKCl7fTsNCiMgICAgICAgcmV0dXJuIHg7DQoj ICAgfQ0KIw0KIyB0bzoNCiMNCiMgICBmdW5jdGlvbiBNeUZ1bmMoY2xhc3Mpew0KIyAgICAgICB2 YXIgeCA9IDI7DQojDQojICAgICAgIHJldHVybiB4Ow0KIyAgIH0NCiMNCiMgYW5kIGNoYW5nZSB0 aGlzOg0KIw0KIyAgIGZ1bmN0aW9uIEJpbmRNZXRob2Qob2JqKXsNCiMgICAgICAgb2JqLnNvbWVG dW5jID0gZnVuY3Rpb24oKXsgcmV0dXJuIG51bGw7IH07DQojICAgICAgIHJldHVybiBvYmo7DQoj ICAgfQ0KIw0KIyB0bzoNCiMNCiMgICBmdW5jdGlvbiBCaW5kTWV0aG9kKG9iail7DQojDQojICAg ICAgIHJldHVybiBvYmo7DQojICAgfQ0KIw0Kc3ViIHJlbW92ZV9keW5hbWljX2JpbmRpbmdzIHsN CiAgICBteSAoJHNyYykgPSBAXzsNCiAgICB3aGlsZSAoJHNyYyA9fiAvJFJFVF9GVU5DX0RFRi9n KXsNCiAgICAgICAgbXkgKCRmbmFtZSwgJHBhcmFtcywgJGRlZmluaXRpb24pID0gKCQxLCAkMiwg JDMpOw0KICAgICAgICBuZXh0IHVubGVzcyAkZGVmaW5pdGlvbiA9fiAvXGJmdW5jdGlvblxifFx3 K1wucHJvdG90eXBlXC4vOw0KICAgICAgICBteSBAcGFyYW1zID0gc3BsaXQoL1xzKixccyovLCBz dWJzdHIoJHBhcmFtcywgMSwgbGVuZ3RoKCRwYXJhbXMpIC0gMikpOw0KICAgICAgICBmb3IgbXkg JHBhcmFtIChAcGFyYW1zKXsNCiAgICAgICAgICAgICRzcmMgPX4gcy9cYiRwYXJhbVwucHJvdG90 eXBlXC5bXjtcbl0qWztcbl0vL2c7DQogICAgICAgICAgICAkc3JjID1+IHMvXGIkcGFyYW1cLlx3 KyA9ICRBTk9OX0ZVTkNUSU9OLy9nOw0KICAgICAgICB9DQogICAgfQ0KICAgICRzcmM7DQp9DQoN CiMNCiMgQW5ub3RhdGUgYSBtZXRob2QgYXMgYmVpbmcgdm9pZCBpZiBubyBAdHlwZSBjYW4gYmUg Zm91bmQsIGFuZCB0aGVyZSBpcyBubw0KIyBzdGF0ZW1lbnQgdG8gcmV0dXJuIGEgdmFsdWUgaW4g dGhlIG1ldGhvZCBpdHNlbGYuDQojDQpzdWIgbWFya192b2lkX21ldGhvZCB7DQogICAgbXkgKCRk b2MsICRmdW5jZGVmKSA9IEBfOw0KICAgIHJldHVybiAiJGRvY1xuJGZ1bmNkZWYiIGlmICRkb2Mg PX4gL1xAKGNvbnN0cnVjdG9yfHR5cGV8cmV0dXJucz8pXGIvOyAgICANCiAgICBteSAoJGZib2R5 KSA9ICRmdW5jZGVmID1+IC9eW157XSooJEJBTF9CUkFDRSkvOw0KICAgICRmYm9keSA9fiBzLyRG VU5DX0RFRi9mdW5jdGlvbiB4KCl7fS9nOw0KICAgICRmYm9keSA9fiBzLyRBTk9OX0ZVTkNUSU9O L2Z1bmN0aW9uICgpe30vZzsNCiAgICAkZG9jID0gJmFubm90YXRlX2NvbW1lbnQoJGRvYywgJ0B0 eXBlIHZvaWQnKSANCiAgICAgICAgaWYgJGZib2R5ICF+IC9cYnJldHVyblxzKyg/Oig/Olx3Kyl8 KD86KFsiJ10pLio/XDEpfCRCQUxfUEFSRU4pLzsNCiAgICAiJGRvY1xuJGZ1bmNkZWYiOw0KfQ0K DQojDQojIEEgaGVscGVyIHRvIGNoYW5nZSBzaW5nbGV0b24gZGVjbGFyYXRpb25zIGxpa2UNCiMg DQojICAgICBNeVNpbmdsZXRvbiA9IG5ldyBmdW5jdGlvbigpe3RoaXMueD1mdW5jdGlvbigpe319 DQojDQojIGludG86DQojDQojICAgICBmdW5jdGlvbiBNeVNpbmdsZXRvbigpe30NCiMgICAgIE15 U2luZ2xldG9uLnByb3RvdHlwZS54ID0gZnVuY3Rpb24oKXt9Ow0KIw0Kc3ViIGRlY29uc3RydWN0 X3NpbmdsZXRvbiB7DQogICAgbXkgKCRjbGFzc25hbWUsICRkZWZpbml0aW9uKSA9IEBfOw0KICAg ICRkZWZpbml0aW9uID1+IHMvZnVuY3Rpb25ccyokQkFMX1BBUkVOXHMqXHsoLiopXH1ccyokLyQx L3M7DQogICAgJGRlZmluaXRpb24gPX4gcy9cYnRoaXNcLi8kY2xhc3NuYW1lLnByb3RvdHlwZVwu L2c7DQogICAgcXEjDQogICAgICAgIGZ1bmN0aW9uICRjbGFzc25hbWUoKXt9DQogICAgICAgICRk ZWZpbml0aW9uOyANCiAgICAjOw0KfQ0KDQojDQojIEEgaGVscGVyIHRvIHByZXByb2Nlc3Nfc291 cmNlLCBjaGFuZ2UgcHJvdG90eXBlLWluaXRpYWxpemF0aW9uDQojIGJsb2NrcyBpbnRvIG11bHRp cGxlIHByb3RvdHlwZS1wcm9wZXJ0eSBhc3NpZ25tZW50cw0KIw0Kc3ViIGRlY29uc3RydWN0X3By b3RvdHlwZSB7DQogICAgbXkgKCRjbGFzcywgJHNyYykgPSBAXzsNCiAgICAkc3JjID1+IHMvXlx7 KC4qKVx9JC8kMS9zOw0KICAgICRzcmMgPX4gcyENCiAgICAgICAgKFx3KykNCiAgICAgICAgXHMq OlxzKg0KICAgICAgICAoDQogICAgICAgICRBTk9OX0ZVTkNUSU9ODQogICAgICAgIHwNCiAgICAg ICAgJEZVTkNfREVGDQogICAgICAgIHwNCiAgICAgICAgJEZVTkNfQ0FMTA0KICAgICAgICB8DQog ICAgICAgICRMSVRFUkFMDQogICAgICAgIHwNCiAgICAgICAgXHcrDQogICAgICAgICkNCiAgICAg ICAgXHMqLD8NCiAgICAhJGNsYXNzLnByb3RvdHlwZS4kMSA9ICQyOyFnc3g7DQogICAgDQogICAg JHNyYzsNCn0NCg0KIw0KIyBVbnBhY2tzIGEgY29uc3RydWN0b3IgaW50byBzZXBhcmF0ZSBjYWxs cw0KIw0Kc3ViIGRlY29uc3RydWN0X2NvbnN0cnVjdG9yIHsNCiAgICBteSAoJGRvYywgJGZ1bmNf ZGVmKSA9IEBfOw0KICAgIHJldHVybiAiJGRvYyRmdW5jX2RlZiIgdW5sZXNzICRkb2MgPX4gL1xA Y29uc3RydWN0b3IvOw0KICAgIG15ICgkY2xhc3NuYW1lKSA9ICRmdW5jX2RlZiA9fiAvZnVuY3Rp b25ccysoXHcrKD86XC5cdyspKikvOw0KICAgICRmdW5jX2RlZiA9fiBzLw0KICAgICAgICAoXHsu Klx9KSQNCiAgICAgICAgLyZkZWNvbnN0cnVjdF9pbm5lcl9jb25zdHJ1Y3RvcigkY2xhc3NuYW1l LCAkMSkvZXN4Ow0KICAgICIkZG9jJGZ1bmNfZGVmIjsNCn0NCg0Kc3ViIGRlY29uc3RydWN0X2lu bmVyX2NvbnN0cnVjdG9yIHsNCiAgICBteSAoJGNsYXNzbmFtZSwgJGlubmVyX3NyYykgPSBAXzsN CiAgICAkaW5uZXJfc3JjID0gc3Vic3RyKCRpbm5lcl9zcmMsIDEsIC0xKTsNCiAgICBteSBAZG9j X25fZm5hbWVzID0gJGlubmVyX3NyYyA9fiAvKCRKU0RPQ19DT01NRU5UPylccypmdW5jdGlvblxz KyhcdyspL2c7DQogICAgJGlubmVyX3NyYyA9fiBzLw0KICAgICAgICAoJEpTRE9DX0NPTU1FTlQp Pw0KICAgICAgICBccyoNCiAgICAgICAgdmFyDQogICAgICAgIFxzKw0KICAgICAgICAoXHcrKS8m YW5ub3RhdGVfY29tbWVudCgkMSkgLiAiXG4kY2xhc3NuYW1lXC5wcm90b3R5cGVcLiQyIi9lZ3g7 DQoNCiAgICAkaW5uZXJfc3JjID1+IHMvDQogICAgICAgICgkSlNET0NfQ09NTUVOVCk/XHMqDQog ICAgICAgIF5ccyoNCiAgICAgICAgZnVuY3Rpb24NCiAgICAgICAgXHMrDQogICAgICAgIChcdysp DQogICAgICAgIC8mYW5ub3RhdGVfY29tbWVudCgkMSkgLiAiXG4kY2xhc3NuYW1lXC5wcm90b3R5 cGVcLiQyID0gZnVuY3Rpb24iL2VnbXg7DQoNCiAgICB7IA0KICAgICAgICBubyB3YXJuaW5nczsN CiAgICAgICAgJGlubmVyX3NyYyA9fiBzLw0KICAgICAgICAgICAgKCRKU0RPQ19DT01NRU5UXHMq KT8NCiAgICAgICAgICAgIF5ccyp0aGlzKD89XC4pDQogICAgICAgICAgICAvJDEkY2xhc3NuYW1l LnByb3RvdHlwZS9nbXg7DQogICAgfQ0KDQogICAgIyBSZXBsYWNlIGFsbCBiaW5kaW5ncyBvZiBw cml2YXRlIG1ldGhvZHMgdG8gcHVibGljIG5hbWVzDQogICAgZm9yIChteSAkaSA9IDA7ICRpIDwg QGRvY19uX2ZuYW1lczsgJGkgKz0gMikNCiAgICB7DQogICAgICAgIG15ICgkZG9jLCAkZm5hbWUp ID0gQGRvY19uX2ZuYW1lc1skaSwgJGkgKyAxXTsNCiAgICAgICAgJGlubmVyX3NyYyA9fiBzLw0K ICAgICAgICAgICAgKCRKU0RPQ19DT01NRU5UXHMqDQogICAgICAgICAgICAkY2xhc3NuYW1lXC5w cm90b3R5cGVcLlx3KykNCiAgICAgICAgICAgIFxzKj1ccyoNCiAgICAgICAgICAgICRmbmFtZVxz KltcbjtdDQogICAgICAgICAgICAvJDEgPSBmdW5jdGlvbigpe30vZ3g7DQogICAgDQogICAgICAg ICRpbm5lcl9zcmMgPX4gcy8NCiAgICAgICAgICAgICgkY2xhc3NuYW1lXC5wcm90b3R5cGVcLlx3 KykNCiAgICAgICAgICAgIFxzKj1ccyoNCiAgICAgICAgICAgICRmbmFtZVxzKltcbjtdDQogICAg ICAgICAgICAvJGRvY1xuJDEgPSBmdW5jdGlvbigpe30vZ3g7DQogICAgfQ0KICAgICJ7fVxuJGlu bmVyX3NyYyI7DQp9DQoNCiMNCiMgRGVjb25zdHJ1Y3QgbW96aWxsYSdzIF9fZGVmaW5lR2V0dGVy X18gYW5kIF9fZGVmaW5lU2V0dGVyX18NCiMgKFllcywgSSBrbm93IHRoaXMgZ29lcyBhZ2FpbnN0 IG15IHByaW5jaXBsZXMuLi4pDQojDQpzdWIgZGVjb25zdHJ1Y3RfZ2V0c2V0IHsNCiAgICBteSAo JHNyYykgPSBAXzsNCiAgICAjIENyYWNrIG9wZW4gdGhlIGFzc2lnbm1lbnRzIGZvciBkZWZpbmUo R2V0dGVyfFNldHRlcikNCiAgICBteSAkY3JhY2sgPSBzdWIgeyANCiAgICAgICAgbXkgJGNvZGUg PSBzaGlmdDsgJGNvZGUgPX4gcy9eLiguKikuJC8kMS9zOw0KICAgICAgICBteSAoJG5hbWUpID0g c3BsaXQgIiwiLCAkY29kZTsgDQogICAgICAgICRuYW1lID1+IHMvLio/KFsnIl0pKFteJyJdKylc MS8kMi87DQogICAgICAgICRuYW1lOw0KICAgIH07DQogICAgZm9yIG15ICRwcmVmaXggKCdnZXQn LCAnc2V0Jyl7DQogICAgICAgIG15ICRmbmFtZSA9ICJkZWZpbmVcdSR7cHJlZml4fXRlciI7DQog ICAgICAgICRzcmMgPX4gcy8NCiAgICAgICAgICAgIChcdysoPzpcLlx3KykqDQogICAgICAgICAg ICBcLnByb3RvdHlwZSkNCiAgICAgICAgICAgIFwuX18ke2ZuYW1lfV9fXHMqKCRCQUxfUEFSRU4p Lw0KICAgICAgICAgICAgbXkgJG5hbWUgPSAkY3JhY2stPigkMik7DQogICAgICAgICAgICAiJDEu JG5hbWUgPSBudWxsIi9leDsNCiAgICB9DQogICAgJHNyYzsNCn0NCg0KDQojDQojIEFkZCBhbiBh bm5vdGF0aW9uIChAdGFnKSB0byBhIGRvY3VtZW50YXRpb24gYmxvY2suIFRoZSBibG9jayBpcyBh c3N1bWVkIHRvDQojIGJlIGEgdmFsaWQgSlNEb2MgZG9jdW1lbnRhdGlvbiBibG9jayA9PT4gL15c L1wqXCouKlwqXC8kLyAgDQojIGFuZCBubyBjaGVja2luZyBpcyBkb25lIHRvIHZlcmlmeSB0aGlz DQojDQpzdWIgYW5ub3RhdGVfY29tbWVudCB7DQogICAgbXkgJGFubm90YXRpb24gPSAkX1sxXSB8 fCAnQHByaXZhdGUnOyANCiAgICByZXR1cm4gIlxuLyoqICRhbm5vdGF0aW9uICovIiB1bmxlc3Mg JF9bMF07DQogICAgc3Vic3RyKCRfWzBdLCAwLCAtMikgLiAiIFxuJGFubm90YXRpb24gXG4qLyI7 DQp9DQoNCiMNCiMgVGhpcyBpcyBoZXJlIHRvIHN0b3AgcGVybCBmcm9tIHNlZ2ZhdWx0aW5nIGZy b20gZGVlcCByZWN1cnNpb24gaW4gcmVnZXhlcw0KIyBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIHRo ZSB0ZXh0IF9zaG91bGRfIGJlIG9wZW5fdG9rZW4sIGFzIGV2ZXJ5dGhpbmcNCiMgYmVmb3JlIG9w ZW5fdG9rZW4gd2lsbCBiZSBkaXNjYXJkZWQsIHVubGVzcyB0aGVyZSBpcyBubyBtYXRjaGluZyB0 ZXh0IA0KIyBhdCBhbGwuIA0KIw0Kc3ViIGZpbmRfYmFsYW5jZWRfYmxvY2sgew0KICAgIG15ICgk b3Blbl90b2tlbiwgJGNsb3NlX3Rva2VuLCAkdGV4dCkgPSBAXzsNCiAgICBteSAoJGNvdW50LCAk b3BlbiwgJGNsb3NlKSA9ICgwLCAwLCAwKTsNCiAgICByZXR1cm4gKCcnLCAkdGV4dCkgdW5sZXNz ICR0ZXh0ID1+IC9cUSRvcGVuX3Rva2VuXEUvOw0KICAgICR0ZXh0ID1+IHMvXi4qPyg/PVxRJG9w ZW5fdG9rZW5cRSkvL3M7DQogICAgZm9yIChzcGxpdCAvLywgJHRleHQpew0KICAgICAgICRjb3Vu dCsrOw0KICAgICAgICRvcGVuKysgaWYgJF8gZXEgJG9wZW5fdG9rZW47DQogICAgICAgJGNsb3Nl KysgaWYgJF8gZXEgJGNsb3NlX3Rva2VuOw0KICAgICAgIGxhc3QgdW5sZXNzICgkb3BlbiAhPSAk Y2xvc2UpOw0KICAgIH0NCiAgICB3YXJuICJVbmJhbGFuY2VkIGJsb2NrXG4iIGlmICgkb3BlbiAh PSAkY2xvc2UpOw0KICAgIChzdWJzdHIoJHRleHQsIDAsICRjb3VudCksIHN1YnN0cigkdGV4dCwg JGNvdW50KSk7IA0KfQ0KDQojDQojIFJlbW92ZSB0aGUgJENPTkZJR3tHTE9CQUxTX05BTUV9IGNs YXNzIGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhbnl0aGluZw0KIw0Kc3ViIGZpbHRlcl9nbG9iYWxz IHsNCiAgICBteSAkZ2xvYmFsID0gJENMQVNTRVN7JENPTkZJR3tHTE9CQUxTX05BTUV9fTsNCiAg ICBkZWxldGUgJENMQVNTRVN7JENPTkZJR3tHTE9CQUxTX05BTUV9fSBpZg0KICAgICAgICBub3Qg KGRlZmluZWQgJGdsb2JhbC0+e2NvbnN0cnVjdG9yX2FyZ3N9IHx8DQogICAgICAgICAgICAgICAg ZGVmaW5lZCAkZ2xvYmFsLT57Y29uc3RydWN0b3JfZGV0YWlsfSkgDQogICAgICAgICAgICAmJiBu b3QgKEB7JGdsb2JhbC0+e2luc3RhbmNlX21ldGhvZHN9fSB8fA0KICAgICAgICAgICAgQHskZ2xv YmFsLT57aW5zdGFuY2VfZmllbGRzfX0gfHwNCiAgICAgICAgICAgIEB7JGdsb2JhbC0+e2NsYXNz X21ldGhvZHN9fSB8fA0KICAgICAgICAgICAgQHskZ2xvYmFsLT57Y2xhc3NfZmllbGRzfX0pOw0K DQogICAgIyBBbHNvIGdldCByaWQgb2YgZXh0cmEgaW5mbyB1bmRlciB0aGUgJ19fZmlsZXNfXycg a2V5DQogICAgZGVsZXRlICRDTEFTU0VTe19fRklMRVNfX30tPnskX30gZm9yIHF3KGNvbnN0cnVj dG9yX3BhcmFtcyBjb25zdHJ1Y3Rvcl9hcmdzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9kZXRhaWwgY2xhc3NfbWV0aG9kcw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JfdmFycyk7DQp9DQoN Cg0KIw0KIyBUcnkgdG8gZ3JhYiB0aGUgZmlyc3QgYmxvY2sgY29tbWVudCBmcm9tIHRoZSBmaWxl IHRoYXQgaGFzIGEgQGZpbGVvdmVydmlldw0KIyB0YWcgaW4gaXQsIGFuZCBnZXQgdGhlIGZpbGUg aW5mbyBmcm9tIHRoZXJlDQojDQpzdWIgcGFyc2VfZmlsZV9pbmZvIHsNCiAgICBteSAoJHNyYykg PSBAXzsNCiAgICBteSAlZmlsZWluZm8gPSAoIHNyYyA9PiAkc3JjICk7DQogICAgd2hpbGUgKCRz cmMgPX4gLygkSlNET0NfQ09NTUVOVCkvZyl7DQogICAgICAgbG9jYWwgJF8gPSBzdWJzdHIoJDEs IDMsIGxlbmd0aCgkMSkgLSA1KTsgIyBHZXQgdGhlIGFjdHVhbCBjb250ZW50IA0KICAgICAgIGlm ICgvXEBmaWxlb3ZlcnZpZXdcYi8pew0KICAgICAgICAgIG15ICRkb2MgPSBwYXJzZV9qc2RvY19j b21tZW50KCRfLCAxKTsNCiAgICAgICAgICAlZmlsZWluZm8gPSAoJXskZG9jLT57dmFyc319LCAl ZmlsZWluZm8pOw0KICAgICAgICAgIGxhc3Q7DQogICAgICAgfQ0KICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICANCiAgICAkQ0xBU1NFU3tfX0ZJTEVTX199LT57JENUWF9GSUxFfSA9IFwlZmls ZWluZm8gaWYgJENUWF9GSUxFOw0KfQ0KDQoxOw0K |